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:
备注
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!