web-dev-qa-db-fra.com

Python Gensim: comment calculer la similitude d'un document en utilisant le modèle LDA?

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!

25
still_st

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.

23
Palisand

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())
31
Radim