Алгоритмы для кластеризации текста

17

У меня проблема с кластеризацией огромного количества предложений по группам по смыслу. Это похоже на проблему, когда у вас много предложений и вы хотите сгруппировать их по значению.

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

Сейчас я пробую простейшие функции со списком слов и расстоянием между предложениями, определенными как:

введите описание изображения здесь

(A и B - соответствующие наборы слов в предложении A и B)

Имеет ли это смысл вообще?

Я пытаюсь применить алгоритм Mean-Shift из библиотеки Scikit к этому расстоянию, так как он не требует заранее количества кластеров.

Если кто-нибудь посоветует лучшие методы / подходы к проблеме - это будет очень цениться, так как я все еще новичок в теме.

Максим Галушка
источник

Ответы:

13

Проверьте программное обеспечение с открытым исходным кодом Stanford NLP Group ( http://www-nlp.stanford.edu/software ), в частности Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ). , Программное обеспечение написано на нем Java, что, вероятно, порадует вас, но также имеет привязки для некоторых других языков. Обратите внимание, лицензирование - если вы планируете использовать их код в коммерческих продуктах, вы должны приобрести коммерческую лицензию.

Другим интересным набором библиотек с открытым исходным кодом, IMHO, подходящим для этой задачи и многим другим, является параллельная среда для машинного обучения GraphLab ( http://select.cs.cmu.edu/code/graphlab ), которая включает в себя библиотеку кластеризации , реализующую различные кластеры. алгоритмы ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). Он особенно подходит для очень большого объема данных (как у вас), поскольку он реализует MapReduceмодель и, таким образом, поддерживает многоядерную и многопроцессорную параллельную обработку .

Скорее всего, вы знаете следующее, но я упомяну это на всякий случай. Набор естественных языков (NLTK) для Python( http://www.nltk.org ) содержит модули для кластеризации / классификации / категоризации текста. Проверьте соответствующую главу в NLTK Book: http://www.nltk.org/book/ch06.html .

ОБНОВИТЬ:

Говоря об алгоритмах , кажется, что вы попробовали большинство из них scikit-learn, как показано в этом примере извлечения темы: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . Тем не менее, вы можете найти полезные другие библиотеки, которые реализуют широкий спектр алгоритмов кластеризации , включая неотрицательную матричную факторизацию (NMF) . Одной из таких библиотек является Python Matrix Factorization (PyMF) с домашней страницей по адресу https://code.google.com/p/pymf и исходным кодом по адресу https://github.com/nils-werner/pymf . Еще одна, еще более интересная библиотека, также основанная на Python, - это NIMFA, который реализует различные алгоритмы NMF : http://nimfa.biolab.si . Вот исследовательский документ, описывающий NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Вот пример из его документации, в которой представлено решение для очень похожей проблемы обработки текста в кластеризации тем : http://nimfa.biolab.si/nimfa.examples.documents.html .

Александр Блех
источник
1
Большое спасибо за такой подробный ответ. Я рассмотрю все ваши предложения, много работы, чтобы попробовать и проверить! Также я обнаружил, что инструмент carrot2 действительно отлично справляется с кластеризацией текстовых данных без присмотра. Публикация ссылки для дальнейшего использования http://project.carrot2.org/
Максим Галушка
@MaximGalushka: Всегда пожалуйста! Мне любопытно узнать о ваших выводах и прогрессе, которого вы в конечном итоге достигнете. Не стесняйтесь писать здесь или связаться напрямую со мной.
Александр Блех