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 技术专栏

相关推荐
序属秋秋秋7 分钟前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
玉树临风ives8 分钟前
leetcode 2360 图中最长的环 题解
算法·leetcode·深度优先·图论
KeithTsui1 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
mNinGInG1 小时前
c++练习
开发语言·c++·算法
纪元A梦1 小时前
分布式锁算法——基于ZooKeeper的分布式锁全面解析
java·分布式·算法·zookeeper
Panesle2 小时前
广告推荐算法:COSMO算法与A9算法的对比
人工智能·算法·机器学习·推荐算法·广告推荐
月亮被咬碎成星星2 小时前
LeetCode[15]三数之和
数据结构·算法·leetcode
半盏茶香3 小时前
启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——堆的应用之堆排、Top-K问题
java·开发语言·数据结构·c++·python·算法·链表
小竹子143 小时前
L1-1 天梯赛座位分配
数据结构·c++·算法
董董灿是个攻城狮3 小时前
Transformer 通关秘籍8:词向量如何表示近义词?
算法