命名实体识别大写问题

时间:2017-11-20 09:12:38

标签: named-entity-recognition spacy

我最近将用于NER的模型从 en_core_web_md 切换为 xx_ent_wiki_sm

我注意到新模型总是将完整的大写字词识别为NEW JERSEY或NEW YORK作为组织。我可以提供训练数据来重新训练模型,尽管这会非常耗时。但是我不确定该模型是否会放弃大写单词是组织的假设,或者它是否会保留假设并为其创建一些例外。难道甚至可能知道每个带有少于5个字母的单词的大写字母都可能是一个组织而且所有更多字母都没有?我只是不知道训练将如何影响模型

en_core_web_md似乎与首字母缩略词处理得很好,而忽略了像新泽西这样的词。但是xx_ent_wiki_sm的整体性能对我的用例来说更好

我问,因为这样的假设仍然非常有用,因为它允许我们识别像IBM这样的组织缩略词。

1 个答案:

答案 0 :(得分:2)

list.stream() .sorted( Comparator.comparing((List<Object> o) -> o.get(3).toString()) .thenComparing((List<Object> x) -> x.get(3).toString())); 模型在维基百科上进行了培训,因此它偏向于维基百科所考虑和实体,以及数据中的常见内容。 (它也倾向于经常将“我”视为一个实体,因为第一人称的句子在维基百科上是如此罕见。)因此,使用更多示例的后期训练绝对是一个好策略,而你想要做的事情听起来是可行的

防止模型“忘记”大写实体的最佳方法是始终包含模型先前在训练数据中正确识别的实体示例(请参阅:"catastrophic forgetting problem")。好处是你可以通过在一堆文本上运行spaCy并提取大写实体来以编程方式创建它们:

xx_ent_wiki_sm

有关如何使用spaCy创建训练数据的更多示例,请参阅this section。您还可以使用spaCy生成所选实体的小写和标题变体,以引导您的训练数据,这有望为您节省大量时间和工作。