Как классифицировать документы, проиндексированные с помощью lucene - PullRequest
5 голосов
/ 27 февраля 2012

Я классифицировал набор документов с Lucene (поля: содержание, категория).Каждый документ имеет свою собственную категорию, но некоторые из них помечены как некатегоризованные.Есть ли способ легко классифицировать эти документы в Java?

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Да, вы можете использовать запросы подобия, например, реализованные классом MoreLikeThisQuery для такого рода вещей (при условии, что у вас есть большое текстовое поле в документах для индекса люцены).Посмотрите на javadoc базового MoreLikeThis класса для подробностей о том, как он работает.

Чтобы превратить ваш индекс lucene в текстовый классификатор, у вас есть два варианта:

  1. Для любого нового текста в классификаторе запросите 10 или 50 наиболее похожих документов, которые имеют хотя бы одну категорию, суммируйте вхождения категорий среди этих «соседей» и выберите 3 наиболее часто встречающиеся категории среди подобныхдокументы (например).

  2. Кроме того, вы можете индексировать новый набор сводных документов, по одному для каждой категории, путем объединения (всего или образца) текста документов этой категории.,Затем выполните запрос на сходство, введя текст непосредственно в эти «поддельные» документы.

Первая стратегия в машинном обучении называется классификацией k-Nearest Neighbours.Второй - это хак:)

Если у вас много категорий (скажем, более 1000), второй вариант может быть лучше (быстрее классифицировать).Я не проводил никакой чистой оценки производительности.

Вы также можете найти этот пост в блоге интересным .

Если вы хотите использовать Solr, вам необходимо включить MoreLikeThisHandlerи установите termVectors=true в поле содержимого.

Sunburnt клиент Solr для python способен выполнять MMT-запросы.Вот прототип классификатора Python, который использует Solr для классификации с использованием индекса категорий Википедии:

https://github.com/ogrisel/pignlproc/blob/master/examples/topic-corpus/categorize.py

3 голосов
/ 29 июля 2015

Начиная с Lucene 5.2.1, вы можете использовать проиндексированные документы для классификации новых документов .Из коробки Lucene предлагает наивный байесовский классификатор, классификатор k-Nearest Neighbor (на основе класса MoreLikeThis ) и классификатор на основе перцептрона.

Недостатком является то, что все этиклассы помечены экспериментальными предупреждениями и задокументированы ссылками на Википедию.

3 голосов
/ 27 февраля 2012

Классификация является широкой проблемой в области машинного обучения / статистики.После прочтения вашего вопроса, что я чувствую, вы использовали вид SQL group group (хотя в Lucene).Если вы хотите, чтобы машина классифицировала документы, вам необходимо знать алгоритмы машинного обучения, такие как нейронные сети, байесовский метод, SVM и т. Д. Для этих задач в Java имеются отличные библиотеки.Чтобы это работало, вам понадобятся функции (набор атрибутов, извлеченных из данных), по которым вы можете обучить свой алгоритм, чтобы он мог предсказать вашу классификационную метку.

В Java есть несколько хороших API (которые позволяют вам сконцентрироваться на коде, не вдаваясь в понимание математической теории этих алгоритмов, хотя, если вы знаете, это было бы очень полезно).Века это хорошо.Я также натолкнулся на пару книг Мэннинга, которые хорошо справились с этими задачами.Вот вам:

Глава 10 (Классификация) Коллективного разума в действии: http://www.manning.com/alag/

Глава 5 (Классификация) алгоритмов интеллектуальной сети: http://www.manning.com/marmanis/

Это абсолютно фантастический материал (для Java-людей) по классификации, особенно подходящий для людей, которые просто не хотят углубляться в теорию (хотя и очень важны :)) и просто хотят быстро получить работающий код.

Коллективный разумв действии решил проблему классификации с использованием JDM и Weka.Итак, взгляните на эти два для ваших задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...