深色模式
03 · Embedding:把文字变成坐标
学完你能说出:
- Embedding 是把一段文字变成一串数字(向量),意思相近的文字,向量也相近。
- 怎么用「余弦相似度」算两段文字像不像,能用简单数字算一遍。
- 为什么 RAG 的检索要靠 Embedding,而不是关键词搜索。
先看地图
前两篇讲大模型怎么「接龙」、怎么「看上下文」。这一篇讲文字怎么变成机器能算的数字。它是 RAG 的地基:RAG 检索资料,靠的就是比较向量。
本篇讲 4 个点:① 向量是什么 → ② 相似度怎么算 → ③ 为什么要用向量表示文字 → ④ Embedding 模型和大模型的区别。
一句话本质
Embedding(嵌入)= 把文字放进一个「意思空间」里,给它一个坐标。意思越接近,坐标离得越近。
生活类比:地图上的城市
- 每个城市在地图上有经纬度两个数字。北京和天津离得近,北京和广州离得远。
- Embedding 也是给每段文字一个「坐标」,只不过不是 2 个数,而是几百到几千个数(比如 768 维、1024 维)。
- 「猫」和「小猫」离得很近,「猫」和「汽车」离得很远。
一步步看:用 2 维向量算一遍
真实向量有几百维,我们先用 2 维(只有两个数)来理解。假设:
| 文字 | 向量(示意) |
|---|---|
| 「猫」 | (1, 2) |
| 「小猫」 | (2, 4) |
| 「汽车」 | (2, −1) |
相似度看「方向」:余弦相似度(Cosine Similarity)
cos = (a·b) / (|a| × |b|)
点积 各自长度相乘- 猫 vs 小猫:点积 = 1×2 + 2×4 = 10;长度 = √5 和 √20;cos = 10 / √100 = 1.0 → 方向完全一样,最相似。
- 猫 vs 汽车:点积 = 1×2 + 2×(−1) = 0;cos = 0 → 互相垂直,毫无关系。
记住这条规则:方向相同是 1,垂直是 0,完全相反是 −1。「小猫」的向量比「猫」长一倍,但方向一样,所以相似度仍然是 1。这就是为什么要看方向,不看长度。
为什么这么设计
为什么要把文字变成向量?
- 问题:计算机只会算数字。直接比较文字只能看「字面是否一样」,「猫」和「喵星人」字面上毫无交集。
- 方案:用一个训练好的模型,把文字映射成向量,让意思相近的文字向量也相近。
- 好处:「像不像」变成了一个可以计算的数字,可以排序、可以在百万条里快速找最近的几条。
一句话答法
把文字变成向量,就能用数学计算语义相似度,从而做语义搜索、聚类、推荐;而且能识别字面不同、意思相同的内容。
为什么 RAG 检索用 Embedding,而不只用关键词搜索?
- 问题:用户问「怎么请假」,文档里写的是「休假申请流程」。关键词搜索一个字都对不上,就找不到。
- 方案:问题和文档都转成向量,比较语义距离。
- 好处:同义词、换种说法都能找到。
一句话答法
关键词只匹配字面,Embedding 匹配语义,「请假」能找到「休假申请」。实际项目里两者常常一起用(混合检索),后面 RAG 篇会讲。
为什么用余弦相似度,而不是直接算距离?
- 问题:一段长文和一段短文,向量的「长度」可能不同,但讲的是同一件事。
- 方案:余弦只看方向、不看长度。
- 好处:不会因为文字长短不同而误判。不少 Embedding 模型输出的向量已经归一化(长度都是 1),这时余弦和点积是一回事。
一句话答法
余弦相似度只看向量方向,和长度无关,更适合衡量语义是否一致。
Embedding 模型 vs 大模型
| Embedding 模型 | 大模型(聊天用的) | |
|---|---|---|
| 输入 | 一段文字 | 一段文字 |
| 输出 | 一个向量(一串数) | 接着写的文字 |
| 用途 | 检索、比较相似度 | 生成回答 |
| 在 RAG 里干什么 | 找资料 | 根据资料写答案 |
两者是不同的模型,各干各的。换了 Embedding 模型,库里所有文档都要重新算向量,因为不同模型的「坐标系」不通用。
英文术语拆解
| 术语 | 拆开看 | 一句话意思 |
|---|---|---|
| Embedding | embed 嵌入 + -ing | 把文字「嵌」进一个数字空间,得到向量 |
| Vector | 向量 | 一串有顺序的数字,例如 (1, 2) |
| Dimension | 维度 | 向量里有几个数,例如 768 维 |
| Cosine Similarity | cosine 余弦 + similarity 相似度 | 用夹角的余弦衡量两个向量方向是否一致 |
| Dot Product | dot 点 + product 乘积 | 点积:对应位置相乘再相加 |
| Normalize | normal 标准的 + -ize 使… | 归一化:把向量长度缩放成 1 |
| Semantic Search | semantic 语义的 + search 搜索 | 按意思而不是按字面搜索 |
面试怎么问
Q:什么是 Embedding?在 RAG 里起什么作用?
Embedding 是把文本映射为稠密向量的表示,语义相近的文本在向量空间中距离也近。RAG 里,文档切块后用 Embedding 模型转成向量存入向量库;查询时把问题也转成向量,按相似度找出最相关的文档块。
Q:为什么常用余弦相似度?
余弦只衡量方向,不受向量长度影响,更能反映语义是否一致。如果向量已经归一化,余弦相似度等于点积,计算更快。
Q:换了 Embedding 模型要注意什么?
不同模型的向量空间不兼容,必须用新模型把库里所有文档重新向量化;查询和文档必须用同一个模型。
容易混的地方
- 向量维度越高越好 ✗:维度高,表达能力强一些,但存储和计算更贵。要看效果和成本。
- 相似 ≠ 正确:向量相似只说明「话题相近」。「年假 5 天」和「年假 10 天」的向量可能非常接近,所以检索结果还需要后续筛选。
- 查询和文档要用同一个模型:用 A 模型存库、用 B 模型查询,结果会完全乱掉。
和其他知识的连接
- ← 来自 注意力与 Transformer:Embedding 模型内部通常也是 Transformer。
- → 影响 切块与入库:文档切成块后,每块算一个向量。
- → 影响 检索与重排:检索就是「找余弦相似度最高的几块」。
自测 3 问
Q1:用一个生活类比解释 Embedding。
点开看答案
像地图上的经纬度:每段文字被放到一个「意思空间」里,得到一个坐标(向量)。意思相近的文字坐标离得近,比如「猫」和「小猫」很近,「猫」和「汽车」很远。
Q2:向量 (1, 2) 和 (2, 4) 的余弦相似度是多少?为什么?
点开看答案
1。点积 = 2 + 8 = 10,长度乘积 = √5 × √20 = 10,10/10 = 1。两个向量方向完全相同(一个是另一个的 2 倍),余弦只看方向,所以相似度是 1。
Q3:为什么 RAG 检索要用 Embedding?只用关键词搜索有什么问题?
点开看答案
关键词搜索只匹配字面,用户问「怎么请假」,文档写「休假申请流程」就搜不到。Embedding 按语义匹配,换种说法也能找到。实际项目常把两者结合(混合检索)。
✅ 验收清单
- 能用「地图坐标」的类比解释 Embedding
- 能手算两个 2 维向量的余弦相似度
- 能说出余弦相似度的取值含义(1 / 0 / −1)
- 能讲清「为什么 RAG 检索用 Embedding」(问题 → 方案 → 好处)
- 能说出 Embedding 模型和聊天大模型的区别,以及为什么换模型要重建索引
下一步该懂什么
- 有了向量,怎么在几百万条里快速找到最近的几条?→ 检索与重排
- 先回到大模型本身:怎么写提示词、怎么调参数让它更听话?→ Prompt 与采样参数