区分大小写的实体识别

Emm*_*ean 4 python named-entity-recognition spacy

我有全部用小写字母存储的关键字,例如“我正在尝试对其进行实体提取”。我遇到的问题是,对于NER,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_)
Run Code Online (Sandbox Code Playgroud)

...什么也没返回。

我跑步的时候

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_)
Run Code Online (Sandbox Code Playgroud)

我得到以下结果...

Nike 7 11 ORG
Uk 25 27 GPE
Run Code Online (Sandbox Code Playgroud)

我是否应该对所有内容都加标题?我可以使用其他解决方法吗?

Ine*_*ani 5

spaCy的预训练统计模型在大量的一般新闻和网络文本上得到训练。这意味着实体识别器可能只看到了很少的全小写示例,因为在这些类型的文本中这种情况要少得多。用英语来说,大写字母也是命名实体的有力指标(与德语不同,德语中所有名词通常都是大写字母),因此该模型可能会更加注意这一点。

如果您使用的大小写不正确的文本,则可能需要微调模型以使其在此处不那么敏感。有关更多详细信息和代码示例,请参阅有关更新命名实体识别器的文档。

希望制作训练示例不会很困难,因为您可以使用现有的注释和数据集,或者使用预先训练的模型创建一个注释,然后将所有内容都小写。例如,您可以采用大写字母的文本,在其上运行模型,然后提取文本中的所有实体范围。接下来,对所有文本进行小写,并使用新数据更新模型。确保也将文本与大写字母混合使用,因为您不希望模型学习诸如“现在一切都小写!大写字母不再存在!”之类的内容。

顺便说一句,如果您具有可以使用列表或规则集定义的实体,则可能还需要检出该EntityRuler组件。它可以与统计实体识别器结合使用,并允许您传递完全不匹配的字典或不区分大小写的抽象标记模式。例如,[{"lower": "nike"}]将匹配一个小写形式为“ nike”的令牌–因此,“ NIKE”,“ Nike”,“ nike”,“ NiKe”等。