tutorial topic latent espaƱol python topic-modeling gensim dirichlet

latent - topic modeling python



Entendiendo la implementaciĆ³n de LDA usando gensim (4)

Estoy tratando de entender cómo el paquete gensim en Python implementa la Asignación de Dirichlet Latente. Estoy haciendo lo siguiente:

Definir el conjunto de datos

documents = ["Apple is releasing a new product", "Amazon sells many things", "Microsoft announces Nokia acquisition"]

Después de eliminar las palabras clave, creo el diccionario y el corpus:

texts = [[word for word in document.lower().split() if word not in stoplist] for document in documents] dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts]

Luego defino el modelo LDA.

lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=5, update_every=1, chunksize=10000, passes=1)

Luego imprimo los temas:

>>> lda.print_topics(5) [''0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product'', ''0.077*nokia + 0.077*announces + 0.077*acquisition + 0.077*apple + 0.077*many + 0.077*amazon + 0.077*sells + 0.077*microsoft + 0.077*things + 0.077*new'', ''0.181*microsoft + 0.181*announces + 0.181*acquisition + 0.181*nokia + 0.031*many + 0.031*sells + 0.031*amazon + 0.031*apple + 0.031*new + 0.031*is'', ''0.077*acquisition + 0.077*announces + 0.077*sells + 0.077*amazon + 0.077*many + 0.077*nokia + 0.077*microsoft + 0.077*releasing + 0.077*apple + 0.077*new'', ''0.158*releasing + 0.158*is + 0.158*product + 0.158*new + 0.157*apple + 0.027*sells + 0.027*nokia + 0.027*announces + 0.027*acquisition + 0.027*microsoft''] 2013-12-03 13:26:21,878 : INFO : topic #0: 0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product 2013-12-03 13:26:21,880 : INFO : topic #1: 0.077*nokia + 0.077*announces + 0.077*acquisition + 0.077*apple + 0.077*many + 0.077*amazon + 0.077*sells + 0.077*microsoft + 0.077*things + 0.077*new 2013-12-03 13:26:21,880 : INFO : topic #2: 0.181*microsoft + 0.181*announces + 0.181*acquisition + 0.181*nokia + 0.031*many + 0.031*sells + 0.031*amazon + 0.031*apple + 0.031*new + 0.031*is 2013-12-03 13:26:21,881 : INFO : topic #3: 0.077*acquisition + 0.077*announces + 0.077*sells + 0.077*amazon + 0.077*many + 0.077*nokia + 0.077*microsoft + 0.077*releasing + 0.077*apple + 0.077*new 2013-12-03 13:26:21,881 : INFO : topic #4: 0.158*releasing + 0.158*is + 0.158*product + 0.158*new + 0.157*apple + 0.027*sells + 0.027*nokia + 0.027*announces + 0.027*acquisition + 0.027*microsoft >>>

No puedo entender mucho de este resultado. ¿Está proporcionando una probabilidad de la aparición de cada palabra? Además, ¿cuál es el significado del tema # 1, tema # 2, etc.? Esperaba algo más o menos como las palabras clave más importantes.

Ya revisé el tutorial de Gensim, pero no me ayudó mucho.

Gracias.


Creo que este tutorial te ayudará a entender todo muy claramente: https://www.youtube.com/watch?v=DDq3OVp9dNA

Yo también enfrenté muchos problemas al entenderlo al principio. Intentaré resumir algunos puntos en pocas palabras.

En Asignación de Dirichlet Latente,

  • El orden de las palabras no es importante en un documento: modelo de Bolsa de palabras.
  • Un documento es una distribución sobre temas.
  • Cada tema , a su vez, es una distribución de las palabras que pertenecen al vocabulario.
  • LDA es un modelo generativo probabilístico . Se utiliza para inferir variables ocultas mediante una distribución posterior.

Imagina el proceso de crear un documento para ser algo así:

  1. Elija una distribución sobre temas
  2. Dibuje un tema y elija una palabra del tema. Repite esto para cada uno de los temas.

LDA es una especie de retroceso a lo largo de esta línea: dado que tienes una bolsa de palabras que representan un documento, ¿cuáles podrían ser los temas que representa?

Así, en tu caso, el primer tema (0).

INFO : topic #0: 0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product

es más acerca de las things , amazon y many ya que tienen una mayor proporción y no tanto sobre microsoft o apple que tienen un valor significativamente menor.

Sugeriría leer este blog para una mejor comprensión (¡Edwin Chen es un genio!) - http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/


Desde que se publicaron las respuestas anteriores, ahora hay algunas herramientas de visualización muy buenas para obtener una intuición de LDA utilizando gensim .

Echa un vistazo al paquete pyLDAvis. Aquí está una gran descripción del cuaderno . Y aquí hay una descripción de video muy útil dirigida al usuario final (tutorial de 9 minutos).

¡Espero que esto ayude!


La respuesta que estás buscando está en el tutorial de gensim . lda.printTopics(k) imprime las palabras que más contribuyen para k temas seleccionados al azar. Se puede asumir que esta es (parcialmente) la distribución de palabras sobre cada uno de los temas dados, es decir, la probabilidad de que esas palabras aparezcan en el tema de la izquierda.

Por lo general, uno ejecutaría LDA en un gran corpus. Ejecutar LDA en una muestra ridículamente pequeña no dará los mejores resultados.


Para comprender el uso de la implementación de Gensim LDA, recientemente escribí publicaciones de blog que implementan el modelado de temas desde cero en 70,000 artículos descargados de wiki simple en Python.

Aquí, hay una explicación detallada de cómo se puede usar la LDA de gensim para el modelado de temas. Uno puede encontrar el uso de

ElementTree library for extraction of article text from XML dumped file. Regex filters to clean the articles. NLTK stop words removal & Lemmatization LDA from gensim library

Espero que ayude a entender la implementación de LDA del paquete gensim.

Parte 1

Modelado de temas (Parte 1): Creación de un cuerpo de artículo a partir de un volcado de Wikipedia simple

Parte 2

Modelado de temas (Parte 2): Descubrir temas de artículos con asignación de Dirichlet latente

Nube de palabras (10 palabras) de algunos temas que obtuve como resultado.