Q1032项目实战与企业级真题解析通用与软实力AgentAlpha 社区真题库约 9 分钟更新 2026-09-29

What are the typical distance metrics used for similarity search in vector databases, and why are they chosen

What are the typical distance metrics used for similarity search in vector databases, and why are they chosen

1️⃣ 考察意图

面试官想考察你对向量数据库底层原理的理解深度,而不仅仅是背诵几个距离公式。这题看似基础,但刁钻点在于:为什么选这个度量,而不是那个? 答好了能展示你从“会用”到“懂为什么这么用”的硬实力——包括对 embedding 模型输出特性、数据分布、索引结构(如 HNSW)与度量兼容性的理解。考察类型是“工程取舍 + 系统设计”,需要你给出具体场景下的选择逻辑,而非罗列定义。

2️⃣ 标准答

向量数据库(如 Milvus、Pinecone、Qdrant)中,相似性搜索的核心是计算向量间的距离或相似度。典型度量有四种,选择取决于 embedding 模型、数据特性和任务需求。

  • 余弦相似度(Cosine Similarity)
  • 定义:cos(θ) = (A·B) / (||A|| * ||B||),范围 [-1, 1],越大越相似。
  • 为什么常用:对向量长度不敏感,只关注方向。大部分文本 embedding 模型(如 Sentence-BERT、OpenAI text-embedding-3-small)默认输出未归一化向量,但语义相似度本质是方向匹配(“猫”和“狗”的向量长度可能不同,但方向接近)。
  • 工程取舍:余弦距离 = 1 - 余弦相似度,范围 [0, 2]。在 HNSW 索引中,余弦距离与欧氏距离在归一化后等价(见下文),但直接使用余弦距离需要索引支持非欧氏度量,部分库(如 FAISS)内部会先归一化再算欧氏距离。
  • 实际坑:如果 embedding 模型已经做了 L2 归一化(如 text-embedding-ada-002),余弦相似度等价于内积,此时直接用内积性能更优(避免多余计算)。
  • 欧氏距离(Euclidean Distance / L2)
  • 定义:d = sqrt(Σ(ai - bi)^2),范围 [0, +∞),越小越相似。
  • 为什么选:对向量绝对位置敏感,适合特征尺度一致、长度本身有意义的场景。例如图像 embedding(如 ResNet 输出)中,物体大小或亮度差异会体现在向量长度上,用欧氏距离能捕捉这种差异。
  • 工程取舍:当向量已 L2 归一化时,欧氏距离与余弦距离单调等价(d_euclidean^2 = 2 - 2*cos(θ)),此时用欧氏距离计算更快(FAISS 默认优化 L2)。但未归一化时,欧氏距离会被向量长度主导,导致语义相近但长度不同的向量被误判为不相似。
  • 实际坑:在 RAG 中,如果文档长度差异大(如短标题 vs 长段落),未归一化的欧氏距离会偏向短向量,导致检索偏差。解法:先对 embedding 做 L2 归一化,再使用欧氏距离。
  • 内积(Dot Product / IP)
  • 定义:A·B = Σ(ai * bi),范围 (-∞, +∞),越大越相似。
  • 为什么选:常用于未归一化向量,且向量长度携带信息。例如协同过滤中的矩阵分解(如 SVD),用户和物品的 embedding 长度反映偏好强度;或某些推荐模型(如 YouTube DNN)中,内积直接对应点击率预估的 logit。
  • 工程取舍:内积对向量长度敏感,长度大的向量天然得分高。如果 embedding 模型输出未归一化且长度分布不均,内积会导致“长向量霸权”。解法:在训练时约束 embedding 长度(如 L2 正则化),或在检索后做长度归一化再排序。
  • 实际坑:在 FAISS 中,内积索引(IndexFlatIP)与余弦相似度索引(IndexFlatIP + 归一化)容易混淆。如果模型已归一化,用内积就是余弦相似度;否则需要手动归一化。
  • 曼哈顿距离(Manhattan / L1)
  • 定义:d = Σ|ai - bi|,范围 [0, +∞),越小越相似。
  • 为什么选:对稀疏向量(如 TF-IDF、词袋)效果好,因为 L1 范数对异常值更鲁棒。在高维稀疏场景中,欧氏距离会因平方项放大噪声,而曼哈顿距离更稳定。
  • 工程取舍:在稠密向量(如 DPR)中几乎不用,因为 L1 无法捕捉方向信息,且计算效率低于 L2(无平方根优化)。但在某些生物信息学或基因序列 embedding 中仍有应用。

