简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)相关的知识,希望对你有一定的参考价值。

引言

LDA(Latent Dirichlet Allocation)称为潜在狄利克雷分布,是文本语义分析中比较重要的一个模型,同时,LDA模型中使用到了贝叶斯思维的一些知识,这些知识是统计机器学习的基础。为了能够对LDA原理有清晰的认识,也为了能够对贝叶斯思维有全面的了解,在这里对基本知识以及LDA的相关知识进行阐述,本系列包括两个部分:

  • Latent Dirichlet Allocation——理论篇
  • Latent Dirichlet Allocation——实践篇

在理论篇中将重点阐述贝叶斯相关的知识和LDA的基本思想,基本的知识点包括Gamma函数和分布,Beta函数和分布,Dirichlet函数和分布,贝叶斯定理,Gibbs采样等等。在接下来的文章,我们通过以下几个方面具体介绍LDA的核心思想:

  • 基础知识:二项分布,多项式分布,Gamma分布,Beta分布,Dirichlet分布,贝叶斯定理,共轭分布
  • 文本建模:Unigram Model,概率主题模型,Gibbs采样以及贝叶斯推理

一、基础知识

在贝叶斯思维以及LDA中需要使用到一些概率的知识,下面我们罗列下会使用到的一些基本知识。

1、二项分布

二项分布是概率分布里面最简单也是最基本的分布,要理解二项分布,我们首先得定义n次独立重复试验的概念:n次独立重复试验是指在相同的条件下,重复做的n次试验称为n次独立重复试验。

假设对于一个事件A,在一次试验中,其发生的概率为p,那么其不发生的概率为1?p,那么在n次独立重复试验中事件A恰好发生k次的概率为:

 

Pn(k)=Cknpk(1?p)n?k

 

在这里,参数k是一个随机变量,便称这样的随机变量k服从二项分布,记为:kB(n,p)

可以验证下式成立:

 

k=0nPn(k)=k=0nCknpk(1?p)n?k=1

 

2、多项式分布

多项式分布是二项分布的一个推广形式,在二项分布中,事件A的取值可能只能是发生或者是没有发生,而在多项式分布中事件A的取值可能有k种,取每一种可能的概率为pi,其中pi满足:

 

i=1kpi=1

 

多项式分布的概率形式为:

 

P(x1,x2,?,xk;n;p1,p2,?,pk)=n!x1!x2!?xk!px11px22?pxkk

 

3、Gamma分布

Gamma函数的具体形式如下:

 

Γ(x)=0e?uux?1du

 

其中,x>0。Gamma函数的图像如下所示:

技术分享

Gamma函数Γ(x)具有如下的一些性质:

  • 性质1:

 

Γ(x+1)=xΓ(x)

 

这个性质可以通过分部积分的方法得到证明,证明如下:

 

Γ(x+1)=0e?uuxdu=0?uxde?u=?uxe?u0?0?euxux?1du=x0e?uux?1du=xΓ(x)

 

  • 性质2:

 

Γ(1)=1,Γ(12)=π√

 

  • 性质3:

 

Γ(n+1)=n!

 

4、Beta分布

Beta函数的具体形式如下:

 

Beta(a,b)=10xa?1(1?x)b?1dx

 

其中,a>0,b>0。Beta函数有如下的一个性质:

 

Beta(a,b)=Γ(a)Γ(b)Γ(a+b)

 

上述的关于Beta函数的性质将Beta函数与Gamma函数联系起来,对于该性质的证明如下所示:

 

Γ(a)Γ(b)=0e?uua?1du?0e?vvb?1dv=00e?(u+v)ua?1vb?1dudv

 

此时,令z=u+vt=uu+v,上式可转化为:

 

Γ(a)Γ(b)=010e?z(zt)a?1[z(1?t)]b?1zdzdt=0e?zza?1zdz?10ta?1(1?t)b?1dt=Γ(a+b)?10ta?1(1?t)b?1dt=Γ(a+b)?Beta(a,b)

 

由此可知:Beta(a,b)=Γ(a)Γ(b)Γ(a+b)

5、Dirichlet分布

Dirichlet函数的基本形式为:

 

D(a1,a2,?,ak)=?xa1?11?xak?1kdx1?dxk

 

