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))
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.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 nette Antwort.