编程与 AI14 分钟阅读更新于 2026-08-03

Transformer 的 Embedding 层如何把词元变成模型输入

解释词元如何通过词表查表变成向量,以及词嵌入、位置编码和批次张量如何进入 Transformer。

相关工具

Transformer 不能直接读取文字

Transformer 的注意力和矩阵运算处理的是数字张量,而不是浏览器里看到的文字。输入句子要先经过分词或词元切分,把连续文本变成一串词元,再把每个词元转换成模型可以计算的向量。

文中的流程是先使用 Embedding 把每个词转换为词向量。经典 Transformer 论文采用 512 维的嵌入向量,之后的位置编码、编码器和解码器都围绕这个模型宽度继续计算。Embedding 是文字进入模型的第一道表示转换。

Transformer 词元通过词表查表变成向量的示意图
词元进入 Transformer 的第一步

文字先被切分成词元,再通过词表查表得到对应的嵌入向量。

Embedding 本质上是在词表中查一行

可以把 Embedding 看成一张很大的向量表。词表中每个词元都有一个编号,这个编号不是词义本身,而是用来定位向量表中的某一行。输入词元编号后,模型取出对应行,作为该位置的初始表示。

例如,词表里可以有普通词元、标点、起始标记、结束标记和 Padding Token。它们都需要有可以查到的向量,但不同特殊标记的用途不同,不能因为它们都在词表里就把它们当成普通内容。

Embedding 中的向量会随着训练更新。模型通过后续任务损失逐渐调整这些向量,使经常出现在相似上下文中的词元形成更适合计算的表示。它不是人工写入的词典解释,而是从训练过程中学出来的参数。

词元编号和向量不是一回事

词元编号只是离散索引。编号 1024 不表示它比编号 512 更接近某个词,也不代表编号越大含义越复杂。真正参与注意力计算的是查表得到的连续向量,编号只负责找到向量的位置。

这也是为什么不能把词元编号直接当作词向量输入。如果直接使用整数编号,模型会误以为数值大小具有连续意义,而编号本身只是人为安排的标签。Embedding 把离散身份转换到一个可以进行相似度、投影和加权计算的空间。

为什么还要加入位置编码

词嵌入主要表达“这是什么词元”,但同一个词元出现在句首、句中或句尾时,输入编号和初始向量可能相同。Self-Attention 又不会天然知道序列顺序,因此还需要把位置编码加入词嵌入。

经典做法是逐元素相加:词嵌入和位置向量宽度相同,得到的结果仍然是 d_model 维。这样,第一层编码器接收的已经不是孤立的词向量,而是同时带有内容和位置的序列表示。

Transformer 词嵌入和位置编码相加形成模型输入的示意图
词嵌入与位置编码相加

词嵌入提供内容信息,位置编码补充顺序信息,两者相加后进入编码器或解码器。

一条序列会变成怎样的矩阵

如果一条序列有 L 个词元,每个词元经过 Embedding 变成 d_model 维向量,那么它们会组成一个 L × d_model 的矩阵。每一行对应一个序列位置,每一列对应一个模型特征维度。加入位置编码后,矩阵形状不变,只是每个位置的数值发生了变化。

批次中有多条序列时,还会增加 batch 维度,形成 batch × L × d_model 的张量。不同长度的序列通常先通过 Padding 对齐,Padding Mask 再告诉注意力哪些位置没有真实词元。形状对齐、词嵌入和掩码分别承担不同任务。

Transformer 词嵌入经过批次对齐形成输入张量的示意图
Embedding 形成批次输入张量

多个序列经过词表查表和位置编码后,组成统一的批次张量。

编码器和解码器的 Embedding 有什么不同

编码器的 Embedding 接收源序列词元,底层编码器在加入位置编码后开始处理完整源句。解码器的 Embedding 接收目标前缀,训练时通常是右移后的目标序列,推理时则是已经生成的词元前缀。

两侧都需要把离散词元变成 d_model 维向量,也都需要位置信息,但它们服务于不同序列。编码器表示源句,解码器表示目标前缀,交叉注意力再把目标端的 Query 和源端记忆连接起来。

特殊词元为什么不能随便处理

起始标记帮助解码器知道生成从哪里开始,结束标记告诉生成过程何时停止,Padding Token 负责批次对齐,未知词或子词则帮助覆盖词表之外的文本。它们都可能经过 Embedding,但在训练和注意力计算中承担的角色不同。

如果把结束标记当普通内容,模型可能难以学习何时停止;如果忘记屏蔽 Padding,空位会干扰注意力和损失;如果起始标记处理不一致,解码器就缺少稳定的生成起点。理解 Embedding,不能只看查表,还要看每个词元在整条流程中的位置。

从文字到第一层编码器

完整链路可以概括为:文本先被切分为词元,词元映射为编号,编号在 Embedding 表中查到向量,向量与位置编码相加,再按批次组成规则张量,最后交给编码器或解码器的第一层。

这一步看起来只是准备输入,实际上决定了模型后续能处理什么信息。词元切分决定文字如何被拆开,Embedding 决定离散身份如何进入连续空间,位置编码补上顺序,Padding Mask 保证对齐位置不冒充真实内容。Transformer 的复杂计算,是从这几项基础表示准备好之后才开始的。

常见问题

Embedding 向量是人工定义的吗?

通常不是。Embedding 是模型参数,会在训练过程中根据任务损失逐步学习。词表编号只是查表索引,不等于词义。

为什么词元编号不能直接输入注意力?

编号只是离散标签,数值大小没有连续语义。Embedding 把编号转换成可以进行投影、相似度计算和加权汇总的向量。

位置编码会改变 Embedding 的维度吗?

经典做法是把同宽度的位置编码与词嵌入逐元素相加,因此维度保持为 d_model,便于进入后续层和残差路径。