区分大小写的实体识别

时间:2019-05-30 19:05:48

标签: python spacy named-entity-recognition

我的关键字全部以小写形式存储,例如我正在尝试执行“实体提取”。我遇到的问题是,对于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_)

...什么也没返回。

我跑步时...

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

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

2 个答案:

答案 0 :(得分:2)

通常,对于预训练的模型,非标准化套管是有问题的。

您有一些解决方法:

  • 说明:更正文本中的大写字母,以便您可以使用标准的NER模型。
  • 无情模型:训练完全忽略大小写的NER模型。
  • 混合大小写模型:使用大小写和非大小写文本混合训练NER模型。

我建议使用Truecasing,因为其中有一些不错的open-source truecasers,而且准确性很高,而且它们可以让您使用经过预先训练的NER解决方案,例如spaCy。

无案例和混合案例模型的建立比较耗时,并且不一定能得到更好的结果。

答案 1 :(得分:0)

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

如果您使用的大小写不正确的文本,则可能需要微调模型以使其在此处不那么敏感。有关更多详细信息和代码示例,请参见updating the named entity recognizer上的文档。

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

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