Estabilidad del tema en modelos temáticos


23

Estoy trabajando en un proyecto donde quiero extraer información sobre el contenido de una serie de ensayos abiertos. En este proyecto en particular, 148 personas escribieron ensayos sobre una organización estudiantil hipotética como parte de un experimento más amplio. Aunque en mi campo (psicología social), la forma típica de analizar estos datos sería codificar los ensayos a mano, me gustaría hacerlo cuantitativamente, ya que la codificación manual requiere mucho trabajo y es demasiado subjetiva para mi gusto.

Durante mis investigaciones sobre formas de analizar cuantitativamente los datos de respuesta libre, me topé con un enfoque llamado modelado de temas (o Asignación de Dirichlet Latente, o LDA). El modelado de temas toma una representación de bolsa de palabras de sus datos (una matriz de documentos de términos) y utiliza información sobre las coincidencias de palabras para extraer los temas latentes de los datos. Este enfoque parece perfecto para mi aplicación.

Desafortunadamente, cuando apliqué el modelado de temas a mis datos, descubrí dos problemas:

  1. Los temas descubiertos por el modelado de temas a veces son difíciles de interpretar
  2. Cuando vuelvo a ejecutar mis modelos de tema con una semilla aleatoria diferente, los temas parecen cambiar dramáticamente

El tema 2 en particular me preocupa. Por lo tanto, tengo dos preguntas relacionadas:

  1. ¿Hay algo que pueda hacer en el procedimiento de LDA para optimizar el procedimiento de ajuste de mi modelo para la interpretación y la estabilidad? Personalmente, no me importa tanto encontrar el modelo con la perplejidad más baja y / o el mejor ajuste del modelo; principalmente quiero usar este procedimiento para ayudarme a comprender y caracterizar lo que escribieron los participantes en este estudio en sus ensayos. Sin embargo, ¡ciertamente no quiero que mis resultados sean un artefacto de la semilla aleatoria!
  2. En relación con la pregunta anterior, ¿hay algún estándar para la cantidad de datos que necesita para hacer una LDA? La mayoría de los documentos que he visto que han utilizado este método analizan grandes corpus (p. Ej., Un archivo de todos los artículos de Science de los últimos 20 años), pero, dado que estoy usando datos experimentales, mi corpus de documentos es mucho más pequeño.

He publicado los datos del ensayo aquí para cualquier persona que quiera ensuciarse las manos, y he pegado el código R que estoy usando a continuación.

require(tm)
require(topicmodels)

# Create a corpus from the essay 
c <- Corpus(DataframeSource(essays))
inspect(c)

# Remove punctuation and put the words in lower case
c <- tm_map(c, removePunctuation)
c <- tm_map(c, tolower)

# Create a DocumentTermMatrix.  The stopwords are the LIWC function word categories
# I have a copy of the LIWC dictionary, but if you want to do a similar analysis,
# use the default stop words in tm
dtm <- DocumentTermMatrix(c, control = list(stopwords = 
  c(dict$funct, dict$pronoun, dict$ppron, dict$i, dict$we, dict$you, dict$shehe, 
    dict$they, dict$inpers, dict$article, dict$aux)))

# Term frequency inverse-document frequency to select the desired words
term_tfidf <- tapply(dtm$v/rowSums(as.matrix(dtm))[dtm$i], dtm$j, mean) * log2(nDocs(dtm)/colSums(as.matrix(dtm)))
summary(term_tfidf)

dtm <- dtm[, term_tfidf >= 0.04]

lda <- LDA(dtm, k = 5, seed = 532)
perplexity(lda)
(terms <- terms(lda, 10))
(topics <- topics(lda))

Editar:

