Алгоритми кластеризації тексту


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 (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: Вас дуже вітають! Мені цікаво дізнатися про ваші висновки та про прогрес, який ви досягнете в підсумку. Сміливо публікуйте тут або зв’яжіться зі мною безпосередньо.
Олександр Блех
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.