Los parámetros de entrada para usar la asignación de Dirichlet latente

17

Cuando se usa el modelado de temas (Asignación de Dirichlet latente), el número de temas es un parámetro de entrada que el usuario debe especificar.

¿Me parece que también deberíamos proporcionar una colección de conjunto de temas candidatos que el proceso de Dirichlet tiene que probar? ¿Es correcto mi entendimiento? En la práctica, ¿cómo configurar este tipo de conjunto de temas candidatos?

usuario3125
fuente

Respuestas:

21

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))

ingrese la descripción de la imagen aquí

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.

Ben
fuente
Actualicé el código para esto y lo guardé como una esencia. tiene un método de trazado que imprime por defecto. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 buena respuesta.
Tyler Rinker
Al aumentar k en LDA, está expandiendo el espacio de parámetros y los modelos con k más pequeños están esencialmente anidados dentro de los modelos con k más alto. Entonces LL debería estar siempre aumentando con k. Lo que sucede con un pequeño aumento alrededor de k = 13 probablemente se deba a que el algoritmo VEM no converge al máximo global para modelos complejos. Tendrás más suerte con AIC o BIC.
VitoshKa
Hola @Ben, respuesta realmente útil. Tengo una pregunta al respecto, cuando se está evaluando el modelo con 2-100 temas: 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?
Economist_Ayahuasca
Como hace unos años publiqué esa respuesta, no recuerdo exactamente. ¡Pero probablemente solo para mantener el tiempo de cálculo corto!
Ben
1
Ahora hay este paquete agradable para calcular la cantidad óptima de temas: cran.r-project.org/web/packages/ldatuning
Ben