LSA(Latent semantic analysis,隐性语义分析)、pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Latent Dirichlet allocation,隐狄利克雷分配)这三种模型都可以归类到话题模型(Topic model,或称为主题模型)中。相对于比较简单的向量空间模型,主题模型通过引入主题这个概念,更进一步地对文本进行语义层面上的理解。

LSA 模型就是对词-文档共现矩阵进行SVD,从而得到词和文档映射到抽象出的topic上的向量表示,之前的一篇博客稍微提到过一点。LSA 通过将词映射到topic上得到distributional representation(词的分布表示),进而缓解文档检索、文档相似度计算等任务中所面临的同义词(多词一义)问题:比如我搜索“Java 讲义”,如果系统只是用字符匹配来检索的话,是不会返回一篇出现了“Java 课件”但通篇没出现“讲义”这个词的文档的。所以说,单纯地从词-文档共现矩阵取出词向量表示和文档向量表示的向量空间模型,尽管利用了大规模文档集的统计信息,仍然是无法直接从“语义”这个层面上去理解文本的。但是 LSA 这种将词映射到topic上的向量表示,很难去应对一词多义问题:比如“Java”这个词既可能指编程语言,也可能指爪哇岛,即使这两种含义的“Java”都在文档集里出现过,得到的 LSA 模型也无法很好地区分。

关于 LSA ,这里稍微扯远一点,有一个挺有意思的演讲视频:你的用词透露了你未来的精神状态(对应的paper在这里),用 LSA 来预测人的未来精神状态,相信看完这个视频之后一定会体会到科学的力量。

pLSA 模型是有向图模型,将主题作为隐变量,构建了一个简单的贝叶斯网,采用EM算法估计模型参数。相比于 LSA 略显“随意”的SVD,pLSA 的统计基础更为牢固。

这篇博客就是整理一下 pLSA 模型的推导过程。

pLSA:频率学派

相比于 LDA 模型里涉及先验分布,pLSA 模型是相对简单的一个贝叶斯网:观测变量为文档 $d_m\in\mathbb D$ 、词 $w_n\in\mathbb W$ ,隐变量为主题 $z_k\in\mathbb Z$ 。在给定文档集后,我们可以得到一个词-文档共现矩阵,每个元素 $n(d_m,w_n)$ 表示的是词 $w_n$ 在文档 $d_m$ 中的词频。也就是说,pLSA 模型也是基于词-文档共现矩阵的,不考虑词序。

pLSA 模型通过以下过程来生成文档(记号里全部省去了对参数的依赖):

(1) 以分布 $P(d_m)$ 选择一篇文档 $d_m$

(2) 以分布 $P(z_k|d_m)$ 得到一个主题 $z_k$

(3) 以分布 $P(w_n|z_k)$ 生成一个词 $w_n$

概率图模型如下所示(取自[2]):

图里面的浅色节点代表不可观测的隐变量,方框是指变量重复,plate notationpLSA 模型的参数 $\theta$ 显而易见就是:$K\times M$ 个 $P(z_k|d_m)$ 、$N\times K$ 个 $P(w_n|z_k)$ 。$P(z_k|d_m)$ 表征的是给定文档在各个主题下的分布情况,文档在全部主题上服从多项式分布;$P(w_n|z_k)$ 则表征给定主题的词语分布情况,主题在全部词语上服从多项式分布。

这样的话,我们要做的事就是从文档集里估计出上面的参数。pLSA 是频率学派的方法,将模型参数看作具体值,而不是有先验的随机变量。所以,考虑最大化对数似然函数:

$$\begin{aligned}L(\theta)&=\ln \prod_{m=1}^M\prod_{n=1}^N P(d_m,w_n)^{n(d_m,w_n)}\\&=\sum_m\sum_n n(d_m,w_n)\ln P(d_m,w_n)\\&=\sum_m\sum_n n(d_m,w_n)(\ln P(d_m)+\ln P(w_n|d_m))\\&=\sum_m\sum_n n(d_m,w_n)\ln P(w_n|d_m)+\sum_m\sum_n n(d_m,w_n)\ln P(d_m)\end{aligned}$$

第二项可以直接去掉,那么不妨直接记:

$$L(\theta)=\sum_m\sum_n n(d_m,w_n)\ln P(w_n|d_m)$$

我们看一下 $P(w_n|d_m)$ 的求解。如果不考虑随机变量之间的条件独立性的话,有

$$P(w_n|d_m)=\sum_k P(z_k|d_m)P(w_n|z_k,d_m)$$

但是观察图模型中的 d 、z 、w 可以知道,它们三个是有向图模型里非常典型的 head-to-tail 的情况:当 z 已知时,d 和 w 条件独立,也就是

$$P(w_n|z_k,d_m)=P(w_n|z_k)$$

那么

$$L(\theta)=\sum_m\sum_n n(d_m,w_n)\ln \bigl[\sum_k P(z_k|d_m)P(w_n|z_k)\bigr]$$

EM算法迭代求解

由于参数全部在求和号里被外层的log套住,所以很难直接求偏导数估计参数。到了这里,就轮到EM算法闪亮登场了。之前的一篇简单介绍EM的博客里解决的是这样的问题:观测变量 y ,隐变量 z ,参数 $\theta$ ,目标函数 $L(\theta)=\ln P(y)=\ln \sum_k P(z_k)P(y|z_k)$ (省略 $\theta$ 依赖),Q函数 $Q(\theta;\theta_t)=\mathbb E_{z|y;\theta_t}[\ln P(y,z)]=\sum_k P(z_k|y;\theta_t)\ln P(y,z)$ ,进而有 $\theta_{t+1}=\arg\max_{\theta}Q(\theta;\theta_t)$ 来迭代求取。

1. E步,求期望

那么,仿照上面的写法,对于 pLSA 模型来说,Q函数的形式为

$$\begin{aligned}Q(\theta;\theta_t)&=\sum_m\sum_n n(d_m,w_n) \mathbb E_{z_k|w_n,d_m;\theta_t}[\ln P(w_n,z_k|d_m)]\\&=\sum_m\sum_n n(d_m,w_n) \sum_k P(z_k|w_n,d_m;\theta_t)\ln P(w_n,z_k|d_m)\end{aligned}$$

(1) 联合概率 $P(w_n,z_k|d_m)$ 的求解:

$$P(w_n,z_k|d_m)=P(z_k|d_m)P(w_n|z_k, d_m)=P(z_k|d_m)P(w_n|z_k)$$

(2) $P(z_k|w_n,d_m;\theta_t)$ 的求解:

所谓的 $\theta_t$ 实际上就是上一步迭代的全部 $K\times M$ 个 $P(z_k|d_m)$ 和 $N\times K$ 个 $P(w_n|z_k)$ 。为了避免歧义,将时间步 $t$ 迭代得到的参数值加一个下标 $t$ 。

$$\begin{aligned}P(z_k|w_n,d_m;\theta_t)&=\frac{P_t(z_k,w_n,d_m)}{P_t(w_n,d_m)}=\frac{P_t(d_m)P_t(z_k|d_m)P_t(w_n|z_k)}{P_t(d_m)P_t(w_n|d_m)}\\&=\frac{P_t(z_k|d_m)P_t(w_n|z_k)}{P_t(w_n|d_m)}=\frac{P_t(z_k|d_m)P_t(w_n|z_k)}{\sum_j P_t(z_j|d_m)P_t(w_n|z_j)}\end{aligned}$$

基于以上两个结果,得到Q函数的形式为

$$\begin{aligned}Q(\theta;\theta_t)&=\sum_m\sum_n n(d_m,w_n) \sum_k P(z_k|w_n,d_m;\theta_t)(\ln P(z_k|d_m)+\ln P(w_n|z_k))\\&=\sum_m\sum_n n(d_m,w_n) \sum_k \frac{P_t(z_k|d_m)P_t(w_n|z_k)}{\sum\limits_j P_t(z_j|d_m)P_t(w_n|z_j)}(\ln P(z_k|d_m)+\ln P(w_n|z_k))\end{aligned}$$

终于,在这个形式里面,除了 $\theta$(全部 $K\times M$ 个 $P(z_k|d_m)$ 和 $N\times K$ 个 $P(w_n|z_k)$),已经全部为已知量。

2. M步,求极大值

剩下的工作就是

$$\theta_{t+1}=\arg\max_{\theta}Q(\theta;\theta_t)$$

问题将会被概括为如下的约束最优化问题:

目标函数:$\max_{\theta}Q(\theta;\theta_t)$

约束:$\sum_n P(w_n|z_k)=1$,$\sum_k P(z_k|d_m)=1$

使用Lagrange乘数法,得到Lagrange函数为

$$Q(\theta;\theta_t)+\sum_k\tau_k(1-\sum_n P(w_n|z_k))+\sum_m\rho_m(1-\sum_k P(z_k|d_m))$$

令其对参数的偏导数等于零,得到 $K\times M+N\times K$ 个方程,这些方程的解就是最优化问题的解:

$$\frac{\partial}{\partial P(w_n|z_k)}=\frac{\sum\limits_m n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{ P(w_n|z_k)}-\tau_k=0,\quad 1\leq n\leq N, 1\leq k\leq K$$

$$\frac{\partial}{\partial P(z_k|d_m)}=\frac{\sum\limits_n n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{P(z_k|d_m)}-\rho_m=0,\quad 1\leq m\leq M, 1\leq k\leq K$$

方程的解为

$$P(w_n|z_k)=\frac{\sum_m n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{\tau_k}$$

$$P(z_k|d_m)=\frac{\sum_n n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{\rho_m}$$

注意到两个约束条件,即

$$\sum_n \frac{\sum_m n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{\tau_k}=1$$

$$\sum_k \frac{\sum_n n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{\rho_m}=1$$

从中可求得 $\tau_k$ 、$\rho_m$ ,所以方程的解为

$$P_{t+1}(w_n|z_k)=\frac{\sum_m n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{\sum_n\sum_m n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}$$

$$P_{t+1}(z_k|d_m)=\frac{\sum_n n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}{\sum_k\sum_n n(d_m,w_n)P(z_k|w_n,d_m;\theta_t)}$$

当模型参数全部估计好后,便得到了完整的 pLSA 模型。上面的迭代过程很明显是一个频数估计(极大似然估计)的形式,意义很明确。模型使用EM算法进行参数估计时往往都会推导出这样的结果,例如HMM。

pLSA 模型小结

上面的一系列公式因为总是在前面挂着两个求和号,所以看上去貌似挺热闹,其实它相比于朴素的三硬币模型的推导过程来说,无非就是多了作为条件出现的随机变量 d ,其余地方没有本质区别。

不难看出来,pLSA 模型需要估计的参数数量是和训练文档集的大小是有关系的 —— 因为有 $P(z_k|d_m)$ ,这也是 pLSA 和 LDA 相比的非常重要的一个差异。显然,在训练集上训练出来的这组参数无法应用于训练文档集以外的测试文档。

作为频率学派的模型,pLSA 模型中的参数被视作具体的值,也就谈不上什么先验。如果在真实应用场景中,我们对于参数事先有一些先验知识,那么就需要使用贝叶斯估计来做参数估计。

LDA 模型

相比于 pLSA ,2003年提出的 LDA 模型显然名气更响,应用起来也丰富得多。这方面的中文资料简直不要太多,个人认为最经典的当属《 LDA 数学八卦》,作者将 LDA 模型用物理过程详细解释,抽丝剥茧地剖析了来龙去脉,看完之后会有一种大呼过瘾的感觉。

参考:

[1] Unsupervised Learning by Probabilistic Latent Semantic Analysis

[2] Latent Dirichlet Allocation, JMLR 2003

[3] Topic Model Series [1]: pLSA

[4] http://blog.tomtung.com/2011/10/plsa/#blei03

[5] http://www.cnblogs.com/bentuwuying/p/6219970.html

NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型的更多相关文章

  1. 主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)

    上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类 ...

  2. Notes on Probabilistic Latent Semantic Analysis (PLSA)

    转自:http://www.hongliangjie.com/2010/01/04/notes-on-probabilistic-latent-semantic-analysis-plsa/ I hi ...

  3. Latent semantic analysis note(LSA)

    1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...

  4. 主题模型之潜在语义分析(Latent Semantic Analysis)

    主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...

  5. Latent Semantic Analysis (LSA) Tutorial 潜语义分析LSA介绍 一

    Latent Semantic Analysis (LSA) Tutorial 译:http://www.puffinwarellc.com/index.php/news-and-articles/a ...

  6. 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis

    http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  7. 潜语义分析(Latent Semantic Analysis)

    LSI(Latent semantic indexing, 潜语义索引)和LSA(Latent semantic analysis,潜语义分析)这两个名字其实是一回事.我们这里称为LSA. LSA源自 ...

  8. 潜在语义分析Latent semantic analysis note(LSA)原理及代码

    文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...

  9. Latent Semantic Analysis(LSA/ LSI)原理简介

    LSA的工作原理: How Latent Semantic Analysis Works LSA被广泛用于文献检索,文本分类,垃圾邮件过滤,语言识别,模式检索以及文章评估自动化等场景. LSA其中一个 ...

随机推荐

  1. 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)

    前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...

  2. Windows系统如何使用sqlmap

    使用方法:需要安装python,不能安装最新版本的python3.2.2只能安装2.6-3.0这些版本,包括2.6,3.0 这里,我提供一个Python的安装包.点击这里下载→ Python2.7 然 ...

  3. 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...

  4. 关于oracle数据库备份还原-impdp,expdp

    初始化: -- 创建表空间 CREATE TABLESPACE 表空间名 DATAFILE '文件名.dat' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNL ...

  5. JavaScript对象之document对象

    DOM对象之document对象 DOM对象:当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 打开网页后,首先 ...

  6. ZooKeeper源码分析-Jute-第二部分

    数据类型和流 本部分描述支持Hadoop的基础数据类型以及复合类型.我们的目的是支持一系列的类型,可以用于在不同的编程语言中简化和有效表达一定范围的记录类型. 基础类型 大部分情况下,Hadoop的大 ...

  7. 神奇的 conic-gradient 圆锥渐变

    感谢 LeaVerou 大神,让我们可以提前使用上这么美妙的属性. conic-gradient 是个什么?说到 conic-gradient ,就不得不提的它的另外两个兄弟: linear-grad ...

  8. 仿淘宝,京东红包雨(基于Phaser框架)

    本红包雨项目是基于HTML5的游戏框架Phaser写的,最终形成的是一个canvas,所以性能很好,但是必须要说的是这个框架比较大,压缩后也有700K左右,所以请慎用. 代码地址: https://g ...

  9. web前端2017.6.10

    表单元素:用于客户端和服务端进行信息交互的通道 <form></form>:所有的表单元素都应该放在里面 文本输入框:<input type="text&quo ...

  10. Ajax 向后台提交一个 JavaScript 对象数组?

    var postArray= new Array(); var temp = new Object(); temp.id='1'; temp.name='test'; postArray.push(t ...