印象中,最开始据说“LDA”这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印过一次,但不知是由于这篇文档的前序铺垫太长(如今才意识到这些“铺垫”都是深入理解LDA 的基础,但若是没有人帮助初学者提纲挈领、把握主次、理清思路,则很容易陷入LDA的细枝末节之中),仍是由于其中的数学推导细节太多,致使一直没有完整看完过。html
2013年12月,在我组织的Machine Learning读书会第8期上,@夏粉_百度 讲机器学习中排序学习的理论和算法研究,@沈醉2011 则讲主题模型的理解。又一次碰到了主题模型,当时貌似只记得沈博讲了一个汪峰写歌词的例子,依然没有理解LDA究竟是怎样一个东西(但理解了LDA以后,再看沈博主题模型的PPT会很赞)。web
直到昨日下午,机器学习班 第12次课上,邹讲完LDA以后,才真正明白LDA原来是那么一个东东!上完课后,趁热打铁,再次看LDA数学八卦,发现之前看不下去的文档再看时居然一路都比较顺畅,一口气看完大部。看完大部后,思路清晰了,知道理解LDA,能够分为下述5个步骤:算法
本文便按照上述5个步骤来阐述,但愿读者看完本文后,能对LDA有个尽可能清晰完整的了解。同时,本文基于邹讲LDA的PPT、rickjin的LDA数学八卦及其它参考资料写就,能够定义为一篇学习笔记或课程笔记,固然,后续不断加入了不少本身的理解。如有任何问题,欢迎随时于本文评论下指出,thanks。markdown
关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是几率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),本文讲后者。网络
另外,我先简单说下LDA的总体思想,否则我怕你看了半天,铺了太长的前奏,却依然因没见到LDA的影子而显得“心浮气躁”,致使不想再继续看下去。因此,先给你吃一颗定心丸,明白总体框架后,我们再一步步抽丝剥茧,展开来论述。框架
按照wiki上的介绍,LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,是一种主题模型,它能够将文档集 中每篇文档的主题以几率分布的形式给出,从而经过分析一些文档抽取出它们的主题(分布)出来后,即可以根据主题(分布)进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档是由一组词构成,词与词之间没有前后顺序的关系。机器学习
此外,一篇文档能够包含多个主题,文档中每个词都由其中的一个主题生成。函数
人类是怎么生成文档的呢?LDA的这三位做者在原始论文中给了一个简单的例子。好比假设事先给定了这几个主题:Arts、Budgets、Children、Education,而后经过学习训练,获取每一个主题Topic对应的词语。以下图所示:工具
而后以必定的几率选取上述某个主题,再以必定的几率选取那个主题下的某个单词,不断的重复这两步,最终生成以下图所示的一篇文章(其中不一样颜色的词语分别对应上图中不一样主题下的词):oop
而当咱们看到一篇文章后,每每喜欢推测这篇文章是如何生成的,咱们可能会认为做者先肯定这篇文章的几个主题,而后围绕这几个主题遣词造句,表达成文。
LDA就是要干这事:根据给定的一篇文档,反推其主题分布。
通俗来讲,能够假定认为人类是根据上述文档生成过程写成了各类各样的文章,如今某小撮人想让计算机利用LDA干一件事:你计算机给我推测分析网络上各篇文章分别都写了些啥主题,且各篇文章中各个主题出现的几率大小(主题分布)是啥。
然,就是这么一个看似普通的LDA,一度吓退了很多想深刻探究其内部原理的初学者。难在哪呢,难就难在LDA内部涉及到的数学知识点太多了。
在LDA模型中,一篇文档生成的方式以下:
其中,相似Beta分布是二项式分布的共轭先验几率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验几率分布。
此外,LDA的图模型结构以下图所示(相似贝叶斯网络结构):
恩,不错,短短6句话总体归纳了整个LDA的主体思想!但也就是上面短短6句话,却接连不断或重复出现了二项分布、多项式分布、beta分布、狄利克雷分布(Dirichlet分布)、共轭先验几率分布、取样,那么请问,这些都是啥呢?
这里先简单解释下二项分布、多项分布、beta分布、Dirichlet 分布这4个分布。
二项分布是从伯努利分布推动的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值,非正即负{+,-}。而二项分布即重复n次的伯努利试验,记为 。简言之,只作一次实验,是伯努利分布,重复作了n次,是二项分布。二项分布的几率密度函数为:
对于k = 0, 1, 2, ..., n,其中的是二项式系数(这就是二项分布的名称的由来),又记为
。回想起高中所学的那丁点几率知识了么:想必你当年必定死记过这个二项式系数
就是
。
多项分布是指单次试验中的随机变量的取值再也不是0-1的,而是有多种离散值可能(1,2,3...,k)。好比投掷6个面的骰子实验,N次实验结果服从K=6的多项分布。其中
多项分布的几率密度函数为:
给定参数和
,取值范围为[0,1]的随机变量 x 的几率密度函数:
其中:
,
。
注:即是所谓的gamma函数,下文会具体阐述。
Dirichlet分布的的密度函数形式跟beta分布的密度函数一模一样:
其中
至此,咱们能够看到二项分布和多项分布很类似,Beta分布和Dirichlet 分布很类似,而至于 “ Beta分布是二项式分布的共轭先验几率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验几率分布 ” 这点在下文中说明。
OK,接下来,我们就按照本文开头所说的思路:“一个函数:gamma函数,四个分布:二项分布、多项分布、beta分布、Dirichlet分布,外加一个概念和一个理念:共轭先验和贝叶斯框架,两个模型:pLSA、LDA(文档-主题,主题-词语),一个采样:Gibbs采样”一步步详细阐述,争取给读者一个尽可能清晰完整的LDA。
(固然,若是你不想深究背后的细节原理,只想总体把握LDA的主体思想,可直接跳到本文第4 部分,看完第4部分后,若仍是想深究背后的细节原理,可再回到此处开始看)
我们先来考虑一个问题(此问题1包括下文的问题2-问题4皆取材自LDA数学八卦):
为解决这个问题,能够尝试计算落在区间[x,x+Δx]的几率。即求下述式子的值:
首先,把 [0,1] 区间分红三段 [0,x),[x,x+Δx],(x+Δx,1],而后考虑下简单的情形:即假设n 个数中只有1个落在了区间 [x,x+Δx]内,因为这个区间内的数X(k)是第k大的,因此[0,x)中应该有 k−1 个数,(x+Δx,1] 这个区间中应该有n−k 个数。以下图所示:
从而问题转换为下述事件E:
对于上述事件E,有:
其中,o(Δx)表示Δx的高阶无穷小。显然,因为不一样的排列组合,即n个数中有一个落在 [x,x+Δx]区间的有n种取法,余下n−1个数中有k−1个落在[0,x)的有种组合,因此和事件E等价的事件一共有
个。
若是有2个数落在区间[x,x+Δx]呢?以下图所示:
相似于事件E,对于2个数落在区间[x,x+Δx]的事件E’:
有:
从上述的事件E、事件E‘中,能够看出,只要落在[x,x+Δx]内的数字超过一个,则对应的事件的几率就是 o(Δx)。因而乎有:
从而获得的几率密度函数
为:
至此,本节开头提出的问题获得解决。然仔细观察的几率密度函数,发现式子的最终结果有阶乘,联想到阶乘在实数上的推广
函数:
二者结合是否会产生奇妙的效果呢?考虑到具备以下性质:
故将代入到的几率密度函数
中,可得:
而后取,
,转换
获得:
若是熟悉beta分布的朋友,可能会惊呼:哇,居然推出了beta分布!
在几率论中,beta是指一组定义在区间的连续几率分布,有两个参数
和
,且
。
beta分布的几率密度函数是:
其中的即是
函数:
随机变量X服从参数为的beta分布一般写做:。
回顾下1.1节开头所提出的问题:“问题1 随机变量,把这n 个随机变量排序后获得顺序统计量
,而后请问
的分布是什么。” 若是,我们要在这个问题的基础上增长一些观测数据,变成问题2:
根据“Yi中有个比
小,
个比
大”,换言之,Yi中有
个比
小,
个比
大,因此
是
中第
大的数。
根据1.1节最终获得的结论“只要落在[x,x+Δx]内的数字超过一个,则对应的事件的几率就是 o(Δx)”,继而推出事件服从beta分布,从而可知的几率密度函数为:
熟悉贝叶斯方法(不熟悉的没事,参见此文第一部分)的朋友内心估计又犯“嘀咕”了,这不就是贝叶斯式的思考过程么?
回顾下贝叶斯派思考问题的固定模式:
上述思考模式意味着,新观察到的样本信息将修正人们之前对事物的认知。换言之,在获得新的样本信息以前,人们对的认知是先验分布
,在获得新的样本信息
后,人们对
的认知为
。
类比到如今这个问题上,咱们也能够试着写下:
其中对应的是二项分布
的计数。
更通常的,对于非负实数和
,咱们有以下关系
针对于这种观测到的数据符合二项分布,参数的先验分布和后验分布都是Beta分布的状况 ,就是Beta-Binomial共轭。换言之,Beta分布是二项式分布的共轭先验几率分布。
二项分布和Beta分布是共轭分布意味着,若是咱们为二项分布的参数p选取的先验分布是Beta分布,那么以p为参数的二项分布用贝叶斯估计获得的后验分布仍然服从Beta分布。
此外,如何理解参数和
所表达的意义呢?
、
能够认为形状参数,通俗但不严格的理解是,
和
共同控制Beta分布的函数“长的样子”:形状千奇百怪,高低胖瘦,以下图所示:
什么又是共轭呢?轭的意思是束缚、控制,共轭从字面上理解,则是共同约束,或互相约束。
在贝叶斯几率理论中,若是后验几率P(θ|x)和先验几率p(θ)知足一样的分布律,那么,先验分布和后验分布被叫作共轭分布,同时,先验分布叫作似然函数的共轭先验分布。
好比,某观测数据服从几率分布P(θ) 时,当观测到新的X数据时,咱们通常会遇到以下问题:
事实上,根据根据贝叶斯公式可知:
其中,P(x|θ)表示以预估θ为参数的x几率分布,能够直接求得,P(θ)是已有原始的θ几率分布。
因此,若是咱们选取P(x|θ)的共轭先验做为P(θ)的分布,那么P(x|θ)乘以P(θ),而后归一化的结果P(θ|x)跟和P(θ)的形式同样。换句话说,先验分布是P(θ),后验分布是P(θ|x),先验分布跟后验分布同属于一个分布族,故称该分布族是θ的共轭先验分布(族) 。
举个例子。投掷一个非均匀硬币,可使用参数为θ的伯努利模型,θ为硬币为正面的几率,那么结果x的分布形式为:
其共轭先验为beta分布,具备两个参数和
,称为超参数(hyperparameters)。且这两个参数决定了θ参数,其Beta分布形式为
而后计算后验几率
归一化这个等式后会获得另外一个Beta分布,从而证实了Beta分布确实是伯努利分布的共轭先验分布。
接下来,我们来考察beta分布的一个性质。
若是,则有:
注意到上式最后结果的右边积分
其相似于几率分布,而对于这个分布有
从而求得
的结果为
最后将此结果带入的计算式,获得:
最后的这个结果意味着对于Beta 分布的随机变量,其均值(指望)能够用来估计。此外,狄利克雷Dirichlet 分布也有相似的结论,即若是
,一样能够证实有下述结论成立:
那什么是Dirichlet 分布呢?简单的理解Dirichlet 分布就是一组连续多变量几率分布,是多变量广泛化的beta分布。为了记念德国数学家约翰·彼得·古斯塔夫·勒热纳·狄利克雷(Peter Gustav Lejeune Dirichlet)而命名。狄利克雷分布常做为贝叶斯统计的先验几率。
根据wikipedia上的介绍,维度K ≥ 2(x1,x2…xK-1维,共K个)的狄利克雷分布在参数α1, ..., αK > 0上、基于欧几里得空间RK-1里的勒贝格测度有个几率密度函数,定义为:
其中,至关因而多项beta函数
且
此外,x1+x2+…+xK-1+xK=1,x1,x2…xK-1>0,且在(K-1)维的单纯形上,其余区域的几率密度为0。
固然,也能够以下定义Dirichlet 分布
其中的称为Dirichlet 分布的归一化系数:
且根据Dirichlet分布的积分为1(几率的基本性质),能够获得:
下面,在2.2节问题2的基础上继续深刻,引出问题3。
为了简化计算,取x3知足x1+x2+x3=1,但只有x1,x2是变量,以下图所示:
从而有:
继而获得因而咱们获得的联合分布为:
观察上述式子的最终结果,能够看出上面这个分布其实就是3维形式的 Dirichlet 分布
令,因而分布密度能够写为
这个就是通常形式的3维 Dirichlet 分布,即使延拓到非负实数集合,以上几率分布也是良定义的。
将Dirichlet分布的几率密度函数取对数,绘制对称Dirichlet分布的图像以下图所示(截取自wikipedia上):
上图中,取K=3,也就是有两个独立参数x1,x2,分别对应图中的两个坐标轴,第三个参数始终知足x3=1-x1-x2且α1=α2=α3=α,图中反映的是参数α从α=(0.3, 0.3, 0.3)变化到(2.0, 2.0, 2.0)时的几率对数值的变化状况。
为了论证Dirichlet分布是多项式分布的共轭先验几率分布,下面我们继续在上述问题3的基础上再进一步,提出问题4。
为了方便讨论,记,及
,根据已知条件“
,Yi中落到
,
,
三个区间的个数分别为 m1,m2”,可得
、
分别是这m+n个数中第
大、第
大的数。因而,后验分布
应该为
,即通常化的形式表示为:
。
一样的,按照贝叶斯推理的逻辑,可将上述过程整理以下:
上述贝叶斯分析过程的直观表述为:
令,可把
从整数集合延拓到实数集合,从而获得更通常的表达式以下:
针对于这种观测到的数据符合多项分布,参数的先验分布和后验分布都是Dirichlet 分布的状况,就是Dirichlet-Multinomial 共轭。换言之,至此已经证实了Dirichlet分布的确就是多项式分布的共轭先验几率分布。
意味着,若是咱们为多项分布的参数p选取的先验分布是Dirichlet分布,那么以p为参数的多项分布用贝叶斯估计获得的后验分布仍然服从Dirichlet分布。
进一步,通常形式的Dirichlet 分布定义以下:
而对于给定的和
,其多项分布为:
结论是:Dirichlet分布和多项分布
是共轭关系。
在开始下面的旅程以前,先来总结下咱们目前所获得的最主要的几个收获:
经过上文的第2.2节,咱们知道beta分布是二项式分布的共轭先验几率分布:
其中对应的是二项分布
的计数。针对于这种观测到的数据符合二项分布,参数的先验分布和后验分布都是Beta分布的状况,就是Beta-Binomial 共轭。 ”
经过上文的3.2节,咱们知道狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验几率分布:
针对于这种观测到的数据符合多项分布,参数的先验分布和后验分布都是Dirichlet 分布的状况,就是 Dirichlet-Multinomial 共轭。 ”
以及贝叶斯派思考问题的固定模式:
上述思考模式意味着,新观察到的样本信息将修正人们之前对事物的认知。换言之,在获得新的样本信息以前,人们对的认知是先验分布
,在获得新的样本信息
后,人们对
的认知为
。
顺便提下频率派与贝叶斯派各自不一样的思考方式:
OK,在杀到终极boss——LDA模型以前,再按部就班理解基础模型:Unigram model、mixture of unigrams model,以及跟LDA最为接近的pLSA模型。
为了方便描述,首先定义一些变量:
4.1.1 Unigram model
对于文档,用
表示词
的先验几率,生成文档
的几率为:
其图模型为(图中被涂色的w表示可观测变量,N表示一篇文档中总共N个单词,M表示M篇文档):
或为:
unigram model假设文本中的词服从Multinomial分布,而咱们已经知道Multinomial分布的先验分布为Dirichlet分布。
上图中的表示在文本中观察到的第n个词,n∈[1,N]表示该文本中一共有N个单词。加上方框表示重复,即一共有N个这样的随机变量
。其中,p和α是隐含未知变量:
通常α由经验事先给定,p由观察到的文本中出现的词学习获得,表示文本中出现每一个词的几率。
4.1.2 Mixture of unigrams model
该模型的生成过程是:给某个文档先选择一个主题,再根据该主题生成文档,该文档中的全部词都来自一个主题。假设主题有
,生成文档
的几率为:
其图模型为(图中被涂色的w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):
啊哈,长征两万五,通过前面这么长的铺垫,终于快要接近LDA模型了!由于跟LDA模型最为接近的即是下面要阐述的这个pLSA模型,理解了pLSA模型后,到LDA模型也就一步之遥——给pLSA加上贝叶斯框架,即是LDA。
4.2.1 pLSA模型下生成文档
OK,在上面的Mixture of unigrams model中,咱们假定一篇文档只有一个主题生成,可实际中,一篇文章每每有多个主题,只是这多个主题各自在文档中出现的几率大小不同。好比介绍一个国家的文档中,每每会分别从教育、经济、交通等多个主题进行介绍。那么在pLSA中,文档是怎样被生成的呢?
假设你要写M篇文档,因为一篇文档由各个不一样的词组成,因此你须要肯定每篇文档里每一个位置上的词。
再假定你一共有K个可选的主题,有V个可选的词,我们来玩一个扔骰子的游戏。
1. 假设你每写一篇文档会制做一颗K面的“文档-主题”骰子(扔此骰子能获得K个主题中的任意一个),和K个V面的“主题-词项” 骰子(每一个骰子对应一个主题,K个骰子对应以前的K个主题,且骰子的每一面对应要选择的词项,V个面对应着V个可选的词)。
2. 每写一个词,先扔该“文档-主题”骰子选择主题,获得主题的结果后,使用和主题结果对应的那颗“主题-词项”骰子,扔该骰子选择要写的词。
先扔“文档-主题”的骰子,假设(以必定的几率)获得的主题是教育,因此下一步即是扔教育主题筛子,(以必定的几率)获得教育主题筛子对应的某个词:大学。
3. 最后,你不停的重复扔“文档-主题”骰子和”主题-词项“骰子,重复N次(产生N个词),完成一篇文档,重复这产生一篇文档的方法M次,则完成M篇文档。
上述过程抽象出来便是PLSA的文档生成模型。在这个过程当中,咱们并未关注词和词之间的出现顺序,因此pLSA是一种词袋方法。具体说来,该模型假设一组共现(co-occurrence)词项关联着一个隐含的主题类别。同时定义:
表示海量文档中某篇文档被选中的几率。
表示词
在给定文档
中出现的几率。
表示具体某个主题
在给定文档
下出现的几率。
表示具体某个词
在给定主题
下出现的几率,与主题关系越密切的词,其条件几率
越大。
利用上述的第一、三、4个几率,咱们即可以按照以下的步骤获得“文档-词项”的生成模型:
因此pLSA中生成文档的整个过程即是选定文档生成主题,肯定主题生成词。
4.2.1 根据文档反推其主题分布
反过来,既然文档已经产生,那么如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),即是主题建模的目的:自动地发现文档集中的主题(分布)。
换言之,人类根据文档生成模型写成了各种文章,而后丢给了计算机,至关于计算机看到的是一篇篇已经写好的文章。如今计算机须要根据一篇篇文章中看到的一系列词概括出当篇文章的主题,进而得出各个主题各自不一样的出现几率:主题分布。即文档d和单词w是可被观察到的,但主题z倒是隐藏的。
以下图所示(图中被涂色的d、w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):
上图中,文档d和词w是咱们获得的样本(样本随机,参数虽未知但固定,因此pLSA属于频率派思想。区别于下文要介绍的LDA中:样本固定,参数未知但不固定,是个随机变量,服从必定的分布,因此LDA属于贝叶斯派思想),可观测获得,因此对于任意一篇文档,其是已知的。
从而能够根据大量已知的文档-词项信息,训练出文档-主题
和主题-词项
,以下公式所示:
故获得文档中每一个词的生成几率为:
因为可事先计算求出,而
和
未知,因此
就是咱们要估计的参数(值) ,通俗点说,就是要最大化这个θ。
用什么方法进行估计呢,经常使用的参数估计方法有极大似然估计MLE、最大后验证估计MAP、贝叶斯估计等等。由于该待估计的参数中含有隐变量z,因此咱们能够考虑EM算法。
4.2.1.1 EM算法的简单介绍
EM算法,全称为Expectation-maximization algorithm,为指望最大算法,其基本思想是:首先随机选取一个值去初始化待估计的值,而后不断迭代寻找更优的
使得其似然函数likelihood
比原来的
要大。换言之,假定如今获得了
,想求
,使得
EM的关键即是要找到的一个下界
(注:
,其中,X表示已经观察到的随机变量),而后不断最大化这个下界,经过不断求解下界
的极大化,从而逼近要求解的似然函数
。
因此EM算法的通常步骤为:
1. 随机选取或者根据先验知识初始化;
2. 不断迭代下述两步
3. 上述第二步后,若是收敛(即
收敛)则退出算法,不然继续回到第二步。
上述过程比如在二维平面上,有两条不相交的曲线,一条曲线在上(简称上曲线),一条曲线在下(简称下曲线
),下曲线为上曲线的下界。如今对上曲线未知,只已知下曲线,为了求解上曲线的最高点,咱们试着不断增大下曲线,使得下曲线不断逼近上曲线,下曲线在某一个点达到局部最大值并与上曲线在这点的值相等,记录下这个值,而后继续增大下曲线,寻找下曲线上与上曲线上相等的值,迭代到
收敛(即
收敛)中止,从而利用当前下曲线上的局部最大值看成上曲线的全局最大值(换言之,EM算法不保证必定能找到全局最优值)。以下图所示:
如下是详细介绍。
假定有训练集,包含m个独立样本,但愿从中找到该组数据的模型p(x,z)的参数。
而后经过极大似然估计创建目标函数--对数似然函数:
这里,z是隐随机变量,直接找到参数的估计是很困难的。咱们的策略是创建的下界,而且求该下界的最大值;重复这个过程,直到收敛到局部最大值。
令Qi是z的某一个分布,Qi≥0,且结合Jensen不等式,有:
为了寻找尽可能紧的下界,咱们可让使上述等号成立,而若要让等号成立的条件则是:
换言之,有如下式子成立:,且因为有:
因此可得:
最终获得EM算法的总体框架以下:
OK,EM算法还会在本博客后面的博文中具体阐述。接下来,回到pLSA参数的估计问题上。
4.2.1.2 EM算法估计pLSA的两未知参数
首先尝试从矩阵的角度来描述待估计的两个未知变量****和
。
这样,巧妙的把和
转换成了两个矩阵。换言之,最终咱们要求解的参数是这两个矩阵:
因为词和词之间是相互独立的,因此整篇文档N个词的分布为:
再因为文档和文档之间也是相互独立的,因此整个语料库中词的分布为(整个语料库M篇文档,每篇文档N个词):
其中,表示词项
在文档
中的词频,
表示文档di中词的总数,显然有
。
从而获得整个语料库的词分布的对数似然函数(下述公式中有个小错误,正确的应该是:N为M,M为N):
如今,咱们须要最大化上述这个对数似然函数来求解参数和
。对于这种含有隐变量的最大似然估计,可使用EM算法。EM算法,分为两个步骤:先E-step,后M-step。
利用贝叶斯法则,能够获得:
观察以前获得的对数似然函数的结果,因为文档长度
能够单独计算,因此去掉它不影响最大化似然函数。此外,根据E-step的计算结果,把
代入
,因而咱们只要最大化下面这个函数
便可(下述公式中有个小错误,正确的应该是:N为M,M为N):
这是一个多元函数求极值问题,而且已知有以下约束条件(下述公式中有个小错误,正确的应该是:M为N):
熟悉凸优化的朋友应该知道,通常处理这种带有约束条件的极值问题,经常使用的方法即是拉格朗日乘数法,即经过引入拉格朗日乘子将约束条件和多元(目标)函数融合到一块儿,转化为无约束条件的极值问题。
这里咱们引入两个拉格朗日乘子和
,从而写出拉格朗日函数(下述公式中有个小错误,正确的应该是:N为M,M为N):
由于咱们要求解的参数是和
,因此分别对
和
求偏导,而后令偏导结果等于0,获得(下述公式中有个小错误,正确的应该是:N为M,M为N):
消去拉格朗日乘子,最终可估计出参数和
(下述公式中有个小错误,正确的应该是:N为M,M为N):
综上,在pLSA中:
事实上,理解了pLSA模型,也就差很少快理解了LDA模型,由于LDA就是在pLSA的基础上加层贝叶斯框架,即LDA就是pLSA的贝叶斯版本(正由于LDA被贝叶斯化了,因此才须要考虑历史先验知识,才加的两个先验参数)。
4.3.1 pLSA跟LDA的对比:生成文档与参数估计
在pLSA模型中,咱们按照以下的步骤获得“文档-词项”的生成模型:
下面,我们对比下本文开头所述的LDA模型中一篇文档生成的方式是怎样的:
****从上面两个过程能够看出,LDA在PLSA的基础上,为主题分布和词分布分别加了两个Dirichlet先验。
继续拿以前讲解PLSA的例子进行具体说明。如前所述,在PLSA中,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,而后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。
而在LDA中,选主题和选词依然都是两个随机的过程,依然多是先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,而后再从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。
那PLSA跟LDA的区别在于什么地方呢?区别就在于:
看到这,你可能凌乱了,你说面对多个主题或词,各个主题或词被抽中的几率不同,因此抽取主题或词是随机抽取,还好理解。但如今你说主题分布和词分布自己也都是不肯定的,这是怎么回事?没办法,谁叫Blei等人“强行”给PLSA安了个贝叶斯框架呢,正由于LDA是PLSA的贝叶斯版本,因此主题分布跟词分布自己由先验知识随机给定。
进一步,你会发现:
pLSA中,主题分布和词分布肯定后,以必定的几率(、
)分别选取具体的主题和词项,生成好文档。然后根据生成好的文档反推其主题分布、词分布时,最终用EM算法(极大似然估计思想)求解出了两个未知但固定的参数的值:
(由
转换而来)和
(由
转换而来)。
文档d产生主题z的几率,主题z产生单词w的几率都是两个固定的值。
但在贝叶斯框架下的LDA中,咱们再也不认为主题分布(各个主题在文档中出现的几率分布)和词分布(各个词语在某个主题下出现的几率分布)是惟一肯定的(而是随机变量),而是有不少种可能。但一篇文档总得对应一个主题分布和一个词分布吧,怎么办呢?LDA为它们弄了两个Dirichlet先验参数,这个Dirichlet先验为某篇文档随机抽取出某个主题分布和词分布。
文档d产生主题z(准确的说,实际上是Dirichlet先验为文档d生成主题分布Θ,而后根据主题分布Θ产生主题z)的几率,主题z产生单词w的几率都再也不是某两个肯定的值,而是随机变量。
换言之,LDA在pLSA的基础上给这两参数(、
)加了两个先验分布的参数(贝叶斯化):一个主题分布的先验分布Dirichlet分布
,和一个词语分布的先验分布Dirichlet分布
。
综上,LDA真的只是pLSA的贝叶斯版本,文档生成后,二者都要根据文档去推断其主题分布和词语分布(即二者本质都是为了估计给定文档生成主题,给定主题生成词语的几率),只是用的参数推断方法不一样,在pLSA中用极大似然估计的思想去推断两未知的固定参数,而LDA则把这两参数弄成随机变量,且加入dirichlet先验。
因此,pLSA跟LDA的本质区别就在于它们去估计未知参数所采用的思想不一样,前者用的是频率派思想,后者用的是贝叶斯派思想。
比如,我去一朋友家:
OK,相信已经解释清楚了。若是是在机器学习班上face-to-face,更好解释和沟通。
4.3.2 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个坐标轴弄为p一、p二、p3,以下图所示:
在这个三维坐标轴所划分的空间里,每个坐标点(p1,p2,p3)就对应着一个主题分布,且某一个点(p1,p2,p3)的大小表示3个主题z一、z二、z3出现的几率大小(由于各个主题出现的几率和为1,因此p1+p2+p3 = 1,且p一、p二、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分布选中的几率值很小。
因此虽说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。因此,从主题分布中抽取主题,这个过程也不是彻底随机的,而是按照各个主题出现的几率值大小进行抽取。
4.3.3 pLSA跟LDA的几率图对比
接下来,对比下LDA跟pLSA的几率模型图模型,左图是pLSA,右图是LDA(右图不太规范,z跟w都得是小写, 其中,阴影圆圈表示可观测的变量,非阴影圆圈表示隐变量,箭头表示两变量间的条件依赖性conditional dependency,方框表示重复抽样,方框右下角的数字表明重复抽样的次数):
对应到上面右图的LDA,只有W / w是观察到的变量,其余都是隐变量或者参数,其中,Φ表示词分布,Θ表示主题分布, 是主题分布Θ的先验分布(即Dirichlet 分布)的参数,
是词分布Φ的先验分布(即Dirichlet 分布)的参数,N表示文档的单词总数,M表示文档的总数。
因此,对于一篇文档d中的每个单词,LDA根据先验知识肯定某篇文档的主题分布θ,而后从该文档所对应的多项分布(主题分布)θ中抽取一个主题z,接着根据先验知识
肯定当前主题的词语分布ϕ,而后从主题z所对应的多项分布(词分布)ϕ中抽取一个单词w。而后将这个过程重复N次,就产生了文档d。
换言之:
综上,M 篇文档会对应于 M 个独立的 Dirichlet-Multinomial 共轭结构,K 个 topic 会对应于 K 个独立的 Dirichlet-Multinomial 共轭结构。
4.3.4 pLSA跟LDA参数估计方法的对比
上面对比了pLSA跟LDA生成文档的不一样过程,下面,我们反过来,假定文档已经产生,反推其主题分布。那么,它们估计未知参数所采用的方法又有什么不一样呢?
在pLSA中,咱们使用EM算法去估计“主题-词项”矩阵Φ(由转换获得)和“文档-主题”矩阵Θ(由
转换获得)这两个参数,并且这两参数都是个固定的值,只是未知,使用的思想其实就是极大似然估计MLE。
而在LDA中,估计Φ、Θ这两未知参数能够用变分(Variational inference)-EM算法,也能够用gibbs采样,前者的思想是最大后验估计MAP(MAP与MLE相似,都把未知参数看成固定的值) ,后者的思想是****贝叶斯估计。 贝叶斯估计是对MAP的扩展,但它与MAP有着本质的不一样,即贝叶斯估计把待估计的参数看做是服从某种先验分布的随机变量。
因为LDA把要估计的主题分布和词分布看做是其先验分布是Dirichlet分布的随机变量,因此,在LDA这个估计主题分布、词分布的过程当中,它们的先验分布(即Dirichlet分布)事先由人为给定,那么LDA就是要去求它们的后验分布(LDA中可用gibbs采样去求解它们的后验分布,获得指望、
)!
此外,不厌其烦的再插一句,在LDA中,主题分布和词分布自己都是多项分布,而由上文3.2节可知“Dirichlet分布是多项式分布的共轭先验几率分布”,所以选择Dirichlet 分布做为它们的共轭先验分布。意味着为多项分布的参数p选取的先验分布是Dirichlet分布,那么以p为参数的多项分布用贝叶斯估计获得的后验分布仍然是Dirichlet分布。
4.3.5 LDA参数估计:Gibbs采样
理清了LDA中的物理过程,下面我们来看下如何学习估计。
相似于pLSA,LDA的原始论文中是用的变分-EM算法估计未知参数,后来发现另外一种估计LDA未知参数的方法更好,这种方法就是:Gibbs Sampling,有时叫Gibbs采样或Gibbs抽样,都一个意思。Gibbs抽样是马尔可夫链蒙特卡尔理论(MCMC)中用来获取一系列近似等于指定多维几率分布(好比2个或者多个随机变量的联合几率分布)观察样本的算法。
OK,给定一个文档集合,w是能够观察到的已知变量,和
是根据经验给定的先验参数,其余的变量z,θ和φ都是未知的隐含变量,须要根据观察到的变量来学习估计的。根据LDA的图模型,能够写出全部变量的联合分布:
注:上述公式中及下文中,等价上文中定义的
,
等价于上文中定义的
,
等价于上文中定义的
,等价于上文中定义的
。
由于产生主题分布θ,主题分布θ肯定具体主题,且
产生词分布φ、词分布φ肯定具体词,因此上述式子等价于下述式子所表达的联合几率分布
:
其中,第一项因子表示的是根据肯定的主题
和词分布的先验分布参数
采样词的过程,第二项因子
是根据主题分布的先验分布参数
采样主题的过程,这两项因子是****须要计算的两个未知参数。
因为这两个过程是独立的,因此下面能够分别处理,各个击破。
第一个因子,能够根据肯定的主题
和从先验分布
取样获得的词分布Φ产生:
因为样本中的词服从参数为主题的独立多项分布,这意味着能够把上面对词的乘积分解成分别对主题和对词的两层乘积:
其中,是词 t 在主题 k 中出现的次数。
回到第一个因子上来。目标分布须要对词分布Φ积分,且结合咱们以前在3.1节定义的Dirichlet 分布的归一化系数
的公式
可得:
这个结果能够看做K个Dirichlet-Multinomial模型的乘积。
如今开始求第二个因子。相似于
的步骤,先写出条件分布,而后分解成两部分的乘积:
其中, 表示的单词 i 所属的文档,
是主题 k 在文章 m 中出现的次数。
对主题分布Θ积分可得:
综合第一个因子和第二个因子的结果,获得的联合分布结果为:
接下来,有了联合分布,我们即可以经过联合分布来计算在给定可观测变量 w 下的隐变量 z 的条件分布(后验分布)
来进行贝叶斯分析。
换言之,有了这个联合分布后,要求解第m篇文档中的第n个词(下标为的词)的所有条件几率就好求了。
先定义几个变量。表示除去
的词,
,
。
而后,排除当前词的主题分配,即根据其余词的主题分配和观察到的单词来计算当前词主题的几率公式为:
勘误:考虑到,因此上述公式的第二行的分子,非p(w,z) *p(z),而是p(w|z)*p(z)。
且有:
最后一步,即是根据Markov链的状态获取主题分布的参数Θ和词分布的参数Φ。
换言之根据贝叶斯法则和Dirichlet先验,以及上文中获得的和
各自被分解成两部分乘积的结果,能够计算获得每一个文档上Topic的后验分布和每一个Topic下的词的后验分布分别以下( 据上文可知:其后验分布跟它们的先验分布同样,也都是Dirichlet 分布 ) :
其中,是构成文档m的主题数向量,
是构成主题k的词项数向量。
此外,别忘了上文中2.4节所述的Dirichlet的一个性质,以下:
“ 若是,一样能够证实有下述结论成立:
即:若是,则
中的任一元素
的指望是:
能够看出,超参数的直观意义就是事件先验的伪计数(prior pseudo-count)。 ”
因此,最终求解的Dirichlet 分布指望为:
而后将和
的结果代入以前获得的
的结果中,可得:
仔细观察上述结果,能够发现,式子的右半部分即是,这个几率的值对应着
的路径几率。如此,K 个topic 对应着K条路径,Gibbs Sampling 便在这K 条路径中进行采样,以下图所示:
何等奇妙,就这样,Gibbs Sampling经过求解出主题分布和词分布的后验分布,从而成功解决主题分布和词分布这两参数未知的问题。
本文发表后,部分热心的读者在微博上分享了他们本身理解LDA的心得,也欢迎更多朋友分享你的理解心得(好比评论在本文下,或评论在微博上),从而在分享、讨论的过程当中让更多人能够更好的理解:
这个LDA的笔记从11月17日下午开始动笔,到21日基本写完,25日基本改完,前先后后,基本写完 + 基本改完,总共花了近10 天的时间,后面还得不断完善。前5天就像在树林里中行走,要走的大方向很是明确,但在选取哪条小道上则颇费了一番周折,但当最后走出了树林,登上山顶,俯瞰整个森林时,奥,原来它就长这样,会有一种彻爽的感受!然后5 天,则慢慢开始接近LDA的本质:pLSA的贝叶斯版本。
写做过程艰难但结果透彻,也但愿读者能享受到其中。
最后,再次感谢本文最主要的参考:LDA原始论文、pLSA原始论文、LDA数学八卦、机器学习班第12次课主题模型PPT,和Parameter estimation for text analysis等等的做者们(本文中大部分的图片、公式截取自这些参考资料上),由于有他们的创造或分享,我才有机会理解和再加工LDA,最终让本文得以成文。
后续几天会不断修改完善本文,如有任何问题,可在本文下评论,thanks。
July、二零一四年十一月二十一日。