Transformer 通关秘籍7:词向量的通俗理解

上一节通过词汇表将 token 文本转换为数值,也就是转换为 token ID ,这之后计算机便可以进行下一步的操作了。

但是这里我抛出一个问题:计算机在进行运算时,可以基于 token ID 进行计算吗?

你可以先思考5秒钟,然后继续往下看。

答案是不行的。原因先不说,直接举个例子。

假设有以下三个 token ,以及它们在词汇表中分别对应的 token ID 。

yaml 复制代码
dog : 100
cat : 101
run: 1

如果直接按照这个 token ID 来计算的话,很显然 cat = dog + run,这样可以翻译为:会跑的狗等于猫。

这个逻辑显然不对,虽然上面的 token 以及 token ID 是我编的,但是在真实的词汇表的 token ID 中,会很容易出现类似的问题。

因此,计算机要理解 token 之间的语义关系(比如两个单词是近义词还是反义词),以 token ID 这种简单的数值来运算是肯定不行的。

这里就需要将 token ID 做进一步的转换,使其可以更好的表达 token 之间的语义关系。

一个更好地表示方法,便是将 token ID 转换为向量,使得一个数值可以在多维空间进行表示,从而丰富其含义和特征。

这个过程便是对文本转换的第二个过程,也就是词嵌入(Embedding)。

怎么理解这个过程呢?请往下看。

什么是词嵌入向量?

首先,词嵌入的作用,是将整数(这里就理解为 token ID 就好了)转换为一个固定大小的向量。

这些转换过程可以通过模型的大规模训练来完成。转换完之后的向量可以捕获以及表达 token 之间的复杂关系,比如语义关系、语法关系等。

这些向量通常被称为嵌入向量,用多维数据进行表示,每一维都代表 token 的一些隐含特征。

举个例子,假设 cat 转换为词嵌入向量后为 [100, 200, 300]。

这里是为了举例子,用了一个仅包含3个特征(通常情况下为512个特征)的向量。其中,100 可能代表" cat 是动物",200 可能代表" cat 属于猫科",300 可能代表" cat 会跑"。

也就是说,向量中的每一个数字都代表 cat 的一种特征。如此一来,一个包含了很多特征的向量,就可以较为丰富的代表这个 token 了。

将数值转换为词嵌入向量这个过程,有很多成熟的算法(模型)可以实现,这个过程需要对大量的文本进行训练才能正确完成转换。这里的算法和模型在后面章节会介绍,这里先介绍概念。

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

词嵌入的通俗理解

看完上面,可能有些同学还不能完全理解词嵌入的含义。这里再通俗的讲解一下将一个 token 转换为向量的动机。

首先,我们作为人类是可以理解 cat 这个单词的,并且人类在理解这个单词的时候,会默认施加给这个单词很多属性:比如会跑、会爬树、会叫、粘人、会抓老鼠等等。

但是计算机不会。

一个单词拥有如此丰富的含义和属性,这绝对不是一个简单的数值可以表示的,因此,必须将一个 token 单词转换为更加丰富的数学表示。

在数学里,能够表达一个单词丰富属性的结构就是数组了,比如可以认为:

cat = [会跑、会爬树、会叫、粘人、会抓老鼠,...],也就是说 cat 是这些属性的集合,只要数组中的属性给的足够多,那么就能非常精确的将 cat 这个单词给表达出来。

因此,在数学上需要一个数组来表示一个单词( token ),这个过程就是嵌入层(Word Embedding) 做的事情。

再了解了这个过程后,另一个可能不太好理解的是:为什么这个过程叫做嵌入(Embedding)呢?

在数学或者物理科学中,"嵌入"指的是一种操作,它是将一个对象(比如一个点)放置到另外一个更高维度的空间中,同时还要保持这个对象的属性。

对应到 NLP 模型处理 token 的场景:便是将一个 token "嵌入"到了一个更高维度的空间中,并且可以在更高维度的空间中,利用多个特征来表示该 token ,并且还可以使其保持丰富的属性和含义。

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

相关推荐
梁辰兴1 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
野犬寒鸦1 小时前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试
菜鸟得菜1 小时前
leecode kadane算法 解决数组中子数组的最大和,以及环形数组连续子数组的最大和问题
数据结构·算法·leetcode
楼田莉子2 小时前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼2 小时前
leetcode常用解题方案总结
前端·算法·leetcode
ulias2123 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_570466413 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌3 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站3 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛
ulias2123 小时前
动态规划入门:从记忆化搜索到动态规划
算法·动态规划