使用潜在Dirichlet分配的输入参数


17

使用主题建模(潜在Dirichlet分配)时,主题数是用户需要指定的输入参数。

在我看来,我们还应该提供Dirichlet流程必须作为样本的候选主题集的集合吗?我的理解正确吗?在实践中,如何设置这种候选主题集?

Answers:


21

据我所知,您只需要提供一些主题和语料库即可。尽管可以使用一个候选主题集,但无需指定候选主题集,正如您在Grun and Hornik(2011)第15页底部的示例中所看到的那样。

更新时间:2014年1月28日,我的处理方式与以下方法有所不同。请参阅此处了解我目前的方法:https : //stackoverflow.com/a/21394092/1036500

在没有训练数据的情况下找到最佳主题数的相对简单的方法是,在给定数据的情况下,通过遍历具有不同主题数的模型来查找具有最大对数可能性的主题数。考虑这个例子R

# download and install one of the two R packages for LDA, see a discussion
# of them here: http://stats.stackexchange.com/questions/24441
#
install.packages("topicmodels")
library(topicmodels)
#
# get some of the example data that's bundled with the package
#
data("AssociatedPress", package = "topicmodels")

在继续生成主题模型并分析输出之前,我们需要确定模型应使用的主题数。这是一个功能,用于遍历不同的主题编号,获取每个主题编号的模型的对数似然并将其绘制出来,以便我们选择最佳主题编号。主题数最好的是将对数似然值最高的主题,以将示例数据内置到包中。在这里,我选择评估从2个主题开始到100个主题的每个模型(这将需要一些时间!)。

best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})

现在,我们可以提取所生成的每个模型的对数似然值,并准备对其进行绘制:

best.model.logLik <- as.data.frame(as.matrix(lapply(best.model, logLik)))

best.model.logLik.df <- data.frame(topics=c(2:100), LL=as.numeric(as.matrix(best.model.logLik)))

现在绘制图表以查看出现几率最高的对数可能性:

library(ggplot2)
ggplot(best.model.logLik.df, aes(x=topics, y=LL)) + 
  xlab("Number of topics") + ylab("Log likelihood of the model") + 
  geom_line() + 
  theme_bw()  + 
  opts(axis.title.x = theme_text(vjust = -0.25, size = 14)) + 
  opts(axis.title.y = theme_text(size = 14, angle=90))

在此处输入图片说明

看起来它介于10到20个主题之间。我们可以检查数据,以找到具有最高对数似然性的主题的确切数量,如下所示:

best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
       topics        LL
12     13           -8525.234

因此,结果是13个主题最适合这些数据。现在,我们可以继续创建包含13个主题的LDA模型并研究该模型:

lda_AP <- LDA(AssociatedPress[21:30,], 13)   # generate the model with 13 topics 
get_terms(lda_AP, 5)                         # gets 5 keywords for each topic, just for a quick look
get_topics(lda_AP, 5)                        # gets 5 topic numbers per document

以此类推,确定模型的属性。

该方法基于:

Griffiths,TL和M. Steyvers,2004年。寻找科学课题。美国国家科学院院刊 101(Suppl 1):5228 –5235。


我为此更新了代码并保存为要点。具有默认打印的绘图方法。 devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1个不错的答案。
泰勒·林克

通过增加LDA中的k,可以扩展参数空间,而具有较小k的模型实质上嵌套在具有较高k的模型内。因此,LL应该随着k的增加而增加。您在k = 13左右发生小的颠簸可能是由于VEM算法未收敛到复杂模型的全局最大值。您将在AIC或BIC上有更多的运气。
VitoshKa '16

您好@Ben,非常有用的答案。当您使用2-100个主题评估模型时,我有一个问题best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})。为什么只选择原始数据21:30?
Economist_Ayahuasca

由于是几年前我发布了该答案,所以我不记得了。但是可能只是为了缩短计算时间!
2016年

1
现在有这个漂亮的PKG计算主题的最佳数量:cran.r-project.org/web/packages/ldatuning
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.