Экстракция/распознавание сущности со свободными инструментами при подаче индекса Lucene

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

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

Мои вопросы:

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

Вот некоторые вопросы, относящиеся к этому вопросу:

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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