3 votos

Entender la inferencia LDA

Se dice que el problema inferencial clave que hay que resolver para utilizar LDA (asignación latente de Dirichlet) es el de calcular la distribución posterior $p(\theta,z | w, \alpha ,\beta)$ . Sé que la inferencia de LDA se presentó por primera vez utilizando la inferencia variacional sobre una simplificación del modelo gráfico de LDA, pero otros métodos como el muestreo de Gibbs permiten estimar $p(\theta,z | w, \alpha ,\beta)$ .

Después de calcular $p(\theta,z | w, \alpha ,\beta)$ ¿Cómo se utiliza después? ¿Cómo podemos hacer la clasificación de documentos con $p(\theta,z | w, \alpha ,\beta)$ ?

(Notación: la misma en el documento original de LDA y en Wikipedia .)

4voto

Steve Puntos 477

Cómo clasificar los documentos

Es importante destacar que la asignación de Dirichlet latente es un método no supervisado: Por sí solo, no tiene en cuenta la clase o categoría de un documento. Pero, como se explica en la sección 7.2 del papel que lo introdujo Puede utilizarse para desarrollar características para la clasificación:

Un aspecto difícil del problema de la clasificación de documentos es la elección de las características. Tratar las palabras individuales como características da lugar a un conjunto de características rico pero muy grande (Joachims, 1999). Una forma de reducir este conjunto de características es utilizar un modelo LDA para reducir la dimensionalidad. En concreto, LDA reduce cualquier documento a un conjunto fijo de características de valor real -los parámetros posteriores de Dirichlet $\gamma\ast(\textbf{w})$ asociado al documento.

Así que como respuesta general y práctica a su segunda pregunta: Los parámetros de la distribución temática de un documento pueden utilizarse como características en un clasificador de su elección. Eso es exactamente lo que hicieron los autores de LDA en sus experimentos:

En estos experimentos, estimamos los parámetros de un modelo LDA en todos los documentos, sin referencia a su verdadera etiqueta de clase. A continuación, entrenamos una máquina de vectores de soporte (SVM) en las representaciones de baja dimensión proporcionadas por LDA y comparamos esta SVM con una SVM entrenada en todas las características de las palabras.

Aquí hay un ejemplo de cómo podría ser esto en python. Transforma el conjunto de datos de dígitos de sklearn a un espacio de 16 temas, y luego predice el dígito utilizando la regresión logística. (Dieciséis elegidos de forma bastante arbitraria tras una exploración en mi respuesta aquí .)

# -*- coding: utf-8 -*-
"""
Created on Fri May 27 15:24:16 2016

@author: SeanEaster
"""

from sklearn.decomposition import LatentDirichletAllocation as LDA
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split
from sklearn.metrics import confusion_matrix

import numpy as np

digits = load_digits()

images = digits['images']
images = [image.reshape((1,-1)) for image in images]
images = np.concatenate(tuple(images), axis = 0)

lda = LDA(n_topics = 16) 

X = lda.fit_transform(images)
Y = digits['target']

xTrain, xTest, yTrain, yTest = train_test_split(X,Y,test_size =.2, random_state=9)

classifier = LogisticRegression(C = 1e5) # Choice of C here is arbitrary; in practice, cross validate
classifier.fit(X,Y)
print confusion_matrix(yTest, classifier.predict(xTest))

Lo que da resultados razonables: aquí está la matriz de confusión que imprime:

[[33  0  0  0  0  0  0  0  0  0]
 [ 0 36  1  0  0  0  0  0  2  1]
 [ 0  1 40  2  0  0  0  0  2  0]
 [ 0  0  0 32  0  0  0  0  0  2]
 [ 0  0  0  0 36  0  0  4  0  1]
 [ 0  0  0  1  0 34  0  0  0  4]
 [ 0  0  0  0  0  0 29  0  0  0]
 [ 0  0  0  0  0  0  0 27  1  0]
 [ 0  6  1  0  1  1  0  1 25  1]
 [ 0  0  0  1  1  1  0  0  3 29]]

Para una aplicación de texto, vea esto ejemplo de clasificación de la sklearn docs.

Usos de las distribuciones posteriores

En cuanto a tu primera pregunta, los temas de LDA siguen teniendo utilidad fuera de la clasificación, ya que los temas extraídos pueden ofrecer un resumen descriptivo de un corpus. Otro sklearn ejemplo hace esto en el conjunto de datos de 20 grupos de noticias, e imprime las palabras más importantes de los temas. Esta es la salida:

Topics in LDA model:
Topic #0:
government people mr law gun state president states public use right rights national new control american security encryption health united
Topic #1:
drive card disk bit scsi use mac memory thanks pc does video hard speed apple problem used data monitor software
Topic #2:
said people armenian armenians turkish did saw went came women killed children turkey told dead didn left started greek war
Topic #3:
year good just time game car team years like think don got new play games ago did season better ll
Topic #4:
10 00 15 25 12 11 20 14 17 16 db 13 18 24 30 19 27 50 21 40
Topic #5:
windows window program version file dos use files available display server using application set edu motif package code ms software
Topic #6:
edu file space com information mail data send available program ftp email entry info list output nasa address anonymous internet
Topic #7:
ax max b8f g9v a86 pl 145 1d9 0t 34u 1t 3t giz bhj wm 2di 75u 2tm bxn 7ey
Topic #8:
god people jesus believe does say think israel christian true life jews did bible don just know world way church
Topic #9:
don know like just think ve want does use good people key time way make problem really work say need

Ya se puede ver un solapamiento intuitivo con los nombres de los grupos de noticias, descritos aquí Por ejemplo talk.politics.guns , talk.religion.misc . Puede llevar este análisis descriptivo más allá, pero el modo exacto depende mucho de su interés.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X