gensim.interfaces.TransformedCorpus - 如何使用?

9

我是一个相对新手,在潜在狄利克雷分配领域。 我能够按照维基百科教程生成LDA模型,并能够使用自己的文档生成LDA模型。 现在,我的下一步是尝试了解如何使用先前生成的模型来对未见过的文档进行分类。 我正在使用"lda_wiki_model"进行保存。

id2word =gensim.corpora.Dictionary.load_from_text('ptwiki_wordids.txt.bz2')

    mm = gensim.corpora.MmCorpus('ptwiki_tfidf.mm')

    lda = gensim.models.ldamodel.LdaModel(corpus=mm, id2word=id2word, num_topics=100, update_every=1, chunksize=10000, passes=1)
    lda.save('lda_wiki_model.lda')

我正在使用以下代码加载相同的模型:

new_lda = gensim.models.LdaModel.load(path + 'lda_wiki_model.lda') #carrega o modelo

我有一个名为"new_doc.txt"的文件,我将我的文档转换成了id<->词汇字典,并将这个分词后的文档转换成了"文档-词项矩阵"

但是当我运行new_topics = new_lda[corpus]时,我收到了一个'gensim.interfaces.TransformedCorpus object at 0x7f0ecfa69d50'的对象

我该如何从中提取主题呢?

我已经尝试过

`lsa = models.LdaModel(new_topics, id2word=dictionary, num_topics=1, passes=2)
corpus_lda = lsa[new_topics]
print(lsa.print_topics(num_topics=1, num_words=7)

and

print(corpus_lda.print_topics(num_topics=1, num_words=7)

但是它返回的主题与我的新文档无关。 我错过了什么吗?我理解错了什么吗?

**如果使用以上创建的词典和语料库运行新模型,则会收到正确的主题,我的问题是:如何重复使用我的模型?重新使用wiki_model是正确的方法吗?

谢谢。

3个回答

12

我也曾经遇到同样的问题。以下代码可以解决你的问题:

new_topics = new_lda[corpus]

for topic in new_topics:

      print(topic)
这将给您一个形如(主题编号,概率)的元组列表。

3

这段内容来自RaRe Technologies准备的'话题和转换'教程:

在调用corpus_transformed = model[corpus]时将整个语料库转换会导致结果存储在主内存中,这与gensim的内存独立目标相矛盾。

如果你要多次迭代转换后的corpus_transformed,并且转换是耗费资源的,请首先将生成的语料序列化到磁盘上,然后继续使用它。

希望能有所帮助。


2

这个问题已经有答案了,但是对于任何想要将未见过的文档分类导出到CSV文件的人,这里提供一些代码。

#Access the unseen corpus
corpus_test = [id2word.doc2bow(doc) for doc in data_test_lemmatized]

#Transform into LDA space based on old
lda_unseen = lda_model[corpus_test] 

#Print results, export to csv
for topic in lda_unseen:
      print(topic)

topic_probability = []
for t in lda_test:
      #print(t)
      topic_probability.append(t)

results_test = pd.DataFrame(topic_probability,columns=['Topic 1','Topic 2',
                                                       'Topic 3','Topic 4',
                                                       'Topic 5','Topic n'])

result_test.to_csv('test_results.csv', index=True, header=True)

这段代码灵感来自于这篇帖子


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接