http://blog.csdn.net/pipisorry/article/details/42560693
Papadimitriou、Raghavan、Tamaki和Vempala在1998年发表的一篇论文中提出了潜在语义索引。1999年,Thomas Hofmann又在此基础上,提出了概率性潜在语义索引(Probabilistic Latent Semantic Indexing,简称PLSI)。
隐含狄利克雷分配LDA可能是最常见的主题模型,是一般化的PLSI,由Blei, David M.、吴恩达和Jordan, Michael I于2003年提出。LDA允许文档拥有多种主题。其它主体模型一般是在LDA基础上改进的。例如Pachinko分布在LDA度量词语关联之上,还加入了主题的关联度。
皮皮blog
Unigram model、mixture of unigrams model,以及pLSA模型。
定义变量:
{给定文档,同时也给定主题}
对于文档,用
表示词
的先验概率,生成文档
的概率为:
其图模型为(图中被涂色的w表示可观测变量,N表示一篇文档中总共N个单词,M表示M篇文档):
unigram model假设文本中的词服从Multinomial分布,而我们已经知道Multinomial分布的先验分布为Dirichlet分布。
上图中的表示在文本中观察到的第n个词,n∈[1,N]表示该文本中一共有N个单词。加上方框表示重复,即一共有N个这样的随机变量
。
假设我们的词典中一共有 V 个词 v1,v2,⋯vV,那么最简单的 Unigram Model 就是认为上帝是按照如下的游戏规则产生文本的。
上帝的这个唯一的骰子各个面的概率记为 p→=(p1,p2,⋯,pV), 所以每次投掷骰子类似于一个抛钢镚时候的贝努利实验, 记为 w∼Mult(w|p→)。
上帝投掷V 个面的骰子
对于一篇文档d=w→=(w1,w2,⋯,wn), 该文档被生成的概率就是
p(w→)=p(w1,w2,⋯,wn)=p(w1)p(w2)⋯p(wn) {对整篇文档来说,词之间是相互独立的。这里并不关注每个词的发生次数,所以还不是多项分布的正式公式}
而文档和文档之间我们认为是独立的, 所以如果语料中有多篇文档 W=(w1−→,w2−→,…,wm−→),则该语料的概率是p(W)=p(w1−→)p(w2−→)⋯p(wm−→) {文档之间也是相互独立的}
在 Unigram Model 中假设了文档之间是独立可交换的,而文档中的词也是独立可交换的,所以一篇文档相当于一个袋子,里面装了一些词,而词的顺序信息就无关紧要了,这样的模型也称为词袋模型(Bag-of-words)。
假设语料中总的词频是N, 在所有的 N 个词中,如果我们关注每个词 vi 的发生次数 ni,那么n→=(n1,n2,⋯,nV)正好是一个多项分布
p(n→)=Mult(n→|p→,N)=(Nn→)∏k=1Vpnkk {对于整个语料中的词来说的,是->n的概率}
此时, 语料的概率是
p(W)=p(w1−→)p(w2−→)⋯p(wm−→)=∏k=1Vpnkk {对整个语料来说,词也都是相对独立的,可由文档被生成的概率得出}
当然,我们很重要的一个任务就是估计模型中的参数p→,也就是问上帝拥有的这个骰子的各个面的概率是多大,按照统计学家中频率派的观点,使用最大似然估计最大化P(W),于是参数pi的估计值就是piˆ=niN
{主题未给定,只是一篇文档只有一个主题}
一篇文档只由一个主题生成。该模型的生成过程是:给某个文档先选择一个主题,再根据该主题生成文档,该文档中的所有词都来自一个主题。假设主题有
,生成文档{语料}
的概率为:
其图模型为(图中被涂色的w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):
Note: 这个图的意思是,对一篇文档中的词,都是由一个主题z(放在小方框外面了)产生。
{看下面的p(W)公式,这个应该是混合一元模型的连续变量版?}
对于以上模型,贝叶斯统计学派的统计学家会有不同意见,他们会很挑剔的批评只假设上帝拥有唯一一个固定的骰子是不合理的。在贝叶斯学派看来,一切参数都是随机变量,以上模型中的骰子p→不是唯一固定的,它也是一个随机变量。所以按照贝叶斯学派的观点,上帝是按照以下的过程在玩游戏的
上帝的这个坛子里面,骰子可以是无穷多个,有些类型的骰子数量多,有些类型的骰子少,所以从概率分布的角度看,坛子里面的骰子p→ 服从一个概率分布 p(p→),这个分布称为参数p→ 的先验分布。
Dirichlet 先验下的 Unigram Model
Unigram Model的概率图模型
其中,p和α是隐含未知变量:
以上贝叶斯学派的游戏规则的假设之下,语料W产生的概率如何计算呢?由于我们并不知道上帝到底用了哪个骰子p→,所以每个骰子都是可能被使用的,只是使用的概率由先验分布p(p→)来决定。对每一个具体的骰子p→,由该骰子产生数据的概率是p(W|p→), 所以最终数据产生的概率就是对每一个骰子p→上产生的数据概率进行积分累加求和
p(W)=∫p(W|p→)p(p→)dp→
在贝叶斯分析的框架下,此处先验分布p(p→) 就可以有很多种选择了,注意到 P(n→)=Mult(n→|p→,N)
实际上是在计算一个多项分布的概率,所以对先验分布的一个比较好的选择就是多项分布对应的共轭分布,即 Dirichlet 分布
Dir(p→|α→)=1Δ(α→)∏k=1Vpαk−1k,α→=(α1,⋯,αV)
Dirichlet 先验 + 多项分布的数据 → 后验分布为 Dirichlet 分布
Dir(p→|α→)+MultCount(n→)=Dir(p→|α→+n→)
于是,在给定了参数 p→的先验分布Dir(p→|α→) 的时候,各个词出现频次的数据 n→∼Mult(n→|p→,N) 为多项分布, 所以无需计算,我们就可以推出后验分布是
p(p→|W,α→)=Dir(p→|n→+α→)=1Δ(n→+α→)∏k=1Vpnk+αk−1kdp→(1)
贝叶斯的框架下参数p→的估计:由于我们已经有了参数的后验分布,所以合理的方式是使用后验分布的极大值点,或者是参数在后验分布下的平均值。在该文档中,我们取平均值作为参数的估计值。使用上个小节中的结论,由于p→ 的后验分布为 Dir(p→|n→+α→),于是
E(p→)=(n1+α1∑Vi=1(ni+αi),n2+α2∑Vi=1(ni+αi),⋯,nV+αV∑Vi=1(ni+αi))
也就是说对每一个 pi, 我们用下式做参数估计
piˆ=ni+αi∑Vi=1(ni+αi)(2)
考虑到 αi 在 Dirichlet 分布中的物理意义是事件的先验的伪计数,这个估计式子的含义是很直观的:每个参数的估计值是其对应事件的先验的伪计数和数据中的计数的和在整体计数中的比例。
进一步,我们可以计算出文本语料的产生概率为
p(W|α→)=∫p(W|p→)p(p→|α→)dp→=∫∏k=1VpnkkDir(p→|α→)dp→=∫∏k=1Vpnkk1Δ(α→)∏k=1Vpαk−1kdp→=1Δ(α→)∫∏k=1Vpnk+αk−1kdp→=Δ(n→+α→)Δ(α→)(3)
Δ(α→)=∫∏k=1Vpαk−1kdp→
皮皮blog
跟LDA模型最为接近的便是下面要阐述的这个pLSA模型——给pLSA加上贝叶斯框架,便是LDA。 {pLSA样本随机,参数虽未知但固定,属于频率派思想;区别LDA样本固定,参数未知但不固定,是个随机变量,服从一定的分布,LDA属于贝叶斯派思想}
Mixture of unigrams model中,我们假定一篇文档只由一个主题生成,可实际中,一篇文章往往有多个主题,只是这多个主题各自在文档中出现的概率大小不一样。比如介绍一个国家的文档中,往往会分别从教育、经济、交通等多个主题进行介绍。
Hoffman 于 1999 年给出的PLSA(Probabilistic Latent Semantic Analysis) 模型中首先进行了明确的数学化。Hoffman 认为一篇文档(Document) 可以由多个主题(Topic) 混合而成, 而每个Topic 都是词汇上的概率分布,文章中的每个词都是由一个固定的 Topic 生成的。下图是英语中几个Topic 的例子。
Topic 就是Vocab 上的概率分布
假设你要写M篇文档,由于一篇文档由各个不同的词组成,所以你需要确定每篇文档里每个位置上的词。再假定你一共有K个可选的主题,有V个可选的词,咱们来玩一个扔骰子的游戏。
- 所以,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。
![]()
![]()
在这个过程中,我们并未关注词和词之间的出现顺序,所以pLSA是一种词袋方法。具体说来,该模型假设一组共现(co-occurrence)词项关联着一个隐含的主题类别。
利用上述的第1、3、4个概率,我们便可以按照如下的步骤得到“文档-词项”的生成模型:
所以pLSA中生成文档的整个过程便是选定文档生成主题,确定主题生成词。
这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)。
文档d和单词w自然是可被观察到的,但主题z却是隐藏的。如下图所示(图中被涂色的d、w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):
Note: 这个图的意思是,文档中的每一个词都是先选定一个主题,再从中选择词得到;文档中的每个词并不一定对应同一个主题z(z放在了小方框的里面了)。
上图中,文档d和词w是我们得到的样本(样本随机,参数虽未知但固定,所以pLSA属于频率派思想。区别于LDA:样本固定,参数未知但不固定,是个随机变量,服从一定的分布,所以LDA属于贝叶斯派思想),可观测得到,所以对于任意一篇文档,其是已知的。
从而可以根据大量已知的文档-词项信息,训练出文档-主题
和主题-词项
,如下公式所示:
故得到文档中每个词的生成概率为:
{P(di)应该都一样吧-}
由于可事先计算求出,而
和
未知,所以
就是我们要估计的参数(值),通俗点说,就是要最大化这个θ。
常用的参数估计方法有极大似然估计MLE、最大后验证估计MAP、贝叶斯估计等等。因为该待估计的参数中含有隐变量z,所以我们可以考虑EM算法。
PLSA算法的EM推导详细介绍
EM算法,全称为Expectation-maximization algorithm,为期望最大算法,其基本思想是:首先随机选取一个值去初始化待估计的值,然后不断迭代寻找更优的
使得其似然函数likelihood
比原来的
要大。换言之,假定现在得到了
,想求
,使得
EM的关键便是要找到的一个下界
(注:
,其中,X表示已经观察到的随机变量),然后不断最大化这个下界,通过不断求解下界
的极大化,从而逼近要求解的似然函数
。
所以EM算法的一般步骤为:
上述过程好比在二维平面上,有两条不相交的曲线,一条曲线在上(简称上曲线),一条曲线在下(简称下曲线
),下曲线为上曲线的下界。现在对上曲线未知,只已知下曲线,为了求解上曲线的最高点,我们试着不断增大下曲线,使得下曲线不断逼近上曲线,下曲线在某一个点达到局部最大值并与上曲线在这点的值相等,记录下这个值,然后继续增大下曲线,寻找下曲线上与上曲线上相等的值,迭代到
收敛(即
收敛)停止,从而利用当前下曲线上的局部最大值当作上曲线的全局最大值(换言之,EM算法不保证一定能找到全局最优值)。如下图所示:
假定有训练集,包含m个独立样本,希望从中找到该组数据的模型p(x,z)的参数。
然后通过极大似然估计建立目标函数--对数似然函数:
这里,z是隐随机变量,直接找到参数的估计是很困难的。我们的策略是建立的下界,并且求该下界的最大值;重复这个过程,直到收敛到局部最大值。
令Qi是z的某一个分布(表达式待会可以求解出来),Qi≥0,且结合Jensen不等式,有:
[TopicModel - EM算法]
为了寻找尽量紧的下界,我们可以让使上述等号成立,而若要让等号成立的条件则是:
换言之,有以下式子成立:,且由于有:
所以可得:
{the distribution of zi given xi and parameterized by theta,e.g. Qi(Zi) = theta0^x0*theta1^x1*... -}
{E步中,是通过上次的p(z|d)和p(w|z)求出p(x,z;theta)的}
首先尝试从矩阵的角度来描述待估计的两个未知变量和
。
这样,巧妙的把和
转换成了两个矩阵。换言之,最终我们要求解的参数是这两个矩阵:
由于词和词之间是相互独立的,所以整篇文档N个词的分布为:
再由于文档和文档之间也是相互独立的,所以整个语料库中词的分布为(整个语料库M篇文档,每篇文档N个词):
其中,表示词项
在文档
中的词频,
表示文档di中词的总数,显然有
从而得到整个语料库的词分布的对数似然函数(下述公式中有个小错误,正确的应该是:N为M,M为N):
{note:1)步的推导:
其中∑ P(wj|zk)P(zk|di) = P(wj|di)的推导:
{条件概率的全概率并且我们是按照如下方式得到“词-文档”的生成模型的:
1. 按照概率P(di)选择一篇文档di
2. 按照概率P(zk|di)选择一个隐含的主题类别zk
3. 按照概率P(wj|zk)生成一个词wj
根据操作的物理意义 P(wj,zk,di) = P(wj,zk)如果从PLSA的话,模型本身就设定w与d无关的
按照这个顺序操作的话 P(wj|zk,di) 确实等于 P(wj|zk);因为主题zk都是从文章di中选的,词wi又都是从主题zk中选的,所以这里的词wi都是从文章di中选的
对于word只关注来自哪个topic,不关注来自哪个doc-} }
现在,我们需要最大化上述这个对数似然函数来求解参数和
。对于这种含有隐变量的最大似然估计,可以使用EM算法。
利用贝叶斯法则,可以得到:
![]()
{步骤中,我们假定所有的
和
都是已知的,初始时随机赋值,后面迭代的过程中取前一轮M步骤中得到的参数值。}
观察之前得到的对数似然函数的结果,由于文档长度
可以单独计算,所以去掉它不影响最大化似然函数。
此外,根据E-step的计算结果,把代入
,于是我们只要最大化下面这个函数
{E(
)}即可(下述公式中有个小错误,正确的应该是:N为M,M为N):
E
![]()
{TopicModel - EM算法 - Lazy Statistician规则:E(z) = ∑P(zk|di, wj)z中z替换成L式, 相当于把其中与z相关的部分积分掉
TopicModel - EM算法 最大化Complete data对数似然函数的期望(即把其中与z相关的部分积分掉)}
这是一个多元函数求极值问题,并且已知有如下约束条件(下述公式中有个小错误,正确的应该是:M为N):
(1)
凸优化中,一般处理这种带有约束条件的极值问题,常用的方法便是拉格朗日乘数法,即通过引入拉格朗日乘子将约束条件和多元(目标)函数融合到一起,转化为无约束条件的极值问题。
这里我们引入两个拉格朗日乘子和
,从而写出拉格朗日函数(下述公式中有个小错误,正确的应该是:N为M,M为N):
因为我们要求解的参数是和
,所以分别对
和
求偏导,然后令偏导结果等于0,得到(下述公式中有个小错误,正确的应该是:N为M,M为N):
(2)
消去拉格朗日乘子,最终可估计出参数和
(下述公式中有个小错误,正确的应该是:N为M,M为N):
{注意这里进行过方程两边同时乘以和
的变形},联立上面4组方程(1)(2),我们就可以解出M步骤中通过最大化期望估计出的新的参数值
解方程组的关键在于先求出,其实只需要做一个加和运算就可以把
的系数都化成1,后面就好计算了}
[TopicModel - PLSA模型及PLSA的EM推导]
然后使用更新后的参数值,我们又进入E步骤,计算隐含变量 Given当前估计的参数条件下的后验概率。如此不断迭代,直到满足终止条件。
from:http://blog.csdn.net/pipisorry/article/details/42560693
ref: 1.TopicModel - LSA(隐性语义分析)的早期方法SVD
2.TopicModel - EM算法及PLSA的EM推导
3.TopicModel - LDA详解