Clustering von Dokumenten unter Verwendung der aus Latent Dirichlet Allocation abgeleiteten Themen

9

Ich möchte Latent Dirichlet Allocation für ein Projekt verwenden und verwende Python mit der Gensim-Bibliothek. Nachdem ich die Themen gefunden habe, möchte ich die Dokumente mit einem Algorithmus wie k-means gruppieren (idealerweise möchte ich einen guten für überlappende Cluster verwenden, damit jede Empfehlung begrüßt wird). Ich habe es geschafft, die Themen zu bekommen, aber sie haben folgende Form:

0,041 * Minister + 0,041 * Schlüssel + 0,041 * Momente + 0,041 * umstritten + 0,041 * Prime

Um einen Clustering-Algorithmus anzuwenden und mich zu korrigieren, wenn ich falsch liege, sollte ich meines Erachtens einen Weg finden, jedes Wort als Zahl mit tfidf oder word2vec darzustellen.

Haben Sie Ideen, wie ich die Textinformationen beispielsweise aus einer Liste "entfernen" und dann zurücksetzen könnte, um die entsprechende Multiplikation vorzunehmen?

So wie ich es zum Beispiel sehe, wenn das Wort Minister ein tfidf-Gewicht von 0,042 usw. für jedes andere Wort innerhalb desselben Themas hat, sollte ich Folgendes berechnen:

0,041 * 0,42 + ... + 0,041 * tfidf (Prime) und erhalten ein Ergebnis, das später verwendet wird, um die Ergebnisse zu gruppieren.

Vielen Dank für Ihre Zeit.

Swan87
quelle
1
Wie im Tutorial erläutert , können Sie Dokumente als Vektoren ausdrücken. Cluster diese Vektoren.
Emre
Ich kenne Mate, aber ich muss sie nach den Themen gruppieren, die erstellt wurden, nachdem ich LDA auf meine Sammlung angewendet habe. Jedes Thema sollte als Vektor dargestellt werden, um jedes Dokument mit jedem Thema zu vergleichen und das entsprechende Thema oder die entsprechenden Themen für jedes Dokument zu finden.
Swan87
Sie müssen nicht jedes Wort als Vektor darstellen. Sie erhalten die neue Darstellung für das gesamte Dokument, indem Sie die LDA-Transformation, die Sie gelernt haben, auf den Korpus anwenden . Ein Beispiel mit LSI finden Sie unter folgendem Link: radimrehurek.com/gensim/tut2.html Der Schlüsselteil ist, wo sie die erlernte LSI-Transformation mit lsi [doc_bow] auf den gesamten Korpus anwenden
Will Stanton

Antworten:

4

Angenommen, LDA hat eine Liste mit Themen erstellt und für jedes Dokument eine Bewertung für jedes Thema vergeben, könnten Sie das Dokument und seine Bewertungen als Vektor darstellen:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

Um die Ergebnisse für jedes Dokument zu erhalten, können Sie das Dokument ausführen. als eine Tüte Worte durch ein geschultes LDA-Modell. Aus der Gensim-Dokumentation:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

Dann könnten Sie die k-means auf dieser Matrix ausführen und sie sollte Dokumente gruppieren, die ähnlich sind. K-means ist standardmäßig ein Hard-Clustering-Algorithmus, der impliziert, dass jedes Dokument in einen Cluster klassifiziert wird. Sie können Soft-Clustering-Mechanismen verwenden, mit denen Sie eine Wahrscheinlichkeitsbewertung erhalten, dass ein Dokument in einen Cluster passt - dies wird als Fuzzy-K-Mittel bezeichnet . https://gist.github.com/mblondel/1451300 ist eine Python-Übersicht, die zeigt, wie Sie dies mit scikit learn tun können.

ps: Ich kann nicht mehr als 2 Links posten

Asche
quelle
Ich habe versucht, dies für "n" zu tun. Keines der Dokumente sagt aus, wo Themen sind. Für beispielsweise x Anzahl der Dokumente werden jedoch nicht alle t Themen prob angezeigt, sondern nur einige (t-no) Themen prob, wobei 1 <= no <t. Es passiert nicht, wenn ich das Experiment mit kleinen Dokumenten durchführe. Liegt es daran, dass es überhaupt nicht druckt, wenn das Prob 0 ist?
Manish Ranjan
0

Ergänzend zur vorherigen Antwort sollten Sie kmeans nicht einfach direkt auf den Kompositionsdaten ausführen, die aus der lda topic-doc-Distribution abgeleitet wurden, sondern stattdessen eine Transformation der Kompositionsdaten verwenden, um sie in den euklidischen Raum wie ilr oder clr zu projizieren.

( Beispiel )

Anestis Fachantidis
quelle