Token 是大模型货币?一文串起 Embedding / 位置编码 / 自注意力

10 阅读11分钟

本文适合所有对大语言模型原理感兴趣的开发者,从输入到输出完整串讲 LLM 的核心工作流程,无复杂公式,看完就能懂大模型 “猜词” 背后的逻辑。

如果你接触过大语言模型,一定听过这句经典结论:LLM 本质上只会做一件事 —— 预测下一个词

从日常聊天、写代码改 Bug,到逻辑推理、方案撰写,所有看似 “智能” 的能力,底层都是一次次「根据前文文本,推算下一个最合理的词元」。而支撑这件事的核心底座,就是 Transformer 架构。

很多人只听过结论,却不清楚完整过程:我们敲进去的一句中文,到底在模型里经历了哪些步骤?自注意力又是怎么让模型读懂上下文指代的?

今天我们就顺着「输入 Prompt → 输出下一个词」的完整链路,把 Token、Embedding、位置编码、自注意力这些核心概念一次性讲透。


一、第一步:文字先兑换成模型的 “通用货币”——Token 词元

大模型天生不认识汉字、英文单词这些自然语言符号,它能处理的最小单位,叫做 Token(词元)

你可以把词元理解成大模型的 “通用货币”:所有输入的自然文本,都要先 “兑换” 成 Token 才能进入模型内部计算;模型输出的结果,也是先输出 Token,再翻译回人类可读的文字。

为什么不用完整单词?子词分词的优势

如果把每个完整单词都当成一个 Token,词汇表会膨胀到天文数字 —— 光是英语的派生词、变形词就数不胜数,模型参数量会爆炸,也很难学到通用的语言规律。

所以主流 LLM 都采用子词分词策略:把单词拆成高频的词根、词缀、前后缀,最大化复用率,最终把词汇表控制在几万量级,兼顾效果与效率。

举两个很直观的例子:

  • 英文单词 unhappiness,不会被当成一个整体,而是拆成 un + happi + ness 三个词元
  • 再比如 tokenization,会拆成 token + ization

放到中文里也是同理,通常会拆成单字、常用词和短语的组合。比如句子「我爱人工智能,自然语言处理很有趣」,分词后大致是:["我", "爱", "人工智能", ",", "自然语言处理", "很", "有趣"]

注意:词元是模型计算和计费的通用最小处理单位,而非语言学意义上的 “词”。

谁来做转换?Tokenizer 分词器

负责这件事的工具叫做 Tokenizer(分词器) ,它完成双向的转换工作:

  1. 编码(Encode) :把自然文本切分成一个个 Token,再映射成对应的整数 ID(Token ID)—— 这才是模型真正的输入
  2. 解码(Decode) :把模型输出的 Token ID 序列,还原回人类可读的自然文字

到这一步,我们输入的一句话,就变成了一串数字 ID。但光有编号还远远不够 —— 数字本身没有任何语义,模型还不知道这些 ID 背后代表什么含义。


二、第二步:给数字 ID 注入语义 ——Embedding 词嵌入

Token ID 只是一个孤零零的索引编号,比如 “你” 对应 ID 57668,单看这个数字,没有任何语义信息。要让模型理解词义,就需要把每个 Token ID 转换成高维语义向量,这个过程就是 Embedding(词嵌入)

你可以把 Embedding 理解成一本预训练好的「语义坐标词典」

  • 词汇表里的每个 Token ID,都对应一个固定维度的向量(比如 512 维、4096 维)
  • 向量里的每一个数值,都在刻画这个词的某一层语义特征
  • 语义越相近的词,它们的向量在高维空间里的语义距离就越近

比如 “猫” 和 “狗” 的向量距离很近,因为它们都属于动物;而 “猫” 和 “桌子” 的向量距离就很远。模型在海量文本的预训练过程中,自动学到了这套向量表示,把人类的语义知识,藏进了高维的向量空间里。

简单总结这个过程:

  1. 用 Token ID 作为索引,找到对应的向量坐标
  2. 从 Embedding 查找表中取出高维语义向量
  3. 向量之间可以计算语义距离,衡量词义的相近程度

经过 Embedding 层之后,每个 Token 都从干巴巴的整数 ID,变成了携带丰富语义信息的向量。但这里还缺一个至关重要的信息:词语的顺序


三、第三步:给向量加上顺序 —— 位置编码(Position Encoding)

思考一个经典问题:「我咬了狗」和「狗咬了我」,包含的词语完全一样,Token ID 序列也完全相同,但意思却天差地别。

问题出在哪?Embedding 只负责给每个词本身的语义编码,不携带这个词在句子里的位置信息。如果只有 Embedding,模型根本分不清这两句话的区别。

为了解决这个问题,Transformer 引入了位置编码(Position Encoding,简称 PE) 。简单来说,就是给句子里每个位置的 Token 向量,额外叠加一个独一无二的位置向量,明确告诉模型:这个词出现在句子的第几个位置。

位置编码有两个核心特点:

  1. 每个位置的编码唯一,不同位置不会混淆
  2. 位置之间的相对距离可计算,模型能感知到词与词之间离得远还是近

经过这一步,每个 Token 向量就同时携带了两类核心信息:

  • 语义信息:这个词本身是什么意思(来自 Embedding)
  • 位置信息:这个词在句子的哪个位置(来自位置编码)

基础信息准备完毕,接下来就进入整个流程的核心 ——Transformer 的自注意力机制,也是让模型真正读懂上下文的关键。


四、核心灵魂:自注意力机制,让模型读懂上下文指代

很多人都好奇,模型是怎么读懂指代关系的?比如这句话:

The animal didn't cross the street, because it was too tired.

