跳转至

P1-13.2 相似度搜索(similarity search)的直觉

Section ID: P1-13.2 Version: v2026.07.20

在 P1-13.1 中,我们已经看过把文本(text)表示成向量(vector)意味着什么。文本一旦变成向量,句子、段落、文档就可以被放到可计算的位置上。

接下来要进入的问题是:在这些向量化的文本里,要找什么? 相似度搜索(similarity search)就是回答这个问题的方法。

相似度搜索,是寻找与问题向量(query vector)接近的文档向量(document vector),并从中挑出最可能相关候选的过程。

这里最重要的点不是“找到标准答案”,而是“找到相关候选”。

Part 1 会在这里先建立 相似度搜索(similarity search)相似度(similarity)距离(distance)余弦相似度(cosine similarity)最近邻(nearest neighbor)top-k 的基本区分。13.1 说明了为什么要先把文本变成向量,这里则说明这些向量是 怎样被比较并筛出候选 的。与 RAG 的连接会在 13.3 继续展开。

这里关注的是相似度搜索的直觉。向量数据库(vector database)、索引(index)、近似最近邻(approximate nearest neighbor, ANN)等实现结构,不会在这里细讲,而会在 P1-13.4 重新连接到“为什么快速搜索需要额外结构”这个实现直觉上。

相似度距离余弦相似度最近邻top-k 是不同的比较标准与结果选择方式。先把它们的作用区分如下:

术语 极简含义 本节中的作用
相似度搜索 寻找与问题接近的向量候选的过程 第 13 章的第二步
相似度 衡量有多相似的标准 比较标准的一条轴
距离 衡量有多远的标准 比较标准的另一条轴
余弦相似度 衡量方向有多相近的标准 文本检索中常见的直觉
最近邻 距离最近的候选 选定搜索结果的基本概念
top-k 取回多个接近候选的方法 决定 RAG 输入候选数量的方法

这里先把 相似度表示相像程度距离表示接近程度top-k 表示一次取多个候选 作为基准线。

图(graph)这种数据结构在实现阶段也会再次出现。但理解 P1-13.2 并不要求先掌握图。图会在 Part 2 的基础恢复中简短处理,并在后续说明向量搜索实现时再连接。

RAG(retrieval-augmented generation) 会在 P1-13.3 说明。P1-13.2 只专注在把搜索结果放进 LLM 之前的阶段,也就是:寻找接近向量

这里也不会讲搜索结果如何被塞进提示词。那个连接会在下一节 RAG 处理;本节重点是先明确 候选检索不等于答案判定

主题 本节要看的问题
相似度(similarity) 我们凭什么说两个向量“相似”?
距离(distance) 我们凭什么说两个向量“接近”或“远离”?
最近邻(nearest neighbor) 如何选出最接近的候选?
局限(limit) 为什么接近的向量并不总是好答案?

寻找相近向量的搜索基准

  • 把相似度搜索(similarity search)理解为寻找接近向量候选的过程。
  • 把相似度(similarity)与距离(distance)理解为比较标准。
  • 把余弦相似度(cosine similarity)理解为方向相近,而不是先记公式。
  • 区分搜索结果是候选(candidate),而不是标准答案。
  • 为进入 P1-13.3 的 RAG 流程做准备。

三个基准

这里不会要求背下相似度公式,而是专注于理解向量搜索到底在比较什么。

基准 为什么重要 本节所需的理解水平
相似度关注的不是完全相同,而是有多接近 这能显示关键词匹配与向量搜索之间的差异。 只要理解成它在寻找相近表达的邻居即可。
距离(distance)与方向(direction)可以一起作为比较视角 这能说明向量比较不同于简单字符串比较。 只要理解成数值空间里既看接近,也看方向相似即可。
相似度高也不代表一定是正确答案 这能防止过度相信搜索结果。 只要理解成“找到相似文档”和“保证正确回答”是两回事即可。

搜索是在寻找与问题接近的候选

先把 P1-13.1 的流程重新拿回来:

问题文本
-> 问题嵌入
-> 与文档片段嵌入比较
-> 选出接近的片段作为候选

例如,假设用户提问:

提示词为什么不能保证事实性?

文档仓库里可能有多个片段。

文档片段 主题
P1-12.1 提示词指定了什么 提示词的作用
P1-12.3 提示词的限制与评估 事实性、依据性、评估
P1-13.1 把文本表示成向量意味着什么 嵌入
P1-9.1 图像识别与表征学习 深度学习扩散

相似度搜索会把问题和各个文档片段都变成向量,然后寻找与问题向量接近的片段。此时,P1-12.3 很自然会成为最接近的候选。

但这仍然不是 答案判定。搜索只是“挑出最可能相关的候选”这一步。

相似度与距离是比较标准

相似度(similarity)是衡量两个向量有多相似的标准。距离(distance)是衡量两个向量彼此有多远的标准。

这里可以先这样理解:

相似度高:
它们处在相似的位置或方向。

距离短:
它们彼此接近。

相似度低或距离长:
它们所处的位置较不相关。