其中,x1?xk?0ki=1xi=1。而Dirichlet分布的概率密度函数为:

 

p(x1,?,xk)=1D(a1,?,ak)xa11?xakk

 

其中,0?x1?xn?1,且ki=1xk=1D(a1,?,ak)的形式为:

 

D(a1,?,ak)=Γ(a1)?Γ(ak)Γ(a1+?+ak)

 

注意到Beta分布是特殊的Dirichlet分布,即k=2时的Dirichlet分布。

6、贝叶斯定理

贝叶斯定理中牵涉到概率的一些基本知识,包括:

  • 条件概率
  • 联合概率
  • 边缘概率

条件概率的表达形式为:P(AB),其表示的含义是事件A在事件B发生的条件下发生的概率。

联合概率的表达形式为:P(A,B),其表示的含义是事件A和事件B同时发生的概率。

事件A的边缘概率的表达形式为:P(A),其表示的含义是事件A发生的概率。

有了以上的定义,贝叶斯定理可以通过如下的贝叶斯公式表示:

 

P(BA)=P(AB)P(B)P(A)

 

对于上述的贝叶斯公式,P(B)称为先验概率,即在得到新的数据前某一假设的概率;P(BA)称为后验概率,即在得到了新的数据后,对原假设的修正;P(A)称为标准化常量;P(AB)称为似然度。

对于两个相互独立的事件的联合概率有如下的性质:

 

P(A,B)=P(A)P(B)

 

7、共轭分布

有了如上的贝叶斯定理,对于贝叶斯派而言,有如下的思考方式:

先验分布+样本信息?后验分布

上述的形式定义是贝叶斯派的思维方式,人们对于事物都会存在着最初的认识(先验分布),随着收集到越来越多的样本信息,新观察到的样本信息会不断修正人们对事物的最初的认识,最终得到对事物较为正确的认识(后验分布)。若这样的后验概率P(θx)和先验概率P(x)满足同样的分布,那么先验分布和后验分布被称为共轭分布,同时,先验分布叫做似然函数的共轭先验分布。

有了如上的的共轭先验分布的定义,有如下的两个性质:

1、Beta分布是二项分布的共轭先验分布,即: 

Beta(pα,β)+Count(m1,m2)=Beta(pα+m1,β+m2)

 

对于上式,对于事件A,假设其发生的概率为p,不发生的概率为1?p,发生的次数为m1,不发生的概率为m2,且有m1+m2=n。则对于参数m1,则有:

 

P(m1p)=pm1(1?p)n?m1=pm1(1?p)m2

 

而对于参数p,则是服从参数为αβ的Beta分布:

 

P(pα,β)=pa?1(1?p)b?110pa?1(1?p)b?1dp

 

已知在贝叶斯定理中有如下的公式成立:

 

P(BA)=P(AB)P(B)P(A)P(AB)P(B)

 

则对于上述的后验概率,即为:

 

P(pm1)=P(m1p)?P(p)P(m1)P(m1p)?P(p)=pm1(1?p)m2?pa?1(1?p)b?110pa?1(1?p)b?1dppm1(1?p)m2?pa?1(1?p)b?1=pa+m1?1(1?p)b+m2?1

 

由上可知,Beta分布是二项分布的共轭先验分布。

2、Dirichlet分布是多项式分布的共轭先验分布,即: 

Dir(pα)+MultCount(m)=Dir(pα+m)

 

我们对上式采用与Beta分布同样的证明方式,对于多项式分布,有下式成立:

 

P(mp)=pm11pm22?pmkk

 

然而概率p服从的参数为α的Dirichlet分布,即:

 

P(pα)=pα11pα22?pαkkD(α1,α2,?,αk)

 

由贝叶斯定理可知:

 

P(pm)=P(mp)?P(p)P(m)P(mp)?P(p)=pm11pm22?pmkk?pα11pα22?pαkkD(α1,α2,?,αk)pm11pm22?pmkk?pα11pα22?pαkk=pm1+α11pm2+α22?pmk+αkk

 

由此可知,Dirichlet分布是多项式分布的共轭先验分布。

二、文本建模

对于一篇文章,是文章中出现的次的过程,在文章中,我们已经知道每个词出现的概率,则在省城文章的过程中,我们在词库中根据概率取出每个词,形成一篇文章。

