LDA和PLSA的区别

http://hi.baidu.com/flyer_hit/blog/item/2ec12d251dd9dd6835a80f55.html
http://blog.csdn.net/feixiangcq/archive/2010/06/06/5650672.aspx
http://fan.cos.name/cn/2010/10/fan16/
http://hi.baidu.com/flyer_hit/blog/item/84d29a733c7751148701b089.html
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是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。 
文档到主题服从Dirichlet分布,主题到词服从多项式分布。
LDA对主题的混合权重θ(注意是主题维数)进了Dirichlet先验,用一个超参数α来产生参数θ,即参数的参数。
LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。由于Dirichlet分布随机向量各分量间的弱相关性(之所以还有点“相关”,是因为各分量之和必须为1),使得我们假想的潜在主题之间也几乎是不相关的,这与很多实际问题并不相符,从而造成了LDA的又一个遗留问题。
对于语料库中的每篇文档,LDA定义了如下生成过程(generative process):
1. 对每一篇文档,从主题分布中抽取一个主题; 
2. 从上述被抽到的主题所对应的单词分布中抽取一个单词; 
3. 重复上述过程直至遍历文档中的每一个单词。 
更形式化一点说,语料库中的每一篇文档与 (通过反复试验等方法事先给定)个主题的一个多项分布(multinomial distribution)相对应,将该多项分布记为 。每个主题又与词汇表(vocabulary)中的 个单词的一个多项分布相对应,将这个多项分布记为 。上述词汇表是由语料库中所有文档中的所有互异单词组成,但实际建模的时候要剔除一些停用词(stopword),还要进行一些词干化(stemming)处理等。 和 分别有一个带有超参数(hyperparameter) 和 的Dirichlet先验分布。对于一篇文档 中的每一个单词,我们从该文档所对应的多项分布 中抽取一个主题 ,然后我们再从主题 所对应的多项分布 中抽取一个单词 。将这个过程重复 次,就产生了文档 ,这里的 是文档 的单词总数。这个生成过程可以用如下的图模型表示:



这个图模型表示法也称作“盘子表示法”(plate notation)。图中的阴影圆圈表示可观测变量(observed variable),非阴影圆圈表示潜在变量(latent variable),箭头表示两变量间的条件依赖性(conditional dependency),方框表示重复抽样,重复次数在方框的右下角。
该模型有两个参数需要推断(infer),一个”文档-主题“分布 ,另外是 个”主题-单词“分布 。通过学习(learn)这两个参数,我们可以知道文档作者感兴趣的主题,以及每篇文档所涵盖的主题比例。推断方法主要有LDA模型作者提出的变分-EM算法,还有现在常用的Gibbs抽样法。
LDA模型现在已经成为了主题建模(topic modeling)中的一个标准。LDA模型自从诞生之后有了许多扩展,特别是在社会网络和社会媒体研究领域最为常见。

