У меня есть подготовленная модель LDA, и я хочу рассчитать оценку подобия между двумя документами из корпуса, на котором я обучил свою модель. Изучив все обучающие программы и функции Gensim, я все еще не могу обойти его. Может ли кто-нибудь дать мне подсказку? Спасибо!
Python Gensim: как вычислить сходство документов с использованием модели LDA?
Ответ 1
Не знаю, поможет ли это, но мне удалось добиться успешных результатов по согласованию документов и сходствам при использовании фактического документа в качестве запроса.
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
Ваша оценка сходства между всеми документами, находящимися в корпусе, и документом, который использовался в качестве запроса, будет вторым индексом для каждого сима для симов.
Ответ 2
Зависит от того, какую метрику сходства вы хотите использовать.
Косинус-сходство универсально полезно и встроенный
sim = gensim.matutils.cossim(vec_lda1, vec_lda2)
Расстояние Hellinger полезно для сходства между распределениями вероятностей (например, темы 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())