我在R,包" topicmodels"中工作。我试图找出并更好地理解代码/包。在大多数教程中,我阅读的文档我看到人们通过5或10个最可能的术语来定义主题。 这是一个例子:
library(topicmodels)
data("AssociatedPress", package = "topicmodels")
lda <- LDA(AssociatedPress[1:20,], k = 5)
topics(lda)
terms(lda)
terms(lda,5)
因此代码的最后部分返回了与我定义的5个主题相关的5个最可能的术语。
在lda对象中,我可以访问gamma元素,该元素包含每个文档对每个主题的可能性。因此,基于此,我可以提取概率大于我喜欢的任何阈值的主题,而不是为每个人提供相同数量的主题。
但我的第二步是知道哪些词与主题相关联最强。我可以使用术语(lda)函数将其拉出来,但这给了我很多N.
在输出中我也找到了
lda@beta
其中包含每个主题每个单词的beta,但这是一个Beta值,我很难解释。它们都是负值,虽然我看到一些值在-6左右,而其他值在-200左右,但我无法将其解释为概率或度量,以查看哪些单词以及某些单词与主题相关联的强度。有没有办法拉出/计算任何可以解释为这种措施的东西。
非常感谢 弗雷德里克答案 0 :(得分:1)
你快到了。检查从调用TopicModel
返回的虚拟类LDA()
的内容(有关详细信息,请参阅包的插图)。您将看到beta
代表 log-likelihood ,因此,自然对数(base e )代表单词概率。
要将beta
转换为概率矩阵,您只需执行以下操作:
word_probabilities <- exp(lda@beta)
我们还可以检查一个单词在所有主题上的概率总和是否为1,这是Dirichlet分布的基本特征/要求之一(请注意,由于切断,比较x == 1将失败)十进制数字):
sum(word_probabilities[1,]) #sum probabilities of the first word
#[1] 1
答案 1 :(得分:1)
我不确定上述陈述是否真的正确(由于缺乏声誉,我无法直接发表评论)。
beta矩阵为您提供了一个维度为#topics x #terms的矩阵。这些值是对数似然率,因此可以对它们进行exp。给定的概率属于以下类型 P(word | topic)和这些概率仅在您对单词而不是主题P(all word | topic)= 1而NOT P(word | alltopic)= 1求和时才加1。 您要搜索的是P(topic | word),但实际上我不知道如何在这种情况下访问或计算它。我猜您将需要P(单词)和P(主题)。 P(主题)应为: colSums(lda @ gamma)/ sum(lda @ gamma)
如果您查看伽玛矩阵(#document x #topics),就会变得更加明显。给定的概率为P(topic | document),并且可以解释为“给定文档y主题x的概率是多少”。所有主题的总和应为1,而不是所有文档的总和。