Почему результаты не очень непредсказуемы? - PullRequest
0 голосов
/ 03 ноября 2019

Я попробовал spacy for ner, но результаты весьма непредсказуемы. Иногда spacy не распознает конкретную страну. Может кто-нибудь объяснить, почему это происходит? Я попробовал несколько случайных предложений.

CASE 1:

nlp = spacy.load("en_core_web_sm")
print(nlp)
sent = "hello china hello japan"
doc = nlp(sent)
for i in doc.ents:
  print(i.text," ",i.label_)

OUTPUT: в этом случае нет вывода.

CASE 2:

nlp = spacy.load("en_core_web_sm")
print(nlp)
sent = "china is a populous nation in East Asia whose vast landscape encompasses grassland, desert, mountains, lakes, rivers and more than 14,000km of coastline."
doc = nlp(sent)
for i in doc.ents:
  print(i.text," ",i.label_)

ВЫХОД:

<spacy.lang.en.English object at 0x7f2213bde080>
china   GPE
East Asia   LOC
more than 14,000km   QUANTITY

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Модели естественного языка, такие как spaCy NER, учатся на контекстной структуре предложения (окружающие слова). Почему это? Давайте возьмем в качестве примера слово Anwarvic - это новое слово, которое вы раньше не видели, и, вероятно, модель spaCy раньше его не видела. Давайте посмотрим, как будет действовать модель NER при изменении предложенного предложения:

  • «Я люблю Anwarvic»
>>> 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
  • «Anwarvic is гигантский»
>>> 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
  • "Anwarvic is a awesome"
>>> 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
0 голосов
/ 03 ноября 2019

NER работает нормально следующим образом: вы позволяете POS-Tagger пометить ваше предложение метками части речи, такими как глаголы, прилагательные и имена собственные. NER затем смотрит на существительные более прямо. POS-Tagger становится лучше, чем больше информации для правильной классификации POS-тегов. Это более длинные предложения, грамматически правильные предложения и правильное написание.

Ваш первый пример sent = "hello china hello japan" короткий, без глаголов и т. Д., Что затрудняет классификацию POS-тегов тегером. И другая информация отсутствует: страны обычно пишутся в верхнем регистре: попробуйте sent = "hello China hello Japan", и это будет работать.

Во втором примере модель корректно распознает фарфор, даже если он строчный, потому что во всем предложении гораздо больше информации.

Я рекомендую вам прочитать больше о POS-тегахэто довольно весело!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...