从 Token 到 Transformer · 04 / 10
把 embedding 解释成“词在语义地图上的坐标”很直观,却容易让人误以为模型里存在一张整理好的词义地图:猫在狗旁边,国王减男人加女人就会得到王后。
现实没有这么整齐。Embedding 的确把离散 token 放进连续向量空间,但这个空间不是人工设计的字典。它是模型为了降低训练损失而学出来的一组参数,既包含语言统计,也带着数据、任务和训练方法留下的痕迹。
从离散符号到连续表示
Token ID 只负责索引。两个 ID 即使只差 1,也没有天然关系。神经网络却擅长处理连续数值:向量可以做点积、加权、投影和非线性变换。
Embedding 层就在两者之间搭桥。每个词表项对应一个 D 维向量,训练开始时这些数值可能接近随机;反向传播会持续调整它们,让整个模型更擅长当前预测任务。
“可训练”是关键。Embedding 并不是外部词典塞进模型的解释,而是与 Attention、FFN 和输出层一起优化的参数。
向量为什么会出现结构
如果两个 token 经常出现在相似上下文中,为了完成预测,模型往往会让它们的表示在某些方向上表现出相似性。数字、月份、城市或语法角色可能形成可利用的局部结构。
但“距离近”不能直接翻译成“人类认为语义相同”。向量几何取决于训练目标和表示层:
- 输入 embedding 主要是每个 token 的初始参数;
- 中间层 hidden state 已经混入当前句子的上下文;
- 为检索任务训练的 sentence embedding 又有不同目标。
把这些向量放在一起比较,得到的结论可能没有意义。谈“相似度”前,先要说明比较的是哪一层、什么对象,以及它是否为该用途训练过。
一个 Token 只有一个意思吗
在基础 embedding 表里,同一个 token 通常只有一行参数。“苹果发布了新芯片”和“桌上放着一个苹果”会从相同入口出发。
区别在后续层里形成。第一句周围有“发布”“芯片”,第二句周围有“桌上”“一个”。Self-attention 汇聚这些线索后,两个位置的 hidden state 会逐层分开。
所以,input embedding 更像一份未经上下文修订的底稿。真正贴合当前句子的表示,不在查表瞬间出现,而是在整个 Transformer 堆栈中被反复改写。
Embedding 维度越大越好吗
更高维度提供更大的表示容量,也会增加参数量、内存占用和计算成本。一个词表大小为 V、隐藏维度为 D 的 embedding 表,大约包含 V x D 个参数。
扩大 D 并不会自动带来更好的语义结构。模型还需要足够数据、合理架构和训练目标来使用这些容量。维度只是系统设计中的一个变量,不是“理解力刻度”。
同样,扩大词表也有代价。更大的词表能减少部分序列长度,却会让 embedding 与输出投影更大,并让低频 token 获得更少训练样本。Tokenizer 与 embedding 必须一起设计。
为什么 Embedding 对整个模型重要
Transformer 后续的所有运算都建立在这些初始向量上。Q、K、V 是从当前表示做线性投影得到的;残差连接需要维度稳定;输出层最终还要把 hidden state 映射回词表概率。
如果初始表示无法为后续计算提供可区分的信号,Attention 再复杂也没有可靠素材。Embedding 的价值不是独立完成理解,而是把语言转换成一种可被整套网络持续修改的表示。
读向量时保持克制
可视化 embedding 很有吸引力,但降维图只保留了高维结构的一部分。看到几个词聚在一起,可以作为观察线索,不能直接证明模型形成了某种稳定概念。
更可靠的做法是把几何观察与任务评估结合:相似度是否帮助检索,线性探针是否能读出某类属性,干预某个方向是否真的改变输出。不要把一张漂亮的二维散点图当成“模型思想地图”。
小结
Embedding 做了两件基础而克制的事:把离散 token 变成连续向量,并让这些向量能随训练目标一起优化。它提供表示空间,却不等于完成理解;它可能呈现语义结构,却不是人工词典的精确坐标。
下一步,模型还需要知道每个向量在序列中的位置。没有位置信号,Attention 看见的更像一袋 token,而不是一句有先后关系的话。
