热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >保姆级教程:Embedding本质是什么?

保姆级教程:Embedding本质是什么?

来源:互联网 更新时间:2026-08-25 14:37

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

保姆级教程:Embedding本质是什么?

几乎人人都会有的疑问随之而来:这到底是怎么做到的?硅基智能的潜力,是否会远胜于碳基智能?

这篇文章并不打算解释 ChatGPT 的一切,而是从原理出发,思考计算机理解语言的关键要素。这些思考最终落到了一个具体的切入点:

Embedding

——一个第一眼难以理解、但极为关键的东西。

0 编码:文字的数字化

Embedding 这个词直译过来是“嵌入”——让人头秃的两个字:啥是嵌入?嵌入了啥?跟自然语言又有什么关系?

嵌入的体现形式是一组具有固定长度的数组,或者说向量。但它究竟是什么?为什么需要它?它在计算机理解自然语言的过程中扮演着怎样的角色?

要回答这些问题,不妨先想想:要让计算机理解自然语言,我们首先需要做什么?

计算的基础是数,而自然语言是文字。因此,第一步显然是让文字数字化——为了行文方便,我们把这个过程叫做“编码”。

设计编码方法时,自然要问:编码规则必须满足哪些性质?

有一条是显而易见的:

性质一:每一个词具有唯一量化值,不同词需要具有不同的量化值

背后的逻辑不言自明:一词多数,或者多词一数,都会增加计算机理解语言的难度——就像多音字或多义词给人类造成的困难。尽管人类智慧可以克服这些障碍,但对于仍在培育智能阶段的计算机,降低一些难度显然是必要的。

满足性质一的方法很容易设计。例如,先穷举人类所有的文字或词组——这个集合必定是有限集。汉字大约有10万个,辞海收录的词约60万个,字母26个,英语单词数不到100万个。既然是有限集,我们可以给每个词分配一个固定数字。比如打开一本词典,将遇到的单词依次赋予不同的数值:

A --> 1
Abandon --> 2
Abnormal --> 3
...

这样,“Hello World”这句话就可以作为“3942 98783”这样的数字序列输入计算机。但是这有一个明显的问题:

数值与词义是割裂的

这种割裂会产生什么问题?举一个简单的例子:在英语中,aan 是完全同质的词,而 aabnormal 则是差异极大的词。如果按照上述编码,a 可能被赋值为1,abnormal 被赋值为2,an 被赋值为123。这时你会发现,aabnormal 在数值上更接近,而 aan 这两个同质的词却隔得很远。

于是,我们需要添加一条性质,确保数字化后的数值与词义相关联:

性质二:词义相近的词需要有“相近”的量化值;词义不相近的词,量化值需要尽量“远离”。

1 基于词义的编码

你可能觉得数值和词义应该关联是理所当然的,但模糊的“显然”往往掩盖了值得清晰梳理的逻辑。背后的原因主要有两个:

  • 帮助更高效地理解语义;

  • 允许计算模型的设计有更大的自由度。

先说第一条。如果词的数值分布与词义无关,文本序列就会变得过于随机。比如:

句子一:张三在讲话。
句子二:李四在发言。

这两句话有着非常强的同质性。但如果对字/词的编码不符合性质二,那么两句话的序列特征会有非常大的差异。可以想象,如果近义词具有相近的量化值,词和值之间的关系看起来就是相似的形状:

张 -> 105, 李 -> 99
三 -> 3,   四 -> 4
在 -> 200,
讲话 -> 300, 发言 -> 295

而如果近义词的量化值不相近,一眼看上去似乎毫无关系:

张 -> 33, 李 -> 1
三 -> 5,  四 -> 200
在 -> 45,
讲话 -> 2, 发言 -> 42

当性质二满足时,同义的句子在序列特征上会更加接近,有利于计算机更高效地理解共性、区分特性;反之则会给计算机带来极大的困难。难以捕捉同质内容之间的共性,意味着模型需要更多参数才能描述同等的信息量,学习难度自然会更大。

