Skip to content

Embedding(嵌入)

一句话 TL;DR:把"国王"变成一串数字 [0.23, -0.51, ...],让计算机能用距离丈量语义--但那串数字到底编码了什么,远比你以为的复杂。


L1 · 一句话点破

Embedding 就是把对象映射到一个高维向量空间:语义相近的对象坐标相近,语义无关的隔得远。它是 RAG、推荐、搜索、向量数据库背后同一个无名英雄--所有"语义匹配"的魔法,拆开看都是同一段操作:先把对象变成向量,再算距离。

L2 · 通俗类比

想象你是一图书馆管理员,要给每本书贴坐标 $(x, y)$:

  • $x$ 轴代表"硬核程度",$y$ 轴代表"题材"
  • 《深度学习》在 $(0.9, 0.1)$,《三体》在 $(0.3, 0.9)$,《机器学习实战》在 $(0.7, 0.2)$
  • 读者问"有没有像《深度学习》那样的书"--你不用读懂内容,只要找坐标最近的就行

两维太粗糙了,所以真实 embedding 用 768 维、1536 维甚至 12288 维。维度多了人脑想象不了,但**"近=像"**这个直觉始终成立。Embedding 干的事就是把上面这个比喻放到一个人类画不出来的高维空间里。

L3 · 正经定义

Embedding(嵌入)是指将离散对象(词、句、图片、用户、商品)映射到一个低维稠密向量空间 $\mathbb{R}^d$ 的过程,使得向量间的几何关系(距离、方向)能反映对象间的语义或结构关系。

形式化地,embedding 是一个函数 $f: \mathcal{X} \to \mathbb{R}^d$,其中 $\mathcal{X}$ 是原始对象空间(如词表、像素空间),$d$ 远小于 $|\mathcal{X}|$。

按对象类型分三类:

类型输入典型模型典型维度
词嵌入单个 tokenWord2Vec、GloVe、fastText100~300
句/文档嵌入整段文本Sentence-BERT、E5、bge384~1024
多模态嵌入图/文/音CLIP、ImageBind512~1024

训练目标的核心思想统一是:让"经常一起出现/语义相似"的对象向量靠近,让无关的对象远离。 Word2Vec 用上下文预测(Mikolov et al., 2013),对比学习用正负样本对(SimCSE、CLIP),目标殊途同归。

参考资料

L4 · 原理深挖

4.1 那个国王、男人、女人的故事

每个 NLP 教科书都会讲这个例子:

$$ \vec{\text{king}} - \vec{\text{man}} + \vec{\text{woman}} \approx \vec{\text{queen}} $$

意思是:从"国王"向量里减掉"男性"含义、加上"女性"含义,得到的就是"女王"。常被引为 embedding"学到了语义结构"的铁证。

但这故事其实骗了你三件事:

① 这是 2013 年挑选出来的最佳案例

原论文(Mikolov et al., 2013)测了大约 2000 组类比,准确率约 60%。剩下 40% 是错的,论文不会展示。国王/女王这一对是表现最好的几个之一,被反复引用至今,造成"embedding 完美理解语义"的幸存者偏差。

② 类比关系不等于"减去男性加上女性"

把上面这组向量做最近邻检索,真正的 top-1 最近邻往往不是 queen,而是 king 自己或 man。"king - man + woman ≈ queen"只有在"限定答案是 queen 那个词"的前提下才成立--这是一个被精心设置的检索条件。把所有词都放进候选集,模型不一定这么认为。

③ 几何结构掺了大量非语义噪声

后续研究(如 Rogers et al., 2017)发现,king-queen 这条"性别轴"在向量空间里确实存在,但同时还混进了词频轴、长度轴、词性轴等几十个 nuisance 方向。你以为在沿"性别"做加减,实际上同时也在沿词频滑动,只是恰好这组词的语义轴足够强、压过了噪声。

记住这一节的核心:embedding 学到的是"统计共现"的几何化,不是"人类概念"的几何化。 它好用,但不该被神化。

4.2 为什么是余弦相似度

embedding 向量之间的相似度,业界默认用余弦:

