Алгоритмы распознавания имен объектов
Я хотел бы использовать именованное распознавание объектов (NER) для поиска адекватных тегов для текстов в базе данных.
Я знаю, что есть статья Википедии об этом и множество других страниц, описывающих NER, я бы хотел услышать от вас что-то об этом:
- Какие впечатления вы сделали с помощью различных алгоритмов?
- Какой алгоритм вы бы порекомендовали?
- Какой алгоритм проще всего реализовать (PHP/Python)?
- Как работают алгоритмы? Требуется ли ручное обучение?
Пример:
"В прошлом году я был в Лондоне, где я видел Барака Обаму". = > Тэги: Лондон, Барак Обама
Надеюсь, ты поможешь мне. Большое вам спасибо заранее!
Ответы
Ответ 1
Чтобы начать с проверки 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 доллара.
Приветствия,
Ответ 2
Это зависит от того, хотите ли вы:
Чтобы узнать о NER: отличное место для начала - NLTK и связанный book.
Чтобы реализовать лучшее решение:
Здесь вам нужно будет найти современное состояние. Взгляните на публикации в TREC. Более специализированная встреча Biocreative (хороший пример NER применяется к узкому полю).
Чтобы реализовать самое простое решение: в этом случае вы просто хотите просто выполнить тегирование и вытащить слова, помеченные как существительные. Вы можете использовать теггер из nltk или даже просто посмотреть каждое слово в PyWordnet и пометить его самым распространенным словарем.
Большинство алгоритмов требуют какой-то подготовки и лучше всего работают, когда они обучаются на контенте, который представляет собой то, что вы собираетесь просить.
Ответ 3
Там есть несколько инструментов и API.
Там есть инструмент, созданный поверх DBPedia под названием DBPedia Spotlight (https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki). Вы можете использовать их интерфейс REST или загрузить и установить собственный сервер. Самое замечательное в том, что он отображает объекты в их присутствие в DBPedia, что означает, что вы можете извлекать интересные связанные данные.
AlchemyAPI (www.alchemyapi.com) имеет API, который будет делать это через REST, а также использует модель freemium.
Я думаю, что большинство методов полагаются на немного NLP для поиска сущностей, а затем используют базовую базу данных, такую как Wikipedia, DBPedia, Freebase и т.д., чтобы делать неоднозначность и релевантность (например, пытаясь решить, относится ли статья, в которой упоминается Apple, о плоде или компании... мы бы выбрали компанию, если в эту статью включены другие компании, которые связаны с компанией Apple).
Ответ 4
Возможно, вы захотите попытаться использовать систему быстрой регистрации Yahoo Research Fast Fast - в документе также были обновлены ссылки на новые подходы к NER с использованием встраиваний на основе нейронной сети:
https://research.yahoo.com/publications/8810/lightweight-multilingual-entity-extraction-and-linking
Ответ 5
Можно использовать искусственные нейронные сети для выполнения распознавания имени.
Ниже приведена реализация двунаправленной сети LSTM + CRF в TensorFlow (python) для выполнения распознавания с именем: https://github.com/Franck-Dernoncourt/NeuroNER (работает в Linux/Mac/Windows).
Он предоставляет самые современные результаты (или близко к ним) на нескольких наборах данных распознавания имен. Как отмечает Але, каждый алгоритм распознавания имен и сущностей имеет свои собственные недостатки и недостатки.
Архитектура ANN:
![введите описание изображения здесь]()
Как видно на TensorBoard:
![введите описание изображения здесь]()
Ответ 6
Я действительно не знаю о NER, но, судя по этому примеру, вы можете сделать алгоритм, который искал заглавные буквы в словах или что-то в этом роде. Для этого я бы рекомендовал regex как наиболее простое решение для реализации, если вы думаете о маленьком.
Другим вариантом является сравнение текстов с базой данных, в которой вы соответствовали строке, предварительно идентифицированной как теги, представляющие интерес.
мои 5 центов.