Spacy NER не идентифицирует строчные буквы - PullRequest
1 голос
/ 18 июня 2019

У меня проблема с обнаружением именованных объектов, которая начинается со строчной буквы. Я пробовал решение, предоставленное по ссылке https://github.com/explosion/spaCy/issues/701. Кажется, оно не работает для меня.

===== Информация о spaCy =============

spaCy version    2.1.4
Platform         Darwin-16.7.0-x86_64-i386-64bit
Python version   3.6.5
Models           en
import spacy
from spacy import displacy
nlp = spacy.load('en_core_web_sm')
sk = nlp.vocab[u'south korea']
SK = nlp.vocab[u'South Korea']
sk.is_lower = SK.is_lower
sk.shape = SK.shape
sk.shape_ = SK.shape_
sk.is_upper =SK.is_upper
sk.cluster = SK.cluster
sk.is_title = SK.is_title
doc = nlp(u'south korea is a country in asia')
for word in doc:
    print(word.text, word.tag_, word.ent_type_) 

Ожидаемый результат:

south NNP GPE
korea NNP GPE
is VBZ 
a DT 
country NN 
in IN 
asia NNP 

Но результат вышеприведенного кода:

south JJ 
korea NN 
is VBZ 
a DT 
country NN 
in IN 
asia NNP 

1 Ответ

2 голосов
/ 18 июня 2019

Распознаватель NE обучен на машине и, таким образом, использует самые сильные характеристики, которые он видит в данных обучения.

Вы можете использовать truecaser / recaser, статическую модель, которая фиксирует регистр в нижнем регистре текста и передает вывод в spacy. Вы можете использовать:

  • sacremoses , инструмент предварительной обработки для машинного перевода
  • nreimers / truecaser , реализация truecaser с использованием NLTK

В качестве альтернативы вы можете попытаться обучить свой распознаватель и изменить свои обучающие данные, чтобы они также содержали объекты в нижнем регистре, но это довольно утомительный процесс.

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