首页 > 教程攻略 > ai资讯 >大白话讲清楚GPT嵌入(Embedding)的基本原理

大白话讲清楚GPT嵌入(Embedding)的基本原理

来源:互联网 时间:2026-08-17 13:39:14

先说说嵌入(Embedding)这事儿。它算是机器学习,特别是自然语言处理(NLP)领域的一个基本功,当然,在其他很多地方也用得风生水起。简单讲,嵌入就是一种“翻译”方法,能把那些生硬、离散的分类数据——比如一个个单词、一张张图片,或者一个个用户ID——变成机器学习模型“听得懂”的连续向量,通常还是在高维空间里转悠。这么一来,模型处理起来就顺手多了。

什么是向量

在数学世界里,向量(也叫欧几里得向量、几何向量),是个既有大小又有方向的量。咱们可以把它想象成带箭头的线段,箭头指哪儿,方向就在哪儿;线段有多长,大小就有多大。跟它对应的是标量,比如温度、质量,只有大小,没有方向。

大白话讲清楚GPT嵌入(Embedding)的基本原理

在坐标系里,我们习惯把向量的起点搁在原点(0,0),终点就是坐标系里的某个点,然后从原点画一根带箭头的线段指向它,这个线段就代表了一个向量。

既然向量是一根有方向有长短的“箭头”,那么两根箭头之间自然可以计算夹角。当然了,计算机里处理的向量动不动就是几百上千维,比如OpenAI的Embedding向量就是1536维,但核心逻辑是一样的。那么,向量夹角跟嵌入、跟搜索有啥关系?这事儿可以借用吴军老师在数学通识课里的讲解,非常通俗。不得不佩服,即便作为当年数学专业科班出身的人,听他的课也常有新的启发,换个角度看问题,知识体系会更丰满立体。

算两个向量的夹角有什么用?应用场景其实很广,比如,对文本进行自动分类。这俩事儿看起来八竿子打不着,怎么就能联系到一起呢?这里就大致捋一捋计算机给文本自动分类的原理。

一篇文章的主题和内容,归根结底是由它用了哪些字词决定的。虽然不同文章用词各异,但主题相近的文章,用词的风格和频率往往会很相似。比如说,讲金融的文章,“金融”、“股票”、“交易”、“经济”这类词出场率肯定高;讲计算机的文章,“软件”、“互联网”、“半导体”则会更活跃。如果这两拨关键词完全不重合,区分起来就太容易了。

但现实往往是它们有重叠,怎么办?那就得看词频了。根据经验,就算金融类文章里混进几个计算机词汇,它的词频也高不到哪儿去,反之亦然。

为了把道理说清楚,咱们索性假设汉语里只有八个词:“金融”、“股票”、“交易”、“经济”、“计算机”、“软件”、“互联网”、“半导体”。

假设有一篇经济学的文章,这八个词出现的次数分别是(23, 32, 14, 10, 1, 0, 3, 2);另一篇是计算机的文章,词频是(3, 2, 4, 0, 41, 30, 31, 12)。这样一来,它们各自就形成了一个八维的向量,我们叫它V1和V2。

如果我们能在八维空间里把它们画出来(虽然咱想象不出来),你会发现它们之间的夹角非常大。算一下,大概有82度,近乎垂直,或者说“正交”。由于这些向量的每个维度都是正数,所以它们的最大夹角就是90度,不会更大了。这说明,主题不同的文章,对应的向量夹角就是大。

如果再假设第三篇文章的词频向量V3 = (1, 3, 0, 2, 25, 23, 14, 10),那么它和第二篇文章向量V2的夹角只有7.5度。下面用二维坐标示意一下这三个向量的关系:

向量夹角示意图

从示意图能看出来,第一个向量和第二个向量角度很大,而第二、第三个向量夹角很小。由此,我们大致就能判定:第三篇文章应该和第二篇主题相近,都算计算机类。

