Vector Search Metrics 整理

2226 words
11 minutes
Vector Search Metrics 整理

Vector_Search_Metrics#

问题#

Vector_Search_Metrics

标准回答#

向量搜索方法:余弦相似度、欧几里得距离、曼哈顿距离#

向量搜索的核心是衡量两个向量的相似程度,三种常见方法各有侧重:

| 方法 | 原理 | 取值范围 | 适用场景 | |---? —|------|----------|----------| | 余弦相似度 | 计算两个向量的夹角,只看方向不看长度 | -1 到 1(1 表示完全同向) | 文本语义检索、推荐系统 | | 欧几里得距离 | 空间中两点之间的直线距离(勾股定理) | ≥ 0(越小越相似) | 图像检索、人脸识别 | | 曼哈顿距离 | 各维度差值绝对值之和(街区距离) | ≥ 0(越小越相似) | 网格坐标、稀疏高维数据 |

选型逻辑

  • 文本、推荐系统 → 余弦相似度
  • 图像、视频检索 → 欧氏距离
  • 网格坐标、稀疏高维数据 → 曼哈顿距离

扩展知识#

1. 数学公式与计算复杂度#

假设有两个 n 维向量 A 和 B:

  • 余弦相似度cos(θ) = (A·B) / (|A|×|B|),需计算点积和模长。向量数据库(如 Faiss、Milvus)通常先对向量做 L2 归一化,归一化后余弦相似度等价于点积,可省去模长计算。
  • 欧氏距离√Σ(Ai - Bi)²,实际检索时常省略开根号,直接比较平方和以减少计算。
  • 曼哈顿距离Σ|Ai - Bi|,计算最简单,无乘法和开方,在高维稀疏场景效率最高。

2. 不同场景的选型考量#

  • 文本语义检索:Embedding 模型输出的向量长度本身无业务含义(长文本 vs 短文本不影响语义),只关心方向,因此余弦相似度是默认选择。OpenAI 的 text-embedding-ada-002、BGE、M3E 等模型均建议使用余弦相似度。
  • 图像检索:ResNet、CLIP 等视觉模型提取的特征向量,数值大小本身携带像素强度、纹理密度等信息。人脸识别领域(如 ArcFace、CosFace)虽名字带”Cos”,但推理时用欧氏距离效果更稳定。
  • 推荐系统:用户点击、购买等行为天然是 0/1 稀疏向量,曼哈顿距离对个别维度的极端值不敏感,鲁棒性优于欧氏距离。

3. 向量数据库的索引加速#

暴力遍历 1 亿条向量不可行,需建索引:

  • IVF 系列:将向量空间切分成 1000-10000 个聚类中心,查询时只在最近的几个聚类中搜索。
  • HNSW:构建多层图结构,高层稀疏跳跃、低层密集精确(Pinecone、Qdrant 默认使用)。
  • PQ 量化:将向量切分为子空间,每个子空间量化为码本,可压缩 32 倍,精度损失可控。

这些索引算法与距离度量正交,IVF 可搭配余弦、HNSW 可搭配欧氏,只需在建索引和查询时保持一致。

4. 实际踩坑经验#

向量未归一化就用余弦相似度:结果会很诡异。需先对向量做 L2 归一化再存入向量库。 欧氏距离对数值尺度敏感:若某几个维度的数值特别大,会主导距离。建议先做 z-score 标准化,让各维度方差一致。 维度灾难:当维度超过几百维,所有向量之间的距离趋于相等,区分度变差。此时降维或换用近似算法比纠结距离度量更重要。


面试官追问#

Q1:余弦相似度和欧氏距离在归一化向量上是等价的,为什么?#

A:归一化后所有向量模长为 1。欧氏距离平方 |A-B|² = |A|² + |B|² - 2A·B = 2 - 2A·B,而余弦相似度就是 A·B。两者单调递减,排序结果完全一致。因此很多向量库内部会强制归一化,统一用点积计算,还能利用 SIMD 指令加速。

Q2:为什么曼哈顿距离对高维稀疏数据更友好?#

A:稀疏向量大部分维度为 0,有值的维度可能差异很大。欧氏距离会平方放大差异(差 10 → 贡献 100),少数极端维度主导距离;曼哈顿距离只是线性累加(差 10 → 贡献 10),对稀疏数据更稳定。

Q3:实际业务中如何选择距离度量?#

A: 优先看 Embedding 模型的官方推荐(大多数文本模型建议余弦相似度) 如果是自己训练的模型,看训练时 loss 函数用的什么度量,推理时保持一致 拿不准时跑 A/B 测试,用业务指标决定,不要凭感觉猜测

