小编nom*_*jon的帖子

spaCy v3 基于现有模型训练 NER 或将自定义训练的 NER 添加到现有模型

在 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 …

python machine-learning named-entity-recognition spacy

5
推荐指数
1
解决办法
8282
查看次数