从词元到向量:Transformer 如何把文本变成可计算的表示
沿着文本、词元、词元 ID、嵌入矩阵、位置编码和输出解码的完整链路,理解 Transformer 如何把文字变成向量,又如何把隐藏表示还原成词元。
相关工具
Transformer 不能直接读取文字
Transformer 的注意力和线性层处理的是数字向量,而不是浏览器里看到的汉字、英文单词或标点。文本进入模型前,必须经过一条表示转换链:先切分成词元,再把词元映射成整数 ID,最后通过嵌入表查出向量。
这个过程不是把每个字符简单转换成一个数字。词元化方案会根据词表把文本切成词、子词、字符或它们的组合。模型真正接收到的是一串词元 ID,词元 ID 只是嵌入表中的行号,本身没有大小顺序上的语义。
完成词元化后,序列才有了固定长度和可计算的矩阵形状。后面的词嵌入、位置编码、注意力和前馈网络,都是在这组向量上继续工作。

文本经过词元化、ID 映射、嵌入查表和位置编码相加后,得到模型可以处理的输入表示矩阵。
词元化决定序列由哪些单位组成
词元是模型处理文本的基本单位。英文中的一个完整单词可能对应一个词元,也可能因为词表限制被拆成多个子词;中文则可能按字、词或子词进行切分。不同词元化器面对同一句话,得到的序列长度可能不同。
词元切得更细,词表可以相对小,遇到新词时也更容易拆开处理,但同一段文本会产生更多位置;词元切得更粗,序列可能变短,却需要更大的词表来覆盖更多组合。
词元化不是 Transformer 内部的注意力机制,但它会影响后面几乎所有计算:序列长度影响注意力成本,词表大小影响嵌入和输出层,特殊标记又会影响输入边界和生成结束条件。
词元 ID 只是嵌入表的索引
词元化之后,每个词元会对应一个整数 ID。这个整数的主要作用是查表,不代表词元之间存在数值大小关系。ID 为 100 的词元并不比 ID 为 20 的词元更重要,也不意味着它们在语义空间里更接近。
词表通常还会包含特殊词元,例如填充标记、序列起始标记、序列结束标记和未知词元。它们有明确的控制作用,但同样通过整数 ID 进入嵌入表。
在批量输入时,词元 ID 会被组织成形状类似 B×L 的整数矩阵。B 是批次大小,L 是统一后的序列长度,较短序列通常用 PAD 补齐,并配合填充掩码避免无效位置参与注意力。
嵌入表就是一组可学习的向量
假设词表大小为 V,模型维度为 d_model,嵌入矩阵 E 的形状通常是 V×d_model。每一行对应一个词元,每一行都是一个 d_model 维向量。给定词元 ID 后,模型从 E 中取出对应行,作为这个词元的初始表示。
这个向量不是人工写好的词义说明,而是在训练中逐渐学习出来的。词元在不同上下文中反复出现,嵌入表会通过损失函数和反向传播调整,使初始表示更有利于后续任务。
查表可以理解成根据 ID 选择一行。数学上也可以写成 one-hot 向量与嵌入矩阵相乘,但实际实现通常直接使用索引查表,更节省存储和计算。