Intenté modificar nstartsegún lo sugerido por Flounderer en los comentarios. Desafortunadamente, como se muestra a continuación, incluso establecer nstart1000 resultados en temas que varían dramáticamente de semilla aleatoria a semilla aleatoria. Solo para enfatizar nuevamente, lo único que estoy cambiando en la estimación de los dos modelos a continuación es la semilla aleatoria utilizada para comenzar la estimación del modelo, y sin embargo, los temas no parecen ser consistentes en estas dos ejecuciones.

lda <- LDA(dtm, k = 5, seed = 535, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1         Topic 2      Topic 3      Topic 4       Topic 5      
 [1,] "international" "ethnicity"  "free"       "credit"      "kind"       
 [2,] "communicate"   "true"       "team"       "mandatory"   "bridge"     
 [3,] "gain"          "asians"     "cooperate"  "music"       "close"      
 [4,] "use"           "hand"       "order"      "seen"        "deal"       
 [5,] "big"           "hold"       "play"       "barrier"     "designed"   
 [6,] "communication" "effective"  "big"        "stereotypes" "effort"     
 [7,] "america"       "emphasis"   "beginning"  "asians"      "implemented"
 [8,] "chinese"       "halls"      "china"      "fantastic"   "websites"   
 [9,] "ethnicity"     "minorities" "difference" "focusing"    "planned"    
[10,] "networks"      "population" "easier"     "force"       "body"

lda <- LDA(dtm, k = 5, seed = 536, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1       Topic 2         Topic 3        Topic 4       Topic 5    
 [1,] "kind"        "international" "issue"        "willing"     "play"     
 [2,] "easier"      "ethnicity"     "close"        "use"         "trying"   
 [3,] "gain"        "communication" "currently"    "hand"        "unity"    
 [4,] "websites"    "communicate"   "implemented"  "networks"    "decision" 
 [5,] "credit"      "bridge"        "particularly" "stereotypes" "gap"      
 [6,] "effort"      "america"       "credit"       "communicate" "normally" 
 [7,] "barriers"    "connection"    "fulfill"      "came"        "asians"   
 [8,] "effects"     "kind"          "grew"         "asians"      "created"  
 [9,] "established" "order"         "perspectives" "big"         "effective"
[10,] "strangers"   "skills"        "big"          "budget"      "prejudice"

2
¡Gracias por compartir tus datos! Fue muy interesante mirarlo. No tengo una buena respuesta a sus preguntas, pero quiero sugerir algunas cosas. Para la pregunta 1, puede intentar ajustar los parámetros de control en la LDAfunción del topicmodelspaquete. En particular, podrías intentar hacer nstartmás grande. Esto garantiza que sus resultados sean más estables, porque la función LDA simplemente se ejecutará una y otra vez con diferentes semillas aleatorias y luego devolverá el mejor resultado. Desafortunadamente, aumentar nstarta, digamos, 1000 hará que el algoritmo trabaje 1000 veces más (continuación)
Flounderer

1
entonces será mucho más lento. Y no hay garantía de que sea lo suficientemente estable . Re: ambas preguntas, me parece que LDA está realmente diseñado para clasificar documentos invisibles cuando hay demasiados datos para que un humano los procese. Para esto, está bien si el algoritmo VEM solo da una respuesta "suficientemente buena" que puede variar de una ejecución a otra. Pero para usted, esto no es deseable, por lo que LDA podría no ser la mejor opción. Hay algunas alternativas excelentes en las primeras conferencias del curso de Shalizi aquí: stat.cmu.edu/~cshalizi/350 , por ejemplo, puedes convertir cada una (continuación)
Flounderer

2
ensaye un vector de bolsa de palabras y luego haga un PCA sobre los resultados, luego busque grupos. En cuanto a si su corpus es lo suficientemente grande, para ser honesto, no me sorprendería si es demasiado grande para que VEM dé resultados confiables. Tal vez estoy un poco amargado, pero pasé una gran cantidad de tiempo tratando de hacer que este método funcione para otro modelo de autores similares, y fue completamente inconsistente de una ejecución a otra, incluso cuando usé pequeños ejemplos. Hasta donde yo sé, no hay muchos documentos que discutan la elección de puntos de partida para algoritmos como este.
Flounderer

Flounderer, ¡muchas gracias por tu aporte! Es un poco decepcionante para mí escuchar que no hay más pautas sobre LDA específicamente, pero supongo que eso viene con el territorio de un método sin supervisión. Intentaré ajustar nstarty mirar el sitio web del curso para ver si alguno de ellos produce algo útil. (Por cierto, si inserta sus comentarios en una respuesta, lo votaré. Me gustaría ver si alguien más me aconseja antes de aceptar algo, pero creo que sus comentarios son más que suficientes para contar como respuesta).
Patrick S. Forscher

Siento tu dolor de las ciencias sociales, Patrick, pero para empezar creo que tu enfoque es incorrecto. Si desea utilizar pruebas estadísticas, necesitará que los humanos codifiquen una parte de ellas para obtener tasas de error de clasificación, ¿lo ha hecho (personalmente)? Si es así, sabrá qué características son más destacadas y podrá diseñar / elegir un algoritmo mejor.
Interior

Respuestas:


6

Para mi propia curiosidad, apliqué un algoritmo de agrupación en el que he estado trabajando en este conjunto de datos.

He puesto temporalmente los resultados aquí (elija el conjunto de datos de ensayos).

Parece que el problema no son los puntos de partida o el algoritmo, sino los datos. Puede 'razonablemente' (subjetivamente, en mi experiencia limitada) obtener buenos clústeres incluso con 147 instancias siempre que haya algunos temas / conceptos / temas / clústeres ocultos (como quiera llamar).

Si los datos no tienen temas bien separados, no importa el algoritmo que utilice, es posible que no obtenga buenas respuestas.


@ Siddharth.Gopal Muchas gracias por la respuesta! Es cierto que esperaría cierta superposición en los grupos dado que todos los participantes están describiendo una organización hipotética de estudiantes (que llamamos "BadgerConnect"). Entonces, en contraste con, por ejemplo, una aplicación de modelado de temas a artículos de Science, donde algunos de los temas son muy diferentes de un papel a otro, los temas son un poco similares. Sin embargo, es cierto que algunos de los ensayos están a favor de BadgerConnect y algunos están escritos en contra de BadgerConnect.
Patrick S. Forscher

También es cierto que los ensayos varían ampliamente en el tipo de argumentos que presentan y cómo se presentan. Me gustaría capturar algo de esa variabilidad, si es posible. ¿Tiene alguna idea de si es posible atrapar algunas de estas distinciones (como mínimo, la diferencia entre ensayos a favor y ensayos en contra de este hipotético programa estudiantil)? Además, ¿fueron estables sus resultados de agrupación cuando usó diferentes semillas aleatorias?
Patrick S. Forscher

1
1. Si solo le preocupa la estabilidad del algoritmo, intente ejecutar el algoritmo muchas veces y elija el modelo con la mayor probabilidad.
Siddharth Gopal

1
(aunque la estabilidad parece ser un problema secundario aquí). 2. Dada su descripción de lo que espera en términos de argumentos y opiniones, representar los ensayos como una bolsa de palabras no es una buena idea en este contexto. De hecho, el modelo de tema podría no ser una buena herramienta para esto. Te sugiero que elijas algunas palabras clave que te interesen (como raza, comida, dormitorio, etc.) y trates de analizar el sentimiento de la oración en la que aparece la palabra. Por ejemplo, eche un vistazo aquí para ver una demostración.
Siddharth Gopal

1
Python tiene un excelente kit de herramientas de PNL llamado nltk. Es posible que desee echar un vistazo a lo que ofrece. Con respecto a tf-idf, 'técnicamente', la entrada a LDA solo debe ser recuento de palabras, ya que la distribución multinomial no está definida para números reales arbitrarios.
Siddharth Gopal

10
  1. La noción de "temas" en los llamados "modelos de temas" es engañosa. El modelo no conoce o no está diseñado para conocer "temas" semánticamente coherentes. Los "temas" son solo distribuciones sobre tokens (palabras). En otras palabras, el modelo solo captura la concurrencia de términos de alto orden. Si estas estructuras significan algo o no, no es el propósito del modelo.

  2. El modelo "LDA" tiene dos partes (esencialmente todos los modelos gráficos): a) definición del modelo yb) una implementación de un algoritmo de inferencia para inferir / heredar los parámetros del modelo. Lo que mencionó puede o no ser el problema del modelo "LDA", pero puede ser algún error / error / configuración incorrecta de la implementación específica que utilizó (paquete R).

  3. Casi todas las implementaciones de "LDA" requieren alguna aleatorización. Y por la naturaleza de los algoritmos de inferencia (por ejemplo, MCMC o inferencia variacional), obtendrá soluciones mínimas locales o una distribución de muchas soluciones. Entonces, en resumen, lo que observaste es de alguna manera esperado.

