在 spaCy < 3.0 中,我能够在经过训练的en_core_web_sm 模型中训练 NER 组件:
python -m spacy train en model training validation --base-model en_core_web_sm --pipeline "ner" -R -n 10
Run Code Online (Sandbox Code Playgroud)
具体来说,我需要en_core_web_sm模型的标记器和解析器。spaCy的新版本不再接受这些命令,它们需要在配置文件中设置。根据spaCy的网站,这些组件可以添加相应的源,然后插入到配置文件的训练部分中的frozen_component(我将在本问题末尾提供完整的配置):
[components]
[components.tagger]
source = "en_core_web_sm"
replace_listeners = ["model.tok2vec"]
[components.parser]
source = "en_core_web_sm"
replace_listeners = ["model.tok2vec"]
.
.
.
[training]
frozen_components = ["tagger","parser"]
Run Code Online (Sandbox Code Playgroud)
当我调试时,出现以下错误:
ValueError: [E922] Component 'tagger' has been initialized with an output dimension of 49 - cannot add any more labels.
Run Code Online (Sandbox Code Playgroud)
当我将标记器添加到配置文件的 nlp 部分中禁用的组件时,或者如果我删除与标记器相关的所有内容,调试和训练就可以进行。然而,当将经过训练的模型应用于加载到文档的文本时,只有经过训练的 NER 起作用,其他组件都不起作用。例如,解析器预测一切都是ROOT。
我还尝试自行训练 NER …