自然语言处理之LSA

LSA(Latent Semantic Analysis), 潜在语义分析。试图利用文档中隐藏的潜在的概念来进行文档分析与检索,能够达到比直接的关键词匹配获得更好的效果。

LSA的核心思想

假设有 nn 篇文档,这些文档中的单词总数为 mm (可以先进行分词、去词根、去停止词操作),我们可以用一个 m∗nm∗n的矩阵 XX 来表示这些文档,这个矩阵的每个元素 XijXij 表示第 ii 个单词在第 jj 篇文档中出现的次数(也可用tf-idf值)。下文例子中得到的矩阵见下图。

LSA试图将原始矩阵降维到一个潜在的概念空间(维度不超过 nn ),然后每个单词或文档都可以用该空间下的一组权值向量(也可认为是坐标)来表示,这些权值反应了与对应的潜在概念的关联程度的强弱。
这个降维是通过对该矩阵进行奇异值分解(SVD, singular value decomposition)做到的,计算其用三个矩阵的乘积表示的等价形式,如下:
\[
X=U \Sigma V^{T}
\]
其中 UU 为 m * n 维,ΣΣ 为对角阵 n * n 维,VV 为 n * n 维。
ΣΣ 矩阵中对角线上的每一个值就是SVD过程中得到的奇异值,其大小反映了其对应的潜在概念的重要程度。
然后我们可以自行设定降维后的潜在概念的维度 \(k(k<n)k(k<n)\) , 可以得到:
\[
X_{k}=U_{k} \Sigma_{k} V_{k}^{T}
\]
其中 \(U_k\) 是将 \(U\) 仅保留前 \(k\) 列的结果,\(Σk\) 是仅保留前 \(k\) 行及前 \(k\) 列的结果,\(V_k\) 是将 \(V\) 仅保留前 \(k\) 列的结果。
\(X_k\) 则是将 \(X\) 降维到 \(k\) 维的近似结果,这个 \(k\) 越接近 \(n\), \(X_k\) 与 \(X\) 也越接近,但我们的目标并不是越接近越好,LSA认为 \(k\) 值不宜过大(保留了冗余的潜在概念)也不宜过小。

自然语言处理之PLSA

LSA使用线性代数方法,对document-word矩阵进行SVD分解。PLSA则使用了一个概率图模型,引入了一个隐变量topic(可以认为是文档的主题),然后进行统计推断。

为何提出PLSA

在语义分析问题中,存在同义词和一词多义这两个严峻的问题,LSA可以很好的解决同义词问题,却无法妥善处理一词多义问题。
PLSA则可以同时解决同义词和一词多义两个问题。

概率图模型

我们知道文档(一个句子、一个段落或一篇文章)都有它自己的主题,从大的方面讲有经济、政治、文化、体育、音乐、法律、动漫、游戏、法律等等主题,PLSA模型就引入了一个隐变量topic来表示这个主题。
PLSA的概率图模型如下图所示:

其中 DD 表示文档(document),\(Z\) 表示主题(topic), \(W\) 表示单词(word),其中箭头表示了变量间的依赖关系,比如 \(D\) 指向 \(Z\),表示一篇文档决定了该文档的主题,\(Z\) 指向 \(W\) 表示由该主题生成一个单词,方框右下角的字母表示该方框执行的次数,\(N\) 表示共生成了 \(N\) 篇文档,\(M\) 表示一篇文档按照document-topic分布生成了 \(M\) 次主题,每一次按照生成的主题的topic-word分布生成单词。每个文档的单词数可以不同。
PLSA引入了隐藏变量 \(Z\),认为 \({D,W,Z}{D,W,Z}\) 表示完整的数据集(the complete data set), 而原始的真实数据集 \({D,W}{D,W}\) 是不完整的数据集(incomplete data)。
假设 \(Z\) 的取值共有 \(K\) 个。PLSA模型假设的文档生成过程如下

  1. 以 \(p(d_i)\) 的概率选择一个文档 \(d_i\)
  2. 以 \(p(z_k|d_i)\) 的概率选择一个主题 \(z_k\)
  3. 以 \(p(w_j|z_k)\) 的概率生成一个单词 \(w_j\)
    根据图模型,可以得到观测数据的联合分布:

\[
\begin{aligned} p\left(d_{i}, w_{j}\right) &=\sum_{k=1}^{K} p\left(d_{i}, w_{j}, z_{k}\right) \\ &=\sum_{k=1}^{K} p\left(d_{i}\right) p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right) \\ &=p\left(d_{i}\right) \sum_{k=1}^{K} p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right) \end{aligned}
\]

第一个等式是对三者的联合概率分布对其中的隐藏变量 \(Z\) 的所有取值累加,第二个等式根据图模型的依赖关系将联合概率展开为条件概率,第三个等式只是简单的乘法结合律。这样就计算出了第 \(i\) 篇文档与第 \(j\) 个单词的联合概率分布。

我们可以得到完整数据的对数似然为:
\[
\begin{aligned} L &=\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \log \left(p\left(d_{i}, w_{j}\right)\right) \\ &=\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \log \left(p\left(d_{i}\right) \sum_{k=1}^{K} p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right)\right) \\ &=\sum_{i=1}^{N} n\left(d_{i}\right) \log \left(p\left(d_{i}\right)\right)+\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \log \sum_{k=1}^{K} p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right) \end{aligned}
\]
\(p(z_k|d_i)\) 和 \(p(w_j|z_k)\) 是PLSA模型需要求解的参数,

使用EM求解PLSA

可以看之前所写的关于EM 算法的blog,对于其中的函数 \(Q\), 现在给出PLSA中 \(Q\) 函数的形式
\[
\begin{aligned} Q\left(\theta, \theta^{o l d}\right) &=\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \sum_{k=1}^{K} p\left(z_{k} | d_{i}, w_{j}\right) \log p\left(d_{i}, w_{j}, z_{k} ; \theta\right) \\ &=\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \sum_{k=1}^{K} p\left(z_{k} | d_{i}, w_{j}\right) \log \left[p\left(d_{i}\right) p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right)\right] \end{aligned}
\]
注意到这是因为如前文所说,在本问题中,认为\({D,W,Z}\) 是完整的数据集。
由于 \(p(d_i)∝n(d_i) ,\) 表示第 \(i\) 篇文档的单词总数,这一项估计并不重要,因此上式去掉该项,得到:
\[
Q\left(\theta, \theta^{o l d}\right)=\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \sum_{k=1}^{K} p\left(z_{k} | d_{i}, w_{j}\right) \log \left[p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right)\right]
\]
可以看到对数中是参数的乘积,不再包含求和的部分。
我们注意到,参数存在下面的两个约束:
\[
\begin{array}{l}{\sum_{j=1}^{M} p\left(w_{j} | z_{k}\right)=1} \\ {\sum_{k=1}^{K} p\left(z_{k} | d_{i}\right)=1}\end{array}
\]
因此可以使用拉格朗日乘子法(Lagrange multiplier)求取使得 \(Q\) 函数最大时对应的参数。
写出拉格朗日函数:
\[
Lagrange=Q+\sum_{k=1}^{K} \tau_{k}\left(1-\sum_{j=1}^{M} p\left(w_{j} | z_{k}\right)\right)+\sum_{i=1}^{N} \rho_{i}\left(1-\sum_{k=1}^{K} p\left(z_{k} | d_{i}\right)\right)
\]
对拉格朗日函数中的 \(p(w_j|z_k)\) 求偏导,令其等于零,得到:
\[
\sum_{i=1}^{N} n\left(d_{i}, w_{j}\right) p\left(z_{k} | d_{i}, w_{j}\right)-\tau_{k} p\left(w_{j} | z_{k}\right)=0,1 \leq j \leq M, 1 \leq k \leq K
\]
对该式 \(1≤k≤K\) 所有取值下等式两边累加,可以消去 \(p(z_{k}|d_i)\), 从而得到 \(ρ_i\) 的表达式,回带到上式得到下式:
\[
p\left(z_{k} | d_{i}\right)=\frac{\sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) p\left(z_{k} | d_{i}, w_{j}\right)}{n\left(d_{i}\right)}
\]
这样就得到了EM算法的M-Step重新估计参数的公式。
那么在E-Step如何计算 \(z\) 的后验概率呢?根据下式计算,第一个等式是贝叶斯法则,第二个等式是根据图模型将联合概率展开,第三个等式是分子分母同时除以一个因子。
\[
\begin{aligned} p\left(z_{k} | d_{i}, w_{j}\right) &=\frac{p\left(d_{i}, w_{j}, z_{k}\right)}{p\left(d_{i}, w_{j}\right)} \\ &=\frac{p\left(d_{i}\right) p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right)}{\sum_{l=1}^{K} p\left(d_{i}\right) p\left(z_{l} | d_{i}\right) p\left(w_{j} | z_{l}\right)} \\ &=\frac{p\left(z_{k} | d_{i}\right) p\left(w_{j} | z_{k}\right)}{\sum_{l=1}^{K} p\left(z_{l} | d_{i}\right) p\left(w_{j} | z_{l}\right)} \end{aligned}
\]

自然语言处理之LDA

我们知道,PLSA也定义了一个概率图模型,假设了数据的生成过程,但是不是一个完全的生成过程:没有给出先验。因此PLSA给出的是一个最大似然估计(ML)或者最大后验估计(MAP)。
LDA拓展了PLSA,定义了先验,因此LDA给出的是一个完整的贝叶斯估计。

这里先给出本文公式中以及python代码中使用到的符号及其含义。关于编号,公式中从1开始编号,代码中从0开始编号,只是为了方便。

LDA 的生成过程:

对于所有的主题 \(\mathrm{k} \in[1, \mathrm{K}]\), do

​ 样本混合元素:\(\overrightarrow{\varphi_{k}} \sim \operatorname{Dir}(\vec{\beta})\)

队友所有的文本 \(\mathrm{i} \in[1, \mathrm{N}]\):

样本混合的比例:\(\overrightarrow{\theta_{i}} \sim \operatorname{Dir}(\vec{\alpha})\)

样本混合的长度:\(N_{i} \sim \operatorname{Poiss}(\xi)\)

对于所有的元素:\(j \in\left[1, \mathrm{N}_{i}\right]\) 在文本 \(i\) 中:

样本主题的标签:\(z_{i, j} \sim \operatorname{Mult}\left(\overrightarrow{\theta_{i}}\right)\)

样本单词的类别:\(w_{i, j} \sim M u l t\left(\overrightarrow{\varphi_{z_{i, j}}}\right)\)

由该生成过程以及dirichlet-multinomial共轭可得:
\[
\begin{array}{l}{p(\vec{z} | \vec{\alpha})=\prod_{i=1}^{N} \frac{\Delta\left(\overrightarrow{n_{i}}+\vec{\alpha}\right)}{\Delta(\vec{\alpha})}} \\\\ {p(\vec{w} | \vec{z}, \vec{\beta})=\prod_{z=1}^{K} \frac{\Delta\left(\overrightarrow{n_{z}}+\vec{\beta}\right)}{\Delta(\vec{\beta})}}\end{array} \\
\]

\[
\begin{aligned} p(\vec{w}, \vec{z} | \vec{\alpha}, \vec{\beta}) &=p(\vec{w} | \vec{z}, \vec{\beta}) p(\vec{z} | \vec{\alpha}) \\ &=\prod_{z=1}^{K} \frac{\Delta\left(\vec{n}_{z}+\vec{\beta}\right)}{\Delta(\vec{\beta})} \prod_{i=1}^{N} \frac{\Delta\left(\overrightarrow{n_{i}}+\vec{\alpha}\right)}{\Delta(\vec{\alpha})} \end{aligned}
\]

根据上面的概率图模型,可以得出第i篇文档的complete-data似然性为:
\[
p\left(\vec{w}_{i}, \vec{z}_{i}, \overrightarrow{\theta_{i}}, \Phi | \vec{\alpha}, \vec{\beta}\right)=\prod_{j=1}^{N_{i}} p\left(w_{i, j} | \overrightarrow{\varphi_{z_{i j}}}\right) p\left(z_{i, j} | \overrightarrow{\theta_{i}}\right) \cdot p\left(\overrightarrow{\theta_{i}} | \vec{\alpha}\right) \cdot p(\Phi | \vec{\beta})
\]
第i篇文档第j个单词在词表中编号为w的概率为:
\[
p\left(w_{i, j}=w | \overrightarrow{\theta_{i}}, \Phi\right)=\sum_{k=1}^{K} p\left(w_{i, j}=w | \overrightarrow{\varphi_{k}}\right) p\left(z_{i, j}=k | \overrightarrow{\theta_{i}}\right)
\]
整个数据集的似然性为:
\[
p(\mathcal{D} | \Theta, \Phi)=\prod_{i=1}^{N} p\left(\overrightarrow{w_{i}} | \overrightarrow{\theta_{i}}, \Phi\right)=\prod_{i=1}^{N} \prod_{j=1}^{N_{i}} p\left(w_{i, j} | \overrightarrow{\theta_{i}}, \Phi\right)
\]
PLSA中的概率图模型由于没有先验,模型比LDA简单一些,认为文档决定topic,topic决定单词,写出了整个数据集的对数似然性,然后由于要求解的参数以求和的形式出现在了对数函数中,无法通过直接求导使用梯度下降或牛顿法来使得这个对数似然最大,因此使用了EM算法。
LDA同样可以使用EM算法求解参数,但需要在E步计算隐变量的后验概率时使用变分推断进行近似,一种更简单的方法是使用gibbs sampling。

gibbs sampling

这部分的公式推导如下:
\[
p\left(z_{l}=z | \overrightarrow{z_{l}-l}, \vec{w}\right)=\frac{p(\vec{w}, \vec{z})}{p\left(\vec{w}, \vec{z}_{\neg l}\right)} \\\\ =\frac{p(\vec{w} | \vec{z}) p(\vec{z})}{p\left(\vec{w}_{l} | \vec{z}_{l}\right) p\left(w_{l}\right) p\left(\vec{z}_{l}\right)} \propto \frac{p(\vec{w} | \vec{z}) p(\vec{z})}{p\left(\vec{w}_{\eta} | \overrightarrow{z_{\eta}}\right) p\left(\overrightarrow{z_{\eta}}\right)} \\\\ =\frac{\Delta\left(\overrightarrow{n_{i}}+\vec{\alpha}\right)}{\Delta\left(n_{i, l}+\vec{\alpha}\right)} \cdot \frac{\Delta\left(\overrightarrow{n_{z}}+\vec{\beta}\right)}{\Delta\left(\overrightarrow{n_{z}, \eta}+\vec{\beta}\right)} \\\\ =\frac{\Gamma\left(n_{i z}+\alpha_{z}\right) \Gamma\left(\sum_{z=1}^{K}\left(n_{i z, \eta}+\alpha_{z}\right)\right)}{\Gamma\left(n_{i z, \eta}+\alpha_{z}\right) \Gamma\left(\sum_{z=1}^{K}\left(n_{i z}+\alpha_{z}\right)\right)} \cdot \frac{\Gamma\left(n_{z w}+\beta_{w}\right) \Gamma\left(\sum_{w=1}^{M}\left(n_{z w, l}+\beta_{w}\right)\right)}{\Gamma\left(n_{z w, \eta}+\beta_{w}\right) \Gamma\left(\sum_{w=1}^{M}\left(n_{z w}+\beta_{w )}\right)\right.}\\\\=\frac{n_{i z, 7 l}+\alpha_{z}}{\sum_{z=1}^{K}\left(n_{i z, 7 l}+\alpha_{z}\right)} \cdot \frac{n_{z w, l}+\beta_{w}}{\sum_{w=1}^{M}\left(n_{z w, 7}+\beta_{w}\right)}\propto \frac{n_{z w, 7 l}+\beta_{w}}{\sum_{w=1}^{M}\left(n_{z w, 7}+\beta_{w}\right)} \cdot\left(n_{i z, 7 l}+\alpha_{z}\right)\\\\=\frac{n z w[z, w]}{n z[z]} \cdot(n d z[i, z])
\]
下面解释一下这个推导过程,前两个等号是利用了贝叶斯公式,第三步的正比于符号这一行是去掉了一项常数 \(p(w_l)\),第四步利用了前面计算好的 \(p(\vec{w}, \vec{z})\) 联合概率公式,第五、六步是将函数展开并化简,第七步的正比于符号是去掉了一项不依赖于z的项(即z取何值该项都相同),最后一行给出了对应代码中的表达。
这样我们就得到了吉布斯采样公式,每一轮gibbs sampling的迭代中依次遍历每个二维下标 ll, 即遍历每篇文档的每一个单词,重新采样这个下标对应的topic编号。

一口气讲完 LSA — PlSA —LDA在自然语言处理中的使用的更多相关文章

  1. 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错

    在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...

  2. (转)一个故事讲完https

    (转)一个故事讲完https 2 1  序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎 ...

  3. 讲完.class,Class之后,继续。

    讲完.class,Class之后,继续. 1)泛化的Class引用 Class也可以加入泛型,加入之后会进行类型检查. 贴一下书上原话,Class<?>优于Class,虽然他们是等价的,C ...

  4. 猴博士4小时讲完C语言视频教程

    猴博士4小时讲完C语言视频教程,一共有9节课. 目录结构如下: 目录:/2020030-猴博士4小时讲完C语言 [1G] ┣━━1.C语言基本语句(上)(更多资源访问:www.jimeng365.cn ...

  5. 10 分钟讲完 QUIC 协议。

    建议阅读本文需要搭配作者 HTTP 相关文章食用. 历史 HTTP 系列文章: 看完这篇HTTP,跟面试官扯皮就没问题了 HTTP 2.0 ,有点炸 ! 这里先来回顾一下 HTTP 的发展过程.首先, ...

  6. 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)

    转载 https://zhuanlan.zhihu.com/p/49271699 首发于深度学习前沿笔记 写文章   从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 张 ...

  7. zz从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

    从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么 ...

  8. 自然语言处理中的N-Gram模型

    N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理.另外一方面,N-Gram的另外一个作用是 ...

  9. 卷积神经网络CNN在自然语言处理中的应用

    卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,从而掀起了深度学习在自然语言处理领域(Natural Language Process ...

随机推荐

  1. FineReport连接SSAS多维数据库

    1.服务器——定义数据连接,如下图: 2.配置SSAS服务器地址及登录名密码: 注意这里的用户名.密码是指的服务器的登录名和登录密码,也就是你远程桌面的登录用户名和密码,不是数据库的登录用户名密码. ...

  2. 来自GitHub的优秀开源项目系列

    开发必看: 如何设计大型系统? 架构师技术图谱. 互联网Java工程师进阶扫盲 Java学习指南 Java工程师成神之路 有趣开源项目: 中华古诗词数据库 表情包博物馆

  3. Linux命令:scp

    1.find命令: scp [参数] [原路径] [目标路径] 2.用法: scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的sc ...

  4. js对数组array的常见操作小结

    1.创建数组?两种方式 var arr = new Array("1","2","4"); var arr1 = ["1" ...

  5. C# 获取指定类型的文件

    C# 获取指定类型的文件 public static List<FileInfo> getFile(string path, string extName) { List<FileI ...

  6. centos 修改默认启动内核,及删除无用内核

    #使用cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核 [root@bigapp-slave27 ~]# cat /boot/grub2/grub.c ...

  7. zabbix--基础概念及原理

    zabbix 基础概念及工作原理整理 什么是 zabbix? Zabbix 能监控各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位.解决存在的各种问题.是一个基于 W ...

  8. VMware虚拟化kvm安装部署总结

    虚拟化 1.环境 Centos7.3 关闭selinux,关闭防火墙 2.虚拟化环境配置 2.1 kvm部署安装 1. VMware 配置桥接模式 2.bios开启虚拟机,以本地台式机为例, 重启动电 ...

  9. js清除浏览器的缓存的方法

    许多的项目当中,一旦改动了js的代码,必须在浏览器当中重新加载数据,清理缓存,比较麻烦.网上找了很多的清除浏览器的方法,首先是在 html的头部加上meta的属性,但是发现并没有什么用处,后来看到说在 ...

  10. 如何将VOC XML文件转化成COCO数据格式

    数据转换实在是个烦人的工作,被折磨了很久决定抽出时间整理一下,仅供参考. 在一个项目中,我需要将已有的VOC的xml标注文件转化成COCO的数据格式,为了方便理解,文章按如下顺序介绍: XML文件内容 ...