上一节已经完成了 token 到词向量的转换。那么,使用转换后的词嵌入向量便可以表示 token 之间的语义了吗?便可以表示两个单词是否是近义词,是否是反义词了吗?
是的。
接下来先通过一个例子,来直观地理解一下词嵌入向量是如何表示这些意思的。
词嵌入向量的表示
假设我们要对以下的词:"猫"、"狗"、"鱼"、"跑"进行数学表示。
如6、词汇表:文本到数值的转换所讲述的那样,如果用简单的数字来表示这些词,那么计算机只能知道它们之间是不同的词,而无法确定"猫"和"狗"的关系。
比如,我可以用下面简单的熟悉代替每一个词:
- 猫:1
- 狗:2
- 鱼:3
- 跑:4
如此一来,在计算机的运算逻辑里,会得出如下的荒谬结论:鱼(3)= 狗(2)+ 猫(1),也就是说在计算机眼里,一只鱼等于一只狗加一只猫。
这种错误逻辑肯定是无法接受的。
为了改善这种情况,研究人员经过千辛万苦,并且利用一些算法(比如Word2Vec)对大量的文本进行训练,将每个词映射到了一个词嵌入向量,从而可以修正上面的错误。
词嵌入向量是怎么样的呢?
为了方便描述,这里将词嵌入向量用一个仅包含了2个数字的向量来表示,这些词嵌入向量可能是:
- 猫:[0.2, 0.7]
- 狗:[0.3, 0.9]
- 鱼:[-0.5, 0.2]
- 跑:[0.8, -0.1]
如此一来,首先通过向量的形式就无法得出一只鱼等于一只狗加一只猫的错误结果。并且,如果将这四个词的嵌入向量画在二维平面上,可以表示为下面的样子:
可以看到,"猫"和"狗"这两个向量之间的夹角非常小,两者非常接近,这是因为它们都属于动物,而"鱼"和"跑"这两个向量则相距很远,因为它们不论属性还是语义都相差很远。
这样的表示方式,可以让计算机能够更好地理解单词之间的关系。
比如在文本分类任务中,当计算机遇到一个句子"猫和狗在跑",它会知道"猫"和"狗"是相似的词,而"跑"则和它们有些不同。
这样,通过使用词嵌入向量,便可以保留了单词之间的语义关系,计算机便能够更准确地理解文本,从而提高自然语言处理的性能。
需要注意的是,在真实使用的词嵌入向量中,一个向量中一般不会只有2个数字,而是512个数字或者更多。
向量中的每个数字代表了词的一个特征,可以认为512个数字代表了这个词在512个维度上的特征。
但是512维的向量很难在二维平面上绘制出来,我们无法对其直接进行可视化展示。
为此,谷歌开源了其Embedding Projector工具,利用一些算法对高维词嵌入向量做了降维处理,然后将其显示在三维空间中。网站链接在这里:projector.tensorflow.org/,如果你感兴趣的话,可...
余弦相似度和欧式距离
既然我们将 token 都转换到了高维的数学空间中,那么在高维数学空间中,如何来衡量两个 token (高维空间中为向量)的含义是相似的,还是相反的呢?
比如,在人类的认知中,狗和猫可以认为是一对近义词(这是相比于其他词比如"跑"而言的)。而在数学上,衡量两者是近义词的方法便是认为"两个向量更接近或者更相似"。
这种数学意义上的"向量更接近",可以称之为"向量的距离更小",更进一步讲,称为多维空间中"两个向量的欧氏距离更小"。
在三维几何上中,表示为两个点之间的距离,可以通过平方根来进行计算:
而在高维空间中,则可以使用余弦相似度来计算。比如在 GPT-4模型中,官方就推荐使用余弦相似度来衡量两个向量的距离。
这里有一个全程一站式的 Transformer 讲解和实战辅导,带你从零手写一个可对话的大模型,点击链接查看详情从零手写大模型实战
GPT-4 中的余弦相似度和欧氏距离的关系
当然这里有些细节还要说明一下,以免大家产生误导。
首先,欧氏距离和余弦相似度的含义和计算公式是不一样的,那么在 GPT-4 的词嵌入空间中,为什么可以使用余弦相似度来衡量两个向量之间的距离(欧式距离)呢?
先看下两者的概念:
余弦相似度:衡量的是向量在方向上的相似程度,而不是它们的大小。它是通过计算两个向量的点积然后除以它们的模长得到的,余弦相似度的公式如下:
cos_similarity = (A · B) / (||A|| * ||B||)
欧氏距离:衡量的是多维空间中两点之间的直线距离。在几何上,它是两点坐标差的平方和的平方根。欧氏距离对向量的长度和方向都敏感。
在 GPT-4 的嵌入空间中,嵌入向量都被标准化到长度1,也就是说所有的向量都是单位向量,在这种情况下,余弦相似度和欧氏距离之间存在一个有趣的关系:
● 点积:由于向量长度为1,余弦相似度就等于向量的点积,这样做不仅理解简单,还可以加速余弦相似度的计算。 ● 欧氏距离:在标准化了的向量空间中,欧氏距离的平方是两个单位向量之差的平方和。由于所有向量的长度相同,这实际上就可以认为是两个向量在方向上的差异的一种衡量。
因为 GPT-4 的高维向量空间,将向量都做了标准化,因此,在词嵌入空间中,尽管余弦相似度和欧氏距离的计算结果在数值上不一致,但它们却都可以产生相同的顺序排名,两种指标仍然可以一起指示哪些向量更相似或更不同。
比如计算猫和狗的余弦相似度为 0.9, 欧式距离为 9.9,猫和"跑"的余弦相似度为0.1, 欧式距离为 2.0,鱼和跑的余弦相似度为 0.01, 欧式距离为 0.9。
虽然两种计算方法得到的数值不同,但是排名是相同的。两者都可以指示谁与谁更接近,谁与谁更相反,或没有关联。
这就是为什么在 GPT-4 的嵌入空间中,推荐使用余弦相似度的原因:一是因为它计算更高效,二是因为它的计算结果和欧式距离一样,具有相同的顺序排名。
总结一下本节
- 在进行文本处理之前,文本转换为词嵌入向量是必须的,并且要转换为具有多个维度的高维向量,以此来衡量文本的语义。
- 在GPT-4的词嵌入空间中,推荐使用余弦相似度来衡量向量的"距离",这是因为 GPT-4 把嵌入向量标准化到了1,从而使得余弦相似度与欧氏距离在衡量向量相似性上具有一样的排名。
- 在其他的场景下,也可以使用余弦相似度这一指标来衡量向量的相似性。比如衡量两个文本或图像是否相似,直接计算其余弦相似度,也是一种简单有效的办法。 参考: ^维基百科余弦相似度: en.wikipedia.org/wiki/Cosine...
我创建了一个《小而精的AI学习圈》知识星球,星球上有几十万字原创高质量的技术专栏分享,同时你也可以在星球向我提问。 点击这里,我们星球见! >>>
点击这里查看所有 AI 技术专栏