将自定义语言添加到 Spacy 3.0 并在其中训练管道

问题描述

到目前为止,我一直在使用 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")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...