O ile wiem, wystarczy podać szereg tematów i korpusu. Nie trzeba określać zestawu tematów-kandydatów, chociaż można go użyć, jak widać w przykładzie zaczynającym się na dole strony 15 Grun i Hornik (2011) .
Zaktualizowano 28 stycznia 14. Teraz robię rzeczy nieco inaczej niż w poniższej metodzie. Zobacz moje aktualne podejście: /programming//a/21394092/1036500
Względnie prosty sposób na znalezienie optymalnej liczby tematów bez danych szkoleniowych polega na przeszukiwaniu modeli o różnej liczbie tematów w celu znalezienia liczby tematów o maksymalnym prawdopodobieństwie dziennika, biorąc pod uwagę dane. Rozważ ten przykład zR
# 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")
Zanim przejdziemy do generowania modelu tematów i analizy wyników, musimy zdecydować o liczbie tematów, które model powinien wykorzystać. Oto funkcja umożliwiająca przewijanie różnych numerów tematów, uzyskanie logarytmu prawdopodobieństwa modelu dla każdego numeru tematu i wykreślanie go, abyśmy mogli wybrać najlepszy. Najlepsza liczba tematów to ta o największej wartości prawdopodobieństwa dziennika, aby pobrać przykładowe dane do pakietu. Tutaj wybrałem ocenę każdego modelu, zaczynając od 2 tematów do 100 tematów (zajmie to trochę czasu!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Teraz możemy wyodrębnić wartości wiarygodności dziennika dla każdego wygenerowanego modelu i przygotować się do wykreślenia:
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)))
A teraz zrób wykres, aby zobaczyć, przy jakiej liczbie tematów pojawia się największe prawdopodobieństwo dziennika:
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))
Wygląda na to, że zawiera od 10 do 20 tematów. Możemy sprawdzić dane, aby znaleźć dokładną liczbę tematów o najwyższym prawdopodobieństwie dziennika:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
W rezultacie 13 tematów najlepiej pasuje do tych danych. Teraz możemy rozpocząć tworzenie modelu LDA z 13 tematami i zbadanie modelu:
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
I tak dalej, aby określić atrybuty modelu.
To podejście opiera się na:
Griffiths, TL i M. Steyvers 2004. Znajdowanie tematów naukowych. Postępowania z National Academy of Sciences of the United States of America 101 (Suppl 1): 5228 –5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 fajna odpowiedź.best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
. Dlaczego wybierasz tylko surowe dane 21:30?