J'ai un modèle LDA formé et je veux calculer le score de similitude entre deux documents du corpus sur lequel j'ai formé mon modèle. Après avoir étudié tous les didacticiels et fonctions de Gensim, je n'arrive toujours pas à comprendre. Quelqu'un peut-il me donner un indice? Merci!
Je ne sais pas si cela va aider, mais j'ai réussi à obtenir des résultats positifs sur la correspondance des documents et les similitudes lors de l'utilisation du document réel comme 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 requête sera le deuxième index de chaque carte SIM pour les cartes SIM.
Dépend de la métrique de similitude que vous souhaitez utiliser.
similitude cosinus 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é (telles 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())