OpenAI 的 Jack Rae 在斯坦福分享中提出了一个很深刻的视角:

语言模型就是一个压缩器

。这个观点已有不少文章做过阐释。所有压缩大抵都能概括在这个框架内:提取共性、保留个性、过滤噪声。带着这个视角去看,性质二的必要性就更加明显了——不同词所编码的数值是否基于词义本身的相似性形成高区分度的聚类,会直接影响语言模型对输入数据的压缩效率。

(图片:编码值未基于词义形成聚类)

(图片:编码值基于词义形成聚类)

再说第二条。词是离散分布的,而计算模型的输出——除非只使用非常简单的运算并约束参数权重——很难恰好落在定义好的量化值中。对于神经网络模型,每一个节点、每一层都必须是连续的,否则便无法计算梯度,从而无法应用反向传播算法。

这两个事实放在一起,可能出现的情况是:

词的量化值可以全是整数,但语言模型的输出不一定。例如模型输出1.5,而词表只定义了1和2,这时该如何处理?我们会希望1和2都可以,甚至3也不会太离谱。因此,1和2所代表的词在词义上最好有某种共性,而不是像“a”和“abandon”一样几乎找不到关联。当相近的词聚集到一起,推断出有效输出的概率就会更高。

理解了这一点,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却不接近。问题出在哪里?

词义的多维性。

当用一个标量来表示一个词时,词与词之间的关系只能基于两个标量间的差值,从而只有“远”和“近”两种状态。但实际情况是,两个词可能只在某些维度上接近。“Love”和“Passion”接近的是情感浓度——都表示存在强烈的情感;但在情感色彩(消极还是积极)上,Passion 更中性,而同样浓烈的“Rage”情感色彩却是消极的。于是我们需要一个多维的数字形态——很自然会想到使用向量:对每个词用一组数而非一个数来表达。这样一来,就可以在不同的维度上定义远近,词与词之间复杂的关系便能在高维空间中得到表达。这就是 Embedding。

“嵌入”这个名字太糟糕了,不如叫它“词义向量”吧;而词义向量所处的空间,可以称为“词义空间”。

2 如何设计编码器

到目前为止,我们已经找到了可以表达词义的数字化形式——向量,也知道了一个好的编码方式应当满足的性质。如何设计一套方法来完成我们期望的编码呢?

一个容易想到的方法是,让词义的不同维度与向量的不同维度关联。例如,对词义的维度进行全面拆分:名词性、动词性、形容词性、数量特征、人物、主动、被动、情感色彩、情感强度、空间上下、空间前后、空间内外、颜色特征……只要维度足够多,一定能把词义包含的信息全囊括在内。一旦给出每个维度的定义,就可以给每个词在相应维度上赋值,从而完成词的向量化,并且完美满足上述两条性质。

但这个看似可行的设计,并不具备可实现性。首先,要囊括所有词义的维度,需要的维度数量必然是极高的,而对词义进行如此精细的切分本身就非常困难。其次,即使切分出来了,要将每个词在不同维度上的意义赋予有效的数值,即便是资深的语言学家恐怕也会感到棘手。今天大家熟知的语言模型中,并没有一个是用这种方式对词进行向量化的。不过,这个思想方案是有意义的——词义向量的不同维度之于计算机,就如同我们上面列举的维度(词性、数量、时间、空间等)之于人类。

纯构建的方式不可行,今天我们已经知道了一套有效的解决办法:神经网络加大数据,暴力出奇迹。这套范式的起源就是

Word2Vec

。如今的语言模型,无一不是基于词义向量,而词义向量真正开始有效,正是从 Word2Vec 开始。

Word2Vec 的关键是一个重要的洞察、一个极具启发性的角度:

一个词的意义,可以被它所出现的上下文定义