关键点#

  • 向量搜索方法:余弦相似度、欧几里得距离、曼哈顿距离#

向量搜索的核心是衡量两个向量的相似程度,三种常见方法各有侧重:

方法原理取值范围适用场景
余弦相似度计算两个向量的夹角,只看方向不看长度-1 到 1(1 表示完全同向)文本语义检索、推荐系统
欧几里得距离空间中两点之间的直线距离(勾股定理)≥ 0(越小越相似)图像检索、人脸识别
曼哈顿距离各维度差值绝对值之和(街区距离)≥ 0(越小越相似)网格坐标、稀疏高维数据

选型逻辑

  • 文本、推荐系统 → 余弦相似度
  • 图像、视频检索 → 欧氏距离
  • 网格坐标、稀疏高维数据 → 曼哈顿距离

假设有两个 n 维向量 A 和 B:

  • 余弦相似度cos(θ) = (A·B) / (|A|×|B|),需计算点积和模长。

  • 向量数据库(如 Faiss、Milvus)通常先对向量做 L2 归一化,归一化后余弦相似度等价于点积,可省去模长计算。

    • 欧氏距离√Σ(Ai - Bi)²,实际检索时常省略开根号,直接比较平方和以减少计算。
    • 曼哈顿距离Σ|Ai - Bi|,计算最简单,无乘法和开方,在高维稀疏场景效率最高。
  • 2. 不同场景的选型考量#

  • 文本语义检索:Embedding 模型输出的向量长度本身无业务含义(长文本 vs 短文本不影响语义),只关心方向,因此余弦相似度是默认选择。

备注#

  • 本文已做格式统一与噪声清理,保留原始语义。
  • 问题#

Vector_Search_Metrics

向量搜索的核心是衡量两个向量的相似程度,三种常见方法各有侧重:

方法原理取值范围适用场景
余弦相似度计算两个向量的夹角,只看方向不看长度-1 到 1(1 表示完全同向)文本语义检索、推荐系统
欧几里得距离空间中两点之间的直线距离(勾股定理)≥ 0(越小越相似)图像检索、人脸识别
曼哈顿距离各维度差值绝对值之和(街区距离)≥ 0(越小越相似)网格坐标、稀疏高维数据

选型逻辑

  • 文本、推荐系统 → 余弦相似度
  • 图像、视频检索 → 欧氏距离
  • 网格坐标、稀疏高维数据 → 曼哈顿距离

假设有两个 n 维向量 A 和 B:

  • 余弦相似度cos(θ) = (A·B) / (|A|×|B|),需计算点积和模长。向量数据库(如 Faiss、Milvus)通常先对向量做 L2 归一化,归一化后余弦相似度等价于点积,可省去模长计算。

    • 欧氏距离√Σ(Ai - Bi)²,实际检索时常省略开根号,直接比较平方和以减少计算。
    • 曼哈顿距离Σ|Ai - Bi|,计算最简单,无乘法和开方,在高维稀疏场景效率最高。
  • 2. 不同场景的选型考量#

  • 文本语义检索:Embedding 模型输出的向量长度本身无业务含义(长文本 vs 短文本不影响语义),只关心方向,因此余弦相似度是默认选择。OpenAI 的 text-embedding-ada-002、BGE、M3E 等模型均建议使用余弦相似度。

    • 图像检索:ResNet、CLIP 等视觉模型提取的特征向量,数值大小本身携带像素强度、纹理密度等信息。人脸识别领域(如 ArcFace、CosFace)虽名字带”Cos”,但推理时用欧氏距离效果更稳定。
  • 本文已做格式统一与噪声清理,保留原始语义。

  • —|------|----------|----------|

  • | 余弦相似度 | 计算两个向量的夹角,只看方向不看长度 | -1 到 1(1 表示完全同向) | 文本语义检索、推荐系统 |

  • | 欧几里得距离 | 空间中两点之间的直线距离(勾股定理) | ≥ 0(越小越相似) | 图像检索、人脸识别 |

  • | 曼哈顿距离 | 各维度差值绝对值之和(街区距离) | ≥ 0(越小越相似) | 网格坐标、稀疏高维数据 |

    • 文本、推荐系统 → 余弦相似度
  • 本文已做格式统一与噪声清理,保留原始语义。

Share Article

If this article helped you, please share it with others!

Profile Image of the Author
Estars
这条路要走完,才能看到世界的终点,是海纳百川,还是星火燎原。
公告
欢迎来到我的博客!这是一则示例公告。
Music
Cover

Music

No playing

0:00 0:00
No lyrics available
Categories
Tags
Site Statistics
Posts
91
Categories
5
Tags
44
Total Words
374,063
Running Days
0 days
Last Activity
0 days ago

Table of Contents