主题模型(3)——PLSA模型及其EM算法求解

之前整理过两篇关于主题模型的博客《文本建模之Unigram Model,PLSA与LDA》和《再看LDA主题模型》,主要是整理了主题模型的由来和推导过程,关于模型参数怎么计算没有过多涉及,因此接下来将分两篇博客,分别整理PLSA模型和EM算法求解,LDA模型和Gibbs Sample求解。

PLSA

首先回顾下PLSA,作为生成模型,其在文本生成过程中,引入主题的概念,即先从KK个主题中选定一个主题,然后在该主题下生成对应的单词。这里,我们将文档did_i下每个主题zkz_k的生成概率表示为p(zkdi)p(z_k|d_i),每个主题zkz_k下单词(这里的单词是只词汇表VV所对应的每个不同单词)wjw_j的生成概率表示为p(wjzk)p(w_j|z_k)。因此文档did_i中单词wjw_j的生成概率可以表示为
p(di,wj)=p(di)p(wjdi) p(d_i,w_j)=p(d_i)p(w_j|d_i)

根据概率论公式:边缘分布等于联合分布的和有:
p(di,wj)=p(di)k=1Kp(wj,zkdi)=p(di)k=1Kp(wjzk)p(zkdi) \begin{aligned} p(d_i,w_j)&=p(d_i)\sum_{k=1}^Kp(w_j,z_k|d_i)\\ &=p(d_i)\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i) \end{aligned}

单词之间相互独立,因此文档did_i中所有单词的生成概率为
p(di,w)=j=1Np(di,wj)n(di,wj) p(d_i,\vec{w})=\prod_{j=1}^Np(d_i,w_j)^{n(d_i,w_j)}

其中,w\vec{w}是一个NN维向量(n(di,w1),n(di,w2), ,n(di,wN))\Big(n(d_i,w_1),n(d_i,w_2),\cdots,n(d_i,w_N)\Big ),每个分量是单词wjw_j在文档did_i中的出现次数,NN是词汇表VV的大小。
文档之间同样相互独立,因此语料的生成概率为
p(D)=i=1Mp(di,w)=i=1Mj=1Np(di,wj)n(di,wj) \begin{aligned} p(D)&=\prod_{i=1}^Mp(d_i,\vec{w})\\ &=\prod_{i=1}^M\prod_{j=1}^Np(d_i,w_j)^{n(d_i,w_j)} \end{aligned}

采用最大似然估计,最大化logp(D)\log p(D),对应的p(zkdi)p(z_k|d_i)p(wjzk)p(w_j|z_k)就是我们要找的最优参数。
L=logp(D)=logi=1Mj=1Np(di,wj)n(di,wj)=i=1Mj=1Nn(di,wj)logp(di,wj)=i=1Mj=1Nn(di,wj)log[p(di)k=1Kp(wjzk)p(zkdi)]=i=1Mj=1Nn(di,wj)[logp(di)+logk=1Kp(wjzk)p(zkdi)]=i=1M(j=1Nn(di,wj)logp(di)+j=1Nn(di,wj)logk=1Kp(wjzk)p(zkdi))=i=1M(n(di)logp(di)+j=1Nn(di,wj)logk=1Kp(wjzk)p(zkdi))=i=1Mn(di)[logp(di)+j=1Nn(di,wj)n(di)logk=1Kp(wjzk)p(zkdi)] \begin{aligned} \mathcal{L}=\log p(D)&=\log \prod_{i=1}^M\prod_{j=1}^Np(d_i,w_j)^{n(d_i,w_j)}\\ &=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\log p(d_i,w_j)\\ &=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\log [p(d_i)\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)]\\ &=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\Big[\log p(d_i)+\log\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)\Big ]\\ &=\sum_{i=1}^M\Big(\sum_{j=1}^Nn(d_i,w_j)\log p(d_i)+\sum_{j=1}^Nn(d_i,w_j)\log\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)\Big)\\ &=\sum_{i=1}^M\Big(n(d_i)\log p(d_i)+\sum_{j=1}^Nn(d_i,w_j)\log\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)\Big)\\ &=\sum_{i=1}^Mn(d_i)\Big[\log p(d_i)+\sum_{j=1}^N\frac{n(d_i,w_j)}{n(d_i)}\log\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)\Big] \end{aligned}