Sugerencias prácticas

  1. Pruebe diferentes paquetes R: por ejemplo, este paquete lo realiza el antiguo estudiante de posgrado de David Blei. O incluso pruebe con otro entorno, como este . Si obtiene resultados similares de todos estos paquetes estables, al menos, reducirá un poco el problema.

  2. Intenta jugar un poco sin eliminar las palabras vacías. La razón es que estas palabras clave juegan un papel importante en la conexión de significados semánticos en un corpus tan pequeño (por ejemplo, más o menos 100 artículos). Además, trate de no filtrar cosas.

  3. Intenta jugar un poco con hiperparámetros, como diferentes números de temas.

Artículos sobre coherencias temáticas:

  1. http://www.aclweb.org/anthology-new/D/D12/D12-1087.pdf

  2. http://people.cs.umass.edu/~wallach/publications/mimno11optimizing.pdf


Gracias por su respuesta. Responderé a tus comentarios uno a la vez. (1) Entiendo que el modelo no sabe nada sobre temas, pero su afirmación de que las estructuras descubiertas por los modelos temáticos (y que si estas estructuras significan algo no es el propósito de estos modelos) es directamente contradictorio con este artículo de revisión de David Blei, El creador de los modelos temáticos. Me parece que el propósito de los modelos de temas es exactamente ayudar a explorar / caracterizar los datos textuales, que es exactamente lo que quiero hacer en este proyecto.
Patrick S. Forscher el

