更别致的词向量模型(三):描述相关的模型
By 苏剑林 | 2017-11-19 | 120087位读者 |几何词向量 #
上述“月老”之云虽说只是幻想,但所面临的问题却是真实的。按照传统NLP的手段,我们可以统计任意两个词的共现频率以及每个词自身的频率,然后去算它们的相关度,从而得到一个“相关度矩阵”。然而正如前面所说,这个共现矩阵太庞大了,必须压缩降维,同时还要做数据平滑,给未出现的词对的相关度赋予一个合理的估值。
在已有的机器学习方案中,我们已经有一些对庞大的矩阵降维的经验了,比如SVD和pLSA,SVD是对任意矩阵的降维,而pLSA是对转移概率矩阵$P(j|i)$的降维,两者的思想是类似的,都是将一个大矩阵$\boldsymbol{A}$分解为两个小矩阵的乘积$\boldsymbol{A}\approx\boldsymbol{B}\boldsymbol{C}$,其中$\boldsymbol{B}$的行数等于$\boldsymbol{A}$的行数,$\boldsymbol{C}$的列数等于$\boldsymbol{A}$的列数,而它们本身的大小则远小于$\boldsymbol{A}$的大小。如果对$\boldsymbol{B},\boldsymbol{C}$不做约束,那么就是SVD;如果对$\boldsymbol{B},\boldsymbol{C}$做正定归一化约束,那就是pLSA。
但是如果是相关度矩阵,那么情况不大一样,它是正定的但不是归一的,我们需要为它设计一个新的压缩方案。借鉴矩阵分解的经验,我们可以设想把所有的词都放在$n$维空间中,也就是用$n$维空间中的一个向量来表示,并假设它们的相关度就是内积的某个函数(为什么是内积?因为矩阵乘法本身就是不断地做内积):
\[\frac{P(w_i,w_j)}{P(w_i)P(w_j)}=f\big(\langle \boldsymbol{v}_i, \boldsymbol{v}_j\rangle\big)\tag{8}\]
其中加粗的$\boldsymbol{v}_i, \boldsymbol{v}_j$表示词$w_i,w_j$对应的词向量。从几何的角度看,我们就是把词语放置到了$n$维空间中,用空间中的点来表示一个词。
因为几何给我们的感觉是直观的,而语义给我们的感觉是复杂的,因此,理想情况下我们希望能够通过几何关系来反映语义关系。下面我们就根据我们所希望的几何特性,来确定待定的函数$f$。事实上,glove词向量的那篇论文中做过类似的事情,很有启发性,但glove的推导实在是不怎么好看。请留意,这里的观点是新颖的——从我们希望的性质,来确定我们的模型,而不是反过来有了模型再推导性质。
机场-飞机+火车=火车站 #
词向量最为人津津乐道的特性之一就是它的“词类比(word analogy)”,比如那个经典的“国王-男人+女人=女王”(这项性质是不是词向量所必需的,是存在争议的,但这至少算是个加分项)。然而中英文语境不同,在中文语料中这个例子是很难复现的,当然,这样的例子不少,没必要死抠“洋例子”,比如在中文语料中,就很容易发现有“机场-飞机+火车=火车站”,准确来说,是
\[\boldsymbol{v}(\text{机场})-\boldsymbol{v}(\text{飞机})+\boldsymbol{v}(\text{火车})=\boldsymbol{v}(\text{火车站})\tag{9}\]
为什么词向量会具有这种特性呢?最近一篇文章《Skip-Gram – Zipf + Uniform = Vector Additivity》对这个现象做了理论分析,文章中基于一些比较强的假设,最后推导出了这个结果。现在我们要做的一件可能比较惊人的事情是:把这个特性直接作为词向量模型的定义之一!
具体来说,就是词义的可加性直接体现为词向量的可加性,这个性质是词向量模型的定义。我们是要从这个性质出发,反过来把前一部分还没有确定下来的函数$f$找出来。这样一来,我们不仅为确定这个$f$找到了合理的依据,还解释了词向量的线性运算特性——因为这根本是词向量模型的定义,而不是模型的推论。
既然是线性运算,我们就可以移项得到“机场+火车=火车站+飞机”。现在我们来思考一下,单从语义角度来理解,这个等式究竟表达了什么?文章开头已经提到,词向量模型的假设基本都是用上下文的分布来推导词义,既然“机场+火车=火车站+飞机”,那么很显然就是说,“机场”与“火车”它们的共同的上下文,跟“火车站”与“飞机”的共同的上下文,两者基本是一样的。说白了,语义等价就相当于说“如果两个人的择偶标准是很接近的,那么他们肯定也有很多共同点”。到这里,$f$的形式就呼之欲出了!
模型的形式 #
因为词与词的相关程度用相关度来描述,所以如果“机场+火车=火车站+飞机”,那么我们会有:
\[\frac{P(\text{机场},\text{火车};w)}{P(\text{机场},\text{火车})P(w)}\quad=\quad\frac{P(\text{火车站},\text{飞机};w)}{P(\text{火车站},\text{飞机})P(w)}\tag{10}\]
这里的$w$是上下文的任意一个词,由于我们不特别关心词序,只关心上下文本身的平均分布,因此,我们可以使用朴素假设来化简上式,那么根据式$(6)$得到:
\[\frac{P(\text{机场},w)}{P(\text{机场})P(w)}\times\frac{P(\text{火车},w)}{P(\text{火车})P(w)}=\frac{P(\text{火车站},w)}{P(\text{火车站})P(w)}\times\frac{P(\text{飞机},w)}{P(\text{飞机})P(w)}\tag{11}\]
代入前面假设的式$(8)$,得到
\[f\big(\langle \boldsymbol{v}_{\text{机场}}, \boldsymbol{v}_w\rangle\big)f\big(\langle \boldsymbol{v}_{\text{火车}}, \boldsymbol{v}_w\rangle\big) = f\big(\langle \boldsymbol{v}_{\text{飞机}}, \boldsymbol{v}_w\rangle\big) f\big(\langle \boldsymbol{v}_{\text{火车站}}, \boldsymbol{v}_w\rangle\big)\tag{12}\]
最后代入式$(9)$,得到
\[\begin{aligned}&\left.f\big(\langle \boldsymbol{v}_{\text{机场}}, \boldsymbol{v}_w\rangle\big)f\big(\langle \boldsymbol{v}_{\text{火车}}, \boldsymbol{v}_w\rangle\big)\middle/f\big(\langle \boldsymbol{v}_{\text{飞机}}, \boldsymbol{v}_w\rangle\big)\right.\\
=&f\big(\langle \boldsymbol{v}_{\text{机场}}-\boldsymbol{v}_{\text{飞机}}+\boldsymbol{v}_{\text{火车}}, \boldsymbol{v}_w\rangle\big)\\
=&f\big(\langle \boldsymbol{v}_{\text{机场}}, \boldsymbol{v}_w\rangle+\langle\boldsymbol{v}_{\text{火车}}, \boldsymbol{v}_w\rangle-\langle\boldsymbol{v}_{\text{飞机}}, \boldsymbol{v}_w\rangle\big)
\end{aligned}\tag{13}\]
这里$\boldsymbol{v}_w$是任意的,因此上式等价于成立
$$f(x+y-z)=f(x)f(y)/f(z)$$
加上连续性条件的话,那么上述方程的通解就是(求解过程在一般的数学分析书籍应该都可以找到)
$$f(x)=e^{\alpha x}$$
也就是指数形式。现在我们就得到如下结果:为了让最后得到的词向量具有可加性,那么就需要对相关度用指数模型建模:
\[\frac{P(w_i,w_j)}{P(w_i)P(w_j)}=e^{\langle \boldsymbol{v}_i, \boldsymbol{v}_j\rangle}\tag{14}\]
等价地,对互信息进行建模:
\[\label{eq:model}\text{PMI}(w_i,w_j)=\langle \boldsymbol{v}_i, \boldsymbol{v}_j\rangle\tag{15}\]
至此,我们完成了模型的形式推导,从形式上看类似对互信息矩阵的SVD分解。
忘记归一化 #
我们没有像通常的概率模型那样,除以一个归一化因子来完成概率的归一化。这样造成的后果是:对于本文的模型,当然也包括glove模型,我们不能讨论任意有关归一化的事情,不然会导致自相矛盾的结果。
事实上,这是一种以空间换取时间的做法,因为我们没有除以归一化因子来归一化,但又必须让结果接近归一化,所以我们只能事先统计好所有的共现项的互信息并存好,这往往需要比较大的内存。而这步骤换来的好处是,所有的共现项其实很有限(“词对”的数目总比句子的数目要少),因此当你有大规模的语料且内存足够多时,用glove模型往往比用word2vec的skip gram模型要快得多。
此外,既然本文的模型跟word2vec的skip gram模型基本上就是相差了一个归一化因子,那么很显然,本文的一些推导过程能否直接迁移到word2vec的skip gram模型中,基本上取决于skip gram模型训练后它的归一化因子是否接近于1。
转载到请包括本文地址:https://kexue.fm/archives/4671
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Nov. 19, 2017). 《更别致的词向量模型(三):描述相关的模型 》[Blog post]. Retrieved from https://kexue.fm/archives/4671
@online{kexuefm-4671,
title={更别致的词向量模型(三):描述相关的模型},
author={苏剑林},
year={2017},
month={Nov},
url={\url{https://kexue.fm/archives/4671}},
}
November 20th, 2017
Typo: 倒数第二段 ‘事实上,这种一种’ ==> '事实上,这是一种'
顺便感谢分享,苏神数学功底实在太强了。
谢谢指出,已经修正^_^
November 29th, 2017
请问,文中指出的,词类比这种性质不是词向量所必须的,这种看法的观点是什么能告知嘛?
没理解,“这种看法的观点”指的是什么?指的是“词类比这种性质不是词向量所必须的”这句话的理由?词向量一般是后续NLP模型的特征,后续NLP模型效果好,词向量才算好,没有任何理由表明词类比性质有助于后续NLP模型更好
December 1st, 2017
请问一下,(10)是怎么从 机场+火车=火车站+飞机 这里得出来得呢?
语义相同意味着上下文分布一样,而上下文的分布一样就意味着它们跟哪个词的互信息都一样(它们交往的朋友是谁、交往的密切程度如何都一样),所以就得到(10)了。
我明白相加结果的语义是相同,但是从这里得出联合分布相等对我来说有点抽象,这是只对相加成立吗,还是任意运算(例如相减或想乘)都可以得出联合分布相等?
整个逻辑不是这样的。
首先,“机场+火车=火车站+飞机”是我们观察到的现象,这个现象就是说“机场,火车”的上下文分布,等于“火车站,飞机”的上下文分布,数学描述出来就是(10)式,到这一步,不涉及到词向量,是一个统计现象,不涉及到词向量的加减乘除。
然后,我们希望把“机场+火车=火车站+飞机”这个语言现象用数学公式(9)表示出来,那么根据(9)、(10)和我们模型的定义,就反推了$f$的表达式。
当然,理论上你可以把“机场+火车=火车站+飞机”这个语言现象用另外一个数学公式表示出来,然后反推另一个$f$的表达式,原则上也是成立的。但不管用什么公式表示,(9)式可以变,(10)式都是不变的。
“机场+火车=火车站+飞机是我们观察到的现象”
这句我不同意。 机场+火车=火车站+飞机不是自然语言的一部分。机场+火车=火车站+飞机完全就是符号运算。
如果说词向量代表的是词的上下文词的分布的话,可以认为:机场 -飞机 = 火车站 - 火车 = 乘客(即经常出现在机场的上下文,但很少出现在飞机的上下文的词),所以,机场 + 火车 = (飞机 + 乘客)+ 火车 = (火车 + 乘客) + 飞机 = 火车站 + 飞机。你认为这个+的含义其实是交集, 而我认为这个+是并集,是分布的叠加。
如果+是交集的话,那式10中的 P(机场, 火车;w)的含义是什么?Let v =“机场”和“火车”两个词肩并肩同时出现的事件, P(机场, 火车;w)表示上下文含有w的条件下,v出现的概率?
“机场+火车=火车站+飞机”就是一个正常的语言现象。
也许它不是一个“十分自然的”自然语言现象,但它确实是一个自然语言现象。虽然这种等式关系好像也就是Word2Vec提出后从词向量的代数运算中发现的,也就是说当初发现“机场+火车=火车站+飞机”确实是纯粹的向量空间运算,但是当我们发现了它之后,我们觉得它是有趣的、合理的,这个合理不是因为它代数运算相等所以才合理,而是我们从语义上觉得它合理。既然我们从语义上觉得合理,那么它就是一个语言现象。
还有,这一节(https://kexue.fm/archives/4677#%E8%AF%8D%E7%B1%BB%E6%AF%94%E5%AE%9E%E9%AA%8C)中,我列举了很多这样的关系,比如“广州+浙江−广东=杭州”等。这些关系我是先猜出它可能等于什么,然后才用词向量去验证的。我能事先猜到它应该等于什么,说明它就是一个语言现象,不是所谓的“纯粹的符号运算”。
“这个合理不是因为它代数运算相等所以才合理,而是我们从语义上觉得它合理”
不觉得在语义上合理,在语义上我都不清楚"机场+火车"的具体含义是什么。到底是火车出现在了机场,还是?
我们知道+在词向量里的定义。你能定义一下这些等式里的+在自然语义里的含义吗,“机场+火车”在语义上是什么意思?或者把“机场+火车=火车站+飞机”翻译成大白话?
扯个相关的,很多测智商题会考比如“树枝:手臂=树叶:?” 这种类比题。翻译成大白话就是"树枝和手臂的关系相当于树叶和什么的关系?"
至于$P(\text{机场},\text{火车};w)$,指的是同时出现“机场、火车和w”的概率。
@cuijie|comment-10303
你说到游戏,那就更容易解释了。给一般人举几个例子:
国王 + 女人 = 王后 + 男人
广州 + 浙江 = 广东 + 杭州
我相信他可以猜出:“机场 + 火车=火车站 + ?”中的“?”就是飞机,甚至能直接猜出“机场 + 火车=?+ ?”的两个“?”分别是火车站和飞机。
这就够了,这就是语义,这就是语言现象。普通人不知道“机场 + 火车”是什么意思,普通人更不知道词向量相加相等的性质,但他们看了几个例子就能理解,就能类比地做出来。包括你说的“树枝:手臂=树叶:?” 这种类比题,也是同样的道理。语义本身很难下个明确的数学定义,我们说关键词提取,然后给关键词做了一些数学假设,难道那些假设就真的是“关键”的定义了么?
如果非要较真“机场+火车”的含义,我说了,是交集。如果用通俗的语言来比喻,那么就说:“机场+火车”代表那些经常出现在“机场”和“火车”的“人”,“火车站+飞机”代表那些经常出现在“飞机”和“火车站”的人。“经常出现”指的是“又”,指的是两地都有出现,显然这两批人几乎是同一批人,所以“机场+火车=火车站+飞机”。这里的“人”类比的就是词了。
December 2nd, 2017
所以你是说(10)和(9)都是假设的一部分?我明白f推导在数学上是正确的,但我并不是很明白(10)和(9)之间的联系,(10)里边的(机场,火车)这个对应的具体是什么事件,是同时出现在同一个window里,还是别的?你在上一篇提到了多特征的互信息,这个多特征的组合在我们的问题对应的事件具体是什么?
不好意思,回复错了地方。。
(9)是假设,(10)不是假设。
你想想,我们为什么认为“机场+火车=火车站+飞机”是合理的?或者说“机场+火车-飞机=火车站”,我们人是从语义的角度来思考是觉得它合理的,对不?现在是语义的角度,不涉及到模型。
然后,词向量模型的假设是,语义可以由上下文的分布描述,对不?这基本是所有词向量模型的出发点。好,现在我们将“语义”这个抽象的东西转化为上下文的分布了。何为分布?词$w_i$的上下文分布可以是$p(w|w_i)$,或者是$\frac{p(w,w_i)}{p(w)p(w_i)}$,其中$w$遍历所有的词。遍历所有的词,就得到一个非常长的向量,语义相等,就意味着这个向量相等。
接着,我们可以描述“机场+火车=火车站+飞机”了,它就是说“机场,火车”的上下文分布,等于“火车站,飞机”的上下文分布,数学描述出来就是(10)式。“机场,火车”这个事件怎么理解?你可以大概地认为是一个句子中同时出现“机场”和“火车”两个词(或者是同一个window,我觉得都无所谓)。
到这一步为止,(10)式出来了,但不涉及词向量模型的具体数学形式。到这一步,同时适用于glove模型、skip gram模型。
最后,是我们的希望,希望用向量的线性相加关系来表示“机场+火车=火车站+飞机”,也就是(9)式,这是我们的期望,或者说,这就是我们模型的假设。基于这个假设,就得到了模型。
我认同你上面讲的,其实你这个模型的好坏取决于你这个假设是否合理,不过从性质推导模型这个对我们这些非数学背景的人来说还是很震撼的。
December 4th, 2017
第13式,你没有提到的定义,怎么能直接写出=+-.我觉得这部分要不然还得再加假设,要不然就是你推导错了
第13式,你没有提到$$的定义,怎么能直接写出$=+-$.
就是13式第二行到第三行尖括号那个部分,那个线性可加性你推导错了. 我打不上这边的公式了
不好意思我看漏了,那里是定义成了内积
January 13th, 2018
不是很明白,从 (10) 到 (11) 是怎么算过来的。首先是 (10) 的符号问题,P(机场,火车;w)中的分号表示的是条件概率?独立性假设假设的是什么之间的独立?机场和火车这两个词向量之间不可能是独立的
照你这样说,的确自然语言中,没有什么是独立的。所谓假设,都是不成立的,只是近似而已。
(10)式的分号表示的是联合概率,分号的意思只是希望读者分组看变量罢了。其次,(10)到(11)的过程源于(6)。至于(6)的推导假设,是参考HMM的过程进行的,也许不是严格意义上的独立假设吧。或者你觉得难以理解的话,那么可以认为假设本身就是(6)式。
January 14th, 2018
还有在 (10) 到 (11) 同时利用了机场火车独立和机场火车在 w 下条件独立,这两个都不是显然,或者说,是需要做一定的假设的。但是这样的假设。。
July 17th, 2019
有点疑问想讨论下:(11)中的假设:词的上下文是标准分布,论文里有提实际词的上下文是Zipf distribution,这样往下的推导是不是不太成立了呢?
$(11)$式似乎没有假设上下文的分布是什么呀。
October 9th, 2021
请教苏神几个问题,感觉有点挖坟了。。
1、这里相关度矩阵是正定非归一化的,我的理解是正定是由于因为词向量各维度之间线性无关造成的,非归一化是因为P(wi,wj)/(P(wi)*P(wj))的值并不在0-1范围内、且加和不为1,不知道理解的对不对
2、文末,“本文的模型跟word2vec的skip gram模型基本上就是相差了一个归一化因子”,这里我的理解是,这里是skip gram模型是广义的以P(w2|w1)建模的模型,并不特指使用了 Hierarchical Softmax 或者Negative Sampling 机制的模型,因为这俩机制的word2vect没有归一化(直接概率相乘求极大了),但我还是不太理解的是,即使是用softmax求P(w2|w1)怎么就和本文的P(wi,wj)/(P(wi)*P(wj))仅相差了一个归一化因子
3、文末,“事实上,这是一种以空间换取时间的做法,因为我们没有除以归一化因子来归一化,但又必须让结果接近归一化”这段绝对是点睛之笔,前半段我的理解是因为提前算好互信息,后半段不太明白为啥要让结果接近归一化,是类似标准化的概念么,提前算好所有的互信息,然后标准化?以上还请苏神不吝解答,谢谢