【问题标题】:how to calculate document similarity using more than one query?如何使用多个查询计算文档相似度?
【发布时间】:2017-10-24 19:49:33
【问题描述】:

我已经使用 LDA 模型(使用 Gensim)实现了基于特定文档的查找相似文档。接下来我想做的是,如果我有多个文档,那么如何根据作为输入提供的多个文档获取相似的文档。

我使用这个link实现了LDA

单个查询的示例代码 -

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

现在,如果我有另一个文档,那么如何实现它。

【问题讨论】:

    标签: python gensim lda


    【解决方案1】:

    您可以使用lda.update(corpus_new) 使用附加文档更新现有的 LDA 模型。

    更多详情 - https://radimrehurek.com/gensim/models/ldamodel.html

    【讨论】:

    • 我要求评估多个文档。不是更新。
    • @abhishek 您能否详细说明您的疑问,如果您有多个文档并且想一次提供它们作为输入,那么您可以使用生成器流式传输输入。当您必须在训练模型后添加文档时使用更新。请参阅我在上面的答案中提供的链接。希望对你有帮助
    【解决方案2】:

    我认为您正在寻找的是这段代码。

    newData= [dictionary.doc2bow(text) for text in texts] #Where text is new data
    newCorpus= lsa[vec_bow_jobs] #this is new corpus
    
    sims=[]
    for similarities in index[newCorpus]:
        sims.append(similarities)
    
    #to get similarity with each document in the original corpus
    sims=pd.DataFrame(np.array(sims)).transpose() 
    

    但是,余弦相似度并不是使用 LDA 模型衡量相似度的最佳方法。寻找 Jensen Shanon 距离的实现。我为此找到了此代码,但在我的情况下并没有使它起作用。 Lda similarity with Jensen Shanon Distance

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 2019-10-23
      • 2017-04-07
      • 2019-09-04
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多