转自--http://hi.baidu.com/flyer_hit/blog/item/2ec12d251dd9dd6835a80f55.html
感谢这位仁兄,先把这篇文章理解了。再来看LDA.
LDA是比PLSA更“高级”的一种topic model。“高级”在哪里呢?--它是一个Bayes Hierarchy Model。
所谓Bayes Hierarchy Model说白了就是把模型的参数看作随机变量,这样可以引入控制参数的参数。说起来,比价绕。
Topic model的一个通式为
P(w|d) = sigma{ p(w|z)*p(z|d) }
其中云里雾里的topic,说白了就是一个一元语言模型,没有任何特殊的地方。对应上面的公式,就是 p(w|z)。
而topic model,一般指的是两种分布:第一种就是topic~word的分布,就是p(w|z)。
第二种是p(z|d),这个是doc~topic分布。
有了这两种分布后,这个文档集合就有了一种立体化的感觉,闭上眼睛,仔细地想:
doc
|
----------------------------------------
| | ... |
topic_1 topic_2 topic_m
而
topic_i
|
----------------------------------------
| | ... |
word_1 word_2 word_n
一个三层的文档表示空间跃然纸上。
而最上层,就是人们常说的“降维”,其实是把文档投影到了“topic”空间。
doc~topic~word
这个Bayes Chain,就可以涵盖LDA的一个最基本的思想。
而PLSA其实也是这个链,那它和LDA有什么区别呢?
最大的区别就在于,doc~topic这一级,PLSA把这一级的所有变量都看作模型的参数,即有多少文档那么就有多少模型的参数;而LDA引入了一个超 参数,对doc~topic这一个层级进行model。这样无论文档有多少,那么最外层模型显露出来的[对于doc~topic]就只有一个超参数。
那么加什么先验呢?
最基本的PLSA和LDA在刻画doc~topic和topic~word都利用了一个模型,就是multinomial model。为了计算的方便及先验的有意义,共轭先验是首选。multinomial distribution的共轭分布是Dirichlet distribution,很nice的一个分布。这也是Latent Dirichlet Allocation中Dirichlet的由来。
需要向别人请教:
Dirichlet prior是一个巨牛的先验:
Bayes prior smoothing的先验也是Dirichlet,因为在一元语言模型中,也采用了multinomial来刻画。
而且在PLSA中引入的先验也是Dirichlet。那么它到底有什么好处呢?让大家这么对它着迷。计算简单性是大家都知道的,现在说一点它的奇妙的implict idea:
拿Bayes prior smoothing说:
P(w|d) = {c(w,d)+mu*p(w|c)} / {|d| + mu}
而最大似然的估计是
P_ml(w|d) = c(w,d) / |d|
平滑后的分母为c(w,d)+mu*p(w|c){原来为c(w,d)}
平滑后的分子为|d| + mu {原来为|d|}
所以奇妙的地方就在不同的地方:
好像文档多了mu个词,在这个mu新词中,有mu*p(w|c)这么多的w
这就是pseudo count的思想。理解了这个以后,PLSA加先验的推导,就不用再手推了。只要把这些多出来的先验词加上。一切就OK了。
所以大家请记住吧,这对巨牛的共轭先验multinomial & Dirichlet
那么如何推导LDA的那些参数呢?
大体有两种方法:一种是作者的varitional inference;另外一种是Gibbs Sampling。
我比较熟悉的是Gibbs Sampling。大家可以上网去搜GibbsLDA的源代码。
只要学会了Gibbs Sampling,那么这个代码很简单。
Gibbs Sampling的一个最大的优点就是很好理解。具体理解部分略去。
回到上面的话题:
在这个层级结构中:doc~topic~word,刚才说到LDA是对(doc~topic)加了一个先验。然后他是如何利用这个先验的呢?利用了exchangabiltity。所谓可交换性,就是conditional independent and identically distributed;注意与i.i.d的区别,“conditional”
对应到LDA中,是那个超参数给定后,才能得出i.i.d。。。需要自己看paper理解。
在我给定了doc~topic的先验后,对于一个文档,我取不同的topic的过程完全是独立的。
这也是层级模型的一个很优美的地方。
Worker
/ / ... /
product_1 product_2 product_m
举个直白的例子,一旦当一个工人生产能力确定后,那么那么下面它所生产出来个各种产品都是conditional independent and identically distributed
可交换性其实是当我们信息不充足的时候的一个比较优美的假设,既然我们什么都不知道。那么我们就认为给定它的上级后,下面的东西都conditional independent and identically distributed
再举一个形象的例子,大家如果是懒人的话就会把袜子攒到一块洗,那么晾袜子就麻烦了,这么多袜子怎么办呢?于是商家很机警,他们发明了那种,头上一个钩,下面是一个大转盘的晾袜子的东西,这样袜子可以晾一圈。。。所以exchangabiltity指的是,如果袜子一样,那么一旦上面的钩子固定了,那么下面的袜子怎么转我们认为都没有关系的。
而条件独立则是一个更强的假设,整个转盘没有头上的钩子,但是确可以悬浮在概率空间中的任何一点,而认为整体形态没有改变。
好了,关于袜子话题告一段落。
还有一点需要注意的是,为了防止test阶段很多新词的出现,才引入了
topic~word的一个先验。大家可能想到了,也是Dirichlet分布。
学习LDA比较关键的是,必须学会看图,有了图才能让思维飘逸起来,无所不能。
PS: 在很多的文献中,他们都是这么写到“LDA is the simplest topic model”。。。
而我们其实还很难学会关于它的一切,说明,恩,我们太弱了。。。需要加把劲。。。