knitr::opts_chunk$set(echo = TRUE)
1、文档生成
对于某一篇特定的文章,其生成过程可以看做如下方式:
1 . 为这篇文章制造一个特定的doc_topic的骰子
2 . 先掷doc_topic骰子,产生一个主题
3 . 找到对应主题的topic_word骰子,投掷产生一个词
4 . 重复步骤2、3直至文档生成
2、符号标记
1 . D D 文档 P(di) P ( d i ) 表示文档 di d i 出现的概率(认为是一个未知定值),共计 M M 篇文档
2 . Z Z 主题(隐含类别) P(zk|di) P ( z k | d i ) 表示文档 di d i 中主题 zk z k 出现的概率,共计 K K 个主题
3 . W W 单词 P(wj|zk) P ( w j | z k ) 表示给定主题 zk z k 出现单词 wj w j 的概率,共计 M M 词汇
4 . n(di,wj) n ( d i , w j ) 表示在文档 di d i 中出现词 wj w j 的个数
5 . tk t k 如果文档 di d i 中出现词 wj w j 是因为 k k 个主题产生的则 tk=1 t k = 1 否则为0,某个文档的同一个词出现多次认为来自同一个主题
3、模型推导
3.1 对某篇文章的某个词
那么对于第 i i 篇文章,某个词 j j 生成的概率为:
P(wj|di)=∑k=1KP(wj,zk|di)=∑k=1KP(wj|zk,di)∗P(zk|di)=∑k=1KP(wj|zk)∗P(zk|di) P ( w j | d i ) = ∑ k = 1 K P ( w j , z k | d i ) = ∑ k = 1 K P ( w j | z k , d i ) ∗ P ( z k | d i ) = ∑ k = 1 K P ( w j | z k ) ∗ P ( z k | d i )
其中第2步到第三步是因为模型的前提假设认为词的生成只和主题有关。
3.2 求解参数
最终需要求解的是 P(zk|di) P ( z k | d i ) 、 P(wj|zk) P ( w j | z k ) ,即每个文档的主题分布及每个主题的词分布
3.3 完全数据的对数似然函数
L=log⎛⎝∏i=1N∏j=1M{∏k=1KP(di,wj,zk)tk}n(di,wj)⎞⎠=∑i∑jn(di,wj){∑ktklog[P(di,wj,zk)]}=∑i∑jn(di,wj)log[P(di,wj,zk)] L = log ( ∏ i = 1 N ∏ j = 1 M { ∏ k = 1 K P ( d i , w j , z k ) t k } n ( d i , w j ) ) = ∑ i ∑ j n ( d i , w j ) { ∑ k t k log [ P ( d i , w j , z k ) ] } = ∑ i ∑ j n ( d i , w j ) log [ P ( d i , w j , z k ) ]
有个问题,这样写默认同一篇文档中出个多个相同的词时是来自同一个主题的,找了蛮多资料,似乎没有明确提出这个假设。
3.4 E-Step
对完全数据的对数似然函数求关于 P(z|w,d,θi) P ( z | w , d , θ i ) 的期望。其中 θi θ i 为第 i i 次参数 P(z|d) P ( z | d ) 和 P(w|z) P ( w | z ) 的估计。即使用EM算法最终求解的也是这两个参数。
E=EZ|W,D,θi[log(P(W,D,Z))]=∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(di,wj,zk)] E = E Z | W , D , θ i [ log ( P ( W , D , Z ) ) ] = ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( d i , w j , z k ) ]
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) P ( d i , w j , z k ) = P ( z k | d i ) P ( w j | z k , d i ) P ( d i ) = P ( z k | d i ) P ( w j | z k ) P ( d i )
其中
d d 与
w w 独立,所以得到上式。
公式二:
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) P ( z k | w j , d i ) = P ( z k , w j , d i ) P ( w j , d i ) = P ( w j | z k ) ∗ P ( z k | d i ) ∑ k P ( z k , w j , d i ) = P ( w j | z k ) ∗ P ( z k | d i ) ∑ k P ( w j | z k ) ∗ P ( z k | d i )
对目标函数
E E 求极值:
化简:
E=∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(di,wj,zk)]=∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)P(di)]=∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)]+∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(di)] E = ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( d i , w j , z k ) ] = ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( z k | d i ) P ( w j | z k ) P ( d i ) ] = ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( z k | d i ) P ( w j | z k ) ] + ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( d i ) ]
此时认为
P(di) P ( d i ) 是定值且与
k k 无关,那么:
∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(di)]=∑i∑jn(di,wj)∗log[P(di)]∑kP(zk|wj,di,θi)=∑i∑jn(di,wj)∗log[P(di)]∗1=∑i∑jn(di,wj)∗log[P(di)] ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( d i ) ] = ∑ i ∑ j n ( d i , w j ) ∗ log [ P ( d i ) ] ∑ k P ( z k | w j , d i , θ i ) = ∑ i ∑ j n ( d i , w j ) ∗ log [ P ( d i ) ] ∗ 1 = ∑ i ∑ j n ( d i , w j ) ∗ log [ P ( d i ) ]
所以:
max{Lnew}Lnew=∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)]s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪∑j=1MP(wj|zk)=1∑k=1KP(zk|di)=1 max { L n e w } L n e w = ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( z k | d i ) P ( w j | z k ) ] s . t . { ∑ j = 1 M P ( w j | z k ) = 1 ∑ k = 1 K P ( z k | d i ) = 1
此时,
P(zk|wj,di,θi) P ( z k | w j , d i , θ i ) 为一个定值。
求目标函数的最大值,则要用到
Lagrange L a g r a n g e 乘子法。
Lag=∑i∑jn(di,wj)∑kP(zk|wj,di,θi)log[P(zk|di)P(wj|zk)]++∑k=1Kτk(1−∑j=1MP(wj|zk))+∑i=1Nρi(1−∑k=1KP(zk|di)) L a g = ∑ i ∑ j n ( d i , w j ) ∑ k P ( z k | w j , d i , θ i ) log [ P ( z k | d i ) P ( w j | z k ) ] + + ∑ k = 1 K τ k ( 1 − ∑ j = 1 M P ( w j | z k ) ) + ∑ i = 1 N ρ i ( 1 − ∑ k = 1 K P ( z k | d i ) )
求驻点:
∂Lag∂P(wj|zk)=∑in(di,wj)P(zk|wj,di,θi)P(wj|zk)−τk=0∂Lag∂P(zk|di)=∑jn(di,wj)P(zk|wj,di,θi)P(zk|di)−ρi=0 ∂ L a g ∂ P ( w j | z k ) = ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i ) P ( w j | z k ) − τ k = 0 ∂ L a g ∂ P ( z k | d i ) = ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i ) P ( z k | d i ) − ρ i = 0
对于
P(wj|zk) P ( w j | z k ) :
∑in(di,wj)P(zk|wj,di,θi)=τkP(wj|zk)∑j=1M∑in(di,wj)P(zk|wj,di,θi)=∑j=1MτkP(wj|zk)∑j=1M∑in(di,wj)P(zk|wj,di,θi)=τk∑j=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=1M∑in(di,wj)P(zk|wj,di,θi) ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i ) = τ k P ( w j | z k ) ∑ j = 1 M ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i ) = ∑ j = 1 M τ k P ( w j | z k ) ∑ j = 1 M ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i ) = τ k ∑ j = 1 M P ( w j | z k ) = τ k S o : P ( w j | z k ) = ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i ) τ k = ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i ) ∑ j = 1 M ∑ i n ( d i , w j ) P ( z k | w j , d i , θ i )
对于
P(zk|di) P ( z k | d i ) :
∑jn(di,wj)P(zk|wj,di,θi)=ρiP(zk|di)∑k=1K∑jn(di,wj)P(zk|wj,di,θi)=∑k=1KρiP(zk|di)∑k=1K∑jn(di,wj)P(zk|wj,di,θi)=ρi∑k=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=1K∑jn(di,wj)P(zk|wj,di,θi) ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i ) = ρ i P ( z k | d i ) ∑ k = 1 K ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i ) = ∑ k = 1 K ρ i P ( z k | d i ) ∑ k = 1 K ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i ) = ρ i ∑ k = 1 K P ( z k | d i ) = ρ i S o : P ( z k | d i ) = ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i ) ρ i = ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i ) ∑ k = 1 K ∑ j n ( d i , w j ) P ( z k | w j , d i , θ i )
而
P(zk|wj,di,θi) P ( z k | w j , d i , θ i ) 用到前面的公式一,此时
P(zk|di) P ( z k | d i ) 和
P(wj|zk) P ( w j | z k ) 均为第
i i 次的迭代值:
P(zk|wj,di,θi)=[P(wj|zk)]i∗[P(zk|di)]i∑k[P(wj|zk)]i∗[P(zk|di)]i P ( z k | w j , d i , θ i ) = [ P ( w j | z k ) ] i ∗ [ P ( z k | d i ) ] i ∑ k [ P ( w j | z k ) ] i ∗ [ P ( z k | d i ) ] i
4、Others
从直观上看,应该还算明了~留个记录,方便复习。
5、Ref
[1] 邹博-小象学院《机器学习》
[2] http://www.xuebuyuan.com/551762.html
2018-01-17 于杭州