Regroupement de documents à l'aide des rubriques dérivées de l'allocation Dirichlet latente


9

Je veux utiliser l'allocation Dirichlet latente pour un projet et j'utilise Python avec la bibliothèque gensim. Après avoir trouvé les sujets, j'aimerais regrouper les documents en utilisant un algorithme tel que k-means (Idéalement, j'aimerais en utiliser un bon pour les clusters qui se chevauchent, donc toute recommandation est la bienvenue). J'ai réussi à obtenir les sujets mais ils se présentent sous la forme de:

0,041 * Ministre + 0,041 * Clé + 0,041 * moments + 0,041 * controversé + 0,041 * Premier

Afin d'appliquer un algorithme de clustering et de me corriger si je me trompe, je pense que je devrais trouver un moyen de représenter chaque mot comme un nombre en utilisant soit tfidf soit word2vec.

Avez-vous des idées sur la façon dont je pourrais "retirer" les informations textuelles d'une liste, par exemple, afin de le faire, puis les replacer afin de faire la multiplication appropriée?

Par exemple, la façon dont je le vois si le mot ministre a un poids tfidf de 0,042 et ainsi de suite pour tout autre mot dans le même sujet, je devrais calculer quelque chose comme:

0,041 * 0,42 + ... + 0,041 * tfidf (Prime) et obtenez un résultat qui sera utilisé plus tard afin de regrouper les résultats.

Merci pour votre temps.


1
Comme expliqué dans le didacticiel , vous pouvez exprimer des documents sous forme de vecteurs. Regroupez ces vecteurs.
Emre

Je connais mate mais je dois les regrouper en fonction des sujets créés après avoir appliqué LDA sur ma collection. Chaque sujet doit être représenté comme un vecteur afin de comparer chaque document avec chaque sujet et de trouver le ou les sujets correspondants pour chaque document.
Swan87

Vous n'avez pas à représenter chaque mot comme un vecteur. Vous obtenez la nouvelle représentation pour l'ensemble du document en appliquant la transformation LDA que vous avez apprise au corpus . Pour un exemple avec LSI, voir ce lien: radimrehurek.com/gensim/tut2.html La partie clé est où ils appliquent la transformation LSI apprise à l'ensemble du corpus avec lsi [doc_bow]
Will Stanton

Réponses:


4

En supposant que LDA a produit une liste de sujets et attribue un score à chaque sujet pour chaque document, vous pouvez représenter le document et ses scores en tant que vecteur:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

Pour obtenir les scores de chaque document, vous pouvez exécuter le document. comme un sac de mots, à travers un modèle LDA formé. De la documentation gensim:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

Ensuite, vous pouvez exécuter les k-means sur cette matrice et regrouper les documents similaires. Par défaut, K-means est un algorithme de clustering dur impliquant qu'il classe chaque document en un cluster. Vous pouvez utiliser des mécanismes de clustering doux qui vous donneront un score de probabilité qu'un document s'intègre dans un cluster - c'est ce que l'on appelle des k-means flous . https://gist.github.com/mblondel/1451300 est un résumé de Python montrant comment vous pouvez le faire avec scikit learn.

ps: je ne peux pas poster plus de 2 liens


J'ai essayé de le faire pour "n" aucun document ne dit où sont les sujets. Cependant, pour disons x non des documents, tous les sujets t prob ne s'affichent pas seulement certains (t-non) sujets prob apparaissent, où 1 <= non <t. Cela ne se produit pas lorsque j'exécute l'expérience sur un petit document. Est-ce parce qu'il ne s'imprime pas du tout si le prob est 0?
Manish Ranjan

0

En complément de la réponse précédente, il vaut mieux non seulement exécuter kmeans directement sur les données de composition dérivées de la distribution lda topic-doc, mais utiliser une transformation de données de composition pour les projeter dans l'espace euclidien comme ilr ou clr.

( Exemple )

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.