首页 > 解决方案 > 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 而不是错误的答案。或者是否有一个可以输出的置信度分数?

标签: spacyentity-linking

解决方案


实体链接器的工作方式是,给定实体的所有潜在候选者,它会选择最有可能的一个。

您遇到的问题是您的花店不为模特所知,因此他不是候选人。因为模型只知道巴拉克奥巴马是美国前总统,所以模型可以肯定地说“巴拉克奥巴马”必须指的是总统。

该模型没有机制来判断引用是否引用了不在知识库中的实体。它也永远不会弃权,如果有候选人,它会选择一个。“NIL”不是弃权,它是指当参考文献在知识库中没有条目时,所以没有什么可供选择的。

如果您查看使用“Emerson”作为示例的示例项目,这可能会更清楚。该模型不决定“艾默生”是否是它认识的人——它假设它一定是它认识的人之一,并且它必须选择最有可能的人。


推荐阅读