命名实体识别大写问题

Named Entity Recognition upper case issue

我最近将我在 spacy 中用于 NER 的模型从 en_core_web_md 切换到 xx_ent_wiki_sm

我注意到新模型始终将 NEW JERSEY 或 NEW YORK 等完整大写单词识别为组织。我将能够提供训练数据来重新训练模型,尽管这会非常耗时。但是,我不确定该模型是否会放弃大写单词是组织的假设,或者它是否会保留该假设并为其创建一些例外情况。它是否甚至可以了解到所有字母少于 5 个的单词都大写可能是一个组织,而字母更多的单词则不是?我只是不知道训练究竟会对模型产生怎样的影响

en_core_web_md 似乎可以很好地处理首字母缩略词,而忽略像 NEW JERSEY 这样的词。但是 xx_ent_wiki_sm 的整体性能更适合我的用例

我问是因为这样的假设仍然非常有用,因为它允许我们将 IBM 等缩写词识别为一个组织。

xx_ent_wiki_sm模型是在维基百科上训练的,所以它非常偏向于维基百科认为的和实体,以及数据中的共同点。 (它也倾向于经常将 "I" 识别为一个实体,因为第一人称的句子在维基百科上非常罕见。)所以 post-training 有更多的例子绝对是一个很好的策略,你正在尝试听起来可行。

防止模型 "forgetting" 关于大写实体的最佳方法是始终包含模型先前在训练数据中正确识别的实体示例(参见:"catastrophic forgetting problem")。好的是,您可以通过 运行 spaCy 在一堆文本上以编程方式创建这些实体并提取大写实体:

uppercase_ents = [ent for ent in doc.ents if all(t.is_upper for t in ent)]

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