Algorithmen für das Textclustering

17

Ich habe ein Problem damit, eine große Menge von Sätzen nach ihrer Bedeutung in Gruppen zusammenzufassen. Dies ähnelt einem Problem, wenn Sie viele Sätze haben und diese nach ihrer Bedeutung gruppieren möchten.

Welche Algorithmen werden dazu vorgeschlagen? Ich kenne die Anzahl der Cluster im Voraus nicht (und da weitere Daten kommen, können sich auch die Cluster ändern). Welche Funktionen werden normalerweise verwendet, um die einzelnen Sätze darzustellen?

Ich versuche jetzt die einfachsten Funktionen mit nur einer Liste von Wörtern und einem Abstand zwischen Sätzen, die wie folgt definiert sind:

Bildbeschreibung hier eingeben

(A und B sind entsprechende Wortmengen in Satz A und B)

Macht es überhaupt Sinn?

Ich versuche, den Mean-Shift- Algorithmus aus der Scikit-Bibliothek auf diese Entfernung anzuwenden , da keine Anzahl von Clustern im Voraus erforderlich ist.

Wenn jemand bessere Methoden / Ansätze für das Problem vorschlägt, wird dies sehr geschätzt, da ich noch neu im Thema bin.

Maxim Galushka
quelle

Antworten:

13

Überprüfen Sie die Open Source-Software der Stanford NLP Group ( http://www-nlp.stanford.edu/software ), insbesondere Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ). . Die Software ist in geschrieben Java, was Sie wahrscheinlich begeistern wird, hat aber auch Bindungen für einige andere Sprachen. Hinweis zur Lizenzierung - Wenn Sie beabsichtigen, ihren Code in kommerziellen Produkten zu verwenden, müssen Sie eine kommerzielle Lizenz erwerben.

Eine weitere interessante Sammlung von Open-Source-Bibliotheken, die meiner Meinung nach für diese Aufgabe und vieles mehr geeignet sind, ist das parallele Framework für maschinelles Lernen in GraphLab ( http://select.cs.cmu.edu/code/graphlab ), das Clustering-Bibliotheken und die Implementierung verschiedener Clustering- Methoden umfasst Algorithmen ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). Es eignet sich besonders für sehr große Datenmengen (wie Sie), da es das MapReduceModell implementiert und somit die Parallelverarbeitung von Multicore und Multiprozessor unterstützt .

Das Folgende ist Ihnen höchstwahrscheinlich bekannt, aber ich werde es nur für den Fall erwähnen. Das Natural Language Toolkit (NLTK) für Python( http://www.nltk.org ) enthält Module zum Gruppieren / Klassifizieren / Kategorisieren von Text. Überprüfen Sie das entsprechende Kapitel in NLTK Book: http://www.nltk.org/book/ch06.html .

AKTUALISIEREN:

Apropos Algorithmen : Sie haben anscheinend die meisten davon ausprobiert scikit-learn, wie in diesem Beispiel zur Themenextraktion dargestellt : http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . Möglicherweise finden Sie jedoch nützliche andere Bibliotheken, die eine Vielzahl von Clustering-Algorithmen implementieren , einschließlich der nicht-negativen Matrix-Faktorisierung (NMF) . Eine solche Bibliothek ist Python Matrix Factorization (PyMF) mit einer Homepage unter https://code.google.com/p/pymf und einem Quellcode unter https://github.com/nils-werner/pymf . Eine weitere, noch interessantere Bibliothek, die ebenfalls auf Python basiert, ist NIMFA, die verschiedene NMF-Algorithmen implementiert : http://nimfa.biolab.si . Hier ist ein Forschungsbericht, der beschreibt NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Hier ist ein Beispiel aus der Dokumentation, das die Lösung für ein sehr ähnliches Textverarbeitungsproblem beim Clustering von Themen darstellt : http://nimfa.biolab.si/nimfa.examples.documents.html .

Aleksandr Blekh
quelle
1
Vielen Dank für die so ausführliche Antwort. Ich werde alle Ihre Vorschläge durchgehen, eine Menge Arbeit zu versuchen und zu testen! Außerdem habe ich festgestellt, dass das carrot2-Tool beim unbeaufsichtigten Clustering von Textdaten wirklich gute Arbeit leistet. Posting Link für zukünftige Referenz http://project.carrot2.org/
Maxim Galushka
@MaximGalushka: Gern geschehen! Ich bin gespannt auf Ihre Erkenntnisse und die Fortschritte, die Sie irgendwann erzielen werden. Fühlen Sie sich frei, hier zu posten oder sich direkt mit mir in Verbindung zu setzen.
Aleksandr Blekh