这些说法往往只是用不同表述来说明同一件事。

表达 直觉
相似度高 很像
距离短 很近
最近邻(nearest neighbor) 最近的候选

即使不知道公式,也能理解 P1-13.2 的重点:搜索系统会比较问题向量和文档向量,并按接近程度排序候选。

余弦相似度(cosine similarity)看的是方向是否相近

在文本嵌入搜索里,经常出现的表达就是余弦相似度(cosine similarity)。这里同样不必先背公式。

可以先这样理解:

余弦相似度(cosine similarity):
衡量两个向量是否朝着相似方向的标准

可以把向量想成箭头。

方向相近:
问题与文档更可能指向相近主题

方向不同:
问题与文档更可能指向不同主题

Mikolov 等人的 word2vec 研究中,也会用余弦距离(cosine distance)来寻找向量空间中的接近单词。这里先保留“在向量空间中寻找接近表达”的直觉,不展开公式。

余弦相似度很有用,但不是绝对标准。使用什么嵌入模型、怎样切文本、搜索数据属于什么领域,都会影响结果。

top-k 是决定候选数量的方法

搜索系统通常不会只取最近的一个候选,而是按顺序取回多个候选。这可以称为 top-k 搜索。

top-1:
最接近的 1 个候选

top-3:
最接近的 3 个候选

top-k:
最接近的 k 个候选

例如,问题如下:

理解嵌入是不是一定要懂很多数学?

搜索结果可能是:

排名 候选 原因
1 P1-13.1 把文本表示成向量意味着什么 直接讨论嵌入和数学负担
2 P1-11.1 统计语言模型与嵌入 提供嵌入的历史背景
3 P1-13.2 相似度搜索的直觉 解释向量比较与相似度

如果把 top-k 设得更大,漏掉相关候选的风险会降低,但无关候选也可能一起进来。设得更小,输入更简洁,但可能漏掉必要依据。

top-k 太小:
可能漏掉需要的文档。

top-k 太大:
可能混入无关文档。

接近的向量并不总是好答案

相似度搜索最重要的局限是:

接近的向量只是相关候选,
并不保证它一定是正确答案,
也不保证它的依据质量足够好。

可能出现的问题包括:

问题 说明
表达相似但不是答案 用了相近词语,却不符合当前问题意图
信息过旧 向量接近,也可能不是最新资料
文档本身错误 检索出的依据本身可能有误
切块问题 需要的上下文可能散落在前后片段
领域差异 通用嵌入对专业领域区分可能较弱

例如,对“提示词评估”这个问题,模型评估考试评估教育评估 文档都可能因为词面接近而被排进前列。但当前需要的,其实是 LLM 提示词的限制与审查标准。

因此,相似度搜索之后仍然要重新检查:

搜索结果是否真的贴合当前问题?
来源是否可信?
文档是否足够新?
片段是否保留了足够上下文?

搜索质量会受输入设计影响

相似度搜索不只是嵌入模型的问题,搜索文档是如何准备的也同样重要。

准备因素 影响
切块(chunk)大小 太小会缺上下文,太大会增加噪声
标题与元数据(metadata) 有助于更清楚地暴露候选主题
重复文档 类似候选可能被反复检出
过旧文档 虽能搜到,但可能不适合作为当前答案依据
语言混合 中文、韩文、英文表达差异会影响搜索质量

如果学习文档按中心问题拆分,这种结构通常更利于搜索。因为每个文档片段都更明确地围绕一个问题展开。相反,如果多个章节内容混在同一个文件里,系统就更难准确挑出真正接近问题的部分。

相似度搜索与关键词搜索不同

相似度搜索不同于关键词搜索(keyword search)。

搜索方式 关注什么
关键词搜索(keyword search) 是否出现相同单词或短语?
相似度搜索(similarity search) 向量表示是否彼此接近?

例如,即使某篇文档里没有 幻觉 这个词,但它讲的是 没有依据的生成看起来合理却错误的输出confabulation,它仍有可能在相似度搜索里成为候选。反过来,即使出现了同一个词,只要上下文不同,也未必是好候选。

实际系统中,有时会把关键词搜索与相似度搜索一起使用。但这里不展开两者的详细比较。更重要的是先理解:向量搜索不是按字面匹配,而是按表示空间中的接近程度找候选。

检查清单

  • 能把相似度搜索(similarity search)解释为寻找接近向量候选的过程。
  • 能把相似度(similarity)与距离(distance)解释为比较标准。
  • 能把余弦相似度(cosine similarity)解释为方向是否相近。
  • 能把 top-k 搜索解释为一次取回多个接近候选的方法。
  • 能说明接近的向量并不保证答案或依据质量。
  • 能说明切块(chunk)大小与元数据(metadata)会影响搜索质量。
  • 能说明关键词搜索(keyword search)与相似度搜索(similarity search)之间的差异。
  • 能说明当问题和文档被比较时,什么叫作 接近
  • 能把 RAG 之前的检索阶段拆成 比较向量挑选接近候选再次审查候选

来源与参考资料