Per quanto ne so, devi solo fornire una serie di argomenti e il corpus. Non è necessario specificare un set di argomenti candidati, sebbene sia possibile utilizzarne uno, come si può vedere nell'esempio che inizia nella parte inferiore della pagina 15 di Grun e Hornik (2011) .
Aggiornato il 28 gennaio 14. Ora faccio le cose in modo leggermente diverso rispetto al metodo seguente. Vedi qui per il mio approccio attuale: /programming//a/21394092/1036500
Un modo relativamente semplice per trovare il numero ottimale di argomenti senza dati di formazione è quello di passare in rassegna i modelli con diversi numeri di argomenti per trovare il numero di argomenti con la massima probabilità di log, dati i dati. Considera questo esempio conR
# 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")
Prima di iniziare a generare il modello di argomento e ad analizzare l'output, dobbiamo decidere il numero di argomenti che il modello dovrebbe utilizzare. Ecco una funzione per passare in rassegna numeri di argomenti diversi, ottenere la probabilità di log del modello per ciascun numero di argomento e tracciarlo in modo che possiamo scegliere quello migliore. Il miglior numero di argomenti è quello con il più alto valore di probabilità di log per ottenere i dati di esempio integrati nel pacchetto. Qui ho scelto di valutare ogni modello a partire da 2 argomenti, sebbene a 100 argomenti (questo richiederà del tempo!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Ora possiamo estrarre i valori di verosimiglianza del log per ciascun modello che è stato generato e prepararci a tracciarlo:
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)))
E ora crea una trama per vedere a quale numero di argomenti appare la più alta probabilità di log:
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))
Sembra che sia compreso tra 10 e 20 argomenti. Possiamo ispezionare i dati per trovare il numero esatto di argomenti con la più alta probabilità di log in questo modo:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Quindi il risultato è che 13 argomenti offrono la soluzione migliore per questi dati. Ora possiamo procedere con la creazione del modello LDA con 13 argomenti e lo studio del modello:
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
E così via per determinare gli attributi del modello.
Questo approccio si basa su:
Griffiths, TL e M. Steyvers 2004. Alla ricerca di argomenti scientifici. Atti della National Academy of Sciences degli Stati Uniti d'America 101 (Suppl 1): 5228 –5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 bella risposta.