向 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")