Ich habe das folgende Problem zur Hand: Ich habe eine sehr lange Liste von Wörtern, möglicherweise Namen, Nachnamen usw. Ich muss diese Wortliste so gruppieren, dass ähnliche Wörter, zum Beispiel Wörter mit ähnlichem Bearbeitungsabstand (Levenshtein), in der Liste angezeigt werden gleichen Cluster. Zum Beispiel sollten "Algorithmus" und "Alogrithmus" hohe Chancen haben, im selben Cluster zu erscheinen.
Mir sind die klassischen, nicht überwachten Clustering-Methoden wie k-means clustering und EM clustering in der Literatur zur Mustererkennung bekannt. Das Problem hierbei ist, dass diese Methoden auf Punkten arbeiten, die sich in einem Vektorraum befinden. Ich habe hier Saitenworte zur Hand. Es scheint, dass die Frage, wie man Strings in einem numerischen Vektorraum darstellt und das "Mittel" von String-Clustern berechnet, nach meinen bisherigen Umfrageanstrengungen nicht ausreichend beantwortet ist. Ein naiver Ansatz, um dieses Problem anzugehen, wäre die Kombination von k-Means-Clustering mit Levenshtein-Abstand, aber die Frage bleibt immer noch "Wie soll man" Mittel "von Zeichenketten darstellen?". Es gibt ein Gewicht, das als TF-IDF-Gewicht bezeichnet wird, aber es scheint, dass es hauptsächlich mit dem Bereich des "Textdokument" -Clusterings zusammenhängt, nicht mit dem Clustering einzelner Wörter. http://pike.psu.edu/cleandb06/papers/CameraReady_120.pdf
Meine Suche in diesem Bereich dauert noch an, aber ich wollte auch hier Anregungen bekommen. Was würden Sie in diesem Fall empfehlen, kennt jemand Methoden für diese Art von Problem?
quelle
It seems that there are some special string clustering algorithms
. Wenn Sie aus einem bestimmten Text-Mining-Bereich stammen und nicht aus Statistiken / Datenanalysen, ist diese Aussage berechtigt. Wenn Sie jedoch lernen, Clustering Branch zu lernen, werden Sie feststellen, dass es keine "speziellen" Algorithmen für String-Daten gibt. Das "Besondere" ist, wie Sie solche Daten vorverarbeiten, bevor Sie sie in eine Clusteranalyse eingeben.Antworten:
Empfehlung von Seconding @ mican zur Affinitätsvermehrung .
Aus der Zeitung: L Frey, Brendan J. und Delbert Dueck. "Clustering durch Weiterleiten von Nachrichten zwischen Datenpunkten." science 315, 5814 (2007): 972–976. .
Es ist super einfach über viele Pakete zu bedienen. Es funktioniert auf alles, was Sie die paarweise Ähnlichkeit definieren können. Was Sie durch Multiplizieren der Levenshtein-Distanz mit -1 erhalten können.
Ich habe ein kurzes Beispiel zusammengestellt und dabei den ersten Absatz Ihrer Frage als Eingabe verwendet. In Python 3:
Ausgabe war (Beispiele in Kursivschrift links vom Cluster, für die sie beispielhaft sind):
Ausführen auf einer Liste von 50 zufälligen Vornamen :
Sieht für mich ziemlich gut aus (das hat Spaß gemacht).
quelle
Symmetric
)Verwenden Sie Graph-Clustering-Algorithmen wie Louvain-Clustering, RNSC (Restricted Neighborhood Search Clustering), APC (Affinity Propgation Clustering) oder MCL (Markov-Cluster-Algorithmus).
quelle
Sie können das Vektorraummodell mit den n-Gramm der Wörter als Vektorraumeinträge ausprobieren. Ich denke, Sie müssten in diesem Fall ein Maß wie Cosinus-Ähnlichkeit verwenden, anstatt Abstand zu bearbeiten.
quelle