2009-06-22 8 views
21

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

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

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

Пример:

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

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

ответ

13

Чтобы начать с проверки 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 доллара.

Приветствия,

+0

+1 для предложения nltk – pufferfish

+0

NLTK звучит неплохо, но требует установки через оболочку, не так ли? Я ничего не могу установить через оболочку. – caw

+0

Что вы подразумеваете под установкой через оболочку? Проверьте http://www.nltk.org/download, достаточно, если вы просто добавите nltk в свой PYTHONPATH. – Ale

-10

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

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

мои 5 центов.

+0

Это не работает. Во-первых, он работает только в * правильных * английских текстах. Кроме того, он не работает, если нет чувствительности к регистру. – caw

+0

yup ... i wuz n lunden n i sore barrack ohbama –

+0

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

3

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

Чтобы узнать о НЭК: отличное место, чтобы начать с NLTK, и связанный с ним book.

Для реализации наилучшего решения: Здесь вам нужно будет изучить состояние дел. Взгляните на публикации в TREC. Более специализированная встреча - Biocreative (хороший пример применения NER для узкого поля).

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


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

+0

Я думаю, что даже самое простое решение должно было бы сделать некоторый анализ n-gram, чтобы попытаться найти многословные сущности. – Triptych

+0

http: // osteele.com/projects/pywordnet/говорит: «Это старая версия PyWordNet. PyWordNet была внесена в проект NLTK в 2006 году». – dfrankow

+0

@Triptych: вы найдете много n-граммов, которые «я люблю» и «из которых», – dfrankow

1

Существует несколько инструментов и 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).

0

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

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

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

ANN архитектура:

enter image description here

Как просмотрены в TensorBoard:

enter image description here