Como yo sé que usted sólo tiene que suministrar un número de temas y el corpus. No hay necesidad de especificar un candidato tema establecido, a pesar de que uno puede ser utilizado, como se puede ver en el ejemplo de partida en la parte inferior de la página 15 del Grun y Hornik (2011).
Actualizado 28 Jan 14. Ahora hago las cosas un poco diferente al método siguiente. Vea aquí por mi enfoque actual: http://stackoverflow.com/a/21394092/1036500
Una forma relativamente sencilla para encontrar el número óptimo de temas sin datos de entrenamiento con un bucle a través de modelos con diferentes números de temas para encontrar el número de temas, con el máximo del registro de la probabilidad, a la vista de los datos. Considere este ejemplo R
# 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 ir a la derecha en la generación de el tema del modelo y el análisis de la salida, tenemos que decidir sobre el número de temas que el modelo debe utilizar. Aquí está una función de bucle en diferentes números de tema, obtener el registro de probabilidad del modelo para cada número del tema y la trama para que podamos elegir la mejor. El mejor número de temas es la que cuenta con el mayor registro de probabilidad valor para obtener los datos de ejemplo integrada en el paquete. Aquí he elegido para evaluar cada modelo, comenzando con 2 temas, aunque para 100 temas (esto tomará un poco de tiempo!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Ahora podemos extraer el registro de valores de probabilidad para cada modelo que se ha generado y se preparan para la trama:
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 hacer una gráfica para ver a qué número de temas en los que el registro más alto de probabilidad de que aparezca:
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))
![enter image description here]()
Parece que es en algún lugar entre el 10 y el 20 temas. Podemos inspeccionar los datos para encontrar el número exacto de los temas con el mayor registro de probabilidad tal que así:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Así, el resultado es que los 13 temas que le proporcionan el mejor ajuste para estos datos. Ahora podemos seguir adelante con la creación de la LDA modelo con 13 temas y la investigación de la 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, T. L., y M. Steyvers de 2004. Encontrar temas científicos. Actas de la Academia Nacional de Ciencias de los Estados unidos de América 101(Supl 1):5228 -5235.