Themenvorhersage mit latenter Dirichlet-Zuordnung


17

Ich habe LDA für ein Korpus von Dokumenten verwendet und einige Themen gefunden. Die Ausgabe meines Codes besteht aus zwei Matrizen, die Wahrscheinlichkeiten enthalten. Wahrscheinlichkeiten für ein Dokumentthema und die Wahrscheinlichkeiten für das andere Wortthema. Aber ich weiß nicht, wie ich diese Ergebnisse verwenden soll, um das Thema eines neuen Dokuments vorherzusagen. Ich benutze Gibbs Sampling. Weiß jemand wie? Vielen Dank


1
Was meinen Sie mit "Vorhersagen des Themas eines neuen Dokuments"? Möchten Sie herausfinden, aus welchem ​​einzelnen Thema dieses Dokument erstellt wurde? Möchten Sie eine Mischung von Themen für das Dokument finden? Möchten Sie jedes Wort im neuen Dokument mit dem Thema kennzeichnen, von dem das Wort stammt?
SheldonCooper

Möchten Sie herausfinden, aus welchem ​​einzelnen Thema dieses Dokument erstellt wurde? Möchten Sie eine Mischung von Themen für das Dokument finden? - Ich möchte eigentlich beide Fragen beantworten ... aber mein Korpus ist wirklich groß, so dass ich es mir nicht leisten kann, jedes Mal, wenn ein neues Dokument vorliegt, mein gesamtes Modell neu zu trainieren wird untersucht
Hossein

Antworten:


21

Ich würde versuchen, einzusteigen. Dies bezieht sich darauf, ein neues Dokument zu nehmen, es zum Korpus hinzuzufügen und dann die Gibbs-Stichprobe nur für die Wörter in diesem neuen Dokument auszuführen, wobei die Themenzuweisungen der alten Dokumente gleich bleiben. Dies konvergiert normalerweise schnell (möglicherweise 5-10-20 Iterationen), und Sie müssen Ihr altes Korpus nicht abtasten, sodass es auch schnell läuft. Am Ende haben Sie die Themenzuordnung für jedes Wort im neuen Dokument. Auf diese Weise können Sie die Themen in diesem Dokument verteilen.

In Ihrem Gibbs-Sampler haben Sie wahrscheinlich etwas Ähnliches wie den folgenden Code:

// This will initialize the matrices of counts, N_tw (topic-word matrix) and N_dt (document-topic matrix)
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Assign current token to a random topic, updating the count matrices
    end
end

// This will do the Gibbs sampling
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Compute probability of current token being assigned to each topic
       Sample a topic from this distribution
       Assign the token to the new topic, updating the count matrices
    end
end

Das Einklappen ist identisch, mit der Ausnahme, dass Sie mit den vorhandenen Matrizen beginnen, ihnen die Token des neuen Dokuments hinzufügen und die Stichprobe nur für die neuen Token durchführen. Dh:

Start with the N_tw and N_dt matrices from the previous step

// This will update the count matrices for folding-in
for token = 1 to N_Tokens_In_New_Document
   Assign current token to a random topic, updating the count matrices
end

// This will do the folding-in by Gibbs sampling
for token = 1 to N_Tokens_In_New_Document
   Compute probability of current token being assigned to each topic
   Sample a topic from this distribution
   Assign the token to the new topic, updating the count matrices
end

pwichwichjwj

jpwjich

danke für deine antwort. Ich habe ein paar Sachen darüber gelesen, aber immer noch ein bisschen verwirrt über das "Einklappen". Sie sagen, dass ich die Themenzuordnungen der alten Dokumente beibehalten soll, das heißt, dass die Wort-Themen-Zuordnungen neu berechnet werden sollen? Können Sie mir detailliertere Anweisungen geben, was zu tun ist? Oder verweisen Sie mich auf ein Dokument oder einen Link, der mir tatsächlich dabei helfen kann, diesen "Einklapp" -Prozess zu klären. Meine erste Option ist das "Einklappen". Wenn dies nicht gelingt, werde ich die zweite Methode wählen, die Sie vorgeschlagen haben (nicht sicher, wie gut sie im Vergleich zum Einklappen funktioniert).
Hossein

@SheldonCooper: Wenn ich Sie richtig verstehe, bezweifle ich, dass dies die richtige Vorgehensweise ist. Sie tun so, als würden Sie die Leistung einer SVM an einem neuen Testmuster messen, indem Sie dem Optimierungsalgorithmus ein paar Schritte von geben Die aktuelle Lösung enthält das Testmuster und bewertet es dann anhand dieses Musters. Aber: Beim maschinellen Lernen können Sie niemals anhand Ihres Trainingssatzes testen. Wenn Sie das Testmuster in das Modell einbinden, tun Sie genau das: Testen anhand eines Trainingsbeispiel ...
Fabian Werner

@FabianWerner Ich glaube, die Lösung hat die Wort-Themen-Matrix aus dem ursprünglichen Training nicht aktualisiert. Es wird lediglich ein Gibbs-Sampler erneut ausgeführt, wobei mit der trainierten Wort-Themen-Matrix begonnen wird, und eine neue Dokument-Themen-Matrix erstellt. Kennen Sie auf jeden Fall einen anderen Weg, um das zu tun, worum das OP gebeten hat (zugegebenermaßen vor einigen Jahren)? Ich sehe das gleiche Problem.
thecity2

@ thecity2 Obwohl ich eine Weile über dieses Problem nachgedacht habe, muss ich leider sagen, dass ich noch keine Lösung habe. Wenn Sie eine finden, dann lassen Sie es mich bitte wissen !!!
Fabian Werner

@FabianWerner Du hast keinen Zug und kein Test-Set in diesem Problem - dein Kommentar ist hier irrelevant. Dies ist wie Clustering unbeaufsichtigtes Lernen.
Emem
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.