因为文档长度n(di)n(d_i)和文档概率p(d_i)可以单独计算,将其去掉不会影响似然函数的最优化。所以在后面部分,我们统一将L\mathcal{L}写成如下形式
L=i=1Mj=1Nn(di,wj)logk=1Kp(wjzk)p(zkdi) \mathcal{L}=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\log\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)

可以看到上式对数函数中包含参数的和,进行求导时将非常的复杂,即直接找到对数似然函数为零的最大值将不那么容易。庆幸的是,EM(Expectation-Maximization,简称EM)算法能够帮助我们解决这个问题。

EM算法

EM算法是一种启发式迭代算法,每次迭代分为两步:E步,求期望(expectation);M步,极大化对数似然(maximization),这也是算法名称的由来。回到我们的问题,我们将对数函数包含参数和的情况进行一般化,首先目标函数可以写成下式:
θ=argmaxθi=1mlogp(x(i);θ) \theta = \arg \max_{\theta}\sum_{i=1}^m\log p(x^{(i)};\theta)

p(x(i);θ)p(x^{(i)};\theta)是在给定参数θ\theta下第ii个样本的产生概率,有些情况下这个概率值受到一些隐含因素的影响,如主题模型中文档生成过程中的主题,将其用z(i)z^{(i)}表示,此时p(x(i);θ)p(x^{(i)};\theta)需要累加所有的p(x(i),z(i);θ)p(x^{(i)},z^{(i)};\theta),而优化目标也变成:
θ=argmaxθi=1mlogp(x(i);θ)=argmaxθi=1mlogz(i)p(x(i),z(i);θ) \theta=\arg\max_\theta\sum_{i=1}^m\log p(x^{(i)};\theta)=\arg\max_\theta\sum_{i=1}^m\log\sum_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)

上式的难办之处就在于对数函数中出现了和的形式,那有没有一个办法将求和符号提到log\log外面吗?答案是有的。

Jensen不等式

ff是定义在实数域上的函数,如果对于任意的实数xx,都有
f0 f''\geq0

那么ff是凸函数,此时对于随机变量xx,有
E[f(x)]f(E(x)) E[f(x)]\geq f(E(x))

等号成立的条件是随机变量xx是常量。Jensen不等式用语言描述或许方便记忆:对于凸函数,函数的期望大于等于期望的函数。 证明如下:
主题模型(3)——PLSA模型及其EM算法求解
如上图所示,对于(x,f(x))(x,f(x))(y,f(y))(y,f(y))线段内的任意一点,其横纵坐标可以分别表示为tx+(1t)ytx+(1-t)ytf(x)+(1t)f(y)tf(x)+(1-t)f(y),而函数f(x)f(x)tx+(1t)ytx+(1-t)y对应的纵坐标为f(tf(x)+(1t)f(y))f(tf(x)+(1-t)f(y)),因为函数f(x)f(x)是凸函数,有
tf(x)+(1t)f(y)f(tx+(1t)y) tf(x)+(1-t)f(y)\geq f(tx+(1-t)y)

因为t+(1t)=1t+(1-t)=1,所以我们可以将tt1t1-t看作随机变量x,yx,y对应的概率,即上式表达的是
E[f(x)]f(E(x)) E[f(x)]\geq f(E(x))

若函数ff是凹函数,上述不等式符号相反。

EM算法推导

有了Jensen不等式,我们可以对上面的对数似然函数进行缩放如下:
(1)i=1mlogz(i)p(x(i),z(i);θ)=i=1mlogz(i)Q(z(i))p(x(i),z(i);θ)Q(z(i)) \begin{aligned} \sum_{i=1}^m\log\sum_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)&=\sum_{i=1}^m\log\sum_{z^{(i)}}Q(z^{(i)})\frac{p(x^{(i)},z^{(i)};\theta)}{Q(z^{(i)})} \tag{1} \end{aligned} (2)i=1mz(i)Q(z(i))logp(x(i),z(i);θ)Q(z(i)) \quad\quad\qquad\qquad\qquad\qquad\quad\geq\sum_{i=1}^m\sum_{z^{(i)}}Q(z^{(i)})\log\frac{p(x^{(i)},z^{(i)};\theta)}{Q(z^{(i)})}\tag2

