0

Ich versuche ein Programm in Python zu entwickeln, das rohe Chat-Daten und Cluster-Sätze mit ähnlichen Absichten verarbeiten kann, so dass sie als Trainingsbeispiele verwendet werden können, um einen neuen Chatbot zu erstellen. Das Ziel besteht darin, es so schnell und automatisch wie möglich zu machen (d. H. Es werden keine Parameter manuell eingegeben).Wie Clustering verwenden, um Sätze mit ähnlichen Absichten zu gruppieren?

1- Für die Merkmalsextraktion tokeniere ich jeden Satz, stemme seine Wörter und vektorisiere ihn mit Sklearns TfidfVectorizer.

2- Dann führe ich Clustering auf diese Satz Vektoren mit Sklearn DBSCAN. Ich habe diesen Cluster-Algorithmus gewählt, weil der Benutzer nicht die gewünschte Anzahl von Clustern angeben muss (wie der k-Parameter in k-means). Es wirft viele Sätze weg (betrachtet sie als Ausreißer), aber zumindest sind seine Cluster homogen.

Der Gesamtalgorithmus auf relativ kleine Datenmengen (10000 Sätze) arbeitet und erzeugt sinnvolle Cluster, aber es gibt ein paar Probleme:

  • Bei großen Datenmengen (zB 800000 Sätze), versagt DBSCAN, weil es zu erfordert viel Speicher, sogar mit paralleler Verarbeitung auf einer leistungsfähigen Maschine in der Cloud. Ich brauche eine weniger rechenintensive Methode, aber ich kann keinen anderen Algorithmus finden, der keine seltsamen und heterogenen Satzcluster erzeugt. Welche anderen Möglichkeiten gibt es? Welcher Algorithmus kann große Mengen hochdimensionaler Daten verarbeiten?

  • Die Cluster, die von DBSCAN erzeugt werden, sind Sätze, die (aufgrund meiner Feature-Extraktionsmethode) einen ähnlichen Wortlaut haben, aber die Zielwörter repräsentieren nicht immer Intents. Wie kann ich meine Feature-Extrahierung verbessern, damit die Absicht eines Satzes besser erfasst wird? Ich habe versucht, Doc2vec aber es hat nicht gut zu funktionieren scheinen mit kleinen Datensätzen von Dokumenten, die die Größe eines Satzes sind ...

Antwort

0

Eine Standardimplementierung von DBSCAN soll nur O (n) Speicher benötigen . Sie können nicht niedriger als diese Speicheranforderung erhalten. Aber ich habe irgendwo gelesen, dass sklearns DBSCAN tatsächlich O (n²) -Speicher verwendet, also ist es nicht die optimale Implementierung. Möglicherweise müssen Sie dies dann selbst implementieren, um weniger Speicher zu verwenden.

Erwarten Sie nicht, dass diese Methoden "nach Absicht" clustern können. Es gibt keine Möglichkeit, dass ein unbeaufsichtigter Algorithmus auf das, was beabsichtigt ist, schließen kann. Höchstwahrscheinlich basieren die Cluster nur auf einigen Schlüsselwörtern. Aber das könnte sein, ob die Leute "Hallo" oder "Hallo" sagen. Aus einer unbeaufsichtigten Sicht gibt diese Unterscheidung zwei schöne Cluster (und etwas Rauschen, vielleicht auch ein anderes Cluster "Hola").

Ich schlage vor, ein überwacht Feature Extraktion basierend auf einer Teilmenge, wo Sie die "Absicht" beschriften.

+0

Sie können über Modelle nach latenter Dirichlet-Verteilung denken, wie in Gensim.ldamodel, die Ihnen helfen können, Ihre Sätze in Themen zu gruppieren. – sergzach

Verwandte Themen