1、Unigram Model

1.1、频率派

上述的过程说明了最简单的文本是如何产生的,我们对上述的过程数学化,假设:

  • 词库中(即对所有文档中的词去停用词)共有V个词:v1,v2,?,vV
  • 词库中每一个词出现的次数记为:n1,n2,?,nV,所有词出现的总次数为N
  • 每个词对用的概率记为:p={p1,p2,?,pV}

假设有m篇文档,记为W=(w1,w2,?,wm),则整个文档的概率为:

 

P(W)=P(w1,w2,?,wm)

 

在这里,我们假设文档与文档之间是相互独立的,而且进一步词与词之间也是相互独立的——词袋模型(Bag-of-words)。词袋模型表名词的顺序是无关紧要。基于这样的假设后上述的概率可以表示为:

 

P(W)=P(w1)P(w2)?P(wm)

 

对所有的这m篇文档中,词vi出现的次数为ni,由于文档与文档之间是相互独立的,且词与词之间也是相互独立的,则对于所有的文档集W,我们将相同的词记在一起,即对于词vi,记为总共出现的次数为ni。从词库中选择每个词的过程满足多项式分布,总共需要从词库中抽取N次,则全体文档的概率为:

 

P(W)=P(w1)P(w2)?P(wm)=k=1Ni=1Vpnii

 

至此,已经计算出全部文档的联合概率,但是对于每个词被选择的概率pi是一个未知数,一个很重要的任务就是估计上式中的每个词被选择的概率,通常使用的方法是使用最大似然估计的方法:

  • 取上式的log似然函数:

 

log(P(W))=N?i=1Vni?log(pi)

 

  • 对上述似然函数取最大值,即对每个概率值pi求导数:

最终,可以求得参数pi的估计值:

 

pi=niN

 

1.2、贝叶斯派

对于贝叶斯派来说,其并不认同上述的求解参数值估计的方法,贝叶斯思维认为,一切的参数都是随机变量,因此上述的选择每个词的概率不是一个确定的值,而是一个随机变量,随机变量就应该服从一个分布。因此参数p是由分布P(p)决定的,该分布称为先验分布。则上述的过程就变成了如下的两个过程:

  • 首先由先验分布P(p)得到参数的样本p
  • 由参数p生成文档。

上述的过程,可以由下面的概率图模型表示:

技术分享

依据上述的观点,则文档的概率可以表示为:

 

P(W)=P(Wp)?P(p)dp

 

此处的P(p)称为先验分布,已知P(Wp)服从多项式分布,由上述的共轭分布的知识可知:

多项式分布的共轭分布是Dirichlet分布。

因此对于先验分布P(p)可以选择为Dirichlet分布:

 

Dir(pα)=1Δ(α)i=1Vpαi?1i

 

其中,α=(α1,α2,?,αV)Δ(α)称为归一化因子:

 

Δ(α)=i=1Vpαi?1idp

 

由共轭分布的知识可知:

先验分布为Dirichlet分布+多项分布的数据知识=后验分布为Dirichlet分布 

Dir(pα)+MultCount(n)=Dir(pα+n)

 

基于上述的共轭分布的性质,已知了参数p的先验分布为Dir(pα),对于每个词出现的次数的统计服从多项式分布,则可以通过上述的性质得到后验分布:

 

P(pW,α)=Dir(pn+a)=1Δ(n+a)i=1Vpni+αi?1i

 

为了求得后验分布中的参数p,可以使用其均值来估计每一个参数,即:

 

E(p)=(n1+α1Vi=1(ni+αi),n2+α2Vi=1(ni+αi),?,nV+αVVi=1(ni+αi))

 

即:

 

p^i=ni+αiVi=1(ni+αi)

 

对于整个文本的概率:

 

P(Wα)=P(Wp)?P(pα)dp

 

由于P(Wp)服从多项式分布,而P(pα)服从的Dirichlet分布,则上式可以表示成:

 

P(Wα)=i=1Vpnii?Dir(pα)dp=i=1Vpnii?1Δ(α)i=1Vpαi?1idp=1Δ(α)i=1Vpni+αi?1idp

 

