大家好啊,我是董董灿。
在学习词嵌入向量的过程中,一个最著名的理解词嵌入向量在高维数学空间的例子,莫过于实现 queen = king - man + women 的数学运算了。
本文将从这个例子出发,解释该例子揭示的词向量背后的隐藏含义,并附上 Python 代码来实现这个高维词向量运算。
Queen = King - man + women
在经过之前文章对于词嵌入向量概念的介绍后,本文来看一下这个有趣的例子。
下面展示的单词“king”的词嵌入向量(该向量是在Wikipedia数据集上使用GolVe训练得到的)。
[ 0.50451 , 0.68607 , -0.59517 , -0.022801, 0.60046 , -0.13498 , -0.08813 , 0.47377 , -0.61798 , -0.31012 , -0.076666, 1.493 , -0.034189, -0.98173 , 0.68229 , 0.81722 , -0.51874 , -0.31503 , -0.55809 , 0.66421 , 0.1961 , -0.13495 , -0.11476 , -0.30344 , 0.41177 , -2.223 , -1.0756 , -1.0783 , -0.34354 , 0.33505 , 1.9927 , -0.04234 , -0.64319 , 0.71125 , 0.49159 , 0.16754 , 0.34344 , -0.25663 , -0.8523 , 0.1661 , 0.40102 , 1.1685 , -1.0137 , -0.21585 , -0.15155 , 0.78321 , -0.91241 , -1.6106 , -0.64426 , -0.51042 ]
该向量共50个数字,单从数字来看,我们并不能看到太多的东西,但是我们用另一种方法来把这些数字进行可视化展示。
方法如下:每个数字如果接近2,则为红色,如果接近0则为白色,如果接近-2则为绿色。
有很多方法可以实现类似的可视化,这里略过,直接看将词向量可视化之后的结果。
接下来,我们忽略上图中的数字,仅关注颜色,并且将一些我们认为含义相近的单词的可视化结果一起展示:
从上图,你是不是能发现一些端倪:women和man在颜色分布上,比women和king更加接近。
我们继续分析,继续放一些更加有关联的单词的可视化结果。
上面放了:queen,king,man,women,boy,girl,water(无关)的可视化结果。我们逐个分析一下:
-
在中间有一条非常明显的红线,从上到下一直贯穿,这条线代表的数字可能代表了一些信息(但是我们不知道是什么信息。)
-
你可以看到,women和girl在很多地方颜色很相似,这一点在man和boy的对比上也可以看出来。
-
boy和girl也有一些相似的地方,但是和women以及man相比,又有一些不一致的地方,这些不一致或许说明代表的是“成人”信息。
-
在最下面增加了water单词的可视化,可以看到在上面有一条蓝色的线从上到下贯穿,一直到water则停止消失了,这条蓝色的线或许代表的是“人类”这种信息。
-
queen和king的对比中,有一些相似但与其他不一致的地方,这些有可能代表了“皇室”的信息。
总之,经过上面的分析,我们可以看出,有相似特征的单词在某些数字(可视化后的颜色)上也会存在相似之处,但并非完全一致。
这代表了token与token之间仅仅在某些维度上是相似的,在其他维度上并不一致,比如“性别”、“皇室”等维度。
上面的例子,我们可以用Python代码来加载词向量,并且在高维数学空间中完成运算,甚至还可以完成“Beijing = China - country + capital”的逻辑运算。
关于如何用 Python代码来实现上述词向量的运算,你可以在这里查看详情:我的Transformer专栏。