Python 将新命名实体添加到Spacy';s en_core_web_sm模型?

Python 将新命名实体添加到Spacy';s en_core_web_sm模型?,python,spacy,Python,Spacy,我在下面的示例中介绍如何培训新的实体类型: 当我没有将现有模型传递给它时,它可以正常工作,并将正确地创建一个新模型,该模型可以识别我的新命名实体,例如 python.exe train-new-entity-type.py python.exe train-new-entity-type.py -m dir/my_model 当我将现有模型传递给它时,它也可以正常工作(之前通过运行它一次创建),并将模型正确加载到dir/my_modeldir中,该目录仍然可以识别我的新命名实体,例如

我在下面的示例中介绍如何培训新的实体类型:

当我没有将现有模型传递给它时,它可以正常工作,并将正确地创建一个新模型,该模型可以识别我的新命名实体,例如

 python.exe train-new-entity-type.py
 python.exe train-new-entity-type.py -m dir/my_model
当我将现有模型传递给它时,它也可以正常工作(之前通过运行它一次创建),并将模型正确加载到
dir/my_model
dir中,该目录仍然可以识别我的新命名实体,例如

 python.exe train-new-entity-type.py
 python.exe train-new-entity-type.py -m dir/my_model
但是,我想训练一种新的实体类型,并将其添加到spacy的现有模型中,以便spacy能够识别它自己的以及我的新实体类型,因此我尝试:

 python.exe train-new-entity-type.py -m en_core_web_sm
然而,这似乎不起作用。Spacy自己的实体类型已被识别,但它们不正确(与仅使用en_core_web_sm而不向其添加新的实体类型相比),并且我的新实体类型不再被识别

我做错什么了吗?这是否可能(将命名实体添加到en_core_web_sm)?

了解更新现有模型时的“灾难性遗忘”问题:

更新现有模型可能很棘手,因此为新实体类型训练单独的模型并使用自定义名称将NER组件添加到
en\u core\u web\u sm
管道中可能更容易。需要注意的主要问题是,您需要确保使用相同的vocab加载模型,以便不会在字符串存储中遇到问题:

导入空间
nlp=spacy.load(“en_core\u web\u sm”)
custom_nlp=spacy.load(“我的_模型”,vocab=nlp.vocab)
nlp.add_pipe(自定义_nlp.get_pipe(“ner”),name=“my_ner”,before=“ner”)
将其添加到管道中的位置(在现有
ner
之前/之后)将确定哪些实体跨度具有优先级,因为
ner
组件不会修改现有实体跨度。

了解更新现有模型时的“灾难性遗忘”问题:

更新现有模型可能很棘手,因此为新实体类型训练单独的模型并使用自定义名称将NER组件添加到
en\u core\u web\u sm
管道中可能更容易。需要注意的主要问题是,您需要确保使用相同的vocab加载模型,以便不会在字符串存储中遇到问题:

导入空间
nlp=spacy.load(“en_core\u web\u sm”)
custom_nlp=spacy.load(“我的_模型”,vocab=nlp.vocab)
nlp.add_pipe(自定义_nlp.get_pipe(“ner”),name=“my_ner”,before=“ner”)
将其添加到管道中的位置(在现有
ner
之前/之后)将确定哪些图元跨距具有优先级,因为
ner
组件不会修改现有图元跨距