Python Gensim: comment calculer la similarité des documents à l'aide du modèle LDA?

j'ai un modèle Lda formé et je veux calculer le score de similarité entre deux documents du corpus sur lequel j'ai formé mon modèle. Après avoir étudié tous les tutoriels et fonctions de Gensim, Je n'arrive toujours pas à y voir clair. Quelqu'un peut-il me donner un indice? Merci!

22
demandé sur still_st 2014-03-16 10:51:25

2 réponses

Je ne sais pas si cela va aider, mais, j'ai réussi à atteindre des résultats réussis sur la correspondance de document et des similitudes en utilisant le document réel comme une requête.

dictionary = corpora.Dictionary.load('dictionary.dict')
corpus = corpora.MmCorpus("corpus.mm")
lda = models.LdaModel.load("model.lda") #result from running online lda (training)

index = similarities.MatrixSimilarity(lda[corpus])
index.save("simIndex.index")

docname = "docs/the_doc.txt"
doc = open(docname, 'r').read()
vec_bow = dictionary.doc2bow(doc.lower().split())
vec_lda = lda[vec_bow]

sims = index[vec_lda]
sims = sorted(enumerate(sims), key=lambda item: -item[1])
print sims

votre score de similitude entre tous les documents résidant dans le corpus et le document qui a été utilisé comme une requête sera le deuxième index de chaque sim pour sims.

21
répondu Palisand 2014-03-21 14:39:26

Cela dépend de la métrique de similarité que vous voulez utiliser.

cosinus similar est universellement utile & intégré:

sim = gensim.matutils.cossim(vec_lda1, vec_lda2)

distance Hellinger est utile pour la similitude entre les distributions de probabilité (tels que les sujets LDA):

import numpy as np
dense1 = gensim.matutils.sparse2full(lda_vec1, lda.num_topics)
dense2 = gensim.matutils.sparse2full(lda_vec2, lda.num_topics)
sim = np.sqrt(0.5 * ((np.sqrt(dense1) - np.sqrt(dense2))**2).sum())
27
répondu Radim 2014-03-31 08:16:41