相关疑难解决方法(0)

如何使用gensim LDA获取文档的完整主题分发?

当我训练我的lda模型时

dictionary = corpora.Dictionary(data)
corpus = [dictionary.doc2bow(doc) for doc in data]
num_cores = multiprocessing.cpu_count()
num_topics = 50
lda = LdaMulticore(corpus, num_topics=num_topics, id2word=dictionary, 
workers=num_cores, alpha=1e-5, eta=5e-1)
Run Code Online (Sandbox Code Playgroud)

我希望num_topics为每个文档获得所有内容的完整主题分发.也就是说,在这种特殊情况下,我希望每个文档都有50个主题有助于分发,我希望能够访问所有50个主题的贡献.如果严格遵守LDA的数学,这个输出就是LDA应该做的.然而,仅gensim输出超过一定的阈值,如图主题在这里.例如,如果我尝试

lda[corpus[89]]
>>> [(2, 0.38951721864890398), (9, 0.15438596408262636), (37, 0.45607443684895665)]
Run Code Online (Sandbox Code Playgroud)

它只显示了对文档89贡献最大的3个主题.我在上面的链接中尝试了解决方案,但这对我不起作用.我仍然得到相同的输出:

theta, _ = lda.inference(corpus)
theta /= theta.sum(axis=1)[:, None]
Run Code Online (Sandbox Code Playgroud)

产生相同的输出,即每个文档只有2,3个主题.

我的问题是如何更改此阈值,以便我可以访问每个文档的完整主题分布?无论主题对文档的贡献多么微不足道,我如何访问完整的主题分发?我想要完整分发的原因是我可以在文档的分发之间执行KL相似性搜索.

提前致谢

python lda gensim

9
推荐指数
2
解决办法
3904
查看次数

gensim TransformedCorpus数据到数组的高效转换

是否有比下面的逐行方法更直接或更有效的方法来将主题概率数据从 gensim.interfaces.TransformedCorpus 对象获取到 numpy 数组(或熊猫数据帧)?

from gensim import models
import numpy as np

num_topics = 5
model = models.LdaMulticore(corpus, num_topics=num_topics, minimum_probability=0.0)

all_topics = model.get_document_topics(corpus)
num_docs = len(all_topics)

lda_scores = np.empty([num_docs, num_topics])

for i in range(0, num_docs):
    lda_scores[i] = np.array(all_topics[i]).transpose()[1]
Run Code Online (Sandbox Code Playgroud)

python numpy lda gensim

1
推荐指数
1
解决办法
1781
查看次数

标签 统计

gensim ×2

lda ×2

python ×2

numpy ×1