预备知识 
     如果牢固掌握这些预备知识,理解原文会更容易些。

     - p(X|Y)的记法。注意|右边的Y既可以表示随机变量(已经取定了某具体值),也可以表示普通的非随机变量。这样我们可以在最大似然估计和 Bayes方法间方便的“切换”,而不会让符号记法影响我们的表述。例如,考虑具有确定但未知参数μ,Σ的高斯分布p(x),可以记为p(x|μ,Σ); 若按照Bayes学派观点,可以将μ和Σ也看作随机变量,x的分布就能记为随机变量μ,Σ取定某值后的条件分布p(x|μ,Σ)——统一的记法。

     - k取1分布/多项式分布(Multinomial)。考虑取3个离散值的随机变量x ~ p(x)。这个看似很平庸的分布...就是所谓的k 取1分布或称多项式分布。一般我们习惯的把它记为p(x_i) = u_i, i = 1,2,3,且u_1 + u_2 + u_3 = 1. 但在有 些数学推导中,将它记为指数形式会更方便些.将x看作3维的随机向量,各分量是“互斥”的,即它只能取(1,0,0),(0,1,0),(0,0,1)三 组值。于是可将分布重新记为 p(x) = (u_1^x_1)*(u_2^x_2)*(u_3^x_3).注意论文原文中Multinomial就是这 儿说的k取1分布,与一些概率教科书中的定义不同。一般的k维情况依次类推。具体参[Bishop]的2.2节.

     - 共轭先验分布(Conjugate Prior)。考虑某概率密度函数,要估计其中的参数t。按照Bayes学派的观点,参数 t ~ p(t).我们有p(t|X) ∝ p(X|t)p(t),这个式子说:在没有做任何观测时,我们对t的知识用先验分布p(t)表示。当观察到X 后,就通过该式将先验概率p(t)更新(计算)为后验概率p(t|X),使我们对t的知识增加。仔细观察,若p(t)与p(X|t)有相同的函数形式,那 么后验概率p(t|X)就与先验概率p(t)有相同的函数形式——这使得t的后验概率与先验概率具有相同的表达式,只是参数被更新了! 更妙的是,本次后 验概率可以作为下次观测时的先验概率,于是当继续进行观测X_2,X_3...时,只是不断的在更新先验概率p(t)的参数,p(t)的函数形式不变。具 体参见[Bishop]的2.2节。 
     这也是Bayes学派饱受批评的地方:先验概率的选取有时只是方便数学推导,而非准确的反映我们的先验知识。

     - Dirichlet分布。现在我们可以说,Dirichlet分布就是k取1分布的Conjugate Prior。若k维随机向量 θ ~ Drichlet分布,则θ的k个分量θ_1,θ_2,...,θ_k都取连续的非负值,且 θ_1 + θ_2 + ... + θ_k = 1。Dirichlet分布的具体表达式参见[Bishop]的2.2节。

     - Simplex。考虑2维的例子:以(0,1)与(1,0)为端点的线段就是simplex。考虑3维的例子,以(0,0,1), (0,1,0),(0,0,1)为端点的三角形内部就是simplex。更高维的情况可依次类推。考虑θ ~ Drichlet分布。注意到θ的k个分量 θ_1,θ_2,...,θ_k都取连续的非负值,且θ_1 + θ_2 + ... + θ_k = 1,可知Dirichlet分布的定义域是一个 simplex.这也就是原文中Figure 2那个三角形的含义(k = 3的示意图,让这个simplex三角形平躺在水平面上)。参见 [Bishop]的2.2节

     - Graphical Models. 就是用图来表示随机变量中的依赖关系。这个tutorial一google一大把。建议参考 [Bishop]的8.1节,了解几个符号(空心圆圈——隐藏(latent)变量,实心圆圈——观察(observed)变量,方框——重复次数)就足 够看懂原文中的Figure 1和Figure 3了。最多再看看[Bishop]的8.2节

     - EM.关于这个的tutorial很多,但我觉得[Bishop]的9.2节是数学处理最为简洁,最容易看懂的(有个tutorial在关键 的几步中用了大量∑和∏,让人抓狂) 。另外[Bishop]的9.4节也值得看,为理解其它内容如variational inference有好处。

    - Variational Inference. 就是计算后验概率的近似方法。考虑随机变量{X,Z},其中X是观察变 量,Z = {Z_1,Z_2}是隐藏变量。用EM法或做Bayes推理的关键一步,就是要求后验概率p(Z|X).不巧的是,在一些复杂问题中 p(Z|X)没有解析表达式,需要近似求解.相关的方法很多,一种经常使用的是基于可分解(factorization)假设的方 法:p(Z|X) ≈ p(Z_1|X)p(Z_2|X)——就是说强行假设Z_1和Z_2条件独立——然后进行后续推导。 
     这一假设当然会产生误差,考虑二维高斯分布p(Z|X) = p(Z_1,Z_2|X),Z_1与Z_2不独立,所以p(Z_1,Z_2|X)的 等高图是同心椭圆,椭圆可任意倾斜(例如,若Z_1与Z_2的线性相关系数是1,则椭圆倾斜45°)。现简记 p(Z_1|X) = q_1(Z_1), p(Z_2|X) = q_2(Z_2),我们想改变q_1与q_2,用q_1*q_2去拟合 p(Z_1,Z_2|X).但无论如何改变q_1与q_2的形式,q_1*q_2的椭圆等高线都是长轴、短轴分别与Z_1轴、Z_2轴平行!不过,合适的 q_1与q_2保证q_1*q_2与p(Z|X)的峰值点重合,一般这就足以解决实际问题了。详细讲解可以参见[Bishop]的第10章。也可参考 [Winn]的1.8节。

posted @ 2013-02-28 11:14  ilxx1988  阅读(7142)  评论(1编辑  收藏  举报