如何确定LDA的topic个数

以前一直是按经验设置topic个数,数据量小就少点,数据量大就多点,大概50-500吧。最近有同学跟我讨论,才想起来该找找相关文献,学习一下如何科学的确定topic个数。

1.用perplexity-topic number曲线

LDA有一个自己的评价标准叫Perplexity(困惑度),可以理解为,对于一篇文档d,我们的模型对文档d属于哪个topic有多不确定,这个不确定程度就是Perplexity。其他条件固定的情况下,topic越多,则Perplexity越小,但是容易过拟合。

这里也提一下如何计算Perplexity

测试文本集中有M篇文本,对词袋模型里的任意一个单词w,P(w)=∑z p(z|d)*p(w|z),即该词在所有主题分布值和该词所在文本的主题分布乘积。

模型的perplexity就是exp^{ - (∑log(p(w))) / (N) },∑log(p(w))是对所有单词取log(直接相乘一般都转化成指数和对数的计算形式),N的测试集的单词数量(不排重)

回到正题,知道了topic个数和perplexity的关系之后,我们可以画出如下图的曲线(摘自《Latent Dirichlet Allocation》Figure 9):

  

有了这张图,显而易见,我们就可以得出topic又少,Perplexity也少小的topic数量,图中即为50。


2.用topic_number-logP(w|T)曲线

来自论文《Finding scientific topics》,如下图所示:

画出topic_number-logP(w|T)曲线,然后找到曲线中的纵轴最高点便是topic数量的最佳值。


3.计算topic之间的相似度

来自论文《一种基于密度的自适应最优LDA模型选择方法》,其中第三节提出一个定理:当主题结构的平均相似度最小时,对应的模型最优。


4. 利用HDP(层次狄利克雷过程)

在《机器学习系统设计》的第4章主题模型的4.3节:选择主题个数 中,提到:

“有一个能够自动确定主题个数的方法叫做层次狄利克雷过程(HDP)”

“在该方法中,主题本身是由数据生成的,而不是预先将主体固定,然后通过对数据的反向工程把它们恢复出来。

论文《Hierarchical Dirichlet Process》第6章中,如下图所示,HDP模型和LDA模型的Perplexity-topic number曲线:

通过分析该HDP中混合成分抽样直方图发现,最佳的混合成分数正好与LDA的最优主题数一致,从而解决LDA中最优topic个数的选择问题。



参考文献:

1. 知乎上”怎么确定LDA的topic个数“的回答  

2. 《Latent Dirichlet Allocation》

3. 《一种基于密度的自适应最优LDA模型选择方法》       

4.  LDA主题模型评估方法--Perplexity           

5. 《Hierarchical Dirichlet Process

6. 《Finding scientific topics》


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页