Appearance
5.1.1 什么是 Embedding?
先给结论:Embedding 可以先理解成一种“把内容表示成可比较向量”的方法。它的重点不在于把文字变成数字,而在于让系统能用距离、相似度这类方式比较语义接近程度。
所以如果只把 Embedding 理解成“文本转数字”,你会知道它做了什么,但还不知道它为什么有用。
为什么需要这种表示
计算机并不像人一样天然理解:
- “退款规则”和“退货政策”很接近
- “如何取消订阅”和“怎么关闭自动续费”可能在问同一件事
如果只靠字面匹配,系统往往只能处理:
- 词完全一样
- 术语刚好命中
- 句子结构变化不大
而 Embedding 试图解决的,就是把一段文本、一个问题或一个查询,表示成一种更适合比较语义关系的形式。
为什么不能只停留在“文本转数字”
因为“转成数字”本身没有意义。
真正有意义的是:
- 语义相近的内容,在向量空间里通常更接近
- 语义差得很远的内容,在向量空间里通常更远
这意味着系统后面可以做这样的事:
- 把用户问题也转成向量
- 和知识库里的向量做相似度比较
- 找出更可能相关的内容
也就是说,Embedding 真正提供的是一种“可比较语义表示”,而不是一串数字本身。
可以先把它粗略理解成什么
如果只讲最小理解,你可以先把 Embedding 看成:
- 输入:一段文本、一个问题、一条句子
- 输出:一个固定长度的向量
- 目标:让相近语义在空间里尽量靠近
一个最小示意可以写成这样:
python
texts = [
"定制类商品不支持无理由退货。",
"定制商品不能七天无理由退货。",
"如何修改收货地址?"
]
vectors = [embed(text) for text in texts]这里真正重要的不是 vectors 里有多少维,而是:
- 前两句语义接近,后面通常应该更靠近
- 第三句主题不同,后面通常应该更远
Embedding 和“理解文本”不是一回事
这里很容易有一个误解:
- 既然 Embedding 能表达语义,那它是不是已经“理解”了文本
更稳的说法是:
- 它提供了一种压缩后的语义表示,方便检索比较
但它不是完整理解,也不是推理,更不是最终答案。
这也是为什么:
- 有了 embedding,不代表检索一定正确
- 有了语义相似,不代表业务边界一定正确
- 有了向量接近,不代表回答就一定可用
它和 RAG 的关系是什么
RAG 里最常见的一步是:
- 把知识块转成向量
- 把用户问题也转成向量
- 在向量空间里找接近的内容
所以在这一层,Embedding 更像:
- 检索输入的编码器
- 召回候选的语义表示基础
而不是直接负责:
- 过滤权限
- 控制版本
- 组织最终回答
这些事情后面还需要 metadata、过滤、重排和生成阶段一起完成。
一个常见误区
很多人会把 Embedding 想成:
- 一个万能语义理解器
这通常会带来过高预期。
更实际的理解是:
- 它很擅长把“说法不同但意思接近”的内容拉近
- 但它并不天然擅长处理所有精确编号、术语边界和权限控制问题
这也是后面 BM25、metadata filter 和混合检索仍然重要的原因。
一句话总结
Embedding 是一种把文本表示成可比较向量的方法,重点不在“变成数字”,而在“让系统可以比较语义接近程度”。它是语义检索的重要基础,但不是完整检索系统的全部。