码迷,mamicode.com
首页 > 其他好文 > 详细

主题模型TopicModel:隐含狄利克雷分布LDA

时间:2016-09-06 09:11:09      阅读:7795      评论:0      收藏:0      [点我收藏+]

标签:

http://blog.csdn.net/pipisorry/article/details/42649657

主题模型LDA简介

隐含狄利克雷分布简称LDA(Latent Dirichlet allocation),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出。

同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。

LDA首先由Blei, David M.、吴恩达和Jordan, Michael I于2003年提出,目前在文本挖掘领域包括文本主题识别、文本分类以及文本相似度计算方面都有应用。

LDA的数学模型

LDA的概率图表示

技术分享    技术分享

[LDA automatically assigns topics to text documents]

 Note:

1 阴影圆圈表示可观测的变量,非阴影圆圈表示隐变量,箭头表示两变量间的条件依赖性conditional dependency,方框表示重复抽样,方框右下角的数字代表重复抽样的次数。

2 对于图2,单圆圈表示隐变量;双圆圈表示观察到的变量;把节点用方框(plate)圈起来,表示其中的节点有多种选择。所以这种表示方法也叫做plate notation,参考PRML 8.0 Graphical Models。

对应到图2,只有 wm,n是观察到的变量,其他都是隐变量或者参数,其中 α?  和 β?  是超参数;方框中, Φ={φ? k}Kk=1 表示有 K 种“主题-词项”分布; Θ={?? m}Mm=1 有 M 种“文档-主题”分布,即对每篇文档都会产生一个 ?? m 分布;每篇文档 m 中有 n 个词,每个词 wm,n 都有一个主题 zm,n ,该词实际是由 φ? zm,n 产生。

3  φ(topic-word分布) and θ(doc-topic分布) are Dirichlet distributions, z(赋给词w的主题) and w(当前词) aremultinomials. θ指向z是从doc-topic分布中采样一个主题赋给w,φ指向w是φ的topic-word分布依赖于w。

LDA生成模型

LDA是一种典型的词袋模型,即它认为一篇文档是由一组词构成的一个集合,词与词之间没有顺序以及先后的关系。一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。

当我们看到一篇文章后,往往喜欢推测这篇文章是如何生成的,我们可能会认为作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。LDA就是要根据给定的一篇文档,推测其主题分布

因此正如LDA?贝叶斯网络结构中所描述的,在LDA模型中一篇文档生成的方式如下:

  • 从狄利克雷分布技术分享中取样生成文档i的主题分布技术分享
  • 从主题的多项式分布技术分享中取样生成文档i第j个词的主题技术分享
  • 从狄利克雷分布技术分享中取样生成主题技术分享的词语分布技术分享
  • 从词语的多项式分布技术分享中采样最终生成词语技术分享

LDA模型参数求解概述

因此整个模型中所有可见变量以及隐藏变量的联合分布

技术分享

最终一篇文档的单词分布的最大似然估计可以通过将上式的技术分享以及技术分享进行积分和对技术分享进行求和得到

技术分享

根据技术分享的最大似然估计,最终可以通过吉布斯采样等方法估计出模型中的参数。

LDA参数的估计(吉布斯采样)

在LDA最初提出的时候,人们使用EM算法进行求解,后来人们普遍开始使用较为简单的Gibbs Sampling,具体过程如下:

  • 首先对所有文档中的所有词遍历一遍,为其都随机分配一个主题,即zm,n=k~Mult(1/K),其中m表示第m篇文档,n表示文档中的第n个词,k表示主题,K表示主题的总数,之后将对应的n(k)m+1, nm+1, n(t)k+1, nk+1, 他们分别表示在m文档中k主题出现的次数,m文档中主题数量的和,k主题对应的t词的次数,k主题对应的总词数(n(k)m等等初始化为0)。
  • 之后对下述操作进行重复迭代。
  • 对所有文档中的所有词进行遍历,假如当前文档m的词t对应主题为k,则n(k)m-1, nm-1, n(t)k-1, nk-1, 即先拿出当前词,之后根据LDA中topic sample的概率分布sample出新的主题,在对应的n(k)m, nm, n(t)k, nk上分别+1。

                                   技术分享技术分享(topic sample的概率分布)

  • 迭代完成后输出主题-词参数矩阵φ和文档-主题矩阵θ

                              技术分享        主题k中词t的概率分布

                             技术分享        文档m中主题k的概率分布