(2) Aunque es posible que mis resultados se deban a un error, creo que es más probable que se deba a algún tipo de error de mi parte (y si este parece ser el caso, ¡dígamelo!). Estoy usando el topicmodelspaquete en R, que es esencialmente una interfaz R para el algoritmo original implementado por Blei y sus colegas.
Patrick S. Forscher el

(3) Sé que LDA requiere una asignación al azar, por lo que no estoy pidiendo resultados exactos de una ejecución a otra, pero creo que es razonable esperar temas similares utilizando diferentes semillas aleatorias (de hecho, creo que esta es una expectativa estándar cuando las personas usan algoritmos basados ​​en aleatorización). Lo que quiero saber es cómo lograr dicha estabilidad en los resultados.
Patrick S. Forscher el

@ PatrickS.Forscher Para su primer comentario: No. es contradictorio. El nombre de "temas" es lo que nosotros, como seres humanos, ponemos etiquetas en esas distribuciones de palabras. Esta estructura de agrupamiento puede o no estar relacionada con temas legibles por humanos en el mundo real. Hay varios documentos para introducir coherencia en los modelos de temas para mitigar el problema exacto.
Liangjie Hong

@ PatrickS.Forscher Para su segundo comentario: Pruebe una implementación diferente para ver si obtiene resultados similares (resultados irrazonables) o no. Por ejemplo, UMASS Mallet.
Liangjie Hong
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.