PLSI主题模型

来源:互联网 发布:淘宝网儿童棉睡衣 编辑:程序博客网 时间:2024/06/07 04:07

一、主题模型是什么

  在讲PLSI主题模型前,我们先来看一个例子,理解一下什么是主题模型。这有两句话,第一句是‘乔布斯离我们而去了’,第二句是‘苹果价格会不会降’。如果是由人来判断,我们一看就知道这两个句子是有关联的,因为第一句中出现了乔布斯,所以我们自然而然地认为第二句中的苹果指的不是我们吃的苹果,而是电子产品的品牌苹果。但是如果我们采用传统判断文本相似度的方法来判断,并不会得到两者相似的结论,因为这些方法往往基于一个基本假设:文档之间重复的词语越多越可能相似。这一点在实际中并不尽然。很多时候相关程度取决于背后的语义联系,而非表面的词语重复。

  那么,这种语义关系应该怎样度量呢?事实上在自然语言处理领域里已经有了很多从词、词组、句子、篇章角度进行衡量的方法。本文要介绍的是其中一个语义挖掘的利器:主题模型。

  主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,就是对文字中隐含主题的一种建模方法。主题模型通过分析文本中的词来发现文档中的主题、主题之间的联系方式和主题的发展。通过主题模型可以使我们组织和总结无法人工标注的海量电子文档。

二、PLSI

  在之前的博客里我们已经学习了LSI,但LSI缺少令人满意的统计学基础,运算量过大,且无法解决一词多义的问题,因此,在LSI的基础上,Thomas Hofmann于1999年提出了PLSI模型。

三、PLSI的文档生成模型

  要理解PLSI主题模型,我们首先要理解PLSI假定的文档生成模型是什么。假设你要写M篇文档,由于一篇文档由各个不同的词组成,所以你需要确定每篇文档里每个位置上的词。再假定你一共有K个可选的主题,有V个可选的词,咱们来玩一个扔骰子的游戏。

  1、假设你每写一篇文档会制作一颗K面的“文档-主题”骰子(扔此骰子能得到K个主题中的任意一个),和K个V面的“主题-词项” 骰子(每个骰子对应一个主题,K个骰子对应之前的K个主题,且骰子的每一面对应要选择的词项,V个面对应着V个可选的词)。
  比如可令K=3,即制作1个含有3个主题的“文档-主题”骰子,这3个主题可以是:教育、经济、交通。然后令V = 3,制作3个有着3面的“主题-词项”骰子,其中,教育主题骰子的3个面上的词可以是:大学、老师、课程,经济主题骰子的3个面上的词可以是:市场、企业、金融,交通主题骰子的3个面上的词可以是:高铁、汽车、飞机。如下图所示:



  2、每写一个词,先扔该“文档-主题”骰子选择主题,得到主题的结果后,使用和主题结果对应的那颗“主题-词项”骰子,扔该骰子选择要写的词。要注意,每篇文档有其自己的“文档-主题”骰子。
  上面这个投骰子产生词的过程简化下便是:“先以一定的概率选取主题,再以一定的概率选取词”。事实上,一开始可供选择的主题有3个:教育、经济、交通,那为何偏偏选取教育这个主题呢?其实是随机选取的,只是这个随机遵循一定的概率分布。比如3个主题的概率分布是{教育:0.5,经济:0.3,交通:0.2},我们把各个主题z在文档d中出现的概率分布称之为主题分布,且是一个多项分布。
  同样的,从主题分布中随机抽取出教育主题后,依然面对着3个词:大学、老师、课程,这3个词都可能被选中,但它们被选中的概率也是不一样的。比如3个词的概率分布是{大学:0.5,老师:0.3,课程:0.2},我们把各个词语w在主题z下出现的概率分布称之为词分布,这个词分布也是一个多项分布。
  所以,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。

  3、最后,不停的重复扔“文档-主题”骰子和”主题-词项“骰子,重复N次(产生N个词),完成一篇文档,重复这产生一篇文档的方法M次,则完成M篇文档。

  在这个过程中,我们并未关注词和词之间出现的顺序,所以pLSA是一种词袋方法。具体说来,该模型假设一组共现(co-occurrence)词项关联着一个隐含的主题类别。
接下来,我们对生成模型中出现的一些变量、概率做一下定义:

  P(di)表示海量文档中某篇文档被选中的概率。
  P(wj|di)表示词wj在给定文档di中出现的概率。怎么计算得到呢?针对海量文档,对所有文档进行分词后,得到一个词汇列表,这样每篇文档就是一个词语的集合。对于每个词语,用它在文档中出现的次数除以文档中词语总的数目便是它在文档中出现的概率P(wj|di)。
  P(zk|di)表示具体某个主题zk在给定文档di下出现的概率。
  P(wj|zk)表示具体某个词wj在给定主题zk下出现的概率,与主题关系越密切的词,其条件概率P(wj|zk)越大。
  利用上述的第1、3、4个概率,我们便可以按照如下的步骤得到“文档-词项”的生成模型:
  1、按照概率P(di)选择一篇文档di
  2、选定文档di后,从主题分布中按照概率P(zk|di)选择一个隐含的主题类别。
  所以PLSA中生成文档的整个过程便是选定文档生成主题,确定主题生成词。

四、PLSI模型

  我们已经知道了PLSI的生成模型,那如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)。

  文档d和单词w自然是可被观察到的,但主题z却是隐藏的。如下图所示:




  上图中,文档d和词w是我们得到的样本,可观测得到,所以对于任意一篇文档,其P(wj|di)是已知的。从而可以根据大量已知的文档-词项信息,训练出文档-主题和主题-词项 ,如下公式所示:

P(wj|di)=k=1KP(wj|zk)P(zk|di)

  故得到文档中每个词的生成概率为:

P(di,wj)=P(di)P(wj|di)=P(di)k=1KP(wj|zk)P(zk|di)

  由于P(di)可事先计算求出,而P(wj|zk)和P(zk|di)未知,所以θ=(P(w_j|z_k),P(z_k|d_i$))就是我们要估计的参数(值),通俗点说,就是要最大化这个θ。
常用的参数估计方法有极大似然估计MLE、最大后验证估计MAP、贝叶斯估计等等。因为该待估计的参数中含有隐变量z,所以我们可以考虑EM算法。

五、EM求解PLSI模型

  首先尝试从矩阵的角度来描述待估计的两个未知变量P(wj|zk)和P(zk|di)。

  假定用ϕk表示词表V在主题zk上的一个多项分布,则ϕk可以表示成一个向量,每个元素ϕk,j表示词项wj出现在主题zk中的概率,即

P(wj|zk)=ϕk,j, wjVϕk,j=1

  用θi表示所有主题Z在文档di上的一个多项分布,则θi可以表示成一个向量,每个元素θi,k表示主题zk出现在文档di中的概率,即

P(zk|di)=θi,k, zkZθi,k=1

  这样,巧妙的把P(wj|zk)和P(zk|di)转换成了两个矩阵。换言之,最终我们要求解的参数是这两个矩阵:

Φ=[ϕ1,,ϕk], zkZΘ=[θi,,θM], diD

  由于词和词之间是相互独立的,所以整篇文档N个词的分布为:

P(W|di)=j=1NP(di,wj)n(di,wj)

  再由于文档和文档之间也是相互独立的,所以整个语料库中词的分布为(整个语料库M篇文档,每篇文档N个词):

P(W|D)=i=1Mj=1NP(di,wj)n(di,wj)

  其中,n(di,wj)表示词项wj在文档di中的词频,n(di)表示文档di中词的总数,显然有n(di)=k,jVn(di,wj)。从而得到整个语料库的词分布的对数似然函数:

L(ϕ,θ)=i=1Mj=1Nn(di,wj)logp(di,wj)

  其中:

j=1Nn(di,wj)logp(di,wj)=j=1Nn(di,wj)logp(di)p(wj|di)=j=1Nn(di,wj)[logp(di)+logp(wj|di)]

  又n(di)=k,jVn(di,wj),上式等于

=n(di)[logp(di)+j=1Nn(di|wj)n(di)logp(wj|di)]=n(di)[logp(di)+j=1Nn(di,wj)n(di)logk=1Kp(wj|zk)p(zk|di)]

  又P(di)n(di)已知,所以对数似然函数可以转换为:

L(ϕ,θ)=i=1Mj=1Nn(di,wj)log[k=1Kp(wj|zk)p(zk|di)]

  则E(L)为:

E(L)=i=1Mj=1Nn(di,wj)k=1Kp(zk|di,wj)log[p(wj|zk)p(zk|di)]

  即:

E(L)=i=1Mj=1Nn(di,wj)k=1Kp(zk|di,wj)log(ϕk,j,θi,k)

  接下来用EM算法对未知参数求解:
  E-step:假定参数已知,计算此时隐变量的后验概率。

P(zk|di,wj)=P(zk,di,wj)Kl1P(zl,di,wj)=P(wj|di,zk)P(zk|di)P(di)Kl1(P(wj|di,zl)P(zl|di)P(di))=P(wj|zk)p(zk|di)Kl1P(wj|zl)P(zl|di)=ϕk,jθi,kKl1ϕl,jθi,l

  求得后验概率后,代入E(L),求解使E(L)达到最大值的θi,kϕk,j值,即M-step。
M-step:这是一个多元函数求极值问题,并且已知有如下约束条件:

j=1Mϕk,j=1k=1Kθi,k=1

  采用朗格朗日乘数法,引入两个拉格朗日乘子,构造拉格朗日函数如下:

H=Lc+k=1KTk1j=1Mϕk,j+i=1Nρi(1k=1Kθi,k)

  分别对参数求偏导,并使偏导结果等于0。

i=1Nn(di,wj)P(zk|di,wj)Tkϕk,j=0, 1jM,1kKj=1Mn(di,wj)P(zk|di,wj)ρiθi,k=0, 1iN,1kK

  消除拉格朗日乘子,估计出参数:

ϕk,j=Ni=1n(di,wj)P(zk|di,wj)Mm=1Ni=1n(di,wm)P(zk|di,wm)

θi,k=Mj=1n(di,wj)P(zk|di,wj)n(di)

  不断循环EM步骤,直到结果收敛,结束求解过程。

六、PLSI的优缺点

优点:

  1、定义了概率模型,而且每个变量以及相应的概率分布和条件概率分布都有明确的物理解释;
  2、相比于LSI隐含了高斯分布假设,PLSI隐含的Multi-nomial分布假设更符合文本特性;
  3、PLSI的优化目标是KL-divergence最小,而不是依赖于最小均方误差等准则;
  4、可以利用各种model selection和complexity control准则来确定topic的维数。

缺点:

  1、PLSI的概率模型不够完备:在document层面上没有提供合适的概率模型,使得PLSI并不是完备的生成式模型,而必须在确定document的情况下才能对模型进行随机抽样;
  2、随着document和term个数的增加,PLSI模型也线性增加,变得越来越庞大;
  3、当一个新的document来到时,没有一个好的方式得到P(di);
  4、EM算法需要反复的迭代,需要很大计算量。

参考博客

[1]http://blog.csdn.net/yangliuy/article/details/8330640
[2]http://blog.csdn.net/pipisorry/article/details/42560693
[3]http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html

原创粉丝点击