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 ...
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