向量数据库

嵌入模型与语义空间

入门基础与全景约 20 分钟kp-002

前置知识

一句话定义

嵌入(embedding)是用神经网络把任意对象(文本、图片、音频)映射为定长高维向量的过程,训练目标是让"语义相近"的对象在向量空间中彼此靠近——向量数据库检索的一切前提。

为什么重要

向量库检索质量的上限由嵌入模型决定,索引只能逼近"嵌入空间里的真相",无法弥补嵌入本身的缺陷。工程事故中"召回差"的一半根因在 embedding 侧:换了模型没重建库、上下文超长被截断、归一化口径不一致。理解嵌入是排错的第一课。

前置知识

kp-001(向量数据库全景);中学线性代数(向量、长度)。

核心概念

原理与机制

模型的输出不是随机的:训练时它被迫把"查询-正确文档"对拉近、把随机对推远,于是空间中形成语义聚类——同话题文档成簇、同语言相近、同模态内部有序。检索即在这个空间里做近邻查询。

三条工程铁律:

  1. 模型与空间绑定。换 embedding 模型 = 换坐标系,新旧向量不可混算;必须全量重嵌入并重建索引,这是最大的隐性迁移成本(见 kp-028)。
  2. 度量口径随模型走。模型文档标注的 metric(cosine / IP / L2)是训练目标决定的,建库时必须一致,否则排序系统性错位。
  3. 输入有边界。上下文长度(如 512 或 8192 token)超限会截断,长文档需先切块——"查不到"有时是"根本没被完整编码"。

公式或模型

对比学习 InfoNCE 的直觉形式(正样本对相似度要远高于批内负样本):

L = -log( exp(sim(q, d+) / τ) / Σ_i exp(sim(q, d_i) / τ) )
sim 为相似度函数(常为余弦),τ 为温度系数

它解释了为何余弦相似度成为文本嵌入的默认度量:训练目标直接优化了方向一致性。

图示

        "如何退款" ●                    ● "退货流程"
                     ╲                ╱
                      ╲   语义近(近) ╱
   "猫咪照片" ●──────────────────● "猫的图像特征"   ← 跨模态对齐(CLIP)
                      语义远(远)
   同簇 = 同话题;  距离 = 可训练的语义差异代理

实例或案例

用 sentence-transformers 生成向量(伪代码):

from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")   # 512 维
docs = ["发票丢失如何报销", "退货流程说明"]
vecs = model.encode(docs, normalize_embeddings=True)   # 归一化后可用内积

同一批文档换用 3072 维模型后维度改变,原库全部向量作废——这就是 kp-028 把"embedding 选型"列为工程决策的原因。

直观类比

嵌入像给每篇文档发一张多维度的"语义身份证":坐标各维没有单独含义(不是"情感分""长度分"),但整体位置由训练数据里亿万次"谁和谁相似"塑造成型。

常见误区

  1. "维度越高质量一定越好"——质量取决于训练数据与目标,3072 维模型在垂直领域可能输给微调过的 512 维小模型,且成本线性上涨。
  2. "向量可以跨模型混用"——不同模型的坐标系互不相通,混写只会得到噪声。
  3. "嵌入包含原文全部信息"——它是有损压缩:精确数字、型号、生僻专名常被抹平,这是需要 kp-015 词法检索补位的原因。

自测题

  1. 换 embedding 模型后为什么必须重建整库?
  2. 答:不同模型学到的坐标系与度量口径都不同,新旧向量距离不可比;唯一正确做法是全量重嵌入 + 重建索引 + 重算 ground truth。

  3. 长文档直接截断到模型上限有什么风险?
  4. 答:截断点之后的内容从未进入语义空间,相关查询永远漏召回该文档;应先切块再分别嵌入。

  5. 为什么训练目标通常用余弦/归一化内积?
  6. 答:InfoNCE 类对比损失优化的是方向(角度)一致性而非模长,归一化后内积即余弦,与训练目标一致。

与其他知识点的关系

kp-003 定义这些向量之间的"距离"怎么算;kp-028 从工程视角展开模型选型;kp-015 解释嵌入丢失的词法信息如何补回。

延伸阅读

Kusupati et al., "Matryoshka Representation Learning"(NeurIPS 2022)——让一个嵌入向量可按前缀截断降维使用的表示学习范式,现代 embedding 降维的基础。

相关知识点