这里的 it,模型是怎么知道它指代的是 animal,而不是 street

答案就是 自注意力(Self-Attention) ,这也是 Transformer 架构最核心的创新。它的核心作用,就是让句子里的每个词,都能和全文所有词做关联,根据相关性强弱融合信息,最终得到融合了上下文的词义表示。

Q、K、V:三个角色分别是什么?

自注意力的计算,围绕三个核心向量展开:每个 Token 的向量,会分别通过三个不同的线性权重矩阵,生成三个功能不同的向量,分别扮演三个角色:

  1. Q(Query,查询向量) :代表「我在找什么」,带着自身的查询需求,去和其他词做匹配
  2. K(Key,键向量) :代表「我能提供什么」,带着自身的语义标签,用来和查询请求做匹配
  3. V(Value,值向量) :代表「我能贡献什么内容」,存储着自身的语义特征,等待被匹配后提取

打个生活化的比方,就像你去图书馆查资料:

  • Q 是你手里的检索关键词
  • K 是每本书的分类标签和内容简介
  • V 是书里的实际知识内容你用关键词和所有书的标签做匹配,匹配度越高的书,你参考的权重就越大,从中提取的信息就越多。

一步看懂计算过程:it 怎么找到 animal?

我们就用上面的指代例子,把自注意力的计算流程完整走一遍。首先,句子里的每个 Token 都会生成自己的 Q、K、V:

  • token1:animal -> (Q1 ,K1 , V1)
  • token2:street -> (Q2 ,K2 , V2)
  • token3:it -> (Q3 , K3 , V3)

1. Q 和 K 做点积,计算相似度

it 的 Q 向量(Q3),去和句子里每一个词的 K 向量做点积运算,得到对应的注意力分数。分数越高,说明两个词的语义相关性越强。

  • it 的 Q 和 animal 的 K:语义匹配度很高 → 注意力分数很高
  • it 的 Q 和 street 的 K:语义匹配度很低 → 注意力分数很低

这也就是我们常说的:Q 和 K 匹配度低,分配的权值就低;匹配度越高,权值越大。

2. Softmax 归一化,得到注意力权重

把所有的注意力分数输入 Softmax 函数,转换成 0 到 1 之间的权重值,并且所有词的权重加起来等于 1。到这一步,模型就明确了:理解it这个词的时候,应该把多少注意力放在animal上,多少放在street上。

3. 加权求和 V,得到融合上下文的输出

最后,用每个词的注意力权重,乘以对应词的 V 向量,再把所有结果加到一起,就得到了it这个词融合了全文上下文的新向量。因为animal的权重很高,所以it的输出向量里,就融合了大量animal的语义特征。模型也就相当于 “明白” 了:这里的 it,指代的是动物。

句子里的每一个 Token,都会经历完全相同的计算过程。最终所有 Token 的向量,都不再是孤立的单词词义,而是融合了整句话上下文信息的、语境化的语义表示。

补充:多头注意力 —— 从多个角度理解语义

实际的 Transformer 里,不会只做一组 QKV 计算,而是会分成多组独立的「注意力头」,并行做多次自注意力计算,这就是多头注意力(Multi-Head Attention) 。不同的注意力头会关注不同的语义维度:有的头专门捕捉指代关系,有的头关注语法结构,有的头捕捉因果逻辑…… 最后把所有头的结果拼接融合,模型就能从多个角度理解上下文,语义理解能力更强。


五、最后一步:算出概率,选出下一个词

经过多层 Transformer 的层层计算之后,输入序列最后一个位置的输出向量,就包含了整段前文的所有上下文信息。接下来,就要用它来预测下一个词了。

  1. **线性层映射到词汇表(LM Head)**最后一个位置的输出向量,会先经过一个线性全连接层,把向量维度映射成和词汇表大小一致的维度。词汇表里有多少个 Token,输出就有多少个数值,每个数值对应一个 Token 的 “得分”。
  2. Softmax 转换成概率再把所有得分输入 Softmax 函数,转换成 0 到 1 之间的概率值,所有 Token 的概率加起来等于 1。概率越高,说明模型认为这个词接在当前文本后面的合理性越强。比如输入 “中国首都是”,模型计算后,“北京” 这个 Token 的概率会远高于其他词。
  3. 采样选出下一个 Token通常我们会选择概率最高的 Token 作为预测结果(贪心搜索);也可以通过温度系数、Top-K、Top-P 等采样策略,调整输出的随机性,让生成结果更有多样性。
  4. 自回归循环生成选出下一个词之后,模型会把这个新词追加到原输入序列的末尾,形成新的输入,然后重复上面所有流程:Embedding → 位置编码 → 多层 Transformer → Softmax 算概率 → 再预测下一个词。这个一次次把生成结果放回输入、持续向后续写的过程,就叫做自回归生成。循环往复,直到模型生成终止符(EOS),或者达到我们设置的最大生成长度,一次完整的输出就完成了。

六、总结:一句话串起完整流程

到这里,我们就走完了从输入到输出的完整链路,最后用一句话把整个流程串起来:

用户输入的自然文本 → 分词器转成 Token ID → Embedding 转成语义向量 → 叠加位置编码注入语序信息 → 多层 Transformer 通过自注意力融合上下文 → 输出层映射到词汇表并 Softmax 计算概率 → 采样选出下一个 Token → 自回归循环,直到生成结束。

看似无所不能的大语言模型,底层始终在做一件最简单的事:根据前文,预测下一个最合理的词元。而所有的推理、创作、代码能力,都是海量数据训练下,这个单一目标涌现出来的复杂能力。理解了这个核心流程,你就看懂了 LLM 最本质的运行逻辑,也能更好地理解后续的微调、RAG、Agent 等进阶技术。