【发布时间】:2017-09-12 15:45:51
【问题描述】:
出于测试目的,我在一个包含 2 个文档(句子)的小型语料库上运行 LDA。以下代码返回给定输入文档根本不合理的主题词和文档主题分布。在 Python 中运行完全相同的结果是合理的。 谁知道这里出了什么问题?
library(topicmodels)
library(tm)
d1 <- "bank bank bank"
d2 <- "stock stock stock"
corpus <- Corpus(VectorSource(c(d1,d2)))
##fit lda to data
dtm <- DocumentTermMatrix(corpus)
ldafit <- LDA(dtm, k=2, method="Gibbs")
##get posteriors
topicTerm <- t(posterior(ldafit)$terms)
docTopic <- posterior(ldafit)$topics
topicTerm
docTopic
> topicTerm
1 2
bank 0.3114525 0.6885475
stock 0.6885475 0.3114525
> docTopic
1 2
1 0.4963245 0.5036755
2 0.5036755 0.4963245
Python的结果如下:
>>> docTopic
array([[ 0.87100799, 0.12899201],
[ 0.12916713, 0.87083287]])
>>> fit.print_topic(1)
u'0.821*"bank" + 0.179*"stock"'
>>> fit.print_topic(0)
u'0.824*"stock" + 0.176*"bank"'
【问题讨论】:
-
有趣的问题。我在真实环境中使用过这个包,效果很好。我很确定这些臭名昭著的结果与您使用的小型语料库有关。您能否发布 Python 的结果以进行比较?
-
好的,请看更新后的帖子。
-
gensim和topicmodels使用不同的方法。gensim使用变分推理,而topicmodels在这里使用折叠吉布斯采样。topicmodels也有一个变分推理选项,但它给出了同样糟糕的结果。我也处于死胡同,抱歉 -
但是当使用 'VEM' 作为估计方法时,在 R 中使用 topicmodels 的结果几乎没有变化......
标签: r lda topicmodels