Transformer 的 Embedding 层如何把词元变成模型输入
解释词元如何通过词表查表变成向量,以及词嵌入、位置编码和批次张量如何进入 Transformer。
相关工具
Transformer 不能直接读取文字
Transformer 的注意力和矩阵运算处理的是数字张量,而不是浏览器里看到的文字。输入句子要先经过分词或词元切分,把连续文本变成一串词元,再把每个词元转换成模型可以计算的向量。
文中的流程是先使用 Embedding 把每个词转换为词向量。经典 Transformer 论文采用 512 维的嵌入向量,之后的位置编码、编码器和解码器都围绕这个模型宽度继续计算。Embedding 是文字进入模型的第一道表示转换。

文字先被切分成词元,再通过词表查表得到对应的嵌入向量。
Embedding 本质上是在词表中查一行
可以把 Embedding 看成一张很大的向量表。词表中每个词元都有一个编号,这个编号不是词义本身,而是用来定位向量表中的某一行。输入词元编号后,模型取出对应行,作为该位置的初始表示。
例如,词表里可以有普通词元、标点、起始标记、结束标记和 Padding Token。它们都需要有可以查到的向量,但不同特殊标记的用途不同,不能因为它们都在词表里就把它们当成普通内容。
Embedding 中的向量会随着训练更新。模型通过后续任务损失逐渐调整这些向量,使经常出现在相似上下文中的词元形成更适合计算的表示。它不是人工写入的词典解释,而是从训练过程中学出来的参数。
词元编号和向量不是一回事
词元编号只是离散索引。编号 1024 不表示它比编号 512 更接近某个词,也不代表编号越大含义越复杂。真正参与注意力计算的是查表得到的连续向量,编号只负责找到向量的位置。
这也是为什么不能把词元编号直接当作词向量输入。如果直接使用整数编号,模型会误以为数值大小具有连续意义,而编号本身只是人为安排的标签。Embedding 把离散身份转换到一个可以进行相似度、投影和加权计算的空间。
为什么还要加入位置编码
词嵌入主要表达“这是什么词元”,但同一个词元出现在句首、句中或句尾时,输入编号和初始向量可能相同。Self-Attention 又不会天然知道序列顺序,因此还需要把位置编码加入词嵌入。
经典做法是逐元素相加:词嵌入和位置向量宽度相同,得到的结果仍然是 d_model 维。这样,第一层编码器接收的已经不是孤立的词向量,而是同时带有内容和位置的序列表示。

词嵌入提供内容信息,位置编码补充顺序信息,两者相加后进入编码器或解码器。
一条序列会变成怎样的矩阵
如果一条序列有 L 个词元,每个词元经过 Embedding 变成 d_model 维向量,那么它们会组成一个 L × d_model 的矩阵。每一行对应一个序列位置,每一列对应一个模型特征维度。加入位置编码后,矩阵形状不变,只是每个位置的数值发生了变化。
批次中有多条序列时,还会增加 batch 维度,形成 batch × L × d_model 的张量。不同长度的序列通常先通过 Padding 对齐,Padding Mask 再告诉注意力哪些位置没有真实词元。形状对齐、词嵌入和掩码分别承担不同任务。

多个序列经过词表查表和位置编码后,组成统一的批次张量。
编码器和解码器的 Embedding 有什么不同
编码器的 Embedding 接收源序列词元,底层编码器在加入位置编码后开始处理完整源句。解码器的 Embedding 接收目标前缀,训练时通常是右移后的目标序列,推理时则是已经生成的词元前缀。
两侧都需要把离散词元变成 d_model 维向量,也都需要位置信息,但它们服务于不同序列。编码器表示源句,解码器表示目标前缀,交叉注意力再把目标端的 Query 和源端记忆连接起来。
特殊词元为什么不能随便处理
起始标记帮助解码器知道生成从哪里开始,结束标记告诉生成过程何时停止,Padding Token 负责批次对齐,未知词或子词则帮助覆盖词表之外的文本。它们都可能经过 Embedding,但在训练和注意力计算中承担的角色不同。
如果把结束标记当普通内容,模型可能难以学习何时停止;如果忘记屏蔽 Padding,空位会干扰注意力和损失;如果起始标记处理不一致,解码器就缺少稳定的生成起点。理解 Embedding,不能只看查表,还要看每个词元在整条流程中的位置。
从文字到第一层编码器
完整链路可以概括为:文本先被切分为词元,词元映射为编号,编号在 Embedding 表中查到向量,向量与位置编码相加,再按批次组成规则张量,最后交给编码器或解码器的第一层。
这一步看起来只是准备输入,实际上决定了模型后续能处理什么信息。词元切分决定文字如何被拆开,Embedding 决定离散身份如何进入连续空间,位置编码补上顺序,Padding Mask 保证对齐位置不冒充真实内容。Transformer 的复杂计算,是从这几项基础表示准备好之后才开始的。
常见问题
Embedding 向量是人工定义的吗?
通常不是。Embedding 是模型参数,会在训练过程中根据任务损失逐步学习。词表编号只是查表索引,不等于词义。
为什么词元编号不能直接输入注意力?
编号只是离散标签,数值大小没有连续语义。Embedding 把编号转换成可以进行投影、相似度计算和加权汇总的向量。
位置编码会改变 Embedding 的维度吗?
经典做法是把同宽度的位置编码与词嵌入逐元素相加,因此维度保持为 d_model,便于进入后续层和残差路径。