向 Spacy 3.0 添加自定义语言并在其中训练管道
Add custom language to Spacy 3.0 and train pipelines in it
到目前为止,我一直在使用 Spacy 2.3.1。我创建了自己的自定义 class 继承自 Language
class 并使用其中的 Python 脚本训练了 NER 管道。
但是在 Spacy 3.0 中引入了一堆方便的 CLI 命令和配置,以训练自定义管道,强烈建议使用这些管道而不是 Python 脚本。这是 nlp
对象的配置示例:
...
[nlp]
lang = "fa"
pipeline = ["transformer","ner"]
batch_size = 32
disabled = []
before_creation = null
after_creation = null
after_pipeline_creation = null
tokenizer = {"@tokenizers":"spacy.Tokenizer.v1"}
...
如您所见,lang
属性应该是 Spacy 库中的预定义语言之一。
有什么方法可以在配置中指出我需要创建一个我自己的自定义语言的对象作为 nlp
对象?
文档中实际上有 a section on this。基本思想是您必须将您的语言添加到注册表中。来自文档的示例:
import spacy
from spacy.lang.en import English
class CustomEnglishDefaults(English.Defaults):
stop_words = set(["custom", "stop"])
@spacy.registry.languages("custom_en")
class CustomEnglish(English):
lang = "custom_en"
Defaults = CustomEnglishDefaults
# This now works!
nlp = spacy.blank("custom_en")
到目前为止,我一直在使用 Spacy 2.3.1。我创建了自己的自定义 class 继承自 Language
class 并使用其中的 Python 脚本训练了 NER 管道。
但是在 Spacy 3.0 中引入了一堆方便的 CLI 命令和配置,以训练自定义管道,强烈建议使用这些管道而不是 Python 脚本。这是 nlp
对象的配置示例:
...
[nlp]
lang = "fa"
pipeline = ["transformer","ner"]
batch_size = 32
disabled = []
before_creation = null
after_creation = null
after_pipeline_creation = null
tokenizer = {"@tokenizers":"spacy.Tokenizer.v1"}
...
如您所见,lang
属性应该是 Spacy 库中的预定义语言之一。
有什么方法可以在配置中指出我需要创建一个我自己的自定义语言的对象作为 nlp
对象?
文档中实际上有 a section on this。基本思想是您必须将您的语言添加到注册表中。来自文档的示例:
import spacy
from spacy.lang.en import English
class CustomEnglishDefaults(English.Defaults):
stop_words = set(["custom", "stop"])
@spacy.registry.languages("custom_en")
class CustomEnglish(English):
lang = "custom_en"
Defaults = CustomEnglishDefaults
# This now works!
nlp = spacy.blank("custom_en")