为什么要研究PLSA模型
PLSA模型是LDA模型先前的一个工作,理解PLSA模型有助于我们对LDA模型的理解。
每个生成过程都拥有一个固定概率。
特别感谢
本文是在上过张家俊老师的《文本数据挖掘》后有感所写,特别感谢老师的讲授。
PLSA的数学推导
一句话概括:
我们希望把文档集或单篇文章的生成概率表示出来,在分解得到对应的两个概率:主题生成文章、词生成主题。选择概率的前n个即可完成对文章的分解表示。
具体推导
由于已有很多的博客对PLSA和EM算法进行了充分介绍,因此本文主要对PLAS及其中使用的EM算法进行推导,不再做原理性上的解释。
我将根据自己的理解详细阐述每一步处理的motive
参数定义
d documents 文档集合z 主题集合w 词项空间𝑀 文档数𝑁 特征数k 主题数
在这个模型中,篇章集合d与词项空间w已知的,而主题z是未知的。我们的假设是篇章以一定概率生成主题,而主题以一定概率生成词汇。
因此需要通过某种方法计算未知的主题z。
计算z的目的是对于给定的观测数据 (d, w),PLSA模型基于最大似然估计学习p(wj|zk)和p(zk|di) 的取值
如果能确定这两个概率的值,就能完成一篇文章乃至文档集的生成(PLSA假设概率是定值)
使用n(di,wj){n\left(d_{i}, w_{j}\right)}n(di,wj)代表词wj在文档di中出现的次数。一篇文章单词的生成是独立的,做一个类别方便理解,类似于让大猩猩去敲键盘,那么恰好生成一部《莎士比亚》的概率就是每个词被凑巧打出来概率的连续相乘。取对数后表示为:log∏i=1M∏j=1Np(di,wj)n(di,wj)\log \prod_{i=1}^{M} \prod_{j=1}^{N} p\left(d_{i}, w_{j}\right)^{n\left(d_{i}, w_{j}\right)}log∏i=1M∏j=1Np(di,wj)n(di,wj)
如果我们用L表示生成文档集的概率,利用对数函数的特性将指数前移进行第一次变换。再将 logp(di,wj)\log p\left(d_{i}, w_{j}\right)logp(di,wj)进行“拆解”,可以用全概率公式来表示联合概率,具体来说拆解为∑k=1Kp(wj∣zk)p(zk∣di)\sum_{k=1}^{K} p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)∑k=1Kp(wj∣zk)p(zk∣di) 这作为第二次变换。
两次变换见下式:
L=log∏i=1M∏j=1Np(di,wj)n(di,wj)=∑i=1M∑j=1Nn(di,wj)logp(di,wj)=∑i=1M∑j=1Nn(di,wj)logp(di)∑k=1Kp(wj∣zk)p(zk∣di)\begin{array}{l}\mathcal{L}=\log \prod_{i=1}^{M} \prod_{j=1}^{N} p\left(d_{i}, w_{j}\right)^{n\left(d_{i}, w_{j}\right)}=\sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \log p\left(d_{i}, w_{j}\right) \\=\sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \log p\left(d_{i}\right) \sum_{k=1}^{K} p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)\end{array} L=log∏i=1M∏j=1Np(di,wj)n(di,wj)=∑i=1M∑j=1Nn(di,wj)logp(di,wj)=∑i=1M∑j=1Nn(di,wj)logp(di)∑k=1Kp(wj∣zk)p(zk∣di)
上式看起来可以直接通过求p(zk∣di)p\left(z_{k} \mid d_{i}\right)p(zk∣di)和p(wj∣zk)p\left(w_{j} \mid z_{k}\right)p(wj∣zk)的偏导来使L最大化,而且这两个概率式子都有求和为1的约束,引入拉格朗日乘子法求对偶问题是很自然的。
but wait! 对数函数里面有求和操作,这可没法求偏导了呀,因此我们只能设计以下一系列变换,“扔掉”多余部分,最终使得对数函数里没有求和符号
但是如果直接求偏导,会发现由于上面的自变量包含在对数和中,求解后的结果难以计算,使得L最大化的计算成为不可能。
思考这个公式,使用极大似然估计时,我们通常运用拉格朗日乘子法,把约束化为目标函数的一部分,求偏导使其最大化。
因此,我们需要寻找一种替代方案,来使得L可计算
上式中的logp(di)log p\left(d_{i}\right)logp(di)是文档生成文档集的先验概率,所以在运算中可以去除,使用log对数的特性对函数进行变换得到以下结果(log(m*n)=log m+log n ):
L=∑i=1M∑j=1Nn(di,wj)logp(di)+∑i=1M∑j=1Nn(di,wj)log∑k=1Kp(wj∣zk)p(zk∣di)\begin{array}{l}\mathcal{L}=\sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \log p\left(d_{i}\right)+\sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \log \sum_{k=1}^{K} p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)\end{array} L=∑i=1M∑j=1Nn(di,wj)logp(di)+∑i=1M∑j=1Nn(di,wj)log∑k=1Kp(wj∣zk)p(zk∣di)
加号的前半部分一定为正,所以上式一定大于下式。得到:
上式≥∑i=1M∑j=1Nn(di,wj)log∑k=1Kp(wj∣zk)p(zk∣di)上式\geq \sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \log \sum_{k=1}^{K} p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right) 上式≥i=1∑Mj=1∑Nn(di,wj)logk=1∑Kp(wj∣zk)p(zk∣di)
引入一个概率分式p(zk∣di,wj)p\left(z_{k} \mid d_{i}, w_{j}\right)p(zk∣di,wj),上式等价于:
L=∑i=1M∑j=1Nn(di,wj)log∑k=1Kp(zk∣di,wj)p(wj∣zk)p(zk∣di)p(zk∣di,wj)\mathcal{L}=\sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \log \sum_{k=1}^{K} p\left(z_{k} \mid d_{i}, w_{j}\right) \frac{p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)}{p\left(z_{k} \mid d_{i}, w_{j}\right)} L=i=1∑Mj=1∑Nn(di,wj)logk=1∑Kp(zk∣di,wj)p(zk∣di,wj)p(wj∣zk)p(zk∣di)
把log函数内部的公式可以看做一个求均值的函数,而log函数是一个凹函数,利凸函数的特性即均值的函数大于函数的均值,可以得到以下公式:(具体证明为Jensen不等式)。
在这儿提供另一种理解。把 p(wj∣zk)p(zk∣di)p(zk∣di,wj)\frac{p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)}{p\left(z_{k} \mid d_{i}, w_{j}\right)}p(zk∣di,wj)p(wj∣zk)p(zk∣di) 理解为一个自变量X, 那么X前面的p(zk∣di,wj)p\left(z_{k} \mid d_{i}, w_{j}\right)p(zk∣di,wj)和求和符号组合作用即为求X的均值。又因为对数函数是凹函数,均值的函数大于函数的均值,所以log(average(X))>=average(log(X))
上式≥∑i=1M∑j=1Nn(di,wj)∑k=1Kp(zk∣di,wj)logp(wj∣zk)p(zk∣di)p(zk∣di,wj)上式\geq \sum_{i=1}^{M} \sum_{j=1}^{N} n\left(d_{i}, w_{j}\right) \sum_{k=1}^{K} p\left(z_{k} \mid d_{i}, w_{j}\right) \log \frac{p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)}{p\left(z_{k} \mid d_{i}, w_{j}\right)} 上式≥i=1∑Mj=1∑Nn(di,wj)k=1∑Kp(zk∣di,wj)logp(zk∣di,wj)p(wj∣zk)p(zk∣di)
对数函数里没有求和符号了,似乎也可以直接求偏导,但有些联合概率分布中也包含了求偏导项,所以还需要进一步拆分
利用对数性质对上式进行拆分,即log(A/B) = log(A)-log(B)可得
后半部分形式上类似H(x)=p(x)log(p(x)),即信息熵的定义,因此形式可以转化为:
后办部分一定为正,省去可得:
长征终于要到头了,经过无数变换,我们拿到了p(wj∣zk)p(zk∣di)p\left(w_{j} \mid z_{k}\right) p\left(z_{k} \mid d_{i}\right)p(wj∣zk)p(zk∣di),而且对数函数求导终于不再包含难以处理的求和运算了。
此时利用以下约束
引入拉格朗日乘子法
求偏导后可以得到:
类似的,可以得到另一个偏导:
带入约束的等式中:
可得:
将βi与αk带入上式的p(zk∣di)p\left(z_{k} \mid d_{i}\right)p(zk∣di)和p(wj∣zk)p\left(w_{j} \mid z_{k}\right)p(wj∣zk)
得到三个要估计的参数:
面临鸡生蛋蛋生鸡的难题,三个参数估计时互相依赖。因此使用EM算法,先随机初始化后验概率,再进行迭代。