$$ \cos(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{|\mathbf{u}|,|\mathbf{v}|} $$

理由有三:

  1. 模长编码 nuisance:句向量的模长往往和句子长度/信息量挂钩,而我们要的是"在说同一件事"(方向),不是"说了多重的同一件事"(模长)。归一化后比方向 = 余弦。
  2. 数值稳定:归一化后向量都落在单位球面,内积范围 $[-1, 1]$,便于设阈值、调温度。
  3. 和 FAISS 等索引兼容:把向量 L2 归一化后,IndexFlatIP(内积)就等价于余弦相似度,比 IndexFlatL2(欧氏)快且省内存。

工程小窍门:入库存归一化向量 + 内积索引,是生产 RAG 的默认组合,比直接算余弦省一次开方。

4.3 从 Word2Vec 到 Sentence Embedding 的真正难点

词嵌入好做,因为词是原子单位。句嵌入难做,因为:

  • 组合性not goodgood 的词都相似,意思相反。直接平均词向量会把 not goodgood 算成近邻。
  • 顺序敏感狗咬人人咬狗 词集合相同,意思天差地别。
  • 长度差异这部电影非常好 都表达正面,但向量空间里被长度拉开。

Sentence-BERT 的解法:用 BERT 编码 + 在自然语言推理数据集上做对比学习微调,让"语义等价"的句子聚拢、不等价的拉开。后续的 SimCSE、E5、bge 都在这个思路上加料,核心还是对比学习

$$ \mathcal{L} = -\log \frac{e^{\cos(z_i, z_i^+)/\tau}}{\sum_j e^{\cos(z_i, z_j)/\tau}} $$

其中 $z_i^+$ 是正样本(同一句的另一个视角/同义改写),其他 $z_j$ 是负样本,$\tau$ 是温度。这个 InfoNCE 损失几乎是所有现代 embedding 模型的母公式。

4.4 最小可运行 Demo

参见 demos/embedding/ -- 30 行代码,用 sentence-transformers 把一组句子编码成向量,算余弦相似度,亲眼看到"语义相近的句子向量也相近"。还包含一个反例:直接平均词向量为什么不行。

L5 · 沿革与坑

沿革

  • 2013 年,Google 的 Mikolov 发表 Word2Vec。一个简单到只有两层的神经网络,却让整个 NLP 圈意识到:语义可以被几何化
  • 2014 年,斯坦福的 GloVe 把这套推向了"全局共现矩阵分解"的视角,效果接近但数学更优雅。
  • 2018 年 BERT 出现后,词嵌入一度被认为过时--大家都用上下文相关的 BERT 表示了。但很快发现:直接拿 BERT 的 [CLS] 输出当句向量,效果比平均 GloVe 还差Reimers & Gurevych, 2019),因为 BERT 的语义空间是各向异性的(向量挤在一个窄锥里)。Sentence-BERT 因此诞生。
  • 2022 年后,对比学习 + 大规模弱标注数据(如 E5、bge、GTE)把句嵌入质量推到了新高度,向量数据库也随之起飞。RAG 这套架构的成熟,本质上是 embedding 质量跟上了。

常见误解

  • 误解:embedding 维度越高越好。 ✅ 真相:维度高了信息容量大,但训练数据不够时容易过拟合,而且检索时内存和延迟都涨。生产系统里 768 维是性价比甜点,再高边际收益递减。

  • 误解:embedding 能表示"真伪"。 ✅ 真相:embedding 编码的是"相似语境下出现的文本"。1+1=21+1=3 的向量可能非常接近,因为它们出现在几乎一样的句式里。判断真假是 LLM 的活,不是 embedding 的活--这是很多人在 RAG 里加"用 embedding 过滤幻觉"会翻车的根源。

  • 误解:换了个 embedding 模型,老向量库还能继续用。 ✅ 真相:不同 embedding 模型的向量空间完全不兼容,换模型必须全量重算。混用约等于把英里和公里直接相加。

  • 误解:cosine 相似度 0.8 以上就是"语义相同"。 ✅ 真相:相似度的绝对值没意义,只有相对排序有意义。不同模型、不同语言、不同长度下,"0.8"对应的语义关系完全不同。调系统时永远基于你自己的数据画分布,不要照搬别人的阈值。

面试怎么考

  1. "Word2Vec 的 king - man + woman ≈ queen 说明什么?真的成立吗?" --考你有没有读过原论文、懂不懂幸存者偏差(见 4.1)。能指出 60% 准确率 + 检索条件限制的人,立刻区分于背书党。
  2. "为什么句向量用余弦相似度,不用欧氏距离?" --基础题,答出 nuisance 模长 + 归一化技巧即可(见 4.2)。
  3. "为什么不能直接用 BERT 的 [CLS] 当句向量?" --考你对各向异性问题的理解(见历史部分 + Reimers 2019 论文)。
  4. "InfoNCE 损失里的温度 $\tau$ 调大调小有什么影响?" --进阶题。$\tau$ 越小越聚焦最难的负样本,过大则所有样本梯度均匀、学不到判别性。
  5. "换了 embedding 模型,向量库要不要重算?" --送分题,但要能说清"向量空间不兼容"的原理。

延伸阅读


上一篇:RAG - 检索增强生成 -- 检索的灵魂就是 embedding。下一篇预告:注意力机制 -- "注意力"这个名字起得太好了,好到骗过了所有人,包括发明者本人。

内容采用 CC BY-SA 4.0,代码采用 MIT。