掘金 人工智能 前天 20:43
Transformer 通关秘籍10:词向量的数值实际上是特征
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了词嵌入向量的奥秘,通过经典的 queen = king - Man + Woman 案例,揭示了词向量背后隐藏的含义。文章首先展示了单词 king 的词嵌入向量,并通过可视化方法,比较了 Man、Woman、boy、girl 和 water 等单词的词向量特征。随后,文章使用 Gensim 库和 GoogleNews 预训练模型,通过 Python 代码实现了词向量的运算,验证了 queen = king - Man + Woman 的数学关系,并解释了结果的近似性。

👑词嵌入向量代表单词在高维空间的特征表示,例如 king 的词嵌入向量包含50个数字,可以通过可视化展示其特征分布。

🎨通过比较 Man、Woman、boy、girl 和 water 等单词的词向量可视化结果,可以发现具有相似特征的单词在某些维度上存在相似之处,例如 Woman 和 girl 在颜色分布上更接近,体现了“性别”等信息。

🧮使用 Gensim 库和 GoogleNews 预训练模型,可以通过 Python 代码实现词向量的运算,验证 queen = king - Man + Woman 的数学关系,结果的近似度通过余弦相似度计算得到。

经过前面的介绍,相信你搞懂了词嵌入向量所代表的是单词在高维空间的特征表示了。在学习词嵌入向量的过程中,一个最著名的理解词嵌入向量在高维数学空间的例子,莫过于实现 queen = king - Man + Woman 的数学运算了。本节将从这个例子出发,揭示词向量背后的隐藏含义,并在最后附上通过GoogleVec的预训练模型来实现上述词向量运算的Python代码。本文在撰写时参考了很多国外的优秀博客,参考链接在文章最后。

这里有一个全程一站式的 Transformer 讲解和实战辅导,带你从零手写一个可对话的大模型,点击链接查看详情从零手写大模型实战

queen = king - Man + Woman 示例

下面展示的单词“ 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则为绿色。有很多方法可以实现类似的可视化,这里略过,直接看将词向量可视化之后的结果。

接下来,我们忽略上图中的数字,仅关注颜色,并且将一些我们认为含义相近的单词(这里选择了 Man 和 Woman )的可视化结果一起展示:

从上图,你是不是能发现一些端倪:Woman 和 Man 在颜色分布上,比 Woman 和 king 更加接近。我们继续分析,继续放一些更加有关联的单词的可视化结果。

上面放了: queen , king , Man , Woman , boy , girl , water (无关)的可视化结果。我们逐个分析一下:

    在中间有一条非常明显的红线,从上到下一直贯穿,这条线代表的数字可能代表了一些信息(但是我们不知道是什么信息。)你可以看到, Woman 和 girl 在很多地方颜色很相似,这一点在 Man 和 boy 的对比上也可以看出来。boy 和 girl 也有一些相似的地方,但是和 Woman 以及 Man 相比,又有一些不一致的地方,这些不一致或许说明代表的是“成人”信息。在最下面增加了 water 单词的可视化,可以看到在上面有一条蓝色的线从上到下贯穿,一直到 water 则停止消失了,这条蓝色的线或许代表的是“人类”这种信息。queen 和 king 的对比中,有一些相似但与其他不一致的地方,这些有可能代表了“皇室”的信息。总之,经过上面的分析,我们可以看出,有相似特征的单词在某些数字(可视化后的颜色)上也会存在相似之处,但并非完全一致。这代表了 token 与 token 之间仅仅在某些维度上是相似的,在其他维度上并不一致,比如“性别”、“皇室”等维度。Python 实现这个公式为了更好的理解这个现象,我们使用 Python 来进行更加深入的探索。我们使用 Gensim 库以及一个预训练好的模型(包含了 token 以及词嵌入向量)来完成。Gensim 库是一个可以用于主题建模和文档相似性检索的开源 Python 库,特别适用于处理大规模文本数据。可以通过以下命令安装:pip3 install --upgrade gensim -i pypi.tuna.tsinghua.edu.cn/simple安装完之后,前往这个网站下载预训练好的GoogleNews模型。GoogleNews 模型包含了 token 及其关联的词向量的文件,是在 Google 的新闻数据集(约 1000 亿词)上进行训练的;它包含了 300 万个单词和短语,每个词向量的维度是 300 维(300个数字)。该模型大概 1.5G 大小,比较大,下载会花费较长时间。下载完成后,解压该模型文件,解压后大概 3.7G,为一个 bin 文件。使用如下代码进行测试:
from gensim.models import KeyedVectors# load the google word2vec modelfilename = 'GoogleNews-vectors-negative300.bin'model = KeyedVectors.load_word2vec_format(filename, binary=True)# calculate: ( king - Man ) + Woman  = ?result = model.most_similar(positive=[' Woman ', ' king '], negative=[' Man '], topn=1)print(result)

上述代码的打印结果为:

[(' queen ', 0.7118193507194519)]

说明在词向量的高维数学空间中,通过计算 king - Man + Woman ,得到的结果是 queen 。注意: 上述 queen 结果是通过 model.most_similar 函数得到的,也即是词嵌入空间中与 king - Man + Woman 的结果最接近的 token 是 queen ,并非严格的相等,而是近似。上述代码中展示的近似度为0.7,是通过两个词向量的余弦相似度计算得到的,余弦相似度在之前几节介绍过,如果不记得了可以返回去再复习一下。当然,你也可以尝试计算 father - Man + Woman = mother 等逻辑。本文代码可以在这里获得。参考:

    gensim库:github.com/piskvorky/g…词向量实现:machinelearningmastery.com/develop-wor…GoogleNews预训练模型下载:drive.usercontent.google.com/download?id…数学上解释 queen = king - Man + Woman 的原理:p.migdal.pl/blog/2017/0… king - Man - Woman - queen -why

我创建了一个《小而精的AI学习圈》知识星球,星球上有几十万字原创高质量的技术专栏分享,同时你也可以在星球向我提问。点击这里,我们星球见! >>>
点击这里查看所有 AI 技术专栏

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

词嵌入向量 Gensim GoogleNews Queen = King - Man + Woman
相关文章