那么,什么样的向量夹角会小,什么样的又会近乎正交呢?对比上面三个向量,会发现一个特点:当两个向量在同样的几个维度上,分量值都比较大时,它们的夹角就很小。反过来,当两个向量在不同维度上分量较大时,就容易近乎正交。

比如第二个和第三个向量,它们在后四个维度(对应计算机类词汇)的分量值都很大,所以夹角小。而第一个向量在前四个维度(金融类词汇)分量大,和后两个向量的情况正好错开,所以就近乎正交了。

关于向量夹角,有两个特殊情况值得留意:

  • 如果两个向量在各个维度的分量完全成比例,那它们的夹角就为零,可以认为是完全“同向”。
  • 如果一个向量在所有维度上的值都相等,比如像(10,10,10,10,10,10,10,10)这样的,它可能跟任何一个向量都不太“亲近”。这个性质后面还会用到。

当然,真实的文本分类远不止8个词,词汇量动辄以十万计,所以一篇文章对应的特征向量维度也极高。但万变不离其宗,通过计算这些高维特征向量之间的夹角(常用余弦相似度),就能判断哪些文本更接近,应该归为同一类。

向量不仅能给文章分类,还能给人分类。如今很多大公司处理海量简历时,第一步就是用计算机自动筛选,其方法本质,就是把每个人的简历向量化,然后计算与目标岗位的向量夹角,挑出最“匹配”的那些。

One-hot独热编码

接着聊聊怎么把文本变成向量。一个常见且简单粗暴的方法是独热编码(One-hot Encoding)。

这种方法把数据集里的每个项目(比如一个词)都转换成一个由一堆0和单个1组成的向量。想象一个词汇表,每个单词都在向量中占一个独一无二的位置。比如,在一个只有“苹果”、“香蕉”、“樱桃”三个词的简单词汇表里:“苹果”可能表示为 [1, 0, 0],“香蕉”是 [0, 1, 0],“樱桃”是 [0, 0, 1]。

这种方法简单易懂,但局限性也相当明显。独热编码的主要问题是效率太低,尤其是词汇量大的时候。每个单词都需要一个和整个词汇表一样长的向量,导致内存消耗高、表示稀疏(向量里绝大部分都是0)。更关键的是,它完全无法捕捉单词之间的语义关系。“苹果”和“香蕉”都是水果,按理说应该比“苹果”和“樱桃”(假设樱桃不属于苹果属)更相似,但在独热编码里,所有单词彼此间的“距离”都一样。

这正是嵌入技术要解决的问题。它提供了一种更精巧、更高效的数据表示法。嵌入技术会把独热编码向量映射到一个低维的连续空间里,让相似的项目在这个空间里靠得更近。这种映射关系是从数据中学出来的,使得模型能够识别并编码数据中隐藏的关系和模式。

例如,在嵌入空间里,“苹果”和“香蕉”的向量可能会靠得很近,反映出它们作为水果的语义相似性,而与其他非水果词汇的向量则距离较远。通过利用嵌入,机器学习模型能更深入地“理解”数据,从而做出更准确、更有洞察力的判断。无论是捕捉NLP任务中语言的微妙差别,还是识别用户行为模式,嵌入都提供了一种更高效、更强大的处理复杂数据的方式。

