Ch13 RAG
相似度计算 (Similarity Metrics)
概述
相似度计算(Similarity Metrics)是机器学习和信息检索中的基础工具,用于量化两个向量、集合或分布之间的相似程度或距离。在向量检索、聚类、推荐系统和 RAG 等应用中,相似度度量的选择直接影响结果质量。不同的度量方法基于不同的数学假设,适用于不同的数据分布和应用场景。
距离度量 vs 相似度度量
- 距离度量 (Distance):值越小越相似,满足非负性、对称性、三角不等式
- 相似度度量 (Similarity):值越大越相似,通常归一化到 [-1, 1] 或 [0, 1]
主要度量方法详解
1. 欧氏距离 (Euclidean Distance)
最直观的距离度量,对应 L2 范数:
- 优点:直观,满足度量空间所有公理
- 缺点:受量纲影响大,高维空间下距离趋于相似(维度灾难)
- 适用:低维数据、K-Means、KNN
2. 曼哈顿距离 (Manhattan Distance)
对应 L1 范数:
- 优点:对异常值更鲁棒(不平方)
- 缺点:各维度独立计算,忽略相关性
- 适用:稀疏向量、高维离散数据
3. 余弦相似度 (Cosine Similarity)
衡量向量方向的相似性,忽略幅度:
- 优点:不受向量长度影响,适合文本和 Embedding
- 缺点:只考虑方向,不考虑幅度
- 适用:文本相似度、向量检索、RAG、推荐系统
4. 点积相似度 (Dot Product)
未归一化的余弦相似度:
- 优点:计算最简单
- 缺点:受向量长度影响大
- 适用:已归一化 Embedding 的快速检索
5. 杰卡德相似度 (Jaccard Similarity)
用于集合/布尔向量的相似度:
- 优点:适合集合/布尔数据
- 缺点:不适用于连续值
- 适用:集合比较、文本去重、推荐系统
6. 皮尔逊相关系数 (Pearson Correlation)
衡量线性相关程度:
- 优点:对平移和缩放不敏感
- 缺点:只衡量线性关系
- 适用:协同过滤、特征选择
各度量方法对比
| 度量方法 | 公式类型 | 值域 | 对称性 | 三角不等式 | 向量长度敏感 | 高维适用性 | 典型应用 |
|---|---|---|---|---|---|---|---|
| 欧氏距离 | 距离 | [0, +) | 是 | 是 | 是 | 差 | K-Means, KNN |
| 曼哈顿距离 | 距离 | [0, +) | 是 | 是 | 是 | 中 | 稀疏数据 |
| 余弦相似度 | 相似度 | [-1, 1] | 是 | 否 | 否 | 好 | 文本检索、向量搜索 |
| 点积 | 相似度 | (-, +) | 是 | 否 | 是 | 好 | 已归一化向量检索 |
| 杰卡德相似度 | 相似度 | [0, 1] | 是 | 否 | - | - | 集合比较 |
| 皮尔逊相关系数 | 相似度 | [-1, 1] | 是 | 否 | 否 | 中 | 协同过滤 |
| 马氏距离 | 距离 | [0, +) | 是 | 是 | 否(考虑协方差) | 好 | 异常检测 |
| 切比雪夫距离 | 距离 | [0, +) | 是 | 是 | 是 | 差 | 棋盘/网格问题 |
| 闵可夫斯基距离 | 距离 | [0, +) | 是 | 是 | 是 | 差 | 泛化形式 |
选择指南
按数据类型
| 数据类型 | 推荐度量 | 原因 |
|---|---|---|
| 文本 Embedding(BERT, SBERT) | 余弦相似度 | 向量方向代表语义 |
| L2 归一化后的 Embedding | 点积(等价于余弦) | 更快的计算 |
| 图像特征向量 | 欧氏距离 / 余弦相似度 | 取决于特征提取方式 |
| 推荐系统隐向量 | 点积 / 余弦相似度 | 标准做法 |
| 稀疏 one-hot / TF-IDF | 余弦相似度 / 杰卡德 | 稀疏向量适用 |
| 异常检测 | 马氏距离 / 欧氏距离 | 需考虑特征分布 |
| 时间序列 | DTW (动态时间规整) | 处理时间偏移 |
在 RAG 中的应用
RAG 系统的检索阶段通常使用余弦相似度或点积来匹配查询向量与文档向量:
# 典型 RAG 检索的相似度计算
similarity = cosine_similarity(query_embedding, document_embedding)
# 或使用点积(如果向量已 L2 归一化)
similarity = dot_product(query_embedding, document_embedding)
2026 年趋势
- 可学习相似度:使用 MLP 或注意力机制学习输入自适应的相似度函数
- 多向量相似度:ColBERT 式的 token-level 交互,介于单向量和 Cross-Encoder 之间
- 非线性相似度:核方法在向量检索中的应用
- 混合度量:组合多种相似度度量的加权结果
相关笔记
- Embedding (嵌入 / 向量表示) - 向量表示与相似度计算的关系
- Bi-Encoder (双塔模型/双编码器) - 双编码器中的相似度计算
- Cross-Encoder (交叉编码器) - 全交互式相似度打分
- 对比学习 (Contrastive Learning) - 对比学习中的相似度度量
来源
- Manning, Raghavan & Schutze (2008) - “Introduction to Information Retrieval” Chapter 6: https://nlp.stanford.edu/IR-book/
- Aggarwal (2016) - “Recommender Systems” Chapter 2: Neighborhood-Based Collaborative Filtering
- Malkov & Yashunin (2018) - “Efficient and Robust Approximate Nearest Neighbor Search Using Hierarchical Navigable Small World Graphs”: https://arxiv.org/abs/1603.09320
- Pinecone 文档 - Similarity Metrics: https://docs.pinecone.io/guides/data/understanding-similarity-metrics