而已知:Δ(α)=Vi=1pαi?1idp,则上式可以表示成:

 

P(Wα)=Δ(n+α)Δ(α)

 

2、概率主题模型

前面对文档的生成方式做了简单的介绍,其实在写文章的过程中,每一篇文章都会有一些主题,表示这篇文章主要讲的是关于哪方面的文章,如本篇文章主要是在介绍贝叶斯,LDA等等,而文章的基本组成单元式词,文章的主题则主要表现在词在不同组题的分布上,每一个词是在这些确定的主题上产生的,具体的如下图所示:

技术分享

文章的主题最终体现在词在每个主题的分布上。在写文章的过程中,首先我们需要做的是确定文章的主题,在确定了文章的主题的前提下,我们产生每一个词,从而构成了整篇文章。

如果要写一篇文章,我们往往是先确定其主题,比如这篇文章是写社会的,还是写的技术类的,或者游记类的,在主题确定的条件下,如要写一篇关于机器学习方面的文章,在确定了主题的条件下,会谈及到损失函数,模型,神经网络,深度学习等等,每个词在这篇文章中的比重会有所不同。这便是文章的生成过程,即:

一篇文章,通常是由多个主题构成的,而每个主题大概可以用于该主题相关的频率最高的一些词来描述。

在上面们提及到一篇文章的生成过程,即:

  • 对于文章选择主题
  • 每个主题下对词汇的选择

2.1、频率派

频率派的观点是选择每个主题的概率和根据主题选择具体词的概率都是具体的值,根据上述的概率主题模型的思想,我们假设文档集中有M篇文档,每一篇文章对应的主题的概率为:θm,m[1,M],在选定了文章的主题后,对于一篇文章,可能会有几个主题,此时,在主题确定的条件下,选择每个主题对应的词,对于第m篇文章中的第n个词,有其所属主题的编号zm,n,假设有K个主题,在每个主题下选择词的概率为:φ1,φ2,?,φK,在对应的第k个主题下依据概率φk选择词。

注意:这里的文档与文档之间是相互独立的,同一个文档中的词与词之间也是相互独立的。

因此,上述过程中很多步骤是可以合并在一起的,同样,我们有如下的假设:

  • 词库中(即对所有文档中的词去停用词)共有V个词:v1,v2,?,vV
  • 词库中每一个词出现的次数记为:n1,n2,?,nV,所有词出现的总次数为N
  • k个主题下对应的词的概率为:φk={φk,1,φk,2,?,φk,V},其中k[1,K]
  • m篇文档对应的主题的概率记为:θm={θm,1,θm,2,?,θm,K},其中m[1,M]
  • 对于每一篇文章中对应的词所属主题的编号为:zm,n

则对于第m篇文档dm中的每一个词的生成概率为:

 

P(wdm)=z=1KP(wz)P(zdm)

 

其中P(zdm)表示的是在每一篇文章对应的主题的编号,可以由θm,z表示;P(wz)表示的是在主题编号确定的条件下选择词的概率,可以由φz,w,因此上式可以表示成:

 

P(wdm)=z=1Kφz,w?θm,z

 

由于在文档中词与词之间是相互独立的,因此对于一篇文档,其生成概率为:

 

P(wdm)=i=1Nmz=1KP(wiz)P(zdm)=i=1Nmz=1Kφz,wi?θm,z

 

2.2、贝叶斯派

上面介绍的思路中,对于文档选择主题的概率以及依据主题选择每一个词的概率都是固定的数,对于贝叶斯派来说,这是无法接受的,贝叶斯派认为所有的值都是随机变量,因此,在文档对应的主题以及依据指定的主题选择每一个词的概率都服从特定的分布。因此上述的过程可以通过如下的概率图模型表示:

技术分享

该图可以分解成如下的两个部分:

1、αθmzm,n,表示的是对于第m篇文档,我们首先根据参数α计算出其对应的主题的概率θm,然后生成该文档中的第n个词对应的主题的编号zm,n; 
2、βφkwm,nk=zm,n,表示的是根据参数β计算出在主题编号确定的条件下主题对应的词的概率,依据这个概率选择出每个词。

对于上述过程中的两个阶段,其中从文档的主题的概率到词对应主题的编号服从的是多项式分布,由上述的共轭先验分布的知识可以知道:

多项式分布的共轭分布是Dirichlet分布。

可以选择θm是服从参数为α的Dirichlet分布,同样,我们可以选择φk是服从参数为β的Dirichlet分布。

对于整个文档集来说,文档与文档之间是相互独立的,单个文档中词与词之间也是相互独立的,因此上述的两个过程我们可以分解成如下的两个过程:

  • 首先对于M篇文档生成其对应的词对应的主题的编号
  • 对于K个主题,生成所有的文本

有了上述的两个过程的分解,对于整个文档集,我们可以得到下述的生成概率:

 

P(W,Zα,β)=P(WZ,β)?P(Zα)

 

其中,P(WZ,β)表示的是在文章主题确定的条件下生成词的概率,P(Zα)表示的是文档对应主题的概率。

对于上述的第一个过程有:

 

P(zmα)=P(zmθm)?P(θmα)dθm

 

已知P(zmθm)服从的是多项式分布,而P(θmα)服从的是Dirichlet分布,因此,上式可以转换成为:

 

P(zmα)=k=1Kθnkm,k?Dir(θmα)dθm=k=1Kθnkm,k?1Δ(α)k=1Kθαk?1m,kdθm=1Δ(α)k=1Kθnk+αk?1m,kdθm=Δ(nm+α)Δ(α)

 

其中,nm=(n(1)m,n(2)m,?,n(K)m)n(k)m表示的是第m篇文档中属于第k个主题的词的个数。则对于所有的M篇文档有:

 

P(Zα)=m=1MP(zmα)=m=1MΔ(nm+α)Δ(α)

 

对于第二个过程,有下式成立:

 

P(wkzk,β)=P(wkφk)?P(φkzk,β)dφk

 

其中,P(wkφk)服从的是多项式分布,而P(φkzk,β)服从的是Dirichlet分布,则上式可以转化为:

 

P(wkzk,β)=v=1Vφnvk,v?Dir(φkβ)dφk=v=1Vφnvk,v?1Δ(β)v=1Vφβv?1k,vdφk=1Δ(β)v=1Vφnv+βv?1k,vdφk=Δ(nk+β)Δ(β)

 

其中,nk=(n(1)k,n(2)k,?,n(V)k)n(v)k表示的是属于第k个主题的词中词v的个数,对于有所的V个词,有下面的公式成立:

 

P(WZ,β)=k=1KP(wkzk,β)=k=1KΔ(nk+β)Δ(β)

 

因此,对于整个文档,有:

 

P(W,Zα,β)=P(WZ,β)?P(Zα)=k=1KΔ(nk+β)Δ(β)?m=1MΔ(nm+α)Δ(α)

 

3、LDA训练——Gibbs采样

3.1、Markov Chain的相关概念

MCMC(Markov Chain Monte Carlo)和Gibbs采样算法是用来生成样本的随机模拟方法,Gibbs采样算法是LDA中参数求解的一种很有效的方法,想要理解Gibbs采样,必须了解以下的几个概念:

1、马尔可夫链

马尔可夫链的数学表示如下所示:

 

P(Xt+1=xXt,Xt?1,?)=P(Xt+1=xXt)

 

上述公式的含义是由状态Xt到状态Xt+1只与状态Xt有关,而与之前的状态无关。

2、马氏链的平稳分布

如果一个非周期马氏链具有转移概率矩阵为P,且它的任何两个状态是连通的,那么limnPnij存在且与i无关,记limnPnijπ(j),我们有:

a.

limnPnij=????????π(1)π(1)?π(1)?π(2)π(2)?π(2)??????π(j)π(j)?π(j)??????????????

 

b.

π(j)=i=0π(i)Pij

 

c.π是方程πP=π的唯一非负解,其中:

 

π=[π(1),π(2),?,π(j),?]

 

 

i=πi=1

 

π称为马氏链的平稳分布。

3、细致平稳条件

如果非周期马氏链的转移矩阵P和分布π(x)满足:

 

π(i)Pij=π(j)Pji,?i,j

 

π(x)是马氏链的平稳分布,上式被称为细致平稳条件。

以上三条定理摘自参考文献1。

3.2、Gibbs采样

