Извлечение / Распознавание Сущностей с бесплатными инструментами во время кормления Lucene Index - PullRequest
44 голосов
/ 17 сентября 2011

В настоящее время я изучаю варианты извлечения имен людей, местоположений, технических слов и категорий из текста (много статей из Интернета), который затем включается в индекс Lucene / ElasticSearch. Затем дополнительная информация добавляется в виде метаданных и должна повысить точность поиска.

например. когда кто-то запрашивает «калитку», он должен иметь возможность решить, имеет ли он в виду игру в крикет или проект Apache. Я попытался реализовать это самостоятельно с небольшим успехом до сих пор. Теперь я нашел много инструментов, но я не уверен, подходят ли они для этой задачи и какой из них хорошо интегрируется с Lucene или достаточно ли высока точность извлечения сущностей.

Мои вопросы:

  • Есть ли у кого-нибудь опыт работы с некоторыми из перечисленных инструментов и их точность / отзыв? Или, если есть необходимые данные обучения + доступны.
  • Существуют ли статьи или учебные пособия, в которых я могу начать с извлечения сущностей (NER) для каждого инструмента?
  • Как их можно интегрировать с Lucene?

Вот несколько вопросов, связанных с этой темой:

Ответы [ 4 ]

17 голосов
/ 19 сентября 2011

Проблема, с которой вы сталкиваетесь в примере 'wicket', называется устранение неоднозначности сущности , а не извлечение / распознавание сущности (NER). NER может быть полезен, но только когда категории достаточно специфичны. Большинство систем NER не обладают достаточной степенью детализации, чтобы различать спортивный и программный проекты (оба типа выходили бы за пределы обычно распознаваемых типов: человек, организация, местоположение).

Для устранения неоднозначности вам нужна база знаний, по которой устраняются неоднозначности. DBpedia является типичным выбором из-за его широкого охвата. См. Мой ответ для Как использовать DBPedia для извлечения тегов / ключевых слов из контента? , где я даю больше объяснений и упоминаю несколько инструментов для устранения неоднозначности, включая:

Эти инструменты часто используют независимый от языка API, такой как REST, и я не знаю, напрямую ли они предоставляют поддержку Lucene, но я надеюсь, что мой ответ был полезным для проблемы, которую вы пытаетесь решить.

2 голосов
/ 08 июля 2014

Вы можете использовать OpenNLP для извлечения имен людей, мест, организаций без обучения. Вы просто используете существующие модели, которые можно скачать здесь: http://opennlp.sourceforge.net/models-1.5/

Пример использования одной из этих моделей см .: http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind

0 голосов
/ 26 сентября 2015

В последнее время я возился со Стэнфордом.Они выпустили довольно много версий http://nlp.stanford.edu/software/CRF-NER.shtml

Хорошо, что вы можете тренировать свой собственный классификатор.Вам следует перейти по ссылке, в которой приведены рекомендации по обучению вашему NER.http://nlp.stanford.edu/software/crf-faq.shtml#a К сожалению, в моем случае названные объекты не извлекаются из документа эффективно.Большинство сущностей остаются незамеченными.

На всякий случай, если вы найдете это полезным.

0 голосов
/ 28 октября 2013

Rosoka - это коммерческий продукт, который обеспечивает вычисление «значимости», которое измеряет важность термина или сущности для документа.Значимость основана на языковом использовании, а не на частоте.Используя значения значимости, вы можете определить основную тему документа в целом.В результате вы выбираете XML или JSON, что делает его очень простым в использовании с Lucene.Это написано на Java.Доступна версия Amazon Cloud по адресу https://aws.amazon.com/marketplace/pp/B00E6FGJZ0.. Стоимость пробной версии составляет $ 0,99 / час.Версия Rosoka Cloud не имеет всех функций Java API, доступных для полной версии Rosoka.Да, обе версии выполняют устранение неоднозначности сущности и термина на основе лингвистического использования.

Устранение неоднозначности, будь то человек или программное обеспечение, требует достаточного количества контекстной информации, чтобы определить разницу.Контекст может содержаться в документе, в ограничении корпуса или в контексте пользователей.Первый более конкретен, а второй имеет большую потенциальную неопределенность.Т.е. ввод ключевого слова «калитка» в поиске Google может относиться либо к крикету, либо к программному обеспечению Apache, либо к персонажу Star Wars Ewok (т.е. к сущности).Общее Предложение «Калитка охраняется игроком с битой» содержит контекстные подсказки внутри предложения, чтобы интерпретировать его как объект.«Уикет Уистри Уоррик был разведчиком эвок» должен вводить слово «Уикет» как имя лица «Уикет Уистри Уоррик».«Добро пожаловать в Apache Wicket» содержит контекстную информацию о том, что «Wicket» является частью названия места и т. Д.

...