Распознавание сущности с учетом регистра - PullRequest
2 голосов
/ 30 мая 2019

У меня есть ключевые слова, которые хранятся в нижнем регистре, например, "discount nike shoes", для которых я пытаюсь извлечь сущность.Проблема, с которой я столкнулся, заключается в том, что spaCy чувствителен к регистру, когда дело доходит до NER.Имейте в виду, я не думаю, что это специфично для спа.

Когда я бегу ...

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_)

Iполучить следующие результаты ...

Nike 7 11 ORG
Uk 25 27 GPE

Должен ли я просто озаглавить регистр всего?Есть ли другой способ, который я мог бы использовать?

Ответы [ 2 ]

4 голосов
/ 01 июня 2019

предварительно обученные статистические модели spaCy прошли обучение на большом корпусе общих новостей и веб-текста.Это означает, что распознаватель сущностей, вероятно, видел только очень мало строчных примеров, потому что это гораздо реже встречается в этих типах текстов.В английском языке заглавная буква также является сильным показателем для названного права (в отличие от немецкого языка, где все существительные обычно пишутся с заглавной буквы), поэтому модель, вероятно, обращает на это больше внимания.

Если вы работаете с текстомэто не имеет надлежащей капитализации, вы, вероятно, хотите настроить модель, чтобы быть менее чувствительной здесь.См. Документы по обновлению распознавателя именованных сущностей для получения более подробной информации и примеров кода.

Создание примеров обучения, надеюсь, не составит большого труда, поскольку вы можете использовать существующие аннотации и наборы данных или создатьодин с использованием предварительно обученной модели, а затем строчными буквами.Например, вы можете взять текст с правильной прописной буквой, запустить модель поверх него и извлечь все разрешенные интервалы в тексте.Далее вы строчными все тексты и обновите модель с новыми данными.Не забудьте также смешать текст с правильной капитализацией, потому что вы не хотите, чтобы модель учила что-то вроде: «Теперь все строчные! Капитализация больше не существует!».

Кстати, если у вас есть сущностиэто может быть определено с использованием списка или набора правил, вы также можете проверить EntityRuler компонент .Он может быть объединен со средством распознавания статистических сущностей и позволит вам передать словарь точных совпадений или абстрактных шаблонов токенов, которые могут быть нечувствительными к регистру.Например, [{"lower": "nike"}] будет соответствовать одному токену со строчной формой "nike", то есть "NIKE", "Nike", "nike", "NiKe" и т. Д.

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

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

У вас есть несколько обходных путей:

  • Truecasing : исправление заглавных буквв тексте, чтобы вы могли использовать стандартную модель NER.
  • модели Caseless : обучение моделей NER, которые полностью игнорируют заглавные буквы.
  • модели со смешанным регистром : Обучение моделей NER смешанному тексту в случайных и необработанных текстах.

Я бы порекомендовал Truecasing, поскольку есть несколько приличных открытых кодов истинных с хорошей точностью, и онизатем вы можете использовать предварительно обученные решения NER, такие как spaCy.

Модели без учета регистра и смешанного типа требуют больше времени для настройки и не обязательно дают лучшие результаты.

...