簡體   English   中英

gensim LDA主題建模中的固定大小主題向量,用於查找相似文本

[英]fixed-size topics vector in gensim LDA topic modelling for finding similar texts

我使用gensim LDA主題建模來查找每個文檔的主題,並通過比較接收到的主題向量來檢查文檔之間的相似性。 每個文檔都有不同數量的匹配主題,因此矢量的比較(通過余弦相似性)是不正確的,因為需要長度相同的矢量。

這是相關代碼:

lda_model_bow = models.LdaModel(corpus=bow_corpus, id2word=dictionary, num_topics=3, passes=1, random_state=47)

#---------------Calculating and Viewing the topics----------------------------
vec_bows = [dictionary.doc2bow(filtered_text.split()) for filtered_text in filtered_texts]

vec_lda_topics=[lda_model_bow[vec_bow] for vec_bow in vec_bows]

for id,vec_lda_topic in enumerate(vec_lda_topics):
    print ('document ' ,id, 'topics: ', vec_lda_topic)

輸出向量為:

document  0 topics:  [(1, 0.25697246), (2, 0.08026043), (3, 0.65391296)]
document  1 topics:  [(2, 0.93666667)]
document  2 topics:  [(2, 0.07910537), (3, 0.20132676)]
.....

如您所見,每個向量都有不同的長度,因此不可能在它們之間執行余弦相似度。

我希望輸出為:

document  0 topics:  [(1, 0.25697246), (2, 0.08026043), (3, 0.65391296)]
document  1 topics:  [(1, 0.0), (2, 0.93666667), (3, 0.0)]
document  2 topics:  [(1, 0.0), (2, 0.07910537), (3, 0.20132676)]
.....

有什么想法怎么做? n

我以前曾使用gensim進行主題建模,但我沒有遇到過這個問題。 理想情況下,如果您傳遞num_topics=3則它會為每個文檔返回概率最高的前3個主題。 然后,您應該可以通過執行以下操作來生成余弦相似度矩陣:

lda_model_bow = models.LdaModel(corpus=bow_corpus, id2word=dictionary, num_topics=3, passes=1, random_state=47)
vec_lda_topics = lda_model_bow[bow_corpus]
sim_matrix = similarities.MatrixSimilarity(vec_lda_topics)

但是由於某種原因,如果主題數量不相等,則可以為其余主題假定零概率值,並在計算相似度時將它們包括在向量中。

附:如果您可以提供輸入文檔的樣本,則更容易重現輸出並對其進行調查。

因此,正如panktijk在評論以及本主題中所說的那樣,解決方案是將minimum_probability從默認值0.01更改為0.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM