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. ios移动端原生滚动条滚动不灵敏问题

    最近开发微信页面的时候遇到了这个问题, 因为移动端浏览器的原生滚动条样式很好,不像pc端那么难看,所以在页面需要滚动的地方用了原生的滚动条,这种滚动条在安卓浏览器中没有任何问题,但是在ios微信浏览器 ...

  2. Python中的枚举

    在Python中想要实现枚举功能的方式比较多,可以通过字典这一数据结构,利用键与值的对应关系,可以实现枚举的功能. my_Enum={ 'red':1, 'yellow':2, 'blue':3 } ...

  3. Bash函数

    一.什么是Bash函数 Bash不支持goto语句,可以用function实现程序流程跳转.当前shell中一组组织在一起并被命名的命令.比脚本的效率高,一旦定义,就成为shell内存的一部分,可以随 ...

  4. [0] 服务器 TCP 提供程序无法在 [ 'any' <ipv4> *] 上侦听。TCP 端口已在使用中。

    配置工具——配置管理器——SQLEXPRESS协议下的TCP/IP协议 将其已启用改为禁用. 同时停止SQLEXPRESS服务即可

  5. Python 内置函数汇总

    循环设计与循环对象 range() enumerate() zip() iter() 函数对象 map() filter() reduce() 序列操作 all([True, 1, "hel ...

  6. 团体队列UVA540 Team Queue(队列简单用法)

    题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队. ...

  7. iOS 转场动画探究(一)

    什么是转场动画: 转场动画说的直接点就是你常见的界面跳转的时候看到的动画效果,我们比较常见的就是控制器之间的Push和Pop,还有Present和Dismiss的时候设置一下系统给我们的modalTr ...

  8. Linux 开机引导流程

    Linux 开机启动流程 BIOS(Basic Input Output System)是 PC 机启动时加载的第一个软件.其实,它是一组固化到计算机主板上一个芯片上的程序,它保存着计算机最重要的输入 ...

  9. 按enter 进行搜索 enter提交表单

    //按enter 进行搜索 document.onkeydown = function(e){ var ev = document.all ? window.event : e; if(ev.keyC ...

  10. Mac QQ 怎么清除聊天记录

    在 Mac 电脑上登录 QQ 以后,点击顶部菜单中“应用”下的“消息管理器”选项,如图所示