前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库欧氏距离 余弦相似度 选择 嵌入检索
AIAI 开发向量与嵌入

嵌入向量检索时什么场景应该选欧氏距离而不是余弦相似度?

当嵌入向量未做L2归一化且模长携带语义强度时,欧氏距离更合适;若仅关心方向、向量已归一化,两者在排序上等价。

前端进阶之旅 · 一题精讲更新于 2026.09.05
AI 开发#向量与嵌入#向量检索
先看核心答案
理解线索

度量选择取决于向量空间语义

  1. 余弦相似度只看方向夹角,忽略模长
  2. 欧氏距离综合方向与模长差异
  3. L2归一化将模长压为1,消去长度信息

关键判断:模长是否有语义。若向量已归一化(模长恒为1),欧氏与余弦排序等价;否则需分析模长是否含信息。

核心回答

先记住这个答案

向量检索中,若模型输出未归一化且模长反映信息量或置信度,应选欧氏距离,因为它同时考虑方向和模长。余弦相似度忽略模长,只比较方向,适合语义方向主导、模长无意义的场景,如使用归一化嵌入。实际判断可比较同一查询下检索结果的分布,若模长方差大且有区分性,欧氏更优。

  • 模长携带语义时用欧氏距离
  • 向量已归一化时两者排序一致
  • 需先分析向量分布再定度量

从几何直观理解两者差异

余弦相似度度量的是两个向量在多维空间中的夹角,数学上等于内积除以模长乘积。它把每个向量的模长缩放为单位长度后再比较,因此纯模长差异不会影响相似度。例如向量(1,0)和(10,0)余弦相似度为1,但欧氏距离高达9。

欧氏距离直接计算坐标差的平方和根,既包含方向差异也包含长度差异。当嵌入模型未强制归一化时,模长可能携带文档重要度或信息密度。如某些模型对常见短句输出小模长,长详细内容输出大模长,模长差异就不可忽略。

未归一化的文本嵌入检索

假设某嵌入模型未做L2归一化。语料中短句“猫睡觉”模长0.8,长句“猫在窗台上安静地睡觉并发出咕噜声”模长2.1。现在查询是一个与两向量方向接近的长句描述,模长约为2.0。余弦相似度因仅看方向,认为短句与长句几乎相同;但欧氏距离会因查询与长句模长接近而判定长句更近,从而优先返回内容更丰富的文档。

在假设场景中,模长编码了语义深度,欧氏距离利用了这一信息,理论上可能更匹配用户意图,但实际效果需通过标注数据验证。若确认采用欧氏距离,可直接对非归一化嵌入库建立欧氏索引,无需额外归一化。

不适用与失效条件

如果嵌入模型在训练或推理时已执行了L2归一化(例如某些API默认返回归一化向量),那么所有向量模长均为1,此时欧氏距离与余弦相似度产生完全相同排序,选哪个都行;通常用余弦以便解释相似度分数。强行用欧氏仅引入常数缩放。

另一种失效情形是当模长主要受文档长度而非语义影响(例如某些模型对长文本输出更大模长,但内容冗余),欧氏距离会偏向长文档,导致检索结果失衡。因此应先统计分析模长与语义相关性的关联;若相关性弱,则应改用余弦相似度。

回答前,多想一步

容易答错的地方

认为余弦总是最好
余弦相似度适用于文本分类等方向性任务,但嵌入检索中若模长有信息量,丢弃它会损失召回。例如未归一化模型下,短查询与长相关文档可能方向接近但长度差异大,余弦会漏掉。应根据实际评估选择。
误以为欧氏距离更严格
有观点认为欧氏距离计算精确所以更好,但未注意归一化后两者等价。另一个误区是认为欧氏距离易受维度影响,但高维下所有距离都趋同,关键是模长方差。需要从语义角度理解。
试着用自己的话回答

面试官还会怎么问?

归一化后欧氏距离和余弦相似度排序完全一致吗?

是的。当所有向量模长都为1时,内积等于余弦相似度,而欧氏距离平方=2-2内积,因此单调递减。排序一致,可用余弦便于分数解释。

如何快速判断模型输出是否已归一化?

计算一批向量的L2范数,若所有值近似1则已归一化。若范数分布有明显离散且与文本长度相关,则未归一化,需进一步验证模长与语义关联。

如果同时使用欧氏和余弦得到不同结果,哪个更可靠?

取决于任务语义。若标注数据表明模长能区分信息粒度,欧氏更优;否则余弦对噪声更鲁棒。可用小规模标注集比较两者NDCG。

从一道题,走向一组知识

把知识连起来

向量与嵌入

只归一化查询向量而不归一化文档向量,余弦检索结果会错吗?

同属「向量与嵌入」专题,接着看 查询向量 归一化 文档向量 余弦 在具体场景中的处理方式。

向量与嵌入

为什么有些向量数据库返回的相似度分数不在 0 到 1 之间,如何解释?

同属「向量与嵌入」专题,接着看 相似度分数 范围 余弦 距离 解释 在具体场景中的处理方式。

向量与嵌入

嵌入维度越高检索质量一定越好吗?

同属「向量与嵌入」专题,接着看 嵌入维度 检索质量 维度选择 在具体场景中的处理方式。

参考资料

  • Retrieval - Docs by LangChain

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 从几何直观理解两者差异
  3. 未归一化的文本嵌入检索
  4. 不适用与失效条件
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