嵌入如何工作?

  1. 表示

    :在NLP中,语言里的每个独特单词都被表示为连续向量空间中的一个密集向量。这些向量通常有固定大小(比如100维、300维或512维),跟词汇表的总大小没关系。
  2. 语境含义

    :跟只能提供稀疏、无信息量的独热编码(每个词只是长向量中一个孤立的索引)不同,嵌入能捕获单词的更多信息。含义相似或在相似上下文中使用的单词,在嵌入空间里的位置往往也更接近。比如,“国王”和“王后”的向量表示可能就会挨得很近。
  3. 训练

    :嵌入可以通过Word2Vec、GloVe等算法,或者像BERT(用于上下文嵌入)这类更先进的方法,在大型文本语料库(如新闻文章、维基百科)上进行预训练。模型在这个过程中学习将含义相似的词放置在这个高维空间的临近区域。
  4. 降维

    :这种表示法允许降维。模型不再需要直接处理成千上万个独特的单词,转而处理维度小得多的向量。
  5. 模型中的使用

    :这些向量表示随后可以作为输入,供给各种机器学习模型(比如神经网络),用于情感分析、机器翻译或内容推荐等任务。
  6. 超越词语

    :嵌入的概念不止于单词,已经扩展到句子、段落、用户ID、产品等对象,任何相似的项目都可以在嵌入空间中用接近的向量来表示。

它为什么有用?总结几点:

  • 效率

    :提供了紧凑、密集的向量表示。
  • 语义含义

    :能捕捉单词或事物深层的语义关系。
  • 灵活性

    :可用于各种不同的机器学习任务。
  • 迁移学习

    :预先训练好的嵌入模型,可以用来提升数据有限的新任务的性能。

来看个词嵌入的简单例子。假设我们的词汇表小得可怜,只有五个词:["cat", "dog", "fish", "run", "swim"]。

用传统独热编码来表示它们,每个词对应一个向量,只有自己那个位置是1,其他都是0:

cat = [1, 0, 0, 0, 0]
dog = [0, 1, 0, 0, 0]
fish = [0, 0, 1, 0, 0]
run = [0, 0, 0, 1, 0]
swim = [0, 0, 0, 0, 1]
在独热编码里,每个词和其他词的距离都相等,完全没有相似性或上下文的概念。

嵌入过程

  1. 训练

    :用一个模型来学习嵌入。假设我们的模型学会了二维嵌入(实际中维度高得多,这里为了直观,用二维)。
  2. 得到的嵌入

    :模型可能会这样来表示这些词:
    cat = [0.9, 0.1]
    dog = [0.85, 0.15]
    fish = [0.1, 0.8]
    run = [0.2, 0.7]
    swim = [0.15, 0.85]
    

这样一来,嵌入就提供了一种捕捉词与词之间语义关系和相似性的方法,这是独热编码做不到的。现在你看:

  • 相似性

    :“cat”和“dog”在这个嵌入空间里彼此靠得很近(两者第一个维度的值都高,第二个维度的值都低)。这反映了它们作为“宠物”的相似性。
  • 差异性

    :对比之下,“cat”和“swim”就离得远,表明相似度低。
  • 上下文分组

    :“run”和“swim”这类表示活动的词彼此靠近,并且它们和“fish”(在上下文里常和游泳相关)的距离,比和“cat”或“dog”的距离更近。

嵌入工作原理的简单示例

咱们通过一个极度简化的过程,来看看这样的模型是怎么从基本原理“学”出来的。这里重点追求清晰易懂,而不是性能或可扩展性。

假设你手里有一小撮句子,每个句子都包含“cat”、“dog”、“fish”、“run”、“swim”这些词。这些句子构成了一个微型语料库,比如“cat and dog are pets”或者“fish swim in water”。

首先,分析这些句子,把它们拆成单个的词(这个过程有点像标记化)。每个词先独立看待,甚至可以先把“and”、“are”这种太常见的功能词忽略掉。

接着,给每个词一个初始身份——一个二维向量。这些向量最初是随机生成的,有点像给每个词一个随机的数字指纹。

真正的“魔法”从定义上下文开始。想象设定一个窗口大小,比如目标词左右各两个词。这就是每个词的直接“邻居”,是它在句子里的社交圈。

然后,开始一个简单的学习过程:目标是让共享相同上下文的词,在向量空间里也靠得更近。做法就是不断调整每个词的向量,让它变得更像它邻居的向量。同时,又要把它推离那些不共享其上下文的随机词的向量。

