标签:
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模型按照如下的步骤生成“文档-词项”:
- 按照概率选择一篇文档
- 选定文档后,确定文章的主题分布
- 从主题分布中按照概率选择一个隐含的主题类别
- 选定后,确定主题下的词分布
- 从词分布中按照概率选择一个词
LDA模型中一篇文档生成的方式:
- 贝叶斯框架下的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。
皮皮BlogLDA参数估计: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=1∑Kk=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)m、n(t)k、nm、nk为零
对所有文档 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