Die Eingabeparameter für die Verwendung der latenten Dirichlet-Zuordnung


17

Bei Verwendung der Themenmodellierung (Latent Dirichlet Allocation) ist die Anzahl der Themen ein Eingabeparameter, den der Benutzer angeben muss.

Ich denke, wir sollten auch eine Sammlung von Kandidatenthemensätzen bereitstellen, mit denen der Dirichlet-Prozess verglichen werden muss. Ist mein Verständnis korrekt? Wie kann man in der Praxis ein solches Kandidatenthemaset einrichten?

Antworten:


21

Soweit ich weiß, müssen Sie nur eine Reihe von Themen und den Korpus angeben. Es muss kein Kandidatenthemaset angegeben werden, obwohl eines verwendet werden kann, wie Sie im Beispiel unten auf Seite 15 von Grun und Hornik (2011) sehen können .

Aktualisiert am 28. Januar 14. Ich mache die Dinge jetzt ein bisschen anders als unten. Hier finden Sie meine aktuelle Vorgehensweise: /programming//a/21394092/1036500

Eine relativ einfache Möglichkeit, die optimale Anzahl von Themen ohne Trainingsdaten zu finden, besteht darin, Modelle mit einer unterschiedlichen Anzahl von Themen zu durchlaufen, um die Anzahl von Themen mit der maximalen Log-Wahrscheinlichkeit zu finden, wenn die Daten vorliegen. Betrachten Sie dieses Beispiel mitR

# download and install one of the two R packages for LDA, see a discussion
# of them here: http://stats.stackexchange.com/questions/24441
#
install.packages("topicmodels")
library(topicmodels)
#
# get some of the example data that's bundled with the package
#
data("AssociatedPress", package = "topicmodels")

Bevor wir mit dem Generieren des Themenmodells und dem Analysieren der Ausgabe beginnen, müssen wir die Anzahl der Themen festlegen, die das Modell verwenden soll. Hier ist eine Funktion, mit der Sie verschiedene Themennummern durchlaufen, die Log-Ähnlichkeit des Modells für jede Themennummer ermitteln und grafisch darstellen können, um die beste auszuwählen. Die beste Anzahl von Themen ist das Thema mit der höchsten Wahrscheinlichkeit, dass die Beispieldaten in das Paket integriert werden. Hier habe ich beschlossen, jedes Modell zu bewerten, beginnend mit 2 Themen bis zu 100 Themen (dies wird einige Zeit dauern!).

best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})

Jetzt können wir die Log-Liklihood-Werte für jedes generierte Modell extrahieren und für die Darstellung vorbereiten:

best.model.logLik <- as.data.frame(as.matrix(lapply(best.model, logLik)))

best.model.logLik.df <- data.frame(topics=c(2:100), LL=as.numeric(as.matrix(best.model.logLik)))

Machen Sie jetzt eine grafische Darstellung, um zu sehen, bei wie vielen Themen die höchste Protokollwahrscheinlichkeit auftritt:

library(ggplot2)
ggplot(best.model.logLik.df, aes(x=topics, y=LL)) + 
  xlab("Number of topics") + ylab("Log likelihood of the model") + 
  geom_line() + 
  theme_bw()  + 
  opts(axis.title.x = theme_text(vjust = -0.25, size = 14)) + 
  opts(axis.title.y = theme_text(size = 14, angle=90))

Bildbeschreibung hier eingeben

Sieht aus wie es irgendwo zwischen 10 und 20 Themen ist. Wir können die Daten untersuchen, um die genaue Anzahl der Themen mit der höchsten Log-Wahrscheinlichkeit zu ermitteln:

best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
       topics        LL
12     13           -8525.234

Das Ergebnis ist, dass 13 Themen am besten zu diesen Daten passen. Jetzt können wir das LDA-Modell mit 13 Themen erstellen und das Modell untersuchen:

lda_AP <- LDA(AssociatedPress[21:30,], 13)   # generate the model with 13 topics 
get_terms(lda_AP, 5)                         # gets 5 keywords for each topic, just for a quick look
get_topics(lda_AP, 5)                        # gets 5 topic numbers per document

Und so weiter, um die Attribute des Modells zu bestimmen.

Dieser Ansatz basiert auf:

Griffiths, TL und M. Steyvers 2004. Suche nach wissenschaftlichen Themen. Verfahren der National Academy of Sciences der Vereinigten Staaten von Amerika 101 (Suppl 1): 5228 –5235.


Ich habe den Code dafür aktualisiert und als Zusammenfassung gespeichert. Die Plotmethode wird standardmäßig gedruckt. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 nette Antwort.
Tyler Rinker

Durch Erhöhen von k in LDA erweitern Sie den Parameterraum und Modelle mit kleinerem k werden im Wesentlichen in Modelle mit höherem k verschachtelt. Also sollte der LL mit k immer größer werden. Was mit einer kleinen Erhebung um k = 13 passiert, ist wahrscheinlich darauf zurückzuführen, dass der VEM-Algorithmus bei komplexen Modellen nicht zum globalen Maximum konvergiert. Mit AIC oder BIC haben Sie mehr Glück.
VitoshKa

Hallo @Ben, wirklich nützliche Antwort. Ich habe eine Frage, wenn Sie das Modell mit 2-100 Themen evaluieren: best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}). Warum wählen Sie nur Rohdaten 21:30 der Daten aus?
Economist_Ayahuasca

Da ich diese Antwort vor ein paar Jahren gepostet habe, kann ich mich nicht genau erinnern. Aber wahrscheinlich nur, um die Rechenzeit kurz zu halten!
Ben

1
Jetzt gibt es dieses nette Paket für die Berechnung der optimalen Anzahl von Themen: cran.r-project.org/web/packages/ldatuning
Ben
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.