Skip to content

5.1.1 什么是 Embedding? ​

先给结论:Embedding 可以先理解成一种“把内容表示成可比较向量”的方法。它的重点不在于把文字变成数字,而在于让系统能用距离、相似度这类方式比较语义接近程度。

所以如果只把 Embedding 理解成“文本转数字”,你会知道它做了什么,但还不知道它为什么有用。

为什么需要这种表示 ​

计算机并不像人一样天然理解:

  • “退款规则”和“退货政策”很接近
  • “如何取消订阅”和“怎么关闭自动续费”可能在问同一件事

如果只靠字面匹配,系统往往只能处理:

  • 词完全一样
  • 术语刚好命中
  • 句子结构变化不大

而 Embedding 试图解决的,就是把一段文本、一个问题或一个查询,表示成一种更适合比较语义关系的形式。

为什么不能只停留在“文本转数字” ​

因为“转成数字”本身没有意义。

真正有意义的是:

  • 语义相近的内容,在向量空间里通常更接近
  • 语义差得很远的内容,在向量空间里通常更远

这意味着系统后面可以做这样的事:

  • 把用户问题也转成向量
  • 和知识库里的向量做相似度比较
  • 找出更可能相关的内容

也就是说,Embedding 真正提供的是一种“可比较语义表示”,而不是一串数字本身。

可以先把它粗略理解成什么 ​

如果只讲最小理解,你可以先把 Embedding 看成:

  • 输入:一段文本、一个问题、一条句子
  • 输出:一个固定长度的向量
  • 目标:让相近语义在空间里尽量靠近

一个最小示意可以写成这样:

python
texts = [
    "定制类商品不支持无理由退货。",
    "定制商品不能七天无理由退货。",
    "如何修改收货地址?"
]

vectors = [embed(text) for text in texts]

这里真正重要的不是 vectors 里有多少维,而是:

  • 前两句语义接近,后面通常应该更靠近
  • 第三句主题不同,后面通常应该更远

Embedding 和“理解文本”不是一回事 ​

这里很容易有一个误解:

  • 既然 Embedding 能表达语义,那它是不是已经“理解”了文本

更稳的说法是:

  • 它提供了一种压缩后的语义表示,方便检索比较

但它不是完整理解,也不是推理,更不是最终答案。

这也是为什么:

  • 有了 embedding,不代表检索一定正确
  • 有了语义相似,不代表业务边界一定正确
  • 有了向量接近,不代表回答就一定可用

它和 RAG 的关系是什么 ​

RAG 里最常见的一步是:

  1. 把知识块转成向量
  2. 把用户问题也转成向量
  3. 在向量空间里找接近的内容

所以在这一层,Embedding 更像:

  • 检索输入的编码器
  • 召回候选的语义表示基础

而不是直接负责:

  • 过滤权限
  • 控制版本
  • 组织最终回答

这些事情后面还需要 metadata、过滤、重排和生成阶段一起完成。

一个常见误区 ​

很多人会把 Embedding 想成:

  • 一个万能语义理解器

这通常会带来过高预期。

更实际的理解是:

  • 它很擅长把“说法不同但意思接近”的内容拉近
  • 但它并不天然擅长处理所有精确编号、术语边界和权限控制问题

这也是后面 BM25、metadata filter 和混合检索仍然重要的原因。

一句话总结 ​

Embedding 是一种把文本表示成可比较向量的方法,重点不在“变成数字”,而在“让系统可以比较语义接近程度”。它是语义检索的重要基础,但不是完整检索系统的全部。