Spacy NER 无法识别 NAME

Spacy NER not recognising NAME

谁能帮我理解为什么 Spacy NER 拒绝识别句子中的最后一个 NAME 'Hagrid',无论使用的模型是什么(sm、md、lg)?:

“赫敏买了一辆车,然后赫敏和海格都在赛道上比赛。汤姆布拉迪今年对海格非常满意。”

import spacy
nlp = spacy.load('en_core_web_md')

test_data = "Hermione bought a car, then both Hermione and Hagrid raced it on the track. Tom Brady was very happy with Hagrid this year."

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

嗯,神经网络模型基本上是一个黑盒子,所以无法确定。

我可以想象最后一句话的语法有点太“花哨”/literature-like 如果模型是在新闻或网络数据上训练的,并且可能会抛出模型。难以将句子上下文视为后面跟着名字的东西,以及“海格”是一种不寻常的名字这一事实可能是原因。

您可以尝试一些其他模型,例如集成在 Flair 中的模型:

https://huggingface.co/flair/ner-english-large?text=Hermione+bought+a+car%2C+then+both+Hermione+and+Hagrid+raced+it+on+the+track.+Tom+Brady+was+very+happy+with+Hagrid+this+year.

或这个 fine-tuned BERT 模型:

https://huggingface.co/dslim/bert-large-NER?text=Hermione+bought+a+car%2C+then+both+Hermione+and+Hagrid+raced+it+on+the+track.+Tom+Brady+was+very+happy+with+Hagrid+this+year.

根据我的经验,SpaCy 是一个不错的工具,而且速度非常快,但它们功能更强大并且做对了,但对于 NER 来说并不是最精确的。