繁体   English   中英

Gensim-LDA创建文档主题矩阵

[英]Gensim - LDA create a document- topic matrix

我正在一个项目中,需要将主题建模应用于一组文档,并且需要创建一个矩阵:

DT,一个D×T矩阵,其中D是文档数,T是主题数。 DT(ij)包含将文档Di中的单词分配给主题Tj的次数。

到目前为止,我已经遵循了这个教程: https : //rstudio-pubs-static.s3.amazonaws.com/79360_850b2a69980c4488b1db95987a24867a.html

我是gensim的新手,到目前为止,我已经1.创建了一个文档列表2.对该文档进行了预处理和标记化。 3.使用corpora.Dictionary()创建id->术语词典(id2word)4.将标记化的文档转换为文档术语矩阵

生成了LDA模型。 现在我得到了主题。

现在如何获得我之前提到的矩阵。 我将使用此矩阵来计算关于主题t的2个文档之间的相似度:

sim(a,b)= 1- | DT(a,t)-DT(b,t)|

显示您的代码会有所帮助,但是如果我们不使用链接的教程中的示例,则可以通过以下方式识别模型:

ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics=2, id2word = dictionary, passes=20)

您可以在脚本中输入以下内容:

model_name = "name_of_my_model"
ldamodel.save(model_name)

然后,当您运行它时,这将在运行脚本的目录中创建一个模型。

然后,您可以使用以下信息获得主题概率分布:

print(ldamodel[doc_bow])

如果要与此模型建立相似度,则还需要为查询文档创建一个模型,然后在两者之间获得余弦相似度:

dictionary = corpora.Dictionary.load('dictionary.dict')
corpus = corpora.MmCorpus("corpus.mm")
lda = models.LdaModel.load("name_of_my_model.lda")

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

pyLDAvis源代码中有一个实现,该实现返回的列表可能有助于构建您感兴趣的矩阵。

_extract_data方法的gensim.py

def _extract_data(topic_model, corpus, dictionary, doc_topic_dists=None):
    ...
    ...
    ...    
    return {'topic_term_dists': topic_term_dists, 'doc_topic_dists': doc_topic_dists,
        'doc_lengths': doc_lengths, 'vocab': vocab, 'term_frequency': term_freqs}

模型的主题数将是静态的。 也许您对查找T矩阵的文档主题分布感兴趣。 在这种情况下,DxT矩阵将为doc_lengths x doc_topic_dists。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM