更别致的词向量模型(二):对语言进行建模
By 苏剑林 | 2017-11-19 | 54860位读者 |从条件概率到互信息 #
目前,词向量模型的原理基本都是词的上下文的分布可以揭示这个词的语义,就好比“看看你跟什么样的人交往,就知道你是什么样的人”,所以词向量模型的核心就是对上下文的关系进行建模。除了glove之外,几乎所有词向量模型都是在对条件概率$P(w|context)$进行建模,比如Word2Vec的skip gram模型就是对条件概率$P(w_2|w_1)$进行建模。但这个量其实是有些缺点的,首先它是不对称的,即$P(w_2|w_1)$不一定等于$P(w_1|w_2)$,这样我们在建模的时候,就要把上下文向量和目标向量区分开,它们不能在同一向量空间中;其次,它是有界的、归一化的量,这就意味着我们必须使用softmax等方法将它压缩归一,这造成了优化上的困难。
事实上,在NLP的世界里,有一个更加对称的量比单纯的$P(w_2|w_1)$更为重要,那就是
\[\frac{P(w_1,w_2)}{P(w_1)P(w_2)}=\frac{P(w_2|w_1)}{P(w_2)}\tag{1}\]
这个量的大概意思是“两个词真实碰面的概率是它们随机相遇的概率的多少倍”,如果它远远大于1,那么表明它们倾向于共同出现而不是随机组合的,当然如果它远远小于1,那就意味着它们俩是刻意回避对方的。这个量在NLP界是举足轻重的,我们暂且称它为“相关度“,当然,它的对数值更加出名,大名为点互信息(Pointwise Mutual Information,PMI):
\[\text{PMI}(w_1,w_2)=\log \frac{P(w_1,w_2)}{P(w_1)P(w_2)}\tag{2}\]
有了上面的理论基础,我们认为,如果能直接对相关度进行建模,会比直接对条件概率$P(w_2|w_1)$建模更加合理,所以本文就围绕这个角度进行展开。在此之前,我们先进一步展示一下互信息本身的美妙性质。
互信息的可加性 #
相关度(等价地,互信息)在朴素假设下,有着非常漂亮的分解性质。所谓朴素假设,就是指特征之间是相互独立的,这样我们就有$P(a,b)=P(a)P(b)$,也就是将联合概率进行分解,从而简化模型。
比如,考虑两个量$Q,A$之间的互信息,$Q,A$不是单个特征,而是多个特征的组合:$Q=(q_1,\dots,q_k),A=(a_1,\dots,a_l)$,现在考虑它们的相关度,即
\[\begin{aligned}\frac{P(Q,A)}{P(Q)P(A)}=&\frac{P(q_1,\dots,q_k;a_{1},\dots,a_{l})}{P(q_1,\dots,q_k)P(a_{1},\dots,a_{l})}\\
=&\frac{P(q_1,\dots,q_k|a_{1},\dots,a_{l})}{P(q_1,\dots,q_k)}\end{aligned}\tag{3}\]
用朴素假设就得到
\[\frac{P(q_1,\dots,q_k|a_{1},\dots,a_{l})}{P(q_1,\dots,q_k)}=\frac{\prod_{i=1}^k P(q_i|a_{1},\dots,a_{l})}{\prod_{i=1}^k P(q_i)}\tag{4}\]
用贝叶斯公式,得到
\[\begin{aligned}\frac{\prod_{i=1}^k P(q_i|a_{1},\dots,a_{l})}{\prod_{i=1}^k P(q_i)}=&\frac{\prod_{i=1}^k P(a_{1},\dots,a_{l}|q_i)P(q_i)/P(a_{1},\dots,a_{l})}{\prod_{i=1}^k P(q_i)}\\
=&\prod_{i=1}^k\frac{P(a_{1},\dots,a_{l}|q_i)}{P(a_{1},\dots,a_{l})}\end{aligned}\tag{5}\]
再用一次朴素假设,得到
\[\begin{aligned}\prod_{i=1}^k\frac{P(a_{1},\dots,a_{l}|q_i)}{P(a_{1},\dots,a_{l})}=&\prod_{i=1}^k\frac{\prod_{j=1}^{l} P(a_j|q_i)}{\prod_{j=1}^{l} P(a_j)}\\
=&\prod_{i=1}^k\prod_{j=1}^{l} \frac{P(q_i,a_j)}{P(q_i)P(a_j)}\end{aligned}\tag{6}\]
这表明,在朴素假设下,两个多元变量的相关度,等于它们两两单变量的相关度的乘积。如果两边取对数,那么结果就更加好看了,即
\[\text{PMI}(Q,A)=\sum_{i=1}^k\sum_{j=1}^{l} \text{PMI}(q_i,a_j)\tag{7}\]
也就是说,两个多元变量之间的互信息,等于两两单变量之间的互信息之和,换句话说,互信息是可加的!
插播:番外篇 #
为了让大家更直观地理解词向量建模的原理,现在让我们想象自己是语言界的“月老”,我们的目的是测定任意两个词之间的“缘分”,为每个词寻找最佳的另一半铺路~
所谓“有缘千里来相会,无缘见面不相识”,对于每个词来说,最佳的另一半肯定都是它的“有缘词”。怎样的两个词才算是“有缘”呢?那自然是“你的眼里有我,我的眼里也有你”了。前面已经说了,skip gram模型关心的是条件概率$P(w_2|w_1)$,导致的结果是“$w_1$的眼里有$w_2$,$w_2$的眼里却未必有$w_1$”,也就是说,$w_2$更多的是词语界的“花花公子”,如“的”、“了”这些停用词,它们跟谁都能混在一起,但未必对谁都真心。因此,为了“你中有我,我中有你”,就必须同时考虑$P(w_2|w_1)$和$P(w_1|w_2)$,或者考虑一个更加对称的量——也就是前面说的“相关度”了。所以“月老”决定用相关度来定量描述两个词之间的“缘分”值。
接下来,“月老”就开始工作了,开始逐一算词与词之间的“缘分”了。算着算着,他就发现严重的问题了。
首先,数目太多了,算不完。要知道词语界可是有数万甚至数十万、将来还可能是数百万的词语,如果两两的缘分都算一次并记录下来,那将要一个数十亿乃至数万亿的表格,而且这工作量也不少,也许月老下岗了也还不能把它们都算完,但从负责任的角度,我们不能忽略任意两个词在一起的可能性呀!
其次,词与词之间的N次邂逅,相对于漫漫历史长河,也不过是沧海一粟。两个词没有碰过面,真的就表明它们毫无缘分了吗?现在没有,可不代表将来没有。作为谨慎的月老,显然是不能这么武断下结论的。词与词之间的关系错综复杂,因此哪怕两个词没有碰过面,也不能一刀切,也得估算一下它们的缘分值。
转载到请包括本文地址:https://kexue.fm/archives/4669
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Nov. 19, 2017). 《更别致的词向量模型(二):对语言进行建模 》[Blog post]. Retrieved from https://kexue.fm/archives/4669
@online{kexuefm-4669,
title={更别致的词向量模型(二):对语言进行建模},
author={苏剑林},
year={2017},
month={Nov},
url={\url{https://kexue.fm/archives/4669}},
}
January 3rd, 2018
请问为什么有界的、归一化的量会造成优化上的困难,特别是归一化,在机器学习中不是最常用的做法么?
如果从激活函数的角度来看,有界意味着存在饱和区,因此会有可能梯度消失的问题。当然,这是一般的情况,在softmax中一般也不会关心它的饱和。
softmax主要的问题是,因为它的归一化的,所以我们必须要算归一化因子Z,而这个Z必须遍历所有词表来算的,所以理论上每步计算量都很大,因此只能通过各种近似方法(huffman softmax、负采样等)来算。
October 9th, 2019
想请问下苏神,为什么利用相关度进行建模会比条件概率建模更加合理呢?还是没有看懂
因为相关度能挖掘出真正有关联意义的组合,而当模型拟合能力有限时,应当让模型优先学习那些有本质相关性的组合。
February 13th, 2021
先祝苏神新年快乐!
在阅读本文时有一处不解 : "其次,它是有界的、归一化的量,这就意味着我们必须使用softmax等方法将它压缩归一,这造成了优化上的困难" , 请问苏神 1.这里的优化具体是指的什么优化? 2.为什么有界的、归一化的量,使用softmax的方式归一化后会造成优化上的困难? 有界且可以归一化在我的"刻板印象"中一直是比较好的性质呀? 请苏神指点
尴尬了 发完才看到一楼已经有了类似的问题 苏神忽略这个问题~ 新年快乐!
好的
August 21st, 2021
苏神,请问下,为什么skip gram 用到的条件概率 $P(w1|w2)$ 是不对称的呢? $w2$ 可以作为 $w1$ 的上下文,同样 $w1$ 也可以作为 $w2$ 的上下文,这不应该是对称的嘛?
本来就没有对称的理由,比如电影院是用来看电影的,所以$P(\text{电影}|\text{电影院})$会比较大,但是看电影不一定要去电影院,所以$P(\text{电影院}|\text{电影})$没那么大。