LDA(一):LDA前身PLSA介绍与推导
2016-05-21 13:36
253 查看
PLSA介绍与推导:
概率隐语义分析(PLSA)是一个著名的针对文本建模的模型,是一个生成模型。因为加入了主题模型,所以可以很大程度上改善多词一义和一词多义的问题。数学基础:
生成模型: 预测模型的公式是P(y|x)P(y|x),即给定输入,输出给定输入的概率分布,就要学习联合分布P(x,y)P(x,y),所以还要先求出P(x)P(x),反应的数据本身的相似度。 这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯和隐马尔科夫模型等。(但是朴素贝叶斯没有体现词之间的关系!)
而判别模型:没有中间过程,直接对样本学习出概率P(y|x)P(y|x),也可写作P(y|x;θ)P(y|x;\theta),可以理解为给定θ\theta值的情况下根据特征值来预测概率,想想LR就是这样的。我们只不过要先梯度下降求出θ\theta罢了,如svm,LR 对于分类任务常用
生成文档(文本建模)
Unigram模型:
这里我们称这个包含不重样单词的集合为词袋(bags of words)对于Unigram模型,生成一篇文档的方法就是随机的从这个词袋中抽取单词组成。而这篇文档的被生成的概率就是被抽出
每个词概率(首发球员)的
乘积
所以生成一篇文档w→=(w1,w2,w3...wn)\overrightarrow{w}=(w_1,w_2,w_3...w_n)的概率就是p(w→)=p(w1)p(w2)...p(wn)p(\overrightarrow{w}) = p(w_1)p(w_2)...p(w_n)
假设语料库中有多篇文档,而且文档与文档之间是独立的,那么整个语料库的生成概率就是就是n篇文档概率之积:P(W)=p(w1−→)p(w2−→)...p(wn−→)P(W)=p(\overrightarrow{w_1})p(\overrightarrow{w_2})...p(\overrightarrow{w_n})
2.Mixture of unigrams模型:
对于Mixture of unigrams,我们在生成一篇文档之前先给它一个主题(注意:这篇文档只有这一个主题),然后根据这个主题的(词袋)词分布来随机选择出n个词
所以对于整个语料库,生成文档的概率就是:对每个主题下生成的文档(每个主题可以随机挑所以可以生成多个文档)的概率进行加和:p(W)=p(z1)∏n=1Np(wn−→|z1)+...+p(zn)∏n=1Np(wn−→|zn)=∑zp(z)∏n=1Np(wn−→|z)p(W) = p(z_1)\prod_{n=1}^Np(\overrightarrow{w_n}|z_1)+...+p(z_n)\prod_{n=1}^Np(\overrightarrow{w_n}|z_n)=\sum_zp(z)\prod_{n=1}^Np(\overrightarrow{w_n}|z)
3.PLSA模型:
就以上两个模型来说,每个文档只包含一个主题未免太单一了。Hoffmm在1999年提出了概率隐语义分析(Probabilistic Latent Semantic Analysis)。他认为每个主题下都有一个词汇的概率分布,而一篇文章通常由多个主题构成,并且文章中的每个单词都是由某个主题生成的。每个文档在所有主题上服从多项分布
P | z1 z_1 | z2 z_2 | … | zk z_k |
---|---|---|---|---|
文档d1d_1 | 0.30.3 | 0.050.05 | … | 0.010.01 |
文档d2d_2 | 0.050.05 | 0.20.2 | … | 0.050.05 |
… | … | … | … | … |
文档did_i | 0.010.01 | 0.20.2 | … | 0.010.01 |
每个主题在所有词上服从多项分布。
P | w1 w_1 | w2 w_2 | … | wj w_j |
---|---|---|---|---|
主题z1z_1 | 0.10.1 | 0.250.25 | … | 0.110.11 |
主题z2z_2 | 0.250.25 | 0.10.1 | … | 0.150.15 |
… | … | … | … | … |
主题zkz_k | 0.210.21 | 0.10.1 | … | 0.050.05 |
1.所以整篇文档的过程就是:
1.先以p(di)p(d_i)的概率选中文档djd_j2.以p(zk|di)p(z_k|d_i)的概率从这个文档ii的主题概率分布中挑选出主题zkz_k
3.以p(wj|zk)p(w_j|z_k)的概率产生一个单词wjw_j
这其实就是一个简单的单链
贝叶斯网络,![Alt text](./Screenshot from 2016-05-20 15-59-05.png)因为里面包含隐变量zz,所以通常采用
EM算法学习模型参数,所以有如下推导过程。
2.算法推导过程:
观察数据为(di,wj)(d_i,w_j)对,主题zjz_j是隐含变量,对(di,wj)(d_i,w_j)进行极大似然估计。目标函数存在未知变量,使用EM算法求最优值。
E-step:假定参数已知,求zkz_k的后验概率。
M-step:求似然函数期望最大值(实为找到
最优参数)。
存在约束条件,转换为拉格朗日乘子法,求驻点 。
不断迭代EM步直到收敛。
详细过程如下:
2.1.首先明确两个重要概率:
(di,wi)(d_i,w_i)的联合分布(某文档和某个词同时出现的概率)为:p(di,wj)=p(wj|di)∗p(di)p(d_i,w_j) = p(w_j|d_i)*p(d_i)某个文档生成某个词的概率,
而计算每个文档的主题分布是PLSA任务的目标?:p(wj|di)=∑k=1kp(wj|zk)p(zk|di)p(w_j|d_i) = \sum_{k=1}^kp(w_j|z_k)p(z_k|d_i)
第一个公式好理解,就是该文档出现的概率乘以该文档下出现该词的概率
第二个公式可以理解为有语料库中
某个词的生成概率p(wi)p(w_i)得来的
p(wj)=∑kk=1p(wj|zk)p(zk)p(w_j) = \sum_{k=1}^kp(w_j|z_k)p(z_k)这是全概率公式,可理解为每个主题下生成该词概率的加和。
我们对上式同时除以一个did_i,得到p(wj|di)=∑kk=1p(wj|zk,di)p(zk|di)p(w_j|d_i) = \sum_{k=1}^kp(w_j|z_k,d_i)p(z_k|d_i),
在贝叶斯网络中
,这是一个
Head to tail模型。zz将dd,ww阻隔,在zz已知的情况下,dd对ww无影响。所以上式就可以简化成我们的第二个公式p(wj|di)=∑kk=1p(wj|zk)p(zk|di)p(w_j|d_i) = \sum_{k=1}^kp(w_j|z_k)p(z_k|d_i)
2.2 对观察数据(di,wi)(d_i,w_i)进行极大似然估计(目标函数是所有出现概率的乘积):
L=∏Ni=1∏Mj=1p(di,wj)=∏i∏jp(di,wj)n(di,wj)L = \prod_{i=1}^N\prod_{j=1}^M p(d_i,w_j)= \prod_i\prod_jp(d_i,w_j)^{n(d_i,w_j)} 这里n(di,wj)n(d_i,w_j)代表这个文档和词同时出现的次数,类似于二项分布p3(1−p)2p^3(1-p)^2。另外,因为有重复的出现,出现次数就不是MM或NN了,所以不标记。取对数似然:
l=∑i∑jn(di,wj) log p(di,wj)l = \sum_i\sum_jn(d_i,w_j)~log~p(d_i,w_j)
=∑i∑jn(di,wj) log p(wj|di)p(di)=\sum_i\sum_jn(d_i,w_j)~log~p(w_j|d_i)p(d_i) 参照(1)式
=∑i∑jn(di,wj) log[ p(wj|zk)p(zk|di)p(di)]=\sum_i\sum_jn(d_i,w_j)~log[~p(w_j|z_k)p(z_k|d_i)p(d_i)] 参照(2)式
=∑i∑jn(di,wj)( log[ p(wj|zk)p(zk|di)]+log p(di))=\sum_i\sum_jn(d_i,w_j)(~log[~p(w_j|z_k)p(z_k|d_i)]+log~p(d_i))
=∑i∑jn(di,wj) log p(wj|zk)p(zk|di))+∑i∑jn(di,wj)log p(di)=\sum_i\sum_jn(d_i,w_j)~log~p(w_j|z_k)p(z_k|d_i))+\sum_i\sum_jn(d_i,w_j)log~p(d_i) 出现的次数是确定的,文档的概率也是已有的,对求取极大值点无影响,所以省略。
由此,我们得到新的目标似然函数
: l=∑i∑jn(di,wj) log p(wj|zk)p(zk|di)l = \sum_i\sum_jn(d_i,w_j)~log~p(w_j|z_k)p(z_k|d_i)
2.3使用逐渐逼近的EM方法:
观察目标函数,其中p(wj|zk)p(w_j|z_k)和p(zk|di)p(z_k|d_i)都是未知变量。存在隐变量z,所以这里我们采用
EM算法来估计这两个参数。
- E步(求
隐变量后验概率(条件概率)):为了进行EM算法迭代,我们需要先求出变量的后验分布。所以此处就假定p(wj|zk)p(w_j|z_k)和p(zk|di)p(z_k|d_i)已知(因为总会收敛,所以在这里不妨把未知变量随机假定一个值),求出隐含变量Z的后验分布以进行下面的M步。
- M步(
求似然函数期望的最大值(似然函数乘以隐变量条件概率)):在(di,wj,zk)(d_i,w_j,z_k)已知的前提下,求关于参数p(wj|zk)p(w_j|z_k)和p(zk|di)p(z_k|d_i)的似然函数期望最大值。得到它们的最优解p(wj|zk)p(w_j|z_k)和p(zk|di)p(z_k|d_i),带入E步,循环迭代。
步骤推导:
2.3.1 zkz_k的后验概率
(隐变量的条件概率
):
由贝叶斯公式得到:zkz_k的后验概率p(zk|wj)=p(wj|zk)p(zk)∑kk=1p(wj|zk)p(zk)p(z_k|w_j) =\frac{ p(w_j|z_k)p(z_k)}{\sum_{k=1}^k p(w_j|z_k)p(z_k)}和前面贝叶斯网络一样,同除did_i,而did_i对wjw_j是没有影响的,所以可以忽略:p(zk|di,wj)=p(wj|zk)p(zk|di)∑kk=1p(wj|zk)p(zk|di)p(z_k|d_i,w_j) =\frac{ p(w_j|z_k)p(z_k|d_i)}{\sum_{k=1}^k p(w_j|z_k)p(z_k|d_i)}
2.3.2求似然函数期望
最大值:
回顾EM算法整体框架:Repeat until convergence{
(E-step) For each i, set
Qi(z(i)):=p(z(i)|x(i);θ)Q_i(z^{(i)}):=p(z^{(i)}|x^{(i)};\theta)}
隐变量的条件概率
(M-step)Set
θ:=arg maxθ∑i∑(i)zQi(z(i))logp(z(i),x(i);θ)Qi(z(i))\theta:=arg~max_\theta\sum_i\sum_z^{(i)}Q_i(z^{(i)})log\frac{p(z^{(i)},x^{(i)};\theta)}{Q_i(z^{(i)})}
对于M步,我们可以将他进行简化:
这里简略表示θ:=QlogPQ=Q(logP−logQ)=QlogP−QlogQ≃QlogP\theta:= Qlog\frac{P}{Q} = Q(logP-logQ)=QlogP-QlogQ\simeq QlogP虽然我们求得是最大值,但并不关心具体是多少,而是关注什么参数下取得极大值。那么假如我们已经求出了后验分布Q,成为了已知,对参数估计没有影响,所以QlogQQlogQ可以省略。
由此我们得到最新的
似然函数期望最大值公式:θ:=arg maxθ∑i∑z(i)Qi(z(i))log p(z(i),x(i);θ)\theta:=arg~max_\theta\sum_i\sum_z^{(i)}Q_i(z^{(i)})log~{p(z^{(i)},x^{(i)};\theta)}
跳出框架,我们把此式应用到前面的目标似然中:
l=∑i∑jn(di,wj) log p(wj|zk)p(zk|di)l = \sum_i\sum_jn(d_i,w_j)~log~p(w_j|z_k)p(z_k|d_i)
=∑i∑jn(di,wj) log p(wj|di)~=\sum_i\sum_jn(d_i,w_j)~log~p(w_j|d_i)
方便对比M-step,写回原式,这里log p(wj|di))log~p(w_j|d_i))就是包含隐变量zkz_k的似然函数log p(wj,zk|di)log~{p(w_j,z_k|d_i)},然后再去乘以
隐含变量条件概率求
期望。
得到似然函数期望公式:
E(l)=∑i∑jn(di,wj) log p(wj,zk|di)∑k=1kp(zk|di,wj)E(l) = \sum_i\sum_jn(d_i,w_j)~log~p(w_j,z_k|d_i)\sum_{k=1}^kp(z_k|d_i,w_j)
E(l)=∑i∑jn(di,wj) log p(wj|zk)p(zk|di)∑k=1kp(zk|di,wj)E(l) = \sum_i\sum_jn(d_i,w_j)~log~p(w_j|z_k)p(z_k|d_i)\sum_{k=1}^kp(z_k|d_i,w_j)
暴露p(wj|zk),p(zk|di)p(w_j|z_k),p(z_k|d_i)出是因为我们要求关于这两个概率的期望最大值。并且PLSA的核心就是求这两个概率。
注意:这里存在两个
约束条件:s.t={∑Mi=1p(wj|zk)=1∑Kk=1p(zk|di)=1每个主题下所有词的概率和为1每篇文档下所有主题的概率和为1s.t=
\begin{cases}
\sum_{i=1}^Mp(wj|z_k) = 1& \text{每个主题下所有词的概率和为1}\\
\sum_{k=1}^Kp(z_k|d_i) = 1& \text{每篇文档下所有主题的概率和为1}
\end{cases}
有约束条件我们就直接上拉格朗日乘子法:Lag=∑i∑jn(di,wj) log p(wj|zk)p(zk|di)∑k=1kp(zk|di,wj)+∑k=1kτk(1−∑j=1Mp(wj|zk))+∑i=1Nρi(1−∑k=1Kp(wj|zk))Lag =\sum_i\sum_jn(d_i,w_j)~log~p(w_j|z_k)p(z_k|d_i)\sum_{k=1}^kp(z_k|d_i,w_j)+\sum_{k=1}^k\tau _k(1-\sum_{j=1}^Mp(w_j|z_k))+\sum_{i=1}^N\rho _i(1-\sum_{k=1}^Kp(w_j|z_k))
求驻点:
∂Lag∂p(wj|zk)=∑in(di,wj)p(zk|di,wj)p(wj|zk)−τk=0\frac{\partial Lag}{\partial p(w_j|z_k)} = \frac{\sum_in(d_i,w_j)p(z_k|d_i,w_j)}{p(w_j|z_k)}- \tau_k = 0 当j,k同时存在求驻点时才有∑j,∑K\sum_j,\sum_K项,所以都被省略掉
∂Lag∂p(zk|di)=∑in(di,wj)p(zk|di,wj)p(zk|di)−ρi=0\frac{\partial Lag}{\partial p(z_k|d_i)} = \frac{\sum_in(d_i,w_j)p(z_k|d_i,w_j)}{p(z_k|d_i)}- \rho_i= 0
分析第一个等式:
∂Lag∂p(wj|zk)=∑in(di,wj)p(zk|di,wj)p(wj|zk)−τk=0\frac{\partial Lag}{\partial p(w_j|z_k)} = \frac{\sum_in(d_i,w_j)p(z_k|d_i,w_j)}{p(w_j|z_k)}- \tau_k = 0 **
⇉∑in(di,wj)p(zk|di,wj)=τk p(wj|zk)\rightrightarrows\sum_in(d_i,w_j)p(z_k|d_i,w_j) =\tau_k ~p(w_j|z_k) (1)
⇉∑i∑Mj=1n(di,wj)p(zk|di,wj)=∑Mj=1τk p(wj|zk)\rightrightarrows\sum_i\sum_{j=1}^Mn(d_i,w_j)p(z_k|d_i,w_j) =\sum_{j=1}^M\tau_k ~p(w_j|z_k) 对第k个主题下所有单词的概率求和 = 1
⇉∑i∑Mj=1n(di,wj)p(zk|di,wj)=τk\rightrightarrows\sum_i\sum_{j=1}^Mn(d_i,w_j)p(z_k|d_i,w_j) =\tau_k 其中p(zk|di,wj)p(z_k|d_i,w_j)我们是可以通过
E-step求出来的,把τk\tau_k 带回到(1)得到:
∑in(di,wj)p(zk|di,wj)=⟮∑i∑j=1Mn(di,wj)p(zk|di,wj)⟯ p(wj|zk)\sum_in(d_i,w_j)p(z_k|d_i,w_j) =\lgroup\sum_i\sum_{j=1}^Mn(d_i,w_j)p(z_k|d_i,w_j) \rgroup ~p(w_j|z_k)
最终得到M-step:⎧⎩⎨⎪⎪⎪⎪p(wj|zk)=∑in(di,wj)p(zk|di,wj)∑i∑Mj=1n(di,wj)p(zk|di,wj) p(zk|di)=∑jn(di,wj)p(zk|di,wj)∑j∑kk=1n(di,wj)p(zk|di,wj)\begin{cases}
p(w_j|z_k) =\frac{\sum_in(d_i,w_j)p(z_k|d_i,w_j)}{\sum_i\sum_{j=1}^Mn(d_i,w_j)p(z_k|d_i,w_j)} & \text{}\\
\ p(z_k|d_i) =\frac{\sum_jn(d_i,w_j)p(z_k|d_i,w_j)}{\sum_j\sum_{k=1}^kn(d_i,w_j)p(z_k|d_i,w_j)} & \text{}
\end{cases}
加上之前的E-step:p(zk|di,wj)=p(wj|zk)p(zk|di)∑kk=1p(wj|zk)p(zk|di)p(z_k|d_i,w_j) =\frac{ p(w_j|z_k)p(z_k|d_i)}{\sum_{k=1}^k p(w_j|z_k)p(z_k|d_i)}
不断EM迭代,最终使p(wj|zk)p(w_j|z_k)和p(zk|di)p(z_k|d_i)收敛
参考:
【1】邹博-机器学习
相关文章推荐
- 11059 - Maximum Product
- Spark on YARN集群模式作业运行全过程分析
- JSP+Serverlet+javaScript+ajax实现实时检测用户名是否被占用
- String.getBytes()
- 大道至简阅读笔记02
- 张正友相机标定算法解读
- Linux下计划任务 crontab
- cocos2d-x 的安装以及hello world
- AndroidStudio Failed to complete Gradle execution
- 视频图像处理基础知识4(视频分辨率参考 行频 隔行扫描 逐行扫描)
- Time类中的运算符重载(3)-前置++,后置++
- Zookeeper四字命令
- [bzoj3307]雨天的尾巴
- jQuery DataTables插件自定义Ajax分页实例解析
- Python Tricks(九)—— 递归遍历目录下所有文件
- 基础命令 用户管理相关内容学习
- 循环赛日程表
- poj-1321-棋盘问题
- 人生就像一条加速奔向死亡的贪吃蛇【winform版】
- Java线程创建的三种方式