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!
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.
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())