选择总结:

  • 文本语义搜索(RAG):首选余弦相似度(或归一化后的内积/欧氏距离)。
  • 图像/多模态:欧氏距离(未归一化时)或余弦(归一化后)。
  • 推荐系统:内积(长度有意义时)。
  • 稀疏向量:曼哈顿距离。
  • 索引兼容性:HNSW 支持所有度量,但 FAISS 对 L2 和 IP 有原生优化;余弦距离通常通过归一化 + L2 实现。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从三个层面回答:第一,典型度量包括余弦相似度、欧氏距离、内积和曼哈顿距离,各有适用场景。第二,选择关键看 embedding 模型是否归一化、数据分布和任务需求——文本语义搜索首选余弦,图像用欧氏,推荐用内积。第三,工程上要注意索引兼容性和归一化陷阱,比如 FAISS 中余弦距离通常用归一化 + L2 实现。总结一句:没有万能度量,必须根据 embedding 特性和业务目标做实验验证。”

4️⃣ 高频追问 & 应对

追问 1:如果我的 embedding 模型输出已经是 L2 归一化的,用余弦相似度和欧氏距离有区别吗?

没有本质区别。L2 归一化后,余弦相似度 = 内积,欧氏距离平方 = 2 - 2*余弦相似度,三者单调等价。但性能上有差异:FAISS 对 L2 距离有原生优化(如 IndexFlatL2),计算比余弦距离(需额外归一化步骤)快 10-20%。所以实际中,如果模型已归一化,我会直接用欧氏距离或内积,避免冗余计算。注意:如果模型未归一化但你想用余弦,必须在检索前手动做 L2 归一化,否则结果错误。

追问 2:在 RAG 中,为什么余弦相似度比欧氏距离更常用?能举个反例吗?

因为文本 embedding 的向量长度通常与文档长度正相关(长文档的向量范数更大)。用欧氏距离时,一个长文档和一个短文档即使语义相似,也会因长度差异被判定为不相似。例如,查询“苹果公司”与文档“Apple Inc. 是一家科技公司”(长)的欧氏距离可能大于与“苹果”(短)的距离,尽管前者语义更相关。余弦相似度只关注方向,能消除长度干扰。但注意:如果 embedding 模型已经做了长度归一化(如某些 Sentence-BERT 变体),欧氏距离也适用,此时需要实验验证。

追问 3:你提到了 HNSW 索引,它对不同度量有什么影响?

HNSW 本身是图结构,不依赖具体度量,但构建时需指定距离函数。不同度量会影响图的邻居选择策略:余弦距离下,HNSW 倾向于连接方向相近的节点;欧氏距离下,连接绝对位置相近的节点。性能上,HNSW 对 L2 和 IP 有优化(如 FAISS 实现),对余弦距离需要额外归一化步骤,导致构建和搜索速度略慢(约 5-10%)。实际中,如果数据量超过 100 万,建议用归一化 + L2 替代余弦,以利用 FAISS 的底层优化。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说“余弦相似度范围是 [0, 1],所以比欧氏距离好” → ✅ 余弦范围是 [-1, 1],且好坏取决于场景,不是范围大小。正确切入:解释余弦对长度不敏感,适合文本语义;欧氏对长度敏感,适合图像。
  • ❌ 说“内积和余弦相似度一样,只是没归一化” → ✅ 内积在未归一化时与余弦不等价,且长度影响大。正确切入:内积适合长度有意义的场景(如推荐),余弦适合方向匹配(如文本)。
  • ❌ 说“曼哈顿距离在向量数据库中几乎不用” → ✅ 在稠密向量中确实少用,但在稀疏向量(如 TF-IDF)或某些生物信息学场景中有效。正确切入:提及 L1 对异常值鲁棒,但计算效率低于 L2。

6️⃣ 简历呼应

  • 如果你有 RAG 项目:从“embedding 模型选择与度量匹配”切入,举例你如何用余弦相似度解决文档长度偏差问题,并对比过欧氏距离的 Recall@10 差异(如余弦高 5%)。强调你做过归一化实验。
  • 如果你只做过传统 NLP:用“词向量(Word2Vec)与余弦相似度”类比迁移,说明语义相似度本质是方向匹配。再对比 TF-IDF 稀疏向量场景下曼哈顿距离的适用性,展示跨领域理解。
  • 如果你是校招无项目:聚焦论文复现,如“在 Sentence-BERT 论文中,作者用余弦相似度做语义搜索,我复现时发现未归一化向量用欧氏距离会导致 Recall 下降 15%”。展示你对细节的敏感度。
  • “Distance Metrics in Vector Search: A Practical Guide” (Weaviate Blog)
  • “FAISS: A Library for Efficient Similarity Search” (Facebook AI Research)
  • “Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks” (Reimers & Gurevych, 2019)
  • “HNSW: Hierarchical Navigable Small World Graphs” (Malkov & Yashunin, 2016)
  • “Efficient Estimation of Word Representations in Vector Space” (Mikolov et al., 2013)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。