[http://zh.wikipedia.org/wiki/隐含狄利克雷分布]

LDA中的数学基础

  •  beta分布是二项式分布的共轭先验概率分布:“对于非负实数技术分享技术分享,我们有如下关系
技术分享

    其中技术分享对应的是二项分布技术分享的计数。针对于这种观测到的数据符合二项分布,参数的先验分布和后验分布都是Beta分布的情况,就是Beta-Binomial 共轭。”

  • 狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布:
    • “ 把技术分享从整数集合延拓到实数集合,从而得到更一般的表达式如下:

技术分享

    针对于这种观测到的数据符合多项分布,参数的先验分布和后验分布都是Dirichlet 分布的情况,就是 Dirichlet-Multinomial 共轭。 ”
正如Beta分布是二项式分布的共轭先验概率分布,狄利克雷分布作为多项式分布的共轭先验概率分布。
  • 贝叶斯派思考问题的固定模式:
    • 先验分布技术分享 + 样本信息技术分享 技术分享 后验分布技术分享
        上述思考模式意味着,新观察到的样本信息将修正人们以前对事物的认知。换言之,在得到新的样本信息之前,人们对技术分享的认知是先验分布技术分享,在得到新的样本信息技术分享后,人们对技术分享的认知为技术分享
  • 频率派与贝叶斯派各自不同的思考方式:
    • 频率派把需要推断的参数θ看做是固定的未知常数,即概率技术分享虽然未知,但是是确定的一个值,同时样本X 是随机的,所以频率派重点研究样本空间,大部分的概率计算都是针对样本X 的分布;
    • 而贝叶斯派的观点则截然相反,他们认为待估计的参数技术分享是随机变量,服从一定的分布,而样本X 是固定的,由于样本是固定的,所以他们重点研究的是参数技术分享的分布。

[TopicModel - LDA中的数学模型]

[LDA主题模型简介]

皮皮Blog



主题模型LDA文档生成模式

从LDA与pLSA的区别和联系角度出发

LDA就是在pLSA的基础上加层贝叶斯框架。pLSA样本随机,参数虽未知但固定,属于频率派思想;而LDA样本固定,参数未知但不固定,是个随机变量,服从一定的分布,LDA属于贝叶斯派思想。

{lda基础模型可参见TopicModel - Unigram、LSA、PLSA算法详解}

pLSA与LDA生成文档方式的对比

    pLSA模型按照如下的步骤生成“文档-词项”:

  1. 按照概率技术分享选择一篇文档技术分享
  2. 选定文档技术分享后,确定文章的主题分布
  3. 从主题分布中按照概率技术分享选择一个隐含的主题类别技术分享
  4. 选定技术分享后,确定主题下的词分布
  5. 从词分布中按照概率技术分享选择一个词技术分享 

    LDA模型中一篇文档生成的方式:

  1. 按照先验概率技术分享选择一篇文档技术分享
  2. 从狄利克雷分布技术分享中取样生成文档技术分享的主题分布技术分享,换言之,主题分布技术分享由超参数为技术分享的Dirichlet分布生成
  3. 从主题的多项式分布技术分享中取样生成文档技术分享第 j 个词的主题技术分享
  4. 从狄利克雷分布(即Dirichlet分布)技术分享中取样生成主题技术分享对应的词语分布技术分享,换言之,词语分布技术分享由参数为技术分享的Dirichlet分布生成
  5. 从词语的多项式分布技术分享中采样最终生成词语技术分享 

技术分享 技术分享

                                                   [沈博PPT]

从上面两个过程可以看出,LDA在PLSA的基础上,为主题分布和词分布分别加了两个Dirichlet先验(也就是主题分布的分布和词分布的分布)。

pLSA与LDA的概率图对比

    pLSA跟LDA生成文档的不同过程,左图是pLSA,右图是LDA(右图不太规范,z跟w都得是小写):
    技术分享        技术分享
LDA概率图:
    对应到上面右图的LDA,只有W / w是观察到的变量,其他都是隐变量或者参数,其中,Φ表示词分布,Θ表示主题分布,技术分享 是主题分布Θ的先验分布(即Dirichlet 分布)的参数,技术分享是词分布Φ的先验分布的参数,N表示文档的单词总数,M表示文档的总数。
  1. 假定语料库中共有M篇文章,每篇文章下的Topic的主题分布是一个从参数为技术分享的Dirichlet先验分布中采样得到的Multinomial分布,每个Topic下的词分布是一个从参数为技术分享的Dirichlet先验分布中采样得到的Multinomial分布。
  2. 对于某篇文章中的第n个词,首先从该文章中出现的每个主题的Multinomial分布(主题分布)中选择或采样一个主题,然后再在这个主题对应的词的Multinomial分布(词分布)中选择或采样一个词。不断重复这个随机生成过程,直到M篇文章全部生成完成。
    M 篇文档会对应于 M 个独立的 Dirichlet-Multinomial 共轭结构(每篇文档都有其独特不同的doc-topic分布),K 个 topic 会对应于 K 个独立的 Dirichlet-Multinomial 共轭结构。
  • 其中,技术分享→θ→z 表示生成文档中的所有词对应的主题,显然 技术分享→θ 对应的是Dirichlet 分布,θ→z 对应的是 Multinomial 分布,所以整体是一个 Dirichlet-Multinomial 共轭结构,如下图所示:
技术分享
  • 类似的,技术分享→φ→w,容易看出, 此时β→φ对应的是 Dirichlet 分布, φ→w 对应的是 Multinomial 分布, 所以整体也是一个Dirichlet-Multinomial 共轭结构,如下图所示:
技术分享

pLSA与LDA参数估计方法的对比

    假定文档已经产生,反推其主题分布。那么,它们估计未知参数所采用的方法有什么不同?
  • pLSA中,我们使用EM算法去估计“主题-词项”矩阵Φ和“文档-主题”矩阵Θ,而且这两参数都是个未知的固定的值,使用的思想其实就是极大似然估计MLE。
  • LDA中,估计Φ、Θ这两未知参数可以用变分(Variational inference)-EM算法,也可以用gibbs采样,前者的思想是最大后验估计MAP(MAP与MLE类似,都把未知参数当作固定的值),后者的思想是贝叶斯估计。贝叶斯估计是对MAP的扩展,但它与MAP有着本质的不同,即贝叶斯估计把待估计的参数看作是服从某种先验分布的随机变量。
    由于LDA把要估计的主题分布和词分布看作是其先验分布是Dirichlet分布的随机变量,所以,在LDA这个估计主题分布、词分布的过程中,它们的先验Dirichlet分布事先由人为给定,那么LDA就是要去求(可用gibbs采样)它们的后验分布得到期望技术分享技术分享。LDA中,主题分布和词分布本身都是多项分布,而由上文可知“Dirichlet分布是多项式分布的共轭先验概率分布”,因此选择Dirichlet 分布作为它们的共轭先验分布。意味着为多项分布的参数p选取的先验分布是Dirichlet分布,那么以p为参数的多项分布用贝叶斯估计得到的后验分布仍然是Dirichlet分布。

PLSA与LDA的本质区别详解及实例*

  • PLSA中,主题分布和词分布是唯一确定的,能明确的指出主题分布可能就是{教育:0.5,经济:0.3,交通:0.2},词分布可能就是{大学:0.5,老师:0.3,课程:0.2}。
  • LDA中,主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定,因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定。面对多个主题或词,各个主题或词被抽中的概率不一样,所以抽取主题或词是随机抽取。主题分布和词分布本身也都是不确定的,正因为LDA是PLSA的贝叶斯版本,所以主题分布跟词分布本身由先验知识随机给定。
  • pLSA中,主题分布和词分布确定后,以一定的概率(技术分享技术分享)分别选取具体的主题和词项,生成好文档。而后根据生成好的文档反推其主题分布、词分布时,最终用EM算法(极大似然估计思想)求解出了两个未知但固定的参数的值:技术分享技术分享)和技术分享技术分享
    • 举个文档d产生主题z的例子。给定一篇文档d,主题分布是一定的,比如{ P(zi|d), i = 1,2,3 }={0.4,0.5,0.1},表示z1、z2、z3,这3个主题被文档d选中的概率都是个固定的值:P(z1|d) = 0.4、P(z2|d) = 0.5、P(z3|d) = 0.1。
  • 贝叶斯框架下的LDA中,我们不再认为主题分布和词分布是唯一确定的(而是随机变量),而是有很多种可能。LDA为它们弄了两个Dirichlet先验参数,为某篇文档随机抽取出某个主题分布和词分布。
    • 文档d产生主题z(准确的说,其实是Dirichlet先验为文档d生成主题分布Θ,然后根据主题分布Θ产生主题z)的概率,主题z产生单词w的概率都不再是某两个确定的值,而是随机变量。
      • 例子:给定一篇文档d,现在有多个主题z1、z2、z3,它们的主题分布{ P(zi|d), i = 1,2,3 }可能是{0.4,0.5,0.1},也可能是{0.2,0.2,0.6},即这些主题被d选中的概率都不再认为是确定的值,而主题分布到底是哪个取值集合我们不确定(这就是贝叶斯派的核心思想,把未知参数当作是随机变量,不再认为是某一个确定的值),但其先验分布是dirichlet 分布,所以可以从无穷多个主题分布中按照dirichlet 先验随机抽取出某个主题分布出来。
    换言之,LDA在pLSA的基础上给这两参数(技术分享技术分享)加了两个先验分布的参数(贝叶斯化):一个主题分布的先验分布Dirichlet分布技术分享,和一个词语分布的先验分布Dirichlet分布技术分享
    LDA是pLSA的generalization:一方面LDA的hyperparameter设为特定值的时候,就specialize成pLSA了。从工程应用价值的角度看,这个数学方法的generalization,允许我们用一个训练好的模型解释任何一段文本中的语义。而pLSA只能理解训练文本中的语义。(虽然也有ad hoc的方法让pLSA理解新文本的语义,但是大都效率低,并且并不符合pLSA的数学定义。)
    综上,LDA真的只是pLSA的贝叶斯版本,文档生成后,两者都要根据文档去推断其主题分布和词语分布(即两者本质都是为了估计给定文档生成主题,给定主题生成词语的概率),只是用的参数推断方法不同,在pLSA中用极大似然估计的思想去推断两未知的固定参数,而LDA则把这两参数弄成随机变量,且加入dirichlet先验。 所以,pLSA跟LDA的本质区别就在于它们去估计未知参数所采用的思想不同,前者用的是频率派思想,后者用的是贝叶斯派思想。

