LDA-隐狄利克雷分布-主题模型

注:本文中所有公式和思路来自于邹博先生的机器学习升级版,我只是为了加深记忆和理解写的本文。


犹豫了好久终于要开始介绍LDA了,因为其中的概念和分布关系乍一看乱糟糟的,不太容易说明白,也不知道以什么样的形式能更好的说清楚这个小东西,今天斗胆拿出自己学习的心得同大家分享,不太敢确保让读者能明白,请海涵。


矫情够了,该说说正事了!!!!


LDA模型算是pLSA模型的一个升级版吧,全程是Latent Dirichlet Allocation,从字面上可以看得出,这是一个隐藏的Dirichlet分布模型,那什么是Dirichlet分布呢?


Γ函数


既然要说Dirichlet函数,那么就不得不介绍一下Γ函数,Γ函数式欧拉发现的,举例来说Γ(4)=3!=3*2*1,其实就是一个阶乘函数,Γ函数正统的写法是这样的:


那么这个Γ函数和LDA有什么关系呢?别着急,咱们接着谈。


Beat分布


beat分布的概率密度可以如下表示:


其中系数可以这样计算或表示:


接下来我们不妨对beta的概率分布做个积分求期望:

LDA-隐狄利克雷分布-主题模型_第1张图片

我们可以得到这个结论,还是很漂亮的,计算过程非常简单,只有一些简单地变换而已,只是看起来有点复杂。后边就要用到这个结论。这其中就有两个参数α和β,后边也会介绍这两个参数到底是个什么鬼。


共轭分布


既然要谈LDA,还有个不得不谈共轭分布,很简单的小概念,下边的式子是贝叶斯公式:


其中P(θ|x)是后验概率,P(x|θ)是先验概率,在贝叶斯的理论体系中,如果先验概率分布和后验概率分布满足同样的分布律的话,我们就说先验分布和后验分布是共轭分布,同时,先验分布又叫做似然函数的共轭先验分布。大白话来说就是:如果一个概率分布Z乘以一个分布Y之后的分布仍然是Z,那么就是共轭分布,仅此而已。


举一个小例子来说吧:

我们都知道抛硬币实验,只有反正两种结果,我们可以认为是两点分布,做k次试验,变成二项分布,概率密度函数(似然函数)我们可以这样表示:


那么先验概率可以如下表示:


如此一来,我们就可以计算后验概率(省区了分母,如果不出输出具体概率值可以省略掉):

LDA-隐狄利克雷分布-主题模型_第2张图片

从结果可以看出,先验分布和后验分布是形式是一样的,后验概率分布满足(x+α,1-x+β)的Beta分布,即伯努利分布的共轭先验分布式Beat分布。注意,千万别把共轭先验分布和共轭分布搞混淆,共轭先验分布式对于一个似然函数来说的,共轭分布是说该似然函数的先验概率和后验概率的关系是共轭。


那么这个α、β到底是什么呢?

其实是个伪计数,何为伪计数呢?

α、β是决定参数θ的超参数,这么解释吧,投硬币试验中θ是正反面的概率,那么后验概率可以如下表示:


可以很明显的看出,α、β是参数θ的指数,那么实践意义其实就是:α、β在没有任何假设的前提下,硬币朝上的概率分配,因此称之为伪计数。


如果将二项分布推广到多项呢?


共轭分布的直接推广


二项分布的共轭先验分布是Beta分布,多项分布的共轭先验分布是Dirichlet分布(终于扣题了)。

Beta分布:

其中:


Dirichlet分布:

LDA-隐狄利克雷分布-主题模型_第3张图片

其中:

LDA-隐狄利克雷分布-主题模型_第4张图片

就是从2到k的一个推广,其中α是一个参数向量,共有K个,那么其中α对Dirichlet分布有何影响呢?

LDA-隐狄利克雷分布-主题模型_第5张图片

从上图可以看出:

当α=1时,退化为均匀分布

当α>1时,p1=p2=p3=...=pk的概率增大

当α<1时,pi=1的概率增大,p非i的概率增大


LDA的解释:


首先给大家看一张关于LDA过程的“从所周知”的图:

LDA-隐狄利克雷分布-主题模型_第6张图片

解释:

共有m篇文档,k个主题,每篇文档(长度为Nm)都有各自的主题分布比方说40%的武侠、30%爱情、20%科幻、其余的加起来为10%。这个分布式一个多项分布,该多项分布的参数服从Dirichlet分布,该Dirichlet的参数为α。

每个主题又有各自的词分布,词分布同样是多项分布,参数服从Dirichlet分布,参数为β。

对于每篇分档,中的第n个词的处理,首先从文档中的主题分布采样一个主题,然后在这主题的词分布中采样一个词,不断重复上述过程,知道m篇文档都完成。


那么主题和词是怎么采的呢?


这里先简单介绍一下Gibbs Sampling的过程,后边的采样文章会深入的介绍采样。


Gibbs采样


Gibbs Sampling算法的运行方式是每次概率向量的一个维度,给定其他维度的变量值采样当前维度的值,不断迭代知道收敛输出待估计的参数。


Gibbs在LDA中,初始时随机给文本中的每个词分配主题z0,然后统计每个主题出现的词t的数量以及每个文档m下出现的主题z的数量,每一轮计算,即排除当前词的主题分布,根据其他所有词的主题分布估计当前词分配各个主题的概率。

当得到当前词属于所有主题z的概率分布后,根据这个概率分布为该次采样一个新的主题。

用同样方法更新下一个词的主题,知道发现每个文档的主题分布和每个主题的词分布收敛,算法终止,输出待估计的参数θ和φ,同时每个单词的主题Zmn也可以得到。


实际中应用会设置最大迭代次数,每一次计算的公式称为Gibbs updating rule。


那么具体是怎么更新的呢?耐住性子,接着往下看。


我们知道,给定α和β,可以控制主题分布和词分布:


那么我们可以将后边的这两个因子分开来计算:

LDA-隐狄利克雷分布-主题模型_第7张图片


LDA-隐狄利克雷分布-主题模型_第8张图片


Gibbs updating rule:

LDA-隐狄利克雷分布-主题模型_第9张图片

那么最后的结果可以得出结论:

LDA-隐狄利克雷分布-主题模型_第10张图片

LDA-隐狄利克雷分布-主题模型_第11张图片

这个也就是我们最终写代码的式子。

我个人觉得这块其实不难,只是我们先搞清楚LDA的过程,再搞明白Gibbs的过程,那么套用思路就可以了,只不过是符号显得很复杂而已,耐心花点时间看一看,其实也就那么回事。


注意


LDA对于短的文章来说效果不是很好,因为还没等收敛就已经结束了,我们可以通过短文拼接来改善。



终于介绍完了,细心地你一定看到我提到过“采样”,没错,采样时贝叶斯学派的做法,后续文章我将会介绍采样相关的文章。



你可能感兴趣的:(机器学习)