词元 ID 选择嵌入矩阵中的一行,得到对应的 d_model 维词向量。
词嵌入还没有表达位置
查表得到的词向量主要表达词元内容。同一个词元无论出现在序列第 1 个位置还是第 20 个位置,查到的基础词向量通常相同。要让模型知道顺序,还需要为每个位置生成位置编码。
位置编码的形状通常与词嵌入相同,都是 L×d_model。对第 i 个位置,把词嵌入 e_i 和位置向量 p_i 逐元素相加,得到 h_i=e_i+p_i。所有位置组成的矩阵再送进编码器或解码器的第一层。
这一步把“是什么”和“在哪里”放到同一个表示里。后面的注意力会使用这个合成向量生成 Q、K、V,因此位置关系从第一层交互开始就已经参与计算。
特殊词元为什么重要
特殊词元不是普通文本内容,却承担着控制序列的作用。BOS 可以标记生成开始,EOS 可以标记生成结束,PAD 用于批量补齐,分隔标记可以帮助模型区分两段输入。不同模型使用的名称和具体规则可能不同。
特殊词元是否占用位置、是否参与损失、是否参与注意力,都需要结合模型定义确认。例如 PAD 通常不应该参与注意力和损失;EOS 作为真实目标时,模型需要学习在合适位置输出它。
输入长度计算时也要把特殊词元算进去。一个看似刚好放得下的文本,如果再加上起始、结束或分隔标记,可能就会超过最大序列长度。
隐藏表示为什么能回到词表
经过编码器或解码器后,某个位置会得到 d_model 维隐藏表示 h。要预测词元,模型需要把 h 映射到词表大小 V 的分数向量。通常使用一个线性层得到 logits,再通过 Softmax 转成每个词元的概率。
输出投影矩阵的形状可以理解为 d_model×V。每个词元都有一个对应的输出分数,分数越高,Softmax 后得到的概率通常越大。训练时,交叉熵会根据真实目标词的概率调整整个输出层以及前面的 Transformer 表示。
有些模型会把输入嵌入矩阵和输出投影的权重共享,减少参数并让输入与输出词元空间保持一定联系;有些模型使用独立矩阵。阅读模型结构时需要确认采用哪种方式。

最终隐藏向量经过词表投影和 Softmax 得到概率分布,再选择词元 ID 并解码成文本。
词元选择不等于文本解码
模型输出概率后,系统还要决定选哪个词元。可以选择概率最高的词元,也可以根据温度、Top-k、Top-p 等策略从分布中采样。这个动作得到的是词元 ID,还不是用户最终看到的字符串。
词元解码器会把连续的词元 ID 重新拼接、还原空格和特殊符号,并处理子词边界。例如一个词被拆成几个子词时,解码阶段需要把它们组合回可读文本。
因此,生成结果受到三部分共同影响:模型给出的概率分布,选择词元的解码策略,以及词元化器如何把词元还原成文本。只看最后一段字符串,容易忽略前面两层决定。
如何检查输入输出形状
输入端通常是:词元 ID 形状 B×L,查表后变成 B×L×d_model,加上可广播到相同形状的位置编码。输出端通常是:隐藏表示 B×L×d_model,词表投影后变成 B×L×V,再根据任务选择最后一个位置或所有位置的 logits。
如果 V 很大,输出 logits 会占用较多内存;如果 L 很长,注意力和激活会变重。输入和输出的最后一维分别对应 d_model 与 V,不能把词表大小误当作隐藏维度。
检查时还要确认词元 ID 没有越过词表范围,PAD、BOS、EOS 等特殊 ID 与配置一致,输入长度没有超过位置编码或模型允许的最大长度。
从输入到输出的完整链路
现在可以把文本经过 Transformer 的全过程连起来:原始文本先被词元化,词元转成 ID 后查找词嵌入,位置编码把顺序加入表示,编码器或解码器通过注意力和前馈网络加工隐藏向量,输出投影再把隐藏表示映射回词表概率。
输入端把离散符号放进连续向量空间,模型可以用矩阵运算处理这些向量;输出端把连续概率分布重新映射回离散词元,最终由解码器还原文本。Transformer 的“读”和“写”就是在这两个空间之间往返。
理解这条链路后,再看词元化、词表扩展、嵌入权重共享、输出层和生成策略,就能把它们放回明确的位置,而不是把所有“文本变向量”或“向量变文本”混成一个步骤。
确认文本如何切分,以及特殊词元的 ID。
确认查表后的向量维度与位置编码形状一致。
确认 Transformer 输出仍按位置保留 d_model 维表示。
确认 logits、概率、词元选择和文本解码顺序。
常见问题
词元 ID 越大是不是表示词元越重要?
不是。词元 ID 主要是词表中的索引,数值大小本身没有语义上的重要程度。
词嵌入和位置编码为什么可以相加?
因为两者通常具有相同的 d_model 维度,可以逐元素相加,让表示同时携带词元内容和位置信息。
模型输出的是文字还是词元概率?
模型首先输出词表上的 logits 或概率分布,选择词元 ID 后,还需要经过词元解码过程才能得到可读文本。