LDA生成文档过程的进一步理解

    LDA主题分布中比如{ P(zi), i =1,2,3 }等于{0.4,0.5,0.1}或{0.2,0.2,0.6}是由dirichlet先验给定的,不是根据文档产生的。所以,LDA生成文档的过程中,先从dirichlet先验(主题分布的分布)中“随机”抽取出主题分布,然后从主题分布中“随机”抽取出主题,最后从确定后的主题对应的词分布中“随机”抽取出词。

Dirichlet先验是如何“随机”抽取主题分布的

    事实上,从dirichlet分布中随机抽取主题分布,这个过程不是完全随机的。为了说清楚这个问题,咱们得回顾下dirichlet分布。事实上,如果我们取3个事件的话,可以建立一个三维坐标系,类似xyz三维坐标系,这里,我们把3个坐标轴弄为p1、p2、p3,如下图所示:

技术分享

    在这个三维坐标轴所划分的空间里,每一个坐标点(p1,p2,p3)就对应着一个主题分布,且某一个点(p1,p2,p3)的大小表示3个主题z1、z2、z3出现的概率大小(因为各个主题出现的概率和为1,所以p1+p2+p3 = 1 {三角平面},且p1、p2、p3这3个点最大取值为1)。比如(p1,p2,p3) = (0.4,0.5,0.1)便对应着主题分布{ P(zi), i =1,2,3 } = {0.4,0.5,0.1},空间里有很多这样的点(p1,p2,p3),意味着有很多的主题分布可供选择,那dirichlet分布如何选择主题分布呢?把上面的斜三角形放倒,映射到底面的平面上,便得到如下所示的一些彩图(3个彩图中,每一个点对应一个主题分布,高度代表某个主题分布被dirichlet分布选中的概率,且选不同的技术分享,dirichlet 分布会偏向不同的主题分布):

技术分享

    我们来看上图中左边这个图,高度就是代表dirichlet分布选取某个坐标点(p1,p2,p3)(一个主题分布)的概率大小。如下图所示,平面投影三角形上的三个顶点上的点:A=(0.9,0.05,0.05)、B=(0.05,0.9,0.05)、C=(0.05,0.05,0.9)各自对应的主题分布被dirichlet分布选中的概率值很大,而平面三角形内部的两个点:D、E对应的主题分布被dirichlet分布选中的概率值很小。
Note: 也就是说alpha越大,选出的主题分布是均匀的可能性越大?
技术分享技术分享
    所以虽然说dirichlet分布是随机选取任意一个主题分布的,但依然存在着P(A) = P(B) = P(C) >> P(D) = P(E),即dirichlet分布还是“偏爱”某些主题分布的。至于dirichlet分布的参数技术分享是如何决定dirichlet分布的形状的,可以从dirichlet分布的定义和公式思考
    此外,就算说“随机”选主题也是根据主题分布来“随机”选取,这里的随机不是完全随机的意思,而是根据各个主题出现的概率值大小来抽取。比如当dirichlet先验为文档d生成的主题分布{ P(zi), i =1,2,3 }是{0.4,0.5,0.1}时,那么主题z2在文档d中出现的概率便是0.5。
