Por lo que sé, solo necesita proporcionar una serie de temas y el corpus. No es necesario especificar un conjunto de temas candidatos, aunque puede usarse uno, como puede ver en el ejemplo que comienza en la parte inferior de la página 15 de Grun y Hornik (2011) .
Actualizado 28 de enero 14. Ahora hago las cosas un poco diferente al siguiente método. Vea aquí mi enfoque actual: /programming//a/21394092/1036500
Una forma relativamente simple de encontrar el número óptimo de temas sin datos de capacitación es recorrer modelos con diferentes números de temas para encontrar el número de temas con la máxima probabilidad de registro, dados los datos. Considere este ejemplo 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")
Antes de comenzar a generar el modelo de tema y analizar el resultado, debemos decidir la cantidad de temas que el modelo debe usar. Aquí hay una función para recorrer diferentes números de tema, obtener la probabilidad de registro del modelo para cada número de tema y trazarlo para que podamos elegir el mejor. El mejor número de temas es el que tiene el mayor valor de probabilidad de registro para obtener los datos de ejemplo integrados en el paquete. Aquí he elegido evaluar cada modelo comenzando con 2 temas hasta 100 temas (¡esto tomará algún tiempo!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Ahora podemos extraer los valores de probabilidad de registro para cada modelo que se generó y prepararnos para trazarlo:
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)))
Y ahora haga un diagrama para ver en qué número de temas aparece la mayor probabilidad de registro:
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))
Parece que está en algún lugar entre 10 y 20 temas. Podemos inspeccionar los datos para encontrar el número exacto de temas con la mayor probabilidad de registro de esta manera:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Entonces, el resultado es que 13 temas dan la mejor opción para estos datos. Ahora podemos seguir adelante con la creación del modelo LDA con 13 temas e investigar el modelo:
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
Y así sucesivamente para determinar los atributos del modelo.
Este enfoque se basa en:
Griffiths, TL y M. Steyvers 2004. Encontrar temas científicos. Actas de la Academia Nacional de Ciencias de los Estados Unidos de América 101 (Supl. 1): 5228 –5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 buena respuesta.best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
. ¿Por qué selecciona solo raws 21:30 de los datos?