1

我想将 spaCy 用于实体链接 (EL)。我已经在我的领域特定语料库上训练了一个带有自定义标签的 spaCy 命名实体识别 (NER) 模型。但是,我下面的示例将使用常规实体标签 PERSON 和 LOCATION。

在知识库 (KB) 中设置别名,KB 返回已识别实体出现的候选,例如“巴黎”的候选可以是 Wikidata 条目 Q47899 (Paris Hilton)、Q7137357 (Paris Themmen)、Q5214166 (Dan Paris)、Q90 (法国首都巴黎)或 Q830149(美国德克萨斯州拉马尔县县城巴黎)。

我的问题涉及公认的实体标签。如果 NER 将“Paris”识别为 PERSON,则从候选人中排除 Q90(法国首都巴黎)和 Q830149(美国德克萨斯州拉马尔县县城),剩下 3 个候选人。而如果“巴黎”被识别为 LOCATION,则只有其他 2 个候选者。

给定检测到的 NER 标签,是否可以以某种方式建议 KB 或 EL 模型从哪一组实体中选择候选者?在训练 EL 模型之前还是之后?

4

2 回答 2

1

这目前在 spaCy 中没有实现。一般来说,这些是获得所需功能所需的步骤:

  • 在您的 KB 实体(维基数据标识符)和您的 NER 标签之间创建某种映射。这不会是微不足道的。您需要解析 wikidata“实例”元信息,或者使用存在缺陷的 Wikipedia 分类系统。无论哪种方式,您都需要以一种自动化的方式来定义它Q830149 is-a "LOCATION"等。
  • 存储每个实体的“NER 标签”。这可以在 KB 中完成,但是需要编辑 Cython 结构。
  • 重新实现候选生成(目前是 KB:get_candidates方法的一部分)以获取文本提及 + 其 NER 标签,并仅输出该特定标签的相关候选。

我想指出的一个警告是,这种方法可能会放大 NER 步骤的错误。想象一下,您正在谈论首都巴黎,但您的 NER 理解错误并将其标记为“PERSON”。使用此处描述的方法,NEL 将无法从中恢复,并将输出它可以找到的最有可能的人,尽管它们都不正确。

entity_linker另一种方法是不更改候选生成器,而是将 NER 标签作为管道中评分机制的一部分考虑在内。目前,它已经结合了两个分数:一个来自先验概率(使用来自大型训练语料库的统计数据),另一个来自上下文(使用 ML 和句子相似度)。匹配 NER 标签的方面可以包含在该分数中,然后仍然有机会将“PARIS”识别为正确的实体,即使它的 NER 标签是错误的。但这取决于您要执行的严格程度。

于 2020-10-12T08:40:50.327 回答
0

我自己只是有一个想法。我想有可能有 2 个管道并为每种实体类型训练一个单独的 NER 模型。然后在每个管道中有一个单独的 KB 和 EL 模型。然后结合管道的结果。

于 2020-10-13T10:13:35.833 回答