。换种说法:上下文相似的词,词义上也一定存在相似性。想一想是不是很有道理?这个观点是语言学家 Zellig Harris 在1954年提出的“分布假说”(Distributional Hypothesis),随后被广泛接受。

Word2Vec 的两类做法分别是:

  • 中心词 → 神经网络 → 上下文

  • 上下文 → 神经网络 → 中心词

今天回头看,这个工作从一开始就注定了成功:原理上基于广泛接受的分布假说,方法上使用了拟合能力强大的神经网络模型,最重要的是——数据要多少有多少。当然,这个方法不是终点,它的局限性是明显的,但开创性已经足够。它只利用和挖掘了分布假说的浅层结构。怎么理解这句话?本质上,Word2Vec 并没有尝试去理解句子内的语义。对于完全相同的上下文,不同中心词的词义相似性容易捕捉;当词义向量的聚类逐渐形成,由近义词构成的上下文也能在一定程度上标记词义相近的中心词。但人类的语言结构非常复杂,当相同语义通过不同句式、语态、修辞表达时,某些近义词对的关系就可能被深埋。

看看 ChatGPT 举的这个例子:

句子1:

Driven by an insatiable thirst for knowledge, she stayed late every night, her eyes dancing across the pages of books as if they were starry skies.

句子2:

Isn't it unusual, that she, prompted by an unquenchable intellectual curiosity, burns the midnight oil, pouring over pages as though na vigating constellations?

两个句子都在描述一个女性深夜仍在阅读,驱使她的是对知识的无尽渴望。两句话中存在非常多意义相近的词对,在不理解语义的情况下,这些词对之间的相似性难以被辨识。

接下来可以讨论 GPT 了。它是一个有能力理解句子的模型。如果说 Word2Vec 这类构建词义向量的模型是教计算机“认字”的过程,那么 GPT 模型的训练则是一个“认字”+“背书”的过程。老师最后只考书背得好不好,但为了把书背好,GPT 也被动强化了认字能力。推理的核心是 Transformer,Transformer 的核心是 Attention 机制。Attention 机制是什么?一言以蔽之:计算词义向量之间的“距离”后,对距离近的词投向更多注意力,而收到高注意力的词义则获得更高的激活值。预测完成后,通过反向传播算法:当特定的激活帮助了最终的预测,对应词之间的关联将被强化,反之则被弱化。模型正是通过这种方式学到了词之间的关系。而在分布假说的视角下,“认字”的实质就是认识一个词和其他词之间的关系。于是就形成了“认字为了背书,背书帮助认字”的结构。

可以提炼一个观点:Attention 机制之所以重要且好用,原因之一就是它能有效帮助词义向量(Embedding)聚类。想想 GPT 的例子其实很有趣。一般的工程思维是将大问题拆成多个小问题逐一解决——就像文章开头说的“让计算机理解自然语言,首先得让文字数字化”。这个表述隐含了一条路径:先数字化,再理解句子。有趣的地方在于:对词进行向量化编码的最好方法,是直接训练一个理解句子的语言模型。这就像为了让婴儿学会走路,直接从跑步开始训练。人类会摔跤会受伤,但机器不会——至少在具身智能(Embodied AI)之前不会。因此人类为了降低代价而建立的步骤化学习过程,或许并不适合人工智能。不难发现,深度学习中许多好的解决方案往往都是一步到位的。

3 总结

这篇文章把我关于语言模型中 Embedding 的理解都梳理了一遍。当然,Embedding 还不止这些。图像可以有 Embedding,句子和段落也可以有 Embedding——本质都是用一组数来表达意义。段落的 Embedding 可以作为基于语义搜索的高效索引;AI 绘画技术的背后,有着两种 Embedding 的互动。未来如果有一个大一统的多模态模型,Embedding 必然是其中的基石和桥梁。

由 AI 掀起的时代浪潮毫无疑问地到来了,今天仍是一个难以看清未来的节点。当下能做的为数不多的事情之一,还是保持学习。希望这篇文章能帮到正在学习的你。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc