Модели естественного языка, такие как spaCy NER, учатся на контекстной структуре предложения (окружающие слова). Почему это? Давайте возьмем в качестве примера слово Anwarvic
- это новое слово, которое вы раньше не видели, и, вероятно, модель spaCy раньше его не видела. Давайте посмотрим, как будет действовать модель NER при изменении предложенного предложения:
>>> nlp = spacy.load("en_core_web_sm")
>>> sent = "I love Anwarvic"
>>> doc = nlp(sent)
>>> for i in doc.ents:
... print(i.text," ",i.label_)
Anwarvic PERSON
>>> nlp = spacy.load("en_core_web_sm")
>>> sent = "Anwarvic is gigantic"
>>> doc = nlp(sent)
>>> for i in doc.ents:
... print(i.text," ",i.label_)
Anwarvic ORG
>>> nlp = spacy.load("en_core_web_sm")
>>> sent = "Anwarvic is awesome"
>>> doc = nlp(sent)
>>> for i in doc.ents:
... print(i.text," ",i.label_)
Как мы видим, извлеченные объекты изменяются, когда меняется контекстная структура Anwarvic
,Итак, в первом предложении глагол love
очень часто встречается у людей. Вот почему модель spaCy предсказала это как PERSON
. И то же самое происходит со вторым предложением, где мы используем gigantic
для описания организаций, подобных ORG
. В третьем предложении awesome
- это довольно общее прилагательное, которое может использоваться для описания чего угодно. Вот почему модель spaCy NER была сбита с толку.
Sidenote
На самом деле, когда я запустил первый предоставленный код на моей машине, он извлекает как china
, так и japan
следующим образом:
china GPE
japan GPE