python - 向 Spacy 的 en_core_web_sm 模型添加新的命名实体?
问题描述
我正在按照此处的示例来训练新的实体类型:
https://spacy.io/usage/training#example-new-entity-type
当我不将现有模型传递给它时它工作正常,并且会正确创建一个新模型,它可以识别我的新命名实体,例如
python.exe train-new-entity-type.py
当我将现有模型传递给它(通过之前运行一次创建)时它也可以正常工作,并且会在dir/my_model
目录中正确加载模型,它仍然可以识别我的新命名实体,例如
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)?
解决方案
阅读更新现有模型时的“灾难性遗忘”问题:https ://spacy.io/usage/training#ner
更新现有模型可能会很棘手,因此为新实体类型训练单独的模型并en_core_web_sm
使用自定义名称将 NER 组件添加到管道中可能会更容易。需要注意的主要事情是,您需要确保模型加载了相同的词汇,这样您就不会遇到字符串存储问题:
import spacy
nlp = spacy.load("en_core_web_sm")
custom_nlp = spacy.load("my_model", vocab=nlp.vocab)
nlp.add_pipe(custom_nlp.get_pipe("ner"), name="my_ner", before="ner")
在管道中添加它的位置(在现有的之前/之后ner
)将确定哪些实体跨度具有优先级,因为该ner
组件不会修改现有的实体跨度。
推荐阅读
- angular - Angular 混合应用程序测试“无法读取 null 的属性‘nativeElement’”
- react-native - FlatList 中的 TextInput 在屏幕外时失去焦点
- html - 从移动设备切换到桌面时的布局更改(调整大小)
- arrays - 为什么我在将 JSON 解析为 Excel 时收到错误 10001
- c# - switch statement reverting to default regardless of user input?
- r - 使用 modify_url 构建多个 URL
- ballerina - 如何在 Ballerina 中解构/匹配 json 类型?
- python - 无法在python ggplot中对超过9个级别的变量进行刻面
- android - 使用浮点按钮创建菜单项
- javascript - 在不同宽度的可排序 div 中使用 amchart