PLSA模型简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wendaomudong_l2d4/article/details/79086930
knitr::opts_chunk$set(echo = TRUE)

1、文档生成

  对于某一篇特定的文章,其生成过程可以看做如下方式:
1 . 为这篇文章制造一个特定的doc_topic的骰子
2 . 先掷doc_topic骰子,产生一个主题
3 . 找到对应主题的topic_word骰子,投掷产生一个词
4 . 重复步骤2、3直至文档生成

2、符号标记

1 . D 文档 P(di)表示文档di出现的概率(认为是一个未知定值),共计M篇文档
2 . Z 主题(隐含类别) P(zk|di)表示文档di中主题zk出现的概率,共计K个主题
3 . W 单词 P(wj|zk)表示给定主题zk出现单词wj的概率,共计M词汇
4 . n(di,wj)表示在文档di中出现词wj的个数
5 . tk如果文档di中出现词wj是因为k个主题产生的则tk=1否则为0,某个文档的同一个词出现多次认为来自同一个主题

3、模型推导

3.1 对某篇文章的某个词

  那么对于第i篇文章,某个词j生成的概率为:

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

  其中第2步到第三步是因为模型的前提假设认为词的生成只和主题有关。

3.2 求解参数

  最终需要求解的是P(zk|di)P(wj|zk),即每个文档的主题分布及每个主题的词分布

3.3 完全数据的对数似然函数

L=log(i=1Nj=1M{k=1KP(di,wj,zk)tk}n(di,wj))=ijn(di,wj){ktklog[P(di,wj,zk)]}=ijn(di,wj)log[P(di,wj,zk)]

有个问题,这样写默认同一篇文档中出个多个相同的词时是来自同一个主题的,找了蛮多资料,似乎没有明确提出这个假设。

3.4 E-Step

  对完全数据的对数似然函数求关于P(z|w,d,θi)的期望。其中θi为第i次参数P(z|d)P(w|z)的估计。即使用EM算法最终求解的也是这两个参数。

E=EZ|W,D,θi[log(P(W,D,Z))]=ijn(di,wj)kP(zk|wj,di,θi)log[P(di,wj,zk)]

3.5 M-Step

  求极值需要用到的两个公式:
  公式一:

P(di,wj,zk)=P(zk|di)P(wj|zk,di)P(di)=P(zk|di)P(wj|zk)P(di)

    其中dw独立,所以得到上式。
  公式二:
P(zk|wj,di)=P(zk,wj,di)P(wj,di)=P(wj|zk)P(zk|di)kP(zk,wj,di)=P(wj|zk)P(zk|di)kP(wj|zk)P(zk|di)

  对目标函数E求极值:
  化简:
E=ijn(di,wj)kP(zk|wj,di,θi)log[P(di,wj,zk)]=ijn(di,wj)kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)P(di)]=ijn(di,wj)kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)]+ijn(di,wj)kP(zk|wj,di,θi)log[P(di)]

  此时认为P(di)是定值且与k无关,那么:
ijn(di,wj)kP(zk|wj,di,θi)log[P(di)]=ijn(di,wj)log[P(di)]kP(zk|wj,di,θi)=ijn(di,wj)log[P(di)]1=ijn(di,wj)log[P(di)]

  所以:
max{Lnew}Lnew=ijn(di,wj)kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)]s.t.{j=1MP(wj|zk)=1k=1KP(zk|di)=1

  此时,P(zk|wj,di,θi)为一个定值。
  求目标函数的最大值,则要用到Lagrange乘子法。
Lag=ijn(di,wj)kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)]++k=1Kτk(1j=1MP(wj|zk))+i=1Nρi(1k=1KP(zk|di))

  求驻点:
LagP(wj|zk)=in(di,wj)P(zk|wj,di,θi)P(wj|zk)τk=0LagP(zk|di)=jn(di,wj)P(zk|wj,di,θi)P(zk|di)ρi=0

  对于P(wj|zk):
in(di,wj)P(zk|wj,di,θi)=τkP(wj|zk)j=1Min(di,wj)P(zk|wj,di,θi)=j=1MτkP(wj|zk)j=1Min(di,wj)P(zk|wj,di,θi)=τkj=1MP(wj|zk)=τkSo:P(wj|zk)=in(di,wj)P(zk|wj,di,θi)τk=in(di,wj)P(zk|wj,di,θi)j=1Min(di,wj)P(zk|wj,di,θi)

  对于P(zk|di):
jn(di,wj)P(zk|wj,di,θi)=ρiP(zk|di)k=1Kjn(di,wj)P(zk|wj,di,θi)=k=1KρiP(zk|di)k=1Kjn(di,wj)P(zk|wj,di,θi)=ρik=1KP(zk|di)=ρiSo:P(zk|di)=jn(di,wj)P(zk|wj,di,θi)ρi=jn(di,wj)P(zk|wj,di,θi)k=1Kjn(di,wj)P(zk|wj,di,θi)

  而P(zk|wj,di,θi)用到前面的公式一,此时P(zk|di)P(wj|zk)均为第i次的迭代值:
P(zk|wj,di,θi)=[P(wj|zk)]i[P(zk|di)]ik[P(wj|zk)]i[P(zk|di)]i

4、Others

  从直观上看,应该还算明了~留个记录,方便复习。

5、Ref

[1] 邹博-小象学院《机器学习》
[2] http://www.xuebuyuan.com/551762.html

          2018-01-17 于杭州

没有更多推荐了,返回首页