词嵌入还有一个特性是能帮助实现类比推理,尽管类比推理可能不是自然语言处理中最重要的存在,不过它能帮助人们理解词嵌入做了什么以及词嵌入能做什么,让我们来一探究竟。
上图是一系列你希望词嵌入可以捕捉的单词的特征表示,假如提出一个问题,man如果对应woman,那么king应该对应什么?我们都应该能猜到,king应该对应queen。能否有一种算法来自动推导出这种关系?下面就是实现的方法。
我们用一个四维向量来表示man,我们用 e 5391 e_{5391} e5391来表示,这里先把它称为 e m a n e_{man} eman,woman的嵌入向量称它为 e w o m a n e_{woman} ewoman,对king和queen也是用一样的表示方法。在该例中,假设你用的是四维的嵌入向量而不是比较典型的50到10000维的向量,这些向量有一个有趣的特性,就是假如你有向量 e m a n e_{man} eman和 e w o m a n e_{woman} ewoman,将它们进行减法运算,可以得到 e m a n − e w o m a n = [ − 2 , 0 , 0 , 0 ] e_{man}-e_{woman}=[-2,0,0,0] eman−ewoman=[−2,0,0,0]类似地,假如你用 e k i n g e_{king} eking减去 e q u e e n e_{queen} equeen,最后也会得到一样的结果 e k i n g − e q u e e n = [ − 2 , 0 , 0 , 0 ] e_{king}-e_{queen}=[-2,0,0,0] eking−equeen=[−2,0,0,0]这个结果表示man和woman的主要差异是性别上的差异,而king和queen的差异也是性别上的差异。
所以得出这种类比推理的结论的方法就是当算法被问及man对woman相对于king对什么时,算法所做的就是 e k i n g − e q u e e n e_{king}-e_{queen} eking−equeen,然后找出一个向量,也就是找出一个词,使得 e m a n − e w o m a n ≈ e k i n g − e ? e_{man}-e_{woman}\approx e_{king}-e_{?} eman−ewoman≈eking−e?,也就是说,当这个新词是queen时,式子的左边会近似地等于右边。
这种思想首先是被 T o m a s M i k o l o v Tomas \space Mikolov Tomas Mikolov和 W e n − t a u Y i h Wen-tau \space Yih Wen−tau Yih,还有 G e o f f r e y Z w e i g Geoffrey \space Zweig Geoffrey Zweig提出的,这是词嵌入领域影响力最为惊人和显著的成果之一,这种思想帮助研究者们对词嵌入领域建立了更深刻的理解,让我们来正式地探讨一下应该如何把这种思想写成算法。
在图中,词嵌入向量在一个可能有300维的空间里,于是单词man代表的就是空间中的一个点,另一个单词woman代表空间中的另一个点,单词king也代表一个点,还有单词queen。
事实上,我们前面展示了, e m a n − e w o m a n ≈ e k i n g − e q u e e n e_{man}-e_{woman}\approx e_{king}-e_{queen} eman−ewoman≈eking−equeen。为了得出这样的类比推理,计算当man对于woman时,king对于什么。你能做的就是找到单词w来使得等式 e m a n − e w o m a n ≈ e k i n g − e w e_{man}-e_{woman}\approx e_{king}-e_{w} eman−ewoman≈eking−ew成立,最大化 e w e_w ew和 e k i n g − e m a n + e w o m a n e_{king}-e_{man}+e_{woman} eking−eman+ewoman的相似度。我们有一些测试 e w e_w ew和 e k i n g − e m a n + e w o m a n e_{king}-e_{man}+e_{woman} eking−eman+ewoman相似度的相似度函数,然后通过方程找到一个使得相似度最大的权重。如果结果理想的话会得到单词queen。
值得注意的是,这种方法真的有效。如果你学习一些词嵌入,通过算法来找到使得相似度最大化的单词w,你确实可以得到完全正确的答案,不过这取决于过程中的细节。如果你查看一些研究论文,就不难发现,通过这种方法来做类比推理,准确率大概只有30%~70%。只要算法猜中了单词,就把这次计算视为正确,从而计算出正确率。在该例子中,算法选出了单词queen。
在进行下一步之前,需要再说明一下,我们说过用 t − S N E t-SNE t−SNE算法来将单词可视化, t − S N E t-SNE t−SNE算法所做的就是把这些300维的数据用一种非线性的方式映射到2维平面上,可以得知 t − S N E t-SNE t−SNE中这种映射很复杂,而且很非线性,在知道 t − S N E t-SNE t−SNE映射之后,你不能总是期望使等式成立的关系像一个平行四边形。
通过 t − S N E t-SNE t−SNE映射出来的图像可能是正确的,但在大多数情况下,由于 t − S N E t-SNE t−SNE的非线性映射,就没法再指望这种平行四边形了。很多这种平行四边形的类别关系在 t − S N E t-SNE t−SNE映射中都会失去原貌。
这里再列举一个最常用的相似度函数,这个最常用的相似度函数叫做余弦函数。在余弦相似度中,假如在向量u和v之间定义相似度,相似度计算公式为 s i m ( u , v ) = u T v ∣ ∣ u ∣ ∣ 2 ∣ ∣ v ∣ ∣ 2 sim(u,v)=\frac{u^Tv}{||u||_2||v||_2} sim(u,v)=∣∣u∣∣2∣∣v∣∣2uTv现在我们先不看分母,分子中其实就是向量u和v的内积,如果u和v非常相似,那么他们的内积将会很大。把整个式子叫做余弦相似度,其实就是因为该式是u和v的夹角的余弦值,所以这个公式就是计算两个向量的夹角 ϕ \phi ϕ角的余弦。当两个向量的夹角是0时,余弦相似度就是1,当夹角是90度时,余弦相似度就是0。当它们是180度时,图像完全跑到了相反的方向,这时相似度等于-1,这就是为什么余弦相似度对于这种类比工作能起到非常好的效果。
你还可以用平方距离或者欧氏距离来表示余弦相似度公式中的分母,从学术上来说,比起测试相似度,这个函数更容易测量的是相异度,所以我们需要对其取负,这个函数才能正常工作。不过还是觉得余弦相似度会用的多一点,这两者的主要区别是它们对u和v之间的距离的标准化方式不同。
词嵌入的一个显著成果就是可学习类比关系的一般性。比如man和woman对应于boy和girl,ottawa和canada对应于nairobi和kenya等。只要你在大型的文本语料库上实现一个词嵌入学习算法,只要从足够大的语料库中进行学习,它就能自主地发现这种模式。