皮皮Blog


LDA参数估计:Gibbs采样

        类似于pLSA,LDA的原始论文中是用的变分-EM算法估计未知参数,但不太好理解,并且EM算法可能推导出局部最优解。后来发现另一种估计LDA未知参数的方法更好,Heinrich使用了Gibbs抽样法。Gibbs抽样是马尔可夫链蒙特卡尔理论(MCMC)中用来获取一系列近似等于指定多维概率分布(比如2个或者多个随机变量的联合概率分布)观察样本的算法。

LDA Gibbs Sampler

    为了构造LDA Gibbs抽样器,我们需要使用隐变量的Gibbs抽样器公式技术分享(Note: 分母只是分子对zi的一个积分而已,重点在联合分布p(z,w)公式的推导上,只要有了联合分布p(z,w)公式就可以通过隐变量gibbs采样公式进行采样了)。

    在LDA模型中,隐变量为zm,n,即样本中每个词wm,n所属的主题,而参数ΘΦ等可以通过观察到的wm,n和相应的zm,n积分求得,这种处理方法称作collapsed,在Gibbs sampling中经常使用。    要推断的目标分布p(z|w)(后验概率分布),它和联合分布成正比    p(z|w)=p(z,w)p(w)=Wi=1p(zi,wi)Wi=1Kk=1p(zi=k,wi)    {这里省略了超参数},这个分布涉及很多离散随机变量,并且分母是KW个项的求和,很难求解。此时,就需要Gibbs sampling发挥用场了,我们期望Gibbs抽样器可以通过Markov链利用全部的条件分布p(zi|z?i,w) 来模拟p(z|w)  (吉布斯采样的基本思想)。

LDA所有变量的联合分布

    联合概率分布p(w,z):    p(w,z|α,β)=p(w|z,β)p(z|α)

    给定一个文档集合,w是可以观察到的已知变量,技术分享技术分享是根据经验给定的先验参数,其他的变量z,θ和φ都是未知的隐含变量,需要根据观察到的变量来学习估计的。根据LDA的图模型,可以写出所有变量的联合分布:

技术分享

    Note:技术分享等价上文中定义的技术分享技术分享等价于上文中定义的技术分享技术分享等价于上文中定义的技术分享,Θm等价于上文中定义的技术分享

    因为技术分享产生主题分布θ,主题分布θ确定具体主题,且技术分享产生词分布φ、词分布φ确定具体词,所以上述式子等价于下述式子所表达的所有变量的联合概率分布技术分享