现在我们假设平面上有一些点,这些点服从概率分布P(x,y),取其中两个点AB,这两个点的横坐标一致,记为x,且每个点的概率由其坐标决定,即点A的概率为P(x,yA),同样,点B的概率为P(x,yB)。由点A转移到点B的概率为P(yBx),同样,由点B转移到点A的概率为P(yAx),则有如下的公式成立:

 

P(x,yA)?P(yBx)=P(x)?P(yAx)?P(yBx)

 

 

P(x,yB)?P(yAx)=P(x)?P(yBx)?P(yAx)

 

由上式可得:

 

P(x,yB)?P(yAx)=P(x,yA)?P(yBx)

 

由上式可以知道,如果以P(yx)作为任意两点之间的转移概率,那么任何两点之间的转移满足细致平稳条件,前提是两点之间的转移概率的条件是相同的,即在两点之间转移,必须保证这两点的其中一个维度是相同的,如上式中的横坐标x是相同的。

由此,我们可以得到Gibbs采样的通俗理解方式,即已知样本(x0,y0),我们可以利用P(xy0)产生(x1,y0),同样,可以由P(yx1)产生(x1,y1),依次,我们便可以得到样本序列:

(x0,y0),(x1,y0),(x1,y1),(x2,y1),?

当马氏链收敛后,得到的样本:

 

(xt,yt),(xt+1,yt),(xt+1,yt+1),?

便是服从概率为P(x,y)的样本。

 

上述过程可由下面的形式描述:

技术分享

这样的情况很容易推广到多维的情况:

技术分享

上述两张图来自参考文献1。

3.3、LDA训练

对于LDA,我们希望的是能够计算在词确定的条件下计算其所属主题的概率,即如下的条件分布:

 

P(ZW,α,β)

 

由于主题Z是一个隐含的变量,我们通过如上的Gibbs采样去求解,由贝叶斯公式可知:

 

P(zi=kZ?i)P(zi=k,wi=tZ?i,W?i)

 

而已知:

 

P(θmZ?i,W?i)=Dir(θmnm,?i+α)

 

 

P(φkZ?i,W?i)=Dir(φknk,?i+β)

 

则可以推出下面的式子:

 

P(zi=kZ?i,W)P(zi=k,wi=tZ?i,W?i)=P(zi=k,wi=t,θm,φkZ?i,W?i)dθmdφk=P(zi=k,θmZ?i,W?i)?P(wi=t,φkZ?i,W?i)dθmdφk=P(zi=kθm)P(θmZ?i,W?i)?P(wi=tφk)P(φkZ?i,W?i)dθmdφkP(zi=kθm)Dir(θmnm,?i+α)dθm?P(wi=tφk)Dir(φknk,?i+β)dφk

 

 

=θmkDir(θmnm,?i+α)dθm?φktDir(φknk,?i+β)dφk=E(θmk)?E(φkt)=θmk^?φkt^

 

在Dirichlet分布中,我们知道:

 

θmk^n(k)m,?i+αkKk=1(n(k)m,?i+αk)

 

 

φkt^n(t)k,?i+βtVt=1(n(t)k,?i+βt)

 

因此有:

 

P(zi=kZ?i,W)n(k)m,?i+αkKk=1(n(k)m,?i+αk)?n(t)k,?i+βtVt=1(n(t)k,?i+βt)

 

LDA的训练过程如下所示:

技术分享

4、LDA推理

LDA推理的过程与LDA训练的过程类似,具体过程如下所示:

技术分享

两张图来自参考文献1。

参考文献

1、LDA数学八卦

2、通俗理解LDA主题模型

3、零基础小白使用LDA模型

4、LDA理解以及源码分析(二)

5、Xuan-Hieu Phan and Cam-Tu Nguyen. GibbsLDA++: A C/C++ implementation of latent Dirichlet allocation (LDA), 2007


以上是关于简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)的主要内容,如果未能解决你的问题,请参考以下文章

简单易学的机器学习算法——梯度提升决策树GBDT

简单易学的机器学习算法——极限学习机(ELM)

简单易学的机器学习算法——K-Means++算法

简单易学的机器学习算法——神经网络之BP神经网络

机器学习算法实现解析——word2vec源码解析

机器学习算法实现解析——word2vec源代码解析