保姆级教程:Embedding本质是什么?
和大部分人一样,我对自然语言处理和语言模型的了解,是从 ChatGPT 开始的。也和大部分人一样,第一次接触就被它的能力所震惊——硅基智能确实做到了理解人类的语言。

几乎人人都会有的疑问随之而来:这到底是怎么做到的?硅基智能的潜力,是否会远胜于碳基智能?
这篇文章并不打算解释 ChatGPT 的一切,而是从原理出发,思考计算机理解语言的关键要素。这些思考最终落到了一个具体的切入点:
Embedding
0 编码:文字的数字化
Embedding 这个词直译过来是“嵌入”——让人头秃的两个字:啥是嵌入?嵌入了啥?跟自然语言又有什么关系?
嵌入的体现形式是一组具有固定长度的数组,或者说向量。但它究竟是什么?为什么需要它?它在计算机理解自然语言的过程中扮演着怎样的角色?
要回答这些问题,不妨先想想:要让计算机理解自然语言,我们首先需要做什么?
计算的基础是数,而自然语言是文字。因此,第一步显然是让文字数字化——为了行文方便,我们把这个过程叫做“编码”。
设计编码方法时,自然要问:编码规则必须满足哪些性质?
有一条是显而易见的:
性质一:每一个词具有唯一量化值,不同词需要具有不同的量化值
背后的逻辑不言自明:一词多数,或者多词一数,都会增加计算机理解语言的难度——就像多音字或多义词给人类造成的困难。尽管人类智慧可以克服这些障碍,但对于仍在培育智能阶段的计算机,降低一些难度显然是必要的。
满足性质一的方法很容易设计。例如,先穷举人类所有的文字或词组——这个集合必定是有限集。汉字大约有10万个,辞海收录的词约60万个,字母26个,英语单词数不到100万个。既然是有限集,我们可以给每个词分配一个固定数字。比如打开一本词典,将遇到的单词依次赋予不同的数值:
A --> 1
Abandon --> 2
Abnormal --> 3
...
这样,“Hello World”这句话就可以作为“3942 98783”这样的数字序列输入计算机。但是这有一个明显的问题:
数值与词义是割裂的
这种割裂会产生什么问题?举一个简单的例子:在英语中,a 和 an 是完全同质的词,而 a 和 abnormal 则是差异极大的词。如果按照上述编码,a 可能被赋值为1,abnormal 被赋值为2,an 被赋值为123。这时你会发现,a 和 abnormal 在数值上更接近,而 a 和 an 这两个同质的词却隔得很远。
于是,我们需要添加一条性质,确保数字化后的数值与词义相关联:
性质二:词义相近的词需要有“相近”的量化值;词义不相近的词,量化值需要尽量“远离”。
1 基于词义的编码
你可能觉得数值和词义应该关联是理所当然的,但模糊的“显然”往往掩盖了值得清晰梳理的逻辑。背后的原因主要有两个:
帮助更高效地理解语义;
允许计算模型的设计有更大的自由度。
先说第一条。如果词的数值分布与词义无关,文本序列就会变得过于随机。比如:
句子一:张三在讲话。
句子二:李四在发言。
这两句话有着非常强的同质性。但如果对字/词的编码不符合性质二,那么两句话的序列特征会有非常大的差异。可以想象,如果近义词具有相近的量化值,词和值之间的关系看起来就是相似的形状:
张 -> 105, 李 -> 99
三 -> 3, 四 -> 4
在 -> 200,
讲话 -> 300, 发言 -> 295
而如果近义词的量化值不相近,一眼看上去似乎毫无关系:
张 -> 33, 李 -> 1
三 -> 5, 四 -> 200
在 -> 45,
讲话 -> 2, 发言 -> 42
当性质二满足时,同义的句子在序列特征上会更加接近,有利于计算机更高效地理解共性、区分特性;反之则会给计算机带来极大的困难。难以捕捉同质内容之间的共性,意味着模型需要更多参数才能描述同等的信息量,学习难度自然会更大。
OpenAI 的 Jack Rae 在斯坦福分享中提出了一个很深刻的视角:
语言模型就是一个压缩器
(图片:编码值未基于词义形成聚类)
(图片:编码值基于词义形成聚类)
再说第二条。词是离散分布的,而计算模型的输出——除非只使用非常简单的运算并约束参数权重——很难恰好落在定义好的量化值中。对于神经网络模型,每一个节点、每一层都必须是连续的,否则便无法计算梯度,从而无法应用反向传播算法。
这两个事实放在一起,可能出现的情况是:
理解了这一点,GPT 模型的最后一层就非常容易理解了。在最后一层之前,推理的对象是以向量形式表征的语义,输出的是一个“模糊”的向量——它可能并不对应任何已知的词。因此,模型最后需要做一个推测,基于这个“模糊”向量所包含的语义信息,在词表中寻找最符合这些特征的词作为真正的输出。在 Transformer 中,最后的输出是一个概率分布,表示每个词匹配该“模糊”向量的概率。
现在我们知道性质二是必要的。有没有可能抢救一下字典编码法?比如找一本近义词词典,给相近的词赋予相近的数?问题很快会出现:A和B词义相似,B和C词义相似,并不意味着A和C词义也相近。例如:
A = "Love", B = "Passion", C = "Rage"
A = "Comedy", B = "Play", C = "Game"
在这两个案例中,A和B接近,B和C接近,但A和C却不接近。问题出在哪里?
词义的多维性。
“嵌入”这个名字太糟糕了,不如叫它“词义向量”吧;而词义向量所处的空间,可以称为“词义空间”。
2 如何设计编码器
到目前为止,我们已经找到了可以表达词义的数字化形式——向量,也知道了一个好的编码方式应当满足的性质。如何设计一套方法来完成我们期望的编码呢?
一个容易想到的方法是,让词义的不同维度与向量的不同维度关联。例如,对词义的维度进行全面拆分:名词性、动词性、形容词性、数量特征、人物、主动、被动、情感色彩、情感强度、空间上下、空间前后、空间内外、颜色特征……只要维度足够多,一定能把词义包含的信息全囊括在内。一旦给出每个维度的定义,就可以给每个词在相应维度上赋值,从而完成词的向量化,并且完美满足上述两条性质。
但这个看似可行的设计,并不具备可实现性。首先,要囊括所有词义的维度,需要的维度数量必然是极高的,而对词义进行如此精细的切分本身就非常困难。其次,即使切分出来了,要将每个词在不同维度上的意义赋予有效的数值,即便是资深的语言学家恐怕也会感到棘手。今天大家熟知的语言模型中,并没有一个是用这种方式对词进行向量化的。不过,这个思想方案是有意义的——词义向量的不同维度之于计算机,就如同我们上面列举的维度(词性、数量、时间、空间等)之于人类。
纯构建的方式不可行,今天我们已经知道了一套有效的解决办法:神经网络加大数据,暴力出奇迹。这套范式的起源就是
Word2Vec
Word2Vec 的关键是一个重要的洞察、一个极具启发性的角度:
一个词的意义,可以被它所出现的上下文定义
Word2Vec 的两类做法分别是:
中心词 → 神经网络 → 上下文
上下文 → 神经网络 → 中心词
今天回头看,这个工作从一开始就注定了成功:原理上基于广泛接受的分布假说,方法上使用了拟合能力强大的神经网络模型,最重要的是——数据要多少有多少。当然,这个方法不是终点,它的局限性是明显的,但开创性已经足够。它只利用和挖掘了分布假说的浅层结构。怎么理解这句话?本质上,Word2Vec 并没有尝试去理解句子内的语义。对于完全相同的上下文,不同中心词的词义相似性容易捕捉;当词义向量的聚类逐渐形成,由近义词构成的上下文也能在一定程度上标记词义相近的中心词。但人类的语言结构非常复杂,当相同语义通过不同句式、语态、修辞表达时,某些近义词对的关系就可能被深埋。
看看 ChatGPT 举的这个例子:
句子1:
句子2:
两个句子都在描述一个女性深夜仍在阅读,驱使她的是对知识的无尽渴望。两句话中存在非常多意义相近的词对,在不理解语义的情况下,这些词对之间的相似性难以被辨识。
接下来可以讨论 GPT 了。它是一个有能力理解句子的模型。如果说 Word2Vec 这类构建词义向量的模型是教计算机“认字”的过程,那么 GPT 模型的训练则是一个“认字”+“背书”的过程。老师最后只考书背得好不好,但为了把书背好,GPT 也被动强化了认字能力。推理的核心是 Transformer,Transformer 的核心是 Attention 机制。Attention 机制是什么?一言以蔽之:计算词义向量之间的“距离”后,对距离近的词投向更多注意力,而收到高注意力的词义则获得更高的激活值。预测完成后,通过反向传播算法:当特定的激活帮助了最终的预测,对应词之间的关联将被强化,反之则被弱化。模型正是通过这种方式学到了词之间的关系。而在分布假说的视角下,“认字”的实质就是认识一个词和其他词之间的关系。于是就形成了“认字为了背书,背书帮助认字”的结构。
可以提炼一个观点:Attention 机制之所以重要且好用,原因之一就是它能有效帮助词义向量(Embedding)聚类。想想 GPT 的例子其实很有趣。一般的工程思维是将大问题拆成多个小问题逐一解决——就像文章开头说的“让计算机理解自然语言,首先得让文字数字化”。这个表述隐含了一条路径:先数字化,再理解句子。有趣的地方在于:对词进行向量化编码的最好方法,是直接训练一个理解句子的语言模型。这就像为了让婴儿学会走路,直接从跑步开始训练。人类会摔跤会受伤,但机器不会——至少在具身智能(Embodied AI)之前不会。因此人类为了降低代价而建立的步骤化学习过程,或许并不适合人工智能。不难发现,深度学习中许多好的解决方案往往都是一步到位的。
3 总结
这篇文章把我关于语言模型中 Embedding 的理解都梳理了一遍。当然,Embedding 还不止这些。图像可以有 Embedding,句子和段落也可以有 Embedding——本质都是用一组数来表达意义。段落的 Embedding 可以作为基于语义搜索的高效索引;AI 绘画技术的背后,有着两种 Embedding 的互动。未来如果有一个大一统的多模态模型,Embedding 必然是其中的基石和桥梁。
由 AI 掀起的时代浪潮毫无疑问地到来了,今天仍是一个难以看清未来的节点。当下能做的为数不多的事情之一,还是保持学习。希望这篇文章能帮到正在学习的你。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名