这个过程不是一蹴而就的。你要在语料库里遍历每个词,根据它的邻居来更新它的向量。有时候还要故意让它和随机的不相关词拉开点距离。

随着这个过程一遍又一遍地重复(迭代),向量开始慢慢稳定下来。它们会找到一个平衡点,之后每次调整的幅度越来越小。这就叫“收敛”。此时的向量,已经不只是随机分配的数字了,它们基于词语出现的上下文,蕴含了有意义的关系。

这个过程重复足够多次后,就“挖掘”出了你的微型语料库中隐藏的词与词之间的关系结构,可以说是从零开始构建了一张词关系图谱。

在GPT等大型模型中的工作原理

与Word2Vec这类模型中的传统词嵌入相比,像GPT这样的模型,其嵌入的工作方式要复杂得多,也更具上下文感知能力。GPT这类基于Transformer的模型,采用了一套更精巧的方案。

可以这么想象:GPT首先是个“分词”大师,它把文本拆成更细的颗粒——标记(Tokens)。不同于简单的用整个单词,GPT通常采用子词单元,比如字节对编码(BPE)。这种更细腻的方法让它能高效处理海量词汇,哪怕是罕见词或没见过的组合也能应对。

然后,每个标记会获得一个初始身份——一个嵌入向量,可以看作是它的数字DNA。这些嵌入可不是随机给的,而是在GPT的海量训练过程中精心学习到的,为每个标记打下了理解的基础。

然而,理解语言的一大挑战不仅是词汇本身,还有词序。GPT通过在嵌入向量中加入位置编码(Positional Encoding)来解决这个问题。这就像一组秘密坐标,对序列中的每个位置都是唯一的,确保了词序信息不会被模型遗忘。

当这些融合了初始语义和位置信息的嵌入向量,进入GPT的Transformer层时,真正的“情境化”才开始。在这里,通过并行处理,模型会在每个其他标记的上下文背景中审视每一个标记。实现这一点的核心,是自注意力(Self-Attention)机制——一种精巧的工具,让每个标记都能评估自己与序列中其他所有标记的“相关度”。

随着输入的文本逐层穿过Transformer堆叠起来的多个层级,这些嵌入表示也在持续“进化”。每一层都会为它们注入更丰富的上下文信息,深化其表示。这不仅仅是浅层的理解,而是对每个标记在整个输入序列影响下的、深刻的、情景化的洞察。

当文本到达最后一层时,每个标记都会得到一个最终的向量表示。这些向量不仅仅是独立的含义载体,它们被深刻地语境化了,不仅反映了标记本身,还凝结了它与序列中其他每一个标记的复杂关系。

这些最终的嵌入向量可以用于各种各样的任务:文本生成、语言翻译、问答等等。GPT嵌入的核心特点可以总结为:上下文感知、动态演化、分层深化,并且受益于子词分词策略。这使得GPT对语言的理解达到了丰富而精微的层次,远非早期的简单模型可比。

从本质上讲,GPT的嵌入机制是语言学原理与计算技术的复杂融合,旨在捕捉对语言深刻且多维度的理解。

这是OpenAI Embedding将文本转化为向量的一个示例,你能直观感受到其高维密集表示的特性,通常用于后续的相似度计算或作为其他模型的输入。

最后

嵌入技术,无疑是机器学习和自然语言处理领域的一项关键进步。它提供了一种高效的方法,能将分类数据(如单词、图像)转化为机器学习模型能够直接处理的数值格式。

从基础的独热编码,到如今复杂精巧的嵌入技术,这一演变本身就反映了机器在处理大规模、复杂数据集能力上的显著跃升。随着这个领域不断发展,嵌入在帮助我们处理和解读海量数据方面的作用,只会越来越重要。它们与GPT等尖端模型的深度集成,更是凸显了其在当前乃至未来AI技术栈中的核心地位。

可以说,嵌入技术,仍然是持续开发更复杂、更高效的机器学习系统不可或缺的重要组成部分。