将自定义实体添加到 SpaCy 的 NER 时出现问题
Problem adding custom entities to SpaCy's NER
- 我使用 https://spacy.io/usage/training#example-new-entity-type
向 en_core_web_lg 添加了一个名为 "orgName" 的新实体
- 我所有的训练数据(26k 个句子)都有 "orgName" 标签。
- 为了解决灾难性遗忘问题,我 运行 en_core_web_lg 在那些 26k 原始句子上添加了 ORG、PROD、FAC 等实体作为标签,而不是面对碰撞的实体,我创建了副本。
因此,对于标记为 "orgName" 的句子 A,我创建了一个重复的 A2,其中包含 ORG、PROD、FAC 等,最后有大约 52k 个句子。
- 我训练了 100 次迭代。
现在的问题是,即使在训练句子上测试模型,也不会显示 ORG、PROD、FAC 等,而只显示 "orgName"。
您认为问题出在哪里?
原则上,您尝试解决灾难性遗忘问题的方式,即根据旧的预测对其进行再训练,对我来说似乎是一个很好的方法。
但是,如果您有同一个句子的重复版本,但注释不同,并将其提供给 NER 分类器,您可能会混淆模型。原因是它不仅看正例,而且明确地将未注释的词视为负例。
所以如果你有"Bob lives in London",而你只注释"London",那么它会认为Bob肯定不是NE。如果你有第二个句子,你只注释了 Bob,它将 "unlearn" 伦敦是一个 NE,因为现在它没有这样注释。所以一致性真的很重要。
我建议实施更高级的算法来解决冲突。
一种选择是始终只采用最长 Span
的注释实体。但如果 Spans 通常完全相同,您可能需要重新考虑您的标签方案。哪些实体最常发生碰撞?我会假设 ORG 和 OrgName?你真的需要ORG吗?也许两者可以"merged"为同一个实体?
- 我使用 https://spacy.io/usage/training#example-new-entity-type 向 en_core_web_lg 添加了一个名为 "orgName" 的新实体
- 我所有的训练数据(26k 个句子)都有 "orgName" 标签。
- 为了解决灾难性遗忘问题,我 运行 en_core_web_lg 在那些 26k 原始句子上添加了 ORG、PROD、FAC 等实体作为标签,而不是面对碰撞的实体,我创建了副本。 因此,对于标记为 "orgName" 的句子 A,我创建了一个重复的 A2,其中包含 ORG、PROD、FAC 等,最后有大约 52k 个句子。
- 我训练了 100 次迭代。
现在的问题是,即使在训练句子上测试模型,也不会显示 ORG、PROD、FAC 等,而只显示 "orgName"。
您认为问题出在哪里?
原则上,您尝试解决灾难性遗忘问题的方式,即根据旧的预测对其进行再训练,对我来说似乎是一个很好的方法。
但是,如果您有同一个句子的重复版本,但注释不同,并将其提供给 NER 分类器,您可能会混淆模型。原因是它不仅看正例,而且明确地将未注释的词视为负例。
所以如果你有"Bob lives in London",而你只注释"London",那么它会认为Bob肯定不是NE。如果你有第二个句子,你只注释了 Bob,它将 "unlearn" 伦敦是一个 NE,因为现在它没有这样注释。所以一致性真的很重要。
我建议实施更高级的算法来解决冲突。
一种选择是始终只采用最长 Span
的注释实体。但如果 Spans 通常完全相同,您可能需要重新考虑您的标签方案。哪些实体最常发生碰撞?我会假设 ORG 和 OrgName?你真的需要ORG吗?也许两者可以"merged"为同一个实体?