区分大小写的实体识别

2022-05-15 00:00:00 python spacy named-entity-recognition

问题描述

我有全部以小写形式存储的关键字,例如我正在尝试对其执行实体提取的"折扣耐克鞋"。我遇到的问题是,当涉及到NER时,Spacy似乎区分大小写。请注意,我不认为这是特定于Spacy的。

当我运行...

doc = nlp(u"i love nike shoes from the uk")

for ent in doc.ents:
    print(ent.text, ent.start_char, ent.end_char, ent.label_)

.不返回任何内容。

当我运行...

doc = nlp(u"i love Nike shoes from the Uk")

for ent in doc.ents:
    print(ent.text, ent.start_char, ent.end_char, ent.label_)

我得到以下结果...

Nike 7 11 ORG
Uk 25 27 GPE

我应该只使用标题大小写吗?有没有其他我可以使用的解决办法?


解决方案

Spacypre-trained statistical models在大量一般新闻和Web文本语料库上进行了培训。这意味着实体识别器可能只看到很少的全小写示例,因为这在这些类型的文本中很少见。在英语中,大写也是命名实体的一个强有力的指标(与德语不同,在德语中,所有名词通常都是大写的),因此该模型可能倾向于更多地关注这一点。

如果您使用的文本没有正确的大小写,您可能希望微调模型以降低这里的敏感度。有关更多详细信息和代码示例,请参阅updating the named entity recognizer上的文档。

生成训练示例希望不会非常困难,因为您可以使用现有的注释和数据集,或者使用预先训练的模型创建一个,然后将所有内容小写。例如,您可以获取具有适当大小写的文本,在其上运行模型并提取文本中的所有实体跨度。接下来,将所有文本小写,并使用新数据更新模型。一定要把文本和适当的大写混合在一起,因为你不想让模型学到"现在一切都是小写的!大写已经不复存在了!"。

顺便说一句,如果您有可以使用一个列表或一组规则定义的实体,您可能还想签出EntityRuler component。它可以与统计实体识别器结合使用,并允许您传入精确匹配的字典或不区分大小写的抽象令牌模式。例如,[{"lower": "nike"}]将匹配一个小写形式为"Nike"的令牌,即"Nike"、"Nike"等。

相关文章