Подтвердить что ты не робот

Python Gensim: как вычислить сходство документов с использованием модели LDA?

У меня есть подготовленная модель LDA, и я хочу рассчитать оценку подобия между двумя документами из корпуса, на котором я обучил свою модель. Изучив все обучающие программы и функции Gensim, я все еще не могу обойти его. Может ли кто-нибудь дать мне подсказку? Спасибо!

4b9b3361

Ответ 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())