技术分享

    由于此公式第一部分独立于 α ,第二部分独立于 β ,所以可以分别处理。计算的两个未知参数:第一项因子技术分享表示的是根据确定的主题技术分享和词分布的先验分布参数技术分享采样词的过程,第二项因子技术分享是根据主题分布的先验分布参数技术分享采样主题的过程。

联合分布因子1技术分享

    第一个因子技术分享,可以根据确定的主题技术分享和从先验分布技术分享取样得到的词分布Φ产生:技术分享

    由于样本中的词服从参数为主题技术分享的独立多项分布,这意味着可以把上面对词的乘积分解成分别对主题和对词的两层乘积:

技术分享

    其中技术分享是词 t 在主题 k 中出现的次数,可以从初始化和迭代中计算出;phi(k, t)是词分布也就是主题k下词t的采样概率,就是LDA模型要求的未知参数。

Note:

1 每个主题下包含所有词,所有词都要考虑,只是概率不一样而已。并且这里的w和z上面都有箭头,都是向量。

2 初始时每个词w随机分配主题k,这样每个主题下的词也就随机分配了,技术分享也就得到初始值并不断修正,具体参考后面的【Gibbs sampling具体算法】

    回到第一个因子上来。目标分布技术分享需要对词分布Φ积分,且结合在LDA中的数学模型定义的Dirichlet 分布的归一化系数技术分享的公式

技术分享

    可得联合分布因子1

技术分享                       (68)

这个结果可以看作K个Dirichlet-Multinomial模型的乘积。

Note:

1 上式第一步推导:

技术分享

2 上式第二步推导:

技术分享

联合分布因子2技术分享

    类似于技术分享的步骤,先写出条件分布,然后分解成两部分的乘积:

技术分享

    其中,技术分享 表示的单词 i 所属的文档,技术分享是主题 k 在文章 m 中出现的次数。

    对主题分布Θ积分可得联合分布因子2

技术分享                 (72)

Note: 上式推导:

技术分享

综合第一个因子和第二个因子的结果,得到技术分享的联合分布结果为:

技术分享

皮皮Blog

LDA词的主题采样

    通过联合分布技术分享来计算在给定可观测变量 w 下的隐变量 z 的条件分布(后验分布)技术分享,再进行贝叶斯分析。换言之,有了这个联合分布后,要求解第m篇文档中的第n个词(下标为技术分享的词)的全部条件概率就好求了。
    变量定义:  技术分享表示除去技术分享的词???,技术分享技术分享
    然后,排除当前词的主题分配,即根据其他词的主题分配和观察到的单词来计算当前词主题的概率公式为:
技术分享 公式(80)
Note(lz):
1 也就是求当前词i的主题zi=k的采样概率;i:当前词;
-i除去当前词i相关的不考虑where n?i is the count excluding the current assignment of z i , i.e., z ?i .;     n?i denotes a quantity excluding the current instance.
w:数据集Dt中所有词;m文档;k主题; t:当前词实例wi = t?。
n(k)m,-i表示其它主题(非主题k?)被赋予文档m中词(不包括当前词i,也就是如果当前词i对应的主题为k,则-1?)的次数; n d,k denotes the number of times that topic k is assigned to terms in document d.
n(t)k,-i表示词t从主题k中生成来的次数。主题k中当前词i对应词项t(不是当前词,但是词的内容是t)出现的总数(相当于n(t)k-1?)。n k,w refers to the number of times that term w appears under topic k. n z,w refers to the number of times that word w is generated from topic z.
2 右式如果加上分母:当前词所在文档抽取出主题k的概率(当前文档中的其它词(-i,n-1个词)被赋予主题k的概率越大,那么当前文档的当前词i被赋予主题k的概率就越大);
左式:主题k抽取出当前词wi对应词项t的概率。(主题k下词项t越多,当前词wi被采样为主题k的概率就越大)
这就是罐子模型!richer get richer!
3 上式推导:
技术分享
技术分享
4 另外如果不省略上式右部分母,又可以得到下面的正比等式:
技术分享  公式(81)
Note:不必使用这个公式进行采样,这个公式只是下面解释LDA吉布斯采样图解过程时比较方便。

