Comprendre la mise en œuvre de la LDA à l'aide de gensim
j'essaie de comprendre comment le paquet gensim en Python implémente L'Allocation de Dirichlet latente. Je suis en train de faire le suivant:
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-clés, 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]
puis 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)
Puis-je imprimer les rubriques:
>>> 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 suis pas capable de comprendre grand chose de ce résultat. Est-il fournit avec une probabilité de l' l'apparition de chaque mot? De plus, Quelle est la signification du sujet no 1, du sujet no 2, etc.? Je m'attendais à quelque chose qui ressemble plus ou moins aux mots clés les plus importants.
j'ai déjà vérifié l' tutorial gensim mais ça n'a pas vraiment aidé.
Merci.
4 réponses
La réponse que vous cherchez est dans le tutorial gensim. lda.printTopics(k)
imprime les mots qui contribuent le plus à k
sujets choisis au hasard. On peut supposer qu'il s'agit (en partie) de la distribution des mots sur chacun des sujets donnés, ce qui signifie la probabilité de ces mots apparaissant dans le sujet à gauche.
habituellement, on exécute LDA sur un grand corpus. Exécuter LDA sur un échantillon ridiculement petit ne donnera pas les meilleurs résultats.
je pense que ce tutoriel va vous aider à tout comprendre très clairement - https://www.youtube.com/watch?v=DDq3OVp9dNA
j'ai aussi connu beaucoup de problèmes à comprendre au début. Je vais essayer d'esquisser quelques points en un mot.
Latent Dirichlet Allocation,
- l'ordre des mots n'est pas important dans un modèle document - Sac de mots.
- document est une distribution sur sujets
- rubrique, à son tour, est une distribution sur mots appartenant au vocabulaire
- LDA est un probabiliste du modèle génératif. Il est utilisé pour inférer des variables cachées en utilisant une distribution postérieure.
imaginez le processus de création d'un document pour être quelque chose comme ça -
- Choisir une distribution sur les rubriques
- dessiner un sujet - et choisir un mot à partir de la rubrique. Répétez cette opération pour chacun des thèmes
LDA est une sorte de retour en arrière le long de 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 thème (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
comme ils ont une proportion plus élevée et pas tellement sur microsoft
ou apple
qui ont une valeur significativement plus faible valeur.
je suggérerais de lire ce blog pour une meilleure compréhension ( Edwin Chen est un génie! ) - http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/
depuis que les réponses ci-dessus ont été postées, il y a maintenant quelques très beaux outils de visualisation pour gagner une intuition de LDA en utilisant gensim
.
jetez un coup d'oeil au paquet pyLDAvis. Voici un grand carnet vue d'ensemble. Et voici un très utile