站点标志Map the AI
  • 每日短课
  • AI 新闻
  • 学习轨道
  • 主题
  • 我的路径
  • 路线图

相似度检索到底是怎么运作的

余弦相似度、点积,以及为什么「最近」在高维空间里远没有听起来那么强的指示性。

本页目录
  • 余弦相似度
  • 为什么用夹角而不是距离
  • 「最近」在哪里变弱
  • 向量检索彻底失效的地方
  • 实操要点
  • 要点回顾
RAG7 / 17可视化讲解

先读这些

  • 什么是 embedding?
  • 什么是向量数据库?

对各级别的必要程度

各目标级别的推荐分
新手25 分中的 2 分
进阶45 分中的 4 分
专家55 分中的 5 分

主线上的下一篇

什么是 AI agent?

主题

RAG 与检索
密码重置账号找回登录报错计费 FAQ退款政策API 速率限制数据导出

拖动查询点。按余弦相似度(看方向,不看原始距离)选出的最近 3 篇文档会高亮。注意第 3 名和第 4 名之间的区分有多弱——在真实的高维空间里,这个差距还会更小,所以才需要重排序模型来给最后几名排序。

检索建立在一个操作之上:给定一个 query 向量,给每个已存储的向量算一个相似度分数,返回最高的那个。

打分函数本身只是简单算术。它意味着什么、在哪里会误导你,才是值得搞懂的部分。

余弦相似度

比较两个向量,看的是它们之间的夹角,而不是两个端点之间的距离。

算点积,再除以两个向量的模长。结果落在 -1 到 1 之间:

  • 1.0——方向完全相同
  • 0——不相关,互相垂直
  • -1——方向相反

实践中,embedding 的相似度会挤在一个很窄的区间里。不相关的文本常常得 0.1-0.3 而不是 0,相关的文本得 0.7-0.9。真正为负的分数很少见。这一点很重要:**绝对数值无法跨模型解读。**0.82 这个分数单独拿出来说明不了任何事。只有同一个模型空间内部的排序才有意义,所以固定的相似度阈值很脆弱,相对的切分线更好用。

为什么用夹角而不是距离

模长往往编码的是一些无关紧要的东西。词频、文档长度、训练过程留下的痕迹,都会影响向量长度,却不影响含义。

两篇主题相同的文档,其中一篇长三倍,它们理应算作相似。欧氏距离会把它们分开;余弦相似度则认为它们在方向上几乎一致。语义内容住在方向里,所以被测量的就是方向。

归一化向量把这个差别彻底抹平。在建索引时把每个向量缩放到单位长度,余弦相似度就退化成普通的点积——更省算力,而且欧氏距离成了它的单调函数,两者的排序完全一致。大多数系统做归一化,正是因为这个。

「最近」在哪里变弱

高维几何会拆掉你的直觉,而这些影响会以真实的检索问题暴露出来。

**距离被压缩。**随着维度升高,一个点到它最近邻居和最远邻居的距离之比会朝着 1 收拢。所有东西之间的距离都差不多。作为排序,「最近」还成立;作为区分度,它弱了——第 1 名和第 20 名之间的差距可能小到就是噪声。

这就是重排序存在的核心理由:向量检索擅长把几百万条缩到五十条,却不擅长从这五十条里挑出最好的五条。

**近似正交才是常态。**高维空间里两个随机的方向几乎总是接近垂直。正是这一点给了这个空间容量——许多概念可以共存而不互相干扰——也正是为什么只要相似度可测,它就是有意义的,哪怕数值看起来很低。

query 和文档的措辞不一样。「How do I reset my password?」和「Password reset procedure: navigate to Settings」内容相关,结构上却不同。疑问句和陈述句占据的区域有些差别,这种不对称会造成真实的漏检。有些 embedding 模型接受一个前缀来标记这段文本是 query 还是文档,专门训练来弥合这个差距——能用的时候就用上,这是白捡的提升。

向量检索彻底失效的地方

embedding 捕捉的是含义,这意味着它会系统性地漏掉那些与含义无关的东西:

**精确标识符。**错误码 E4021、函数名 parse_header、订单号。稀有标识符的 embedding 几乎是没有意义的——它会碎成一堆子词片段,不带任何语义内容。

否定。「提到 X 的文档」和「没有提到 X 的文档」,embedding 出来的结果非常接近。向量相似度里没有逻辑运算符。

数值和日期约束。「2026 年 3 月之后的报告」是一个过滤条件,不是一个相似度问题。

**稀有专有名词。**和标识符是同一个问题。

这些恰恰都是关键词搜索擅长的。混合检索——把向量分数和关键词分数结合起来——因此稳定地胜过两者中任何一个。标准的融合方法是倒数排名融合:按每条结果在两个列表里各自的名次来合并,而不是试图去调和两套根本不可比的分数。简单、有效,而且完全绕开了分数归一化的问题。

实操要点

**先多取,再收窄。**召回 30-50 条候选,重排序到最好的 3-5 条。先保召回率,再谈精确率。

别用绝对阈值。「只保留 0.8 以上的结果」一旦你换了 embedding 模型就立刻失效。用排序,或者用相对于最高分的阈值。

**去重。**有了分块重叠,几乎一样的文本块会双双命中,双双占用上下文。

**用真实问题来测。**真正重要的指标是:针对真实用户的问题,正确的文本块有没有出现在召回集合里。其他一切都只是代理指标。

要点回顾

  • 余弦相似度衡量的是夹角,因为模长编码的是无关属性,方向才承载含义。
  • 分数只在同一个模型空间内可比——绝对阈值很脆弱。
  • 高维会压缩距离,所以向量检索收窄做得好,最后几名的排序却不可靠。
  • 它在精确标识符、否定和数值约束上失效——而这些正是关键词搜索的强项。
  • 混合检索加排名融合是标准解法;先宽召回,再重排序。

下一篇: 为什么你需要重排序模型

本页目录

  • 余弦相似度
  • 为什么用夹角而不是距离
  • 「最近」在哪里变弱
  • 向量检索彻底失效的地方
  • 实操要点
  • 要点回顾
站点标志Map the AI

AI 不断向前,学习有路可循。

地图
  • 学习轨道
  • 主题
  • 我的路径
  • 路线图
公司
  • 关于我们
  • 联系我们
法律
  • Cookie 政策
  • 隐私政策
  • 服务条款
© 2026 Map the AI。由 NeatSeed LLC 运营。保留所有权利。