其中z(i)Q(z(i))=1\sum_{z^{(i)}}Q(z^{(i)})=1,即隐变量z(i)z^{(i)}的概率分布。在上式中,将Q(z(i))Q(z^{(i)})看作随机变量p(x(i),z(i);θ)Q(z(i))\frac{p(x^{(i)},z^{(i)};\theta)}{Q(z^{(i)})}的概率,函数ff对应log\log函数,根据Jensen不等式就能得到上面不等式。
OK,到这里我们就成功的将求和符号提到了对数函数外面,因而式(2)(2)将容易求导。但是式(2)(2)和式(1)(1)是不等号关系,式(2)(2)的最大值不一定是式(1)(1)的最大值,那怎么才能得到式(1)(1)的最大值呢?我们知道,当给定参数θ\theta时,对数似然函数L\mathcal{L}的值就确定了,也就是式(2)(2)的上界就确定了,同时p(x(i),z(i))p(x^{(i)},z^{(i)})的值就确定了,这时我们修改Q(z(i))Q(z^{(i)})的值,使下界等于上界。

如果要满足Jensen不等式的等号,需要:
p(x(i),z(i);θ)Q(z(i))=c,cp(x(i),z(i);θ)=cQ(z(i))z(i)p(x(i),z(i);θ)=cz(i)Q(z(i))z(i)p(x(i),z(i);θ)=c \begin{aligned} &\quad \frac{p(x^{(i)},z^{(i)};\theta)}{Q(z^{(i)})}=c,\quad c为常量\\ &\rArr p(x^{(i)},z^{(i)};\theta)=cQ(z^{(i)})\\ &\rArr \sum_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)=c\sum_{z^{(i)}}Q(z^{(i)}) \\ &\rArr \sum_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)=c \end{aligned}

所以,我们可以得到,等号成立需要满足的条件是
Q(z(i))=p(x(i),z(i);θ)z(i)p(x(i),z(i);θ)=p(z(i)x(i);θ) Q(z^{(i)})=\frac{p(x^{(i)},z^{(i)};\theta)}{\sum_{z^{(i)}}p(x^{(i)},z^{(i)};\theta)}=p(z^{(i)}|x^{(i)};\theta)

即隐变量的后验概率。知道了Q(z(i))Q(z^{(i)}),将其带入式(2)(2),然后找出使其最大的θ\theta,这时我们就确定了在该θ\theta值处的一个下界,同样我们调整Q(z(i))Q(z^{(i)})使这个下界最大化,同时也在尝试提升我们的对数似然函数,即我们需要最大化下式:
argmaxθi=1mz(i)Q(z(i))logp(x(i),z(i);θ)Q(z(i))argmaxθi=1mz(i)Q(z(i))logp(x(i),z(i);θ)=argmaxθi=1mz(i)p(z(i)x(i);θ)logp(x(i),z(i);θ) \begin{aligned} &\quad\enspace\arg\max_{\theta}\sum_{i=1}^m\sum_{z^{(i)}}Q(z^{(i)})\log\frac{p(x^{(i)},z^{(i)};\theta)}{Q(z^{(i)})}\\ &\rArr\arg\max_{\theta}\sum_{i=1}^m\sum_{z^{(i)}}Q(z^{(i)})\log p(x^{(i)},z^{(i)};\theta)\\ &=\arg\max_{\theta}\sum_{i=1}^m\sum_{z^{(i)}}p(z^{(i)}|x^{(i)};\theta)\log p(x^{(i)},z^{(i)};\theta) \end{aligned}

上式可以理解为对数似然函数logp(x(i),z(i);θ)\log p(x^{(i)},z^{(i)};\theta)基于条件概率p(z(i)x(i);θ)p(z^{(i)}|x^{(i)};\theta)的期望,正好对应EM算法的E步,而最大化过程,正好对应M步。重复上述过程,直到收敛到对数似然函数L\mathcal{L}的最大处θ\theta^*,至于为什么会收敛?证明可以参考李航《统计学习方法》等。注意,与所有迭代算法一样,EM算法不能保证得到全局最优解。