主题分布参数Θ和词分布参数Φ的计算

    最后一步,根据Markov链的状态技术分享获取主题分布的参数Θ和词分布的参数Φ(知道了每篇文档下每个词对应的主题,那么文档下的主题分布和主题的词分布就好求了)。
    根据贝叶斯法则和Dirichlet先验,以及上文中得到的技术分享技术分享各自被分解成两部分乘积的结果,可以计算得到每个文档上Topic的后验分布和每个Topic下的词的后验分布分别如下(据上文可知:其后验分布跟它们的先验分布一样,也都是Dirichlet 分布):
技术分享
其中,技术分享是构成文档m的主题数向量,技术分享是构成主题k的词项数向量。
    最终求解的Dirichlet 分布期望为:
技术分享
这样就计算出了最终我们要求的分布参数(注意分布参数的计算要在sampling收敛阶段进行)。

LDA吉布斯采样概率公式图解

    如果将技术分享技术分享的结果代入之前得到的技术分享{公式(81)}的结果中,可得:
                                   技术分享

        仔细观察上述结果,可以发现,式子的右半部分便是技术分享,这个概率的值对应着技术分享的路径概率。如此,K 个topic 对应着K条路径,Gibbs Sampling 便在这K 条路径中进行采样,如下图所示:
技术分享
就这样,Gibbs Sampling通过求解出主题分布和词分布的后验分布,从而成功解决主题分布和词分布这两参数未知的问题。

LDA Gibbs sampling算法实现

Gibbs sampling算法有三个阶段:初始化、burn-in(Gibbs未收敛阶段)和sampling(Gibbs收敛阶段)
  • 算法:LdaGibbs({w,α,β,K})
  • 输入:单词向量w,超参数αβ,主题数K
  • 全局变量:统计量{n(k)m}{n(t)k},以及它们的总数{nm}{nk},全部条件概率数组p(zi|?)
  • 输出:主题向量{z},多项分布参数ΦΘ,超参数估计量αβ
  • [初始化] 设置全局变量n(k)mn(t)knmnk为零
  • 对所有文档 m∈[1,M]

    • 对文档 m 中的所有单词 n∈[1,Nm]
      • 采样每个单词对应的主题zm,n=k~Mult(1/K)
      • 增加“文档-主题”计数:n(k)m+=1
      • 增加“文档-主题”总数:nm+=1
      • 增加“主题-词项”计数:n(t)k+=1
      • 增加“主题-词项”总数:nk+=1
  • 迭代burn-in和sampling步骤:

    • [burn-in] 对所有文档 m∈[1,M]
      • 对文档 m 中的所有单词 n∈[1,Nm]
        • 减少计数:n(k)m?=1;nm?=1;n(t)k?=1;nk?=1;
        • 根据公式p(zi=k|z?i,w) = ...{公式(80)}采样主题:k~~p(zi|z?i,w)
        • 增加计数:n(k~)m+=1;nm+=1;n(t)k~+=1;nk~+=1;
    • [sampling] 如果Markov链收敛:
      • 根据公式φk,t生成参数 Φ
      • 根据公式?m,k生成参数 Θ

[参数估计方法Gregor Heinrich.Parameter estimation for text analysis* - 5.5 The collapsed LDA Gibbs sampler]

后验分布的更新实践[AMC]

在burn in phase结束后再在每个sample lag进行posterior distributions更新。

数据量很小时(e.g., 100 reviews)我们只保留Markov chain最后的状态 (i.e., sampleLag = -1). The reason is that it avoids the topics being dominated by the most frequent words.

数据量不是很小时(e.g., 1000 reviews),我们可以设置sampleLag为20。

from:http://blog.csdn.net/pipisorry/article/details/42649657

ref:Blei, David; Ng, Andrew;Latent Dirichlet allocation.Journal of Machine Learning Research*

David M. Blei《Introduction to Probabilistic Topic Models》译文概率主题模型简介 Introduction to Probabilistic Topic Models

rickjin:LDA数学八卦*

概率主题模型(算法综述)

主题模型之LDA*

主题模型之pLSA

LDA学习笔记---来自《Parameter estimation for text analysis》


主题模型TopicModel:隐含狄利克雷分布LDA

标签:

原文地址:http://blog.csdn.net/pipisorry/article/details/42649657

(0)
(2)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!