web-dev-qa-db-fra.com

Comprendre la mise en œuvre de LDA à l'aide de gensim

J'essaie de comprendre comment le package gensim dans Python implémente l'allocation Dirichlet latente. Je fais ce qui suit:

Définir l'ensemble de données

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

Après avoir supprimé les mots vides, je crée le dictionnaire et le 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]

Ensuite, je définis le modèle LDA.

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

Ensuite, j'imprime les sujets:

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

Je ne peux pas comprendre grand chose de ce résultat. Fournit-il une probabilité d'occurrence de chaque mot? Aussi, quelle est la signification du sujet # 1, du sujet # 2, etc.? Je m'attendais à quelque chose de plus ou moins comme les mots clés les plus importants.

J'ai déjà vérifié le tutoriel gensim mais cela n'a pas vraiment aidé beaucoup.

Merci.

26
visakh

La réponse que vous cherchez se trouve dans le tutoriel gensim . lda.printTopics(k) imprime les mots les plus contributifs pour k sujets sélectionnés au hasard. On peut supposer qu'il s'agit (partiellement) de la distribution des mots sur chacun des sujets donnés, ce qui signifie la probabilité que ces mots apparaissent dans le sujet à gauche.

Habituellement, on exécuterait LDA sur un grand corpus. L'exécution de LDA sur un échantillon ridiculement petit ne donnera pas les meilleurs résultats.

17
Steve P.

Je pense que ce tutoriel vous aidera à tout comprendre très clairement - https://www.youtube.com/watch?v=DDq3OVp9dNA

J'ai moi aussi été confronté à beaucoup de problèmes au début. Je vais essayer de résumer quelques points en un mot.

Dans l'allocation Dirichlet latente,

  • L'ordre des mots n'est pas important dans un document - modèle Bag of Words.
  • A document is a distribution over topics
  • Chaque sujet , à son tour, est une distribution sur mots appartenant au vocabulaire
  • LDA est un modèle génératif probabiliste . Il est utilisé pour déduire des variables cachées à l'aide d'une distribution postérieure.

Imaginez que le processus de création d'un document ressemble à ceci -

  1. Choisissez une distribution sur des sujets
  2. Dessinez un sujet - et choisissez Word dans le sujet. Répétez cette opération pour chacun des sujets

LDA revient en quelque sorte sur cette ligne - étant donné que vous avez un sac de mots représentant un document, quels pourraient être les sujets qu'il représente?

Donc, dans votre cas, le premier sujet (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

est plus sur things, Amazon et many car ils ont une proportion plus élevée et pas tellement sur Microsoft ou Apple qui ont un valeur nettement inférieure.

Je suggère de lire ce blog pour une bien meilleure compréhension (Edwin Chen est un génie!) - http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

17
Utsav T

Depuis que les réponses ci-dessus ont été publiées, il existe maintenant de très bons outils de visualisation pour acquérir une intuition de LDA en utilisant gensim.

Jetez un œil au package pyLDAvis. Voici un excellent aperçu du carnet . Et voici un très utile description de la vidéo destiné à l'utilisateur final (tutoriel de 9 min).

J'espère que cela t'aides!

9
plfrick

Pour comprendre l'utilisation de l'implémentation de gensim LDA, j'ai récemment rédigé des articles de blog mettant en œuvre la modélisation de sujet à partir de zéro sur 70 000 articles vidés sur wiki simple en Python.

Ici, il y a une explication détaillée de la façon dont le LDA de gensim peut être utilisé pour la modélisation de sujets. On peut trouver l'utilisation 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

J'espère que cela aidera à comprendre la mise en œuvre LDA du paquet gensim.

Partie 1

Modélisation de sujet (Partie 1): Création d'un corpus d'articles à partir d'un vidage Wikipedia simple

Partie 2

Modélisation de sujets (partie 2): découverte de sujets à partir d'articles avec une allocation Dirichlet latente

Nuage de mots (10 mots) de quelques sujets que j'ai eu comme résultat. enter image description here

2
Abhijeet Singh

Il renvoie le pourcentage de probabilité que ce mot soit associé à ce sujet. Par défaut, le LDA vous montre les dix premiers mots :)

0
Sara