Embedding:词是如何变成数学的?
本篇是「小模型训练系列」第 2 篇:从工程与数学直觉出发,解释大模型训练中的语义坐标系。
正在沿着「小模型训练系列」系统学习,希望把概念、工程和真实判断串起来的读者。
Embedding 若只被理解成「查相似度的工具」, RAG、Agent、行业模型里的很多问题都会被误判。 在整个大模型训练流程中,Embedding 是第一道真正具有「智能含量」的关卡。 它不负责生成答案,也不直接做推理,却定义了模型“理解世界”的坐标系。
很多人学习大模型时,习惯从 Transformer、Attention、参数规模入手, 却忽略了一个更底层的事实:
在 Attention 开始工作之前,世界已经被 Embedding 定义好了。
如果这个「世界坐标系」是模糊的、扭曲的, 那么再复杂的网络结构,也只是在一个错误空间里做精密计算。
📌 本篇聚焦的问题不是「Embedding 怎么用」,而是底层表示如何形成
- 词、符号、token 是如何被映射到连续数学空间的
- 为什么模型不能直接理解文字
- 向量空间里,「距离/方向/结构」究竟代表什么
- Embedding 是如何在训练过程中被 Loss 一点点逼出来的
- 为什么 RAG、检索、Agent 的上限,本质都卡在 Embedding 上
- 以及:当 RAG 失败时,如何区分 数据问题、切分问题 和 Embedding 空间问题
这不是一篇科普文章, 而是一篇站在工程 + 数学直觉 + 可训练视角整理出的底层说明书。
适用场景包括:
- 小模型训练 / 微调
- RAG 系统
- 行业模型
- Agent 架构
- 向量检索与语义搜索
这些场景都依赖一个稳定的语义坐标系。
📘 先定位置:Embedding 是语义坐标系
定位说明
本文不是科普,而是站在 工程 + 数学直觉 + 可训练视角,
用于判断 RAG / 检索 / Agent / 行业模型中的
表示能力、检索边界与系统上限。
🧩 为什么要先理解 Embedding?
在整个模型训练流程中,Embedding 是第一道真正「有智能含量」的门槛。
可以这样概括:
Embedding 做不好,后面 Transformer 再复杂也救不回来。
但现实中,很多人对 Embedding 的理解停留在:
- 调用现成 Embedding API
- 往向量库里塞数据
- 用 cosine 相似度查一查
- 然后得出结论:
“哦,Embedding 就是查相似度的”
这是一个非常危险、也非常浅层的理解。
真实情况是:
Embedding 决定了模型「世界观」的坐标系。
坐标系一旦扭曲,后续所有检索、推理、工具调用,都只是在“错误空间”里做高精度运算。
🧠 一句话定义 Embedding(工程级)
Embedding = 把离散符号,映射到连续向量空间中的一种学习型函数
更工程一点说
token_id → R^d(d 维连续向量)
例如: “猫” → [0.12, -0.98, 1.43, …, 0.07] “狗” → [0.11, -0.95, 1.41, …, 0.09]
关键不是数值,而是:
- ❌ 不是人为写死的
- ✅ 是在训练中「自己长出来的」
- ✅ 是被 Loss 持续塑形出来的(塑形方向由任务目标决定)
🔍 为什么模型不能直接用文字?
因为模型的世界里,只有三种东西:
- 数字
- 矩阵
- 向量运算
对模型来说:
- 文字 ≠ 语义
- 语言 ≠ 理解
- 文本本身只是不可计算的符号序列
没有这样的数学空间,模型就无法:
- 比较相似性
- 建立抽象
- 做泛化
- 做迁移学习
Embedding 的使命是: 把「语言」翻译成「可以计算的几何结构」。
🧭 Embedding 在训练流程中的真实位置
flowchart TB
A[文本] --> B[Tokenizer(离散 ID)]
B --> C[Embedding(连续向量)]
C --> D[Transformer(关系建模)]
D --> E[Logits / Loss]
⚠️ 一个极其重要但常被忽略的事实: 在 Transformer 之前,模型已经身处一个「几何世界」里了。 Embedding 不是“附属模块”,而是整个计算世界的“坐标系”。
🧩 向量空间到底是什么?
很多教程会说: “向量空间就是高维空间”
这句话没错,但几乎没有工程价值。
工程级定义: 向量空间 = 一个可以度量「关系/方向/距离/结构」的空间。
在这个空间中:
- 距离 ≈ 语义相似度
- 方向 ≈ 概念变化
- 聚类 ≈ 语义类别
- 子空间 ≈ 领域知识
语义不是标签,而是几何结构。
🔥 一个常见但容易被低估的例子
Embedding(“国王”) - Embedding(“男人”) + Embedding(“女人”) ≈ Embedding(“王后”)
这不是魔法。原因是:
- 「性别」在向量空间中形成了可线性表示的方向
- 模型在训练中被“预测任务”逼着学会了这个结构
这里的结论是:
- ❌ 语义 ≠ 标签
- ✅ 语义 = 空间中的结构关系
🔥 更接近工程系统的两个例子
例子 A:代码域的“变更方向”
Embedding(“bug”) → (修复方向) → Embedding(“fix”)
Embedding(“fix”) → (重构方向) → Embedding(“refactor”)
在代码检索 / 修复 Agent 中,这些“方向”是否存在,决定了模型能不能在空间里完成“从问题到解决”的迁移。
例子 B:业务域的“流程邻近性”
Embedding(“采购申请”) 与 Embedding(“审批”) 应当更近
Embedding(“审批”) 与 Embedding(“合同”) 应当更近
Embedding(“采购申请”) 与 Embedding(“发票”) 不应当天然更近
在企业 RAG/Agent 中,检索是否能沿着流程“就近”推进,本质依赖 embedding 空间里是否存在“流程结构”。
🧠 Embedding 是怎么「学出来」的?
核心事实: Embedding 是在「预测下一个 token」的目标下,被动学出来的。
训练目标: 最大化 P(token_i | context)
为了降低 Loss,Embedding 会逐步学到:
- 拉近语义相关的词
- 推远无关的词
- 构造 Attention 可直接使用的结构
Embedding 的质量,最终全部体现在 Loss 与泛化表现上。
🧨 RAG 失败的三种典型“空间形态”
当 RAG 检索“看起来像随机”,通常不是向量库的问题,而是 embedding 空间出了结构性问题:
-
空间塌缩(Collapse)
- 表现:所有 query 检索出来都差不多
- 本质:向量分布缺乏区分度,语义被压扁
-
类间混叠(Overlap / Entanglement)
- 表现:不同主题互相串台,召回污染严重
- 本质:不同语义簇没有拉开边界
-
方向失真(Broken Directions)
- 表现:组合查询(A+B- C)效果极差,推理/迁移弱
- 本质:空间里缺少可线性表示的“概念变化方向”
结论: RAG 的稳定性来自空间结构,而不是“多塞点文档”。
可以把这件事想成一张地图:健康的 Embedding 空间会让相近概念自然靠近;空间一旦变形,检索就像在一张印歪的地图上找路。
flowchart TB
Q["用户问题 / Query"] --> S{"Embedding 空间"}
S --> A["健康空间<br/>相似内容靠近,边界清晰"]
S --> B["空间塌缩<br/>什么都像,什么都不准"]
S --> C["类间混叠<br/>主题边界互相串台"]
S --> D["方向失真<br/>组合查询和迁移走不动"]
A --> R["召回稳定<br/>答案更容易落在正确区域"]
B --> F1["结果重复<br/>检索像随机抽卡"]
C --> F2["召回污染<br/>不同主题混进来"]
D --> F3["推理断裂<br/>A + B 这类查询失效"]
⚙️ Embedding 的关键工程参数
① 向量维度(d)
| 模型规模 | 常见维度 |
|---|---|
| 小模型 | 256 / 512 / 768 |
| 中模型 | 1024 / 2048 |
| 大模型 | 4096 / 8192 |
维度 = 模型理解世界的分辨率 维度太低会丢结构,维度太高会带来训练成本与过拟合风险。
② 输入/输出 Embedding 是否共享 让「理解」和「表达」使用同一套语义空间,这是很多成熟模型默认采用的重要工程技巧。
③ LoRA/QLoRA 中是否微调 Embedding
| 选项 | 特性 |
|---|---|
| 冻结 Embedding | 稳定,但领域适配慢 |
| 微调 Embedding | 语义更贴合行业,但更易过拟合 |
🧪 最小可验证实验(MVE):观察语义空间如何被 Loss 塑形
不训练大模型,也能验证 Embedding 的本质:
实验目标:
- 给一组小词表(同类词 + 异类词)
- 用一个极简的预测任务训练 embedding(几十到几百步)
- 观察相似词的 cosine 相似度是否上升、异类是否下降
实验观察点:
- “同一类别”的向量逐渐聚在一起
- “不同类别”的向量逐渐拉开
- 训练越稳定,空间结构越清晰
做过这个实验后,Embedding 就不再只是“查相似度工具”,而是一个会被任务目标塑形的语义空间。
🚀 Embedding 与 RAG 的本质关系
graph LR
A[文档] --> B[向量]
C[Query] --> B
B --> D[相似度计算]
D --> E[最近的语义邻居]
RAG = 在 Embedding 空间中做几何检索 RAG 的上限 = Embedding 的上限
🧠 架构级总结
flowchart LR
A[现实世界] --> B[Embedding]
B --> C[语义坐标系]
C --> D[Transformer]
D --> E[Agent/Tool/Memory]
Embedding 是:现实世界 → AI世界的投影函数
📌 核心结论
- Embedding 不是工具,而是语义空间本身
- 决定模型理解世界的方式(世界坐标系)
- 是被 Loss 一点点逼出来的(任务目标决定塑形方向)
- 决定 RAG/Agent 的上限(空间结构决定检索与迁移)
- 在小模型中容易被忽视,错误会沿着后续链路持续放大
🔮 下一篇预告
《Attention 是如何工作的?》
- 注意力机制底层原理
- 多头注意力工程实现
- Attention 如何形成推理能力
- 小模型中的注意力优化技巧
持续学习,持续记录,持续筛选
如果这篇对你有用,可以继续沿着主题读下去。
福星家和会长期记录 AI 技术、生活成长、真实好物与正向文化观察。产品体验、人物故事、教育内容、生活方式、文化作品和内容共创都欢迎邮件沟通,合作内容会清楚标注。