spacy - EntityLinker Spacy 返回的实体不正确
问题描述
我一直在用 Spacy 训练一个实体链接器,它有 6,000 个来自 Wikidata 的实体。
训练数据包含 30,000 个句子。
我正在关注 Spacy https://github.com/explosion/projects/blob/v3/tutorials/nel_emerson/notebooks/notebook_video.ipynb提供的笔记本
训练进行得很好,准确度看起来也不错,直到我在一个明显不正确的字符串上测试模型。这样的“barack obama 是一位法国出生的花店,住在西班牙,有 36 只猫和两只仓鼠”,但模型预测此字符串中的人为https://www.wikidata.org/wiki/Q76
我尝试在配置中添加其他参数,例如n_sents
entity_linker = nlp.add_pipe("entity_linker", config={"incl_prior": False, "n_sents": 6}, last=True)
有没有办法改善这一点?最好返回 NIL 而不是错误的答案。或者是否有一个可以输出的置信度分数?
解决方案
实体链接器的工作方式是,给定实体的所有潜在候选者,它会选择最有可能的一个。
您遇到的问题是您的花店不为模特所知,因此他不是候选人。因为模型只知道巴拉克奥巴马是美国前总统,所以模型可以肯定地说“巴拉克奥巴马”必须指的是总统。
该模型没有机制来判断引用是否引用了不在知识库中的实体。它也永远不会弃权,如果有候选人,它会选择一个。“NIL”不是弃权,它是指当参考文献在知识库中没有条目时,所以没有什么可供选择的。
如果您查看使用“Emerson”作为示例的示例项目,这可能会更清楚。该模型不决定“艾默生”是否是它认识的人——它假设它一定是它认识的人之一,并且它必须选择最有可能的人。
推荐阅读
- java - 如何修复错误 No serializer found for class java.util.logging.SimpleFormatter and no properties found to create BeanSerializer
- angular - 在 Visual Studio Code 中为自定义 npm 包自动导入声明
- python - 读取串口输入
- ionic-framework - ionic 4 在离子项目中聚焦时更改离子标签颜色
- android - 将 Android Studio 升级到“3.6”版本时,构建输出控制台打印出乱码
- angular - 为未覆盖代码的鼠标事件编写的测试
- go - 为什么 math.MaxInt64 被推断为 int32?
- c# - 如何在Windows的C/C#/cmd中检查两个文件名是否指向同一个物理文件?
- amazon-web-services - 如何在 amazon-ec2 上录制语音?
- php - 将php网站部署到heroku时出现自动加载器问题