Вопрос

Я хотел бы использовать распознавание именованных объектов (NER), чтобы найти адекватные теги для текстов в базе данных.

Я знаю, что об этом есть статья в Википедии и множество других страниц, описывающих NER, мне бы хотелось услышать от вас что-нибудь по этой теме:

  • Какой опыт вы получили с различными алгоритмами?
  • Какой алгоритм вы бы порекомендовали?
  • Какой алгоритм проще всего реализовать (PHP/Python)?
  • Как работают алгоритмы?Необходимо ли обучение ручному труду?

Пример:

«В прошлом году я был в Лондоне, где видел Барака Обамы». => Теги:Лондон, Барак Обама

Я надеюсь, что вы можете мне помочь.Заранее большое спасибо!

Это было полезно?

Решение

Для начала выезд http://www.nltk.org/ если вы планируете работать с Python, хотя, насколько я знаю, код не является «промышленным», но он поможет вам начать работу.

Ознакомьтесь с разделом 7.5 на http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html но чтобы понять алгоритмы, вам, вероятно, придется прочитать большую часть книги.

Также проверьте это http://nlp.stanford.edu/software/CRF-NER.shtml.Это сделано с помощью Java,

NER — непростая тема, и, вероятно, никто не скажет вам: «Это лучший алгоритм», у большинства из них есть свои плюсы и минусы.

Мои 0,05 доллара.

Ваше здоровье,

Другие советы

Это зависит от того, хотите ли вы:

Узнать о НЭР:Отличное место для начала — это НЛТК, и связанное с ним книга.

Чтобы реализовать лучшее решение:Здесь вам нужно будет искать современное состояние.Ознакомьтесь с публикациями в ТРЕК.Более специализированная встреча Биокреатив (хороший пример применения НЭР в узкой области).

Чтобы реализовать самое простое решение:В этом случае вам просто нужно просто пометить тегами и извлечь слова, помеченные как существительные.Вы можете использовать тег из nltk или даже просто найти каждое слово в PyWordnet и пометьте его наиболее распространенным словесным смыслом.


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

Существует несколько инструментов и API.

На базе DBPedia существует инструмент под названием DBPedia Spotlight (https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki).Вы можете использовать их интерфейс REST или загрузить и установить собственный сервер.Самое замечательное то, что он сопоставляет объекты с их присутствием в DBPedia, а это значит, что вы можете извлекать интересные связанные данные.

У AlchemyAPI (www.alchemyapi.com) есть API, который также будет делать это через REST, и они используют модель freemium.

Я думаю, что большинство методов основаны на НЛП для поиска сущностей, а затем используют базовую базу данных, такую ​​​​как Wikipedia, DBPedia, Freebase и т. д., чтобы устранить неоднозначность и релевантность (например, пытаясь решить, посвящена ли статья, в которой упоминается Apple, фруктам). или компания...мы бы выбрали компанию, если статья включает в себя другие организации, связанные с компанией Apple).

Возможно, вы захотите попробовать новейшую систему FastEntity Linking от Yahoo Research — в документе также есть обновленные ссылки на новые подходы к NER с использованием встраивания на основе нейронных сетей:

https://research.yahoo.com/publications/8810/lightweight-multilingual-entity-extraction-and-linking

Можно использовать искусственные нейронные сети для распознавания именованных объектов.

Вот реализация двунаправленной сети LSTM + CRF в TensorFlow (python) для распознавания именованного объекта: https://github.com/Franck-Dernoncourt/NeuroNER (работает на Linux/Mac/Windows).

Он дает самые современные результаты (или близкие к ним) на нескольких наборах данных распознавания именованных объектов.Как отмечает Але, каждый алгоритм распознавания именованных объектов имеет свои недостатки и преимущества.

Архитектура ИНС:

enter image description here

Как видно в TensorBoard:

enter image description here

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

Другой вариант — сравнить тексты с базой данных, в которой вы найдете строку, предварительно идентифицированную как интересующие теги.

мои 5 копеек.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top