【Token系列】02 | Embedding是怎么“长出来”的?从查表到训练过程全解
02 | Embedding是怎么“长出来”的?从查表到训练过程全解
副标题:如何从字符变成向量,再从向量学会语义
一、什么是 Embedding?
Embedding 是语言模型中用于表示 token 的高维向量。
每个 token 本质上是一个编号,Embedding 是将这个编号映射为一个可学习的、具有语义的向量表示。
二、从 Token 到 Embedding 的流程
- Token → ID:token 被赋予一个唯一编号,如
"GPT"
→32874
; - ID → 向量:模型维护一个 Embedding Table,查表得到向量表示:
- 示例:
Embedding[32874] = [0.23, -0.71, ..., 0.08]
(通常为768~4096维);
- 示例:
- 向量 → 输入模型:这些向量才是 Transformer 的输入。
三、Embedding Table 是什么?
它是一个二维矩阵,结构如下:
参数项 | 数值(示例) |
---|---|
词表大小 | 50,257 个 token |
向量维度 | 4096维(GPT-4) |
表大小 | 50,257 × 4096 |
每一行对应一个 token,每一列是该 token 的某个维度特征值。
四、Embedding 是怎么“训练”的?
Embedding 是通过梯度下降 + 反向传播自动学习出来的:
- 初始化时是随机数;
- 通过每次预测误差(Loss),反向传播误差信号;
- 梯度更新时,Embedding 表中使用过的行被调整;
- 多次迭代后,语义相似的 token 向量逐渐靠近。
例:模型预测“他很[ ]” → 真值是“高兴”,若预测成“伤心”,则“伤心”向量会被远离目标,“高兴”会被吸引靠近。
五、Embedding 有哪些特性?
特性项 | 描述 |
---|---|
高语义密度 | 向量距离可表示语义接近性 |
稠密向量 | 不使用 one-hot,而是每个 token 有实数向量 |
共享策略 | GPT 输入输出可共享同一套 embedding 参数表 |
可视化分析 | 可使用 PCA / t-SNE 降维分析语义聚类关系 |
六、Embedding 的优化与扩展
- 冻结 Embedding:微调时固定原始向量,防止过拟合;
- 预训练向量初始化:如加载 GloVe / word2vec 向量;
- 多语言融合:跨语言词向量训练共享语义空间;
- 低频词建模:对出现次数少的 token 设计特殊正则策略或 fallback机制。
七、总结
Token 是语言的门票,Embedding 是语义的能量条。
Embedding 将离散的语言编号映射为模型能理解的语义空间,为语言模型的理解、记忆与生成奠定了数值基础。
附:Embedding 向量可视化示例
为了直观理解 Embedding 如何表达语义接近关系,我们可以将高维向量(如 768维)通过降维方法(如 t-SNE 或 PCA)投影到二维空间。
示例图:
在这张图中:
- 同类词(如“高兴”、“开心”、“快乐”)聚集成簇;
- 反义词(如“伤心”、“痛苦”)位于另一区域;
- 专有名词(如“清华”、“哈佛”、“斯坦福”)也呈现语义团簇特征。
这种结构证明了:模型确实在向量空间中学习了语义相似性,即便只是通过统计和误差传播训练出来的。
可视化工具推荐:TensorBoard Embedding Projector、UMAP、t-SNE、PCA。