Skip to content

Embedding(向量嵌入)

一句话

把文字变成一串固定长度的数字(向量)。 意思相近的文字,向量也相近。

核心直觉

「苹果」 → [0.12, -0.34, 0.78, ..., 0.05]  (1024 个数字)
「香蕉」 → [0.15, -0.31, 0.75, ..., 0.08]  ← 和「苹果」很接近
「汽车」 → [-0.52, 0.41, -0.23, ..., 0.67] ← 和「苹果」差很远

向量之间的夹角(余弦相似度)代表了语义距离。夹角越小 = 意思越近。

在 RAG 中的角色

文档 → Embedding 模型 → 向量 → 存入 Milvus
问题 → Embedding 模型 → 向量 → Milvus 相似度搜索 → 返回最相近的文档片段

Embedding 是 语义检索 的核心——它不依赖关键词匹配,「汽车」和「轿车」虽然字不同,但向量很近。

应用场景

场景说明
语义搜索搜「怎么部署」能命中「上线流程」、「发布指南」
文本聚类把相似文档自动归类——不需要人工打标签
推荐系统「看过这篇的人也看了」= 找向量最近的 N 个文档
异常检测和正常模式的向量距离突变 → 可能是异常

两个关键约束

  1. 维度必须一致:写入和查询必须用同一个 embedding 模型,否则坐标系不同,结果乱套
  2. 模型有上下文上限:超长文本需要先切块再 embedding

横向对比:Embedding vs BM25

EmbeddingBM25
匹配依据语义相似度关键词命中
冷门术语⚠️ 可能偏移✅ 精准
同义表达✅ 「车」≈「轿车」❌ 不同词=不匹配
支持语言训练时覆盖任何(完全靠词)
可解释性低(「为什么觉得相关?」很难说清)高(「因为都包含 LangGraph」)
存储格式浮点数组(高维)倒排索引(紧凑)

优缺点

优点: 理解语义而非字面,跨语言/同义词天然支持,适用面广 缺点: 专有名词/编码可能漂移、不可解释、依赖模型质量、向量库存储成本高

如何选择

当用户可能用「不同的话问同一个意思」——用 Embedding。当用户会搜具体的编号/术语/代码——用 BM25。生产环境:两个都用。

小结

Embedding 是把人类语言翻译成数学语言的那座桥。理解它不需要懂微积分,只需要记住一个直觉:向量离得近 ≈ 意思差不多。在这个直觉上,整个语义搜索体系就通了。

下一步

  • 混合检索 — Embedding 语义 + BM25 关键词双路召回
  • Rerank — 粗召回后精排
  • HNSW — Embedding 向量的高效检索算法