Алгоритмы распознавания именованных объектов
-
06-07-2019 - |
Вопрос
Я хотел бы использовать распознавание именованных объектов (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).
Он дает самые современные результаты (или близкие к ним) на нескольких наборах данных распознавания именованных объектов.Как отмечает Але, каждый алгоритм распознавания именованных объектов имеет свои недостатки и преимущества.
Архитектура ИНС:
Как видно в TensorBoard:
Я не особо разбираюсь в NER, но, судя по этому примеру, можно создать алгоритм, который будет искать заглавные буквы в словах или что-то в этом роде.Для этого я бы рекомендовал регулярное выражение как наиболее простое в реализации решение, если вы мыслите мелко.
Другой вариант — сравнить тексты с базой данных, в которой вы найдете строку, предварительно идентифицированную как интересующие теги.
мои 5 копеек.