问题描述
到目前为止,我一直在使用 Spacy 2.3.1。我创建了自己的自定义类,继承自 Language
类,并使用其中的 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")