EM算法的形象过程如下图:
主题模型(3)——PLSA模型及其EM算法求解
总结EM算法的流程如下:
输入:观测数据x=(x(1),x(2), ,x(m))x=(x^{(1)},x^{(2)},\cdots,x^{(m)}),联合分布p(x(i),z(i);θ)p(x^{(i)},z^{(i)};\theta),条件概率p(z(i)x(i);θ)p(z^{(i)}|x^{(i)};\theta),最大迭代次数JJ

  1. 随机初始化模型参数θ0\theta^0;
  2. E步:计算联合分布的条件概率期望:
    Qj(z(i))=p(z(i)x(i);θj) Q_j(z^{(i)})=p(z^{(i)}|x^{(i)};\theta^j) E=i=1mz(i)Q(z(i))logp(x(i),z(i);θ) E=\sum_{i=1}^m\sum_{z^{(i)}}Q(z^{(i)})\log p(x^{(i)},z^{(i)};\theta)
  3. M步:最大化期望,得到θj+1\theta^{j+1}
    θj+1=argmaxθi=1mz(i)Qj(z(i))logp(x(i),z(i);θ) \theta^{j+1}=\arg\max_{\theta}\sum_{i=1}^m\sum_{z^{(i)}}Q_j(z^{(i)})\log p(x^{(i)},z^{(i)};\theta)
  4. 重复第(2)步和第(3)步,直至收敛或达到最大迭代次数JJ

PLSA模型的EM算法步骤

L=logp(D)=i=1Mj=1Nn(di,wj)logk=1Kp(wjzk)p(zkdi)i=1Mj=1Nn(di,wj)k=1KQ(zk)logp(wjzk)p(zkdi)Q(zk) \begin{aligned} \mathcal{L}&=\log p(D)=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\log\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)\\ &\geq\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\sum_{k=1}^KQ(z_k)\log\frac{p(w_j|z_k)p(z_k|d_i)}{Q(z_k)} \end{aligned}

根据上面的推导得
Q(zk)=p(zkdi,wj) Q(z_k)=p(z_k|d_i,w_j)

然后开始EM算法迭代过程。
E步:计算联合分布的条件概率期望
(1)计算隐变量的后验概率
p(zkdi,wj)=p(zk,di,wj)k=1Kp(zk,di,wj)=p(wjzk)p(zkdi)k=1Kp(wjzk)p(zkdi) \begin{aligned} p(z_k|d_i,w_j)&=\frac{p(z_k,d_i,w_j)}{\sum_{k=1}^Kp(z_k,d_i,w_j)}\\ &=\frac{p(w_j|z_k)p(z_k|d_i)}{\sum_{k=1}^Kp(w_j|z_k)p(z_k|d_i)} \end{aligned}

(2)将隐变量的后验概率带入,得到期望函数
Lc=i=1Mj=1Nn(di,wj)k=1Kp(zkdi,wj)logp(zk,di,wj)=i=1Mj=1Nn(di,wj)k=1Kp(zkdi,wj)logp(wjzk)p(zkdi) \begin{aligned} \mathcal{L}^c&=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\sum_{k=1}^Kp(z_k|d_i,w_j)\log p(z_k,d_i,w_j)\\ &=\sum_{i=1}^M\sum_{j=1}^Nn(d_i,w_j)\sum_{k=1}^Kp(z_k|d_i,w_j)\log p(w_j|z_k)p(z_k|d_i) \end{aligned}

M步:最大化期望函数,这是一个带约束的最优化问题:
j=1Np(wjzk)=1k=1Kp(zkdi)=1 \sum_{j=1}^Np(w_j|z_k)=1\\ \sum_{k=1}^Kp(z_k|d_i)=1

可以采用拉格朗日乘子法求解,拉格朗日函数如下:
H=Lc+k=1Kτk(1j=1Np(wjzk))+i=1Mρ(1k=1Kp(zkdi)) \mathcal{H}=\mathcal{L}^c+\sum_{k=1}^K\tau_k\Big(1-\sum_{j=1}^Np(w_j|z_k)\Big)+\sum_{i=1}^M\rho\Big(1-\sum_{k=1}^Kp(z_k|d_i)\Big)

分别求偏导,令其结果等于0,最终可以估计出参数p(wjzk)p(w_j|z_k)p(zkdi)p(z_k|d_i)
p(wjzk)=i=1Mn(di,wj)p(zkdi,wj)j=1Ni=1Mn(di,wj)p(zkdi,wj) p(w_j|z_k)=\frac{\sum_{i=1}^Mn(d_i,w_j)p(z_k|d_i,w_j)}{\sum_{j=1}^N\sum_{i=1}^Mn(d_i,w_j)p(z_k|d_i,w_j)} p(zkdi)=j=1Nn(di,wj)p(zkdi,wj)n(di) p(z_k|d_i)=\frac{\sum_{j=1}^Nn(d_i,w_j)p(z_k|d_i,w_j)}{n(d_i)}

参考文献

EM算法原理总结
从最大似然到EM算法浅解