Calendar 第一天

距离度量

向量存储后,我们可以利用它们的空间属性执行最近邻搜索,根据它们在空间中的接近程度检索语义相似的项目。

向量在嵌入空间中的位置仅在嵌入模型已学会编码的范围内反映含义。模型及其训练目标决定了“接近”的含义。


快速经验法则

大多数用户不需要从头开始设计距离度量

  • 如果您使用第三方嵌入模型(OpenAI、Cohere、Hugging Face 等)
    • 使用模型文档中推荐的距离度量(通常是余弦或点积)。
    • 使用该度量创建您的 Qdrant 集合。
  • 如果模型文档未说明使用哪个度量
    • 在 Qdrant 中选择余弦
    • Qdrant 会自动在余弦集合中标准化您的向量。一旦向量经过 L2 归一化,余弦、点积和欧几里德距离对于固定查询会给出相同的排名,这使得余弦在您不确定时成为一个安全的默认值。

本页的其余部分在您训练自己的嵌入模型或处理手动制作的数值特征时最有用。

余弦相似度

  • 常见用例:NLP 嵌入、语义搜索、文档检索。
  • 焦点:方向(定向)。忽略幅度。

余弦相似度测量两个向量之间的角度相似度。它关注向量是否指向同一方向,而不是它们的长度。这与许多文本嵌入很好地吻合,其中角度编码含义,而长度不那么重要。

公式

$$\cos(\theta) = \frac{A \cdot B}{|A| |B|}$$

其中A · B是向量AB的点积,||A||||B||是它们的幅度(范数)。

分数解释

分数含义
1相同方向
0正交向量
-1相反方向
# Example: Cosine similarity in Qdrant
from qdrant_client.models import Distance, VectorParams

vectors_config = VectorParams(
    size=384,
    distance=Distance.COSINE
)

点积相似度

  • 常见用例:推荐系统、矩阵分解、排名。
  • 焦点:幅度和方向。

点积相似度通过将两个向量中的相应值相乘然后求和这些乘积来计算。与余弦不同,此度量考虑向量长度。

公式

$$A \cdot B = \sum_{i=1}^{n} A_i B_i$$

关键细微之处:对于范数受控的向量(例如,受模型约束),较高的点积表示更大的相似度。如果您将向量归一化为单位长度(范数 = 1),则点积在数学上等同于余弦相似度。

何时使用

  • 推荐系统:如果用户向量代表偏好,则与项目向量的点积越大通常意味着相关性越高。
  • 非对称搜索:当一个向量(例如,查询)较短而文档向量较长,并且该长度意味着“更多信息”或“更高置信度”时。
# Example: Dot product in Qdrant
vectors_config = VectorParams(
    size=512,
    distance=Distance.DOT
)

欧几里德距离(L2 距离)

  • 常见用例:空间数据、异常检测、聚类。
  • 焦点:点之间的绝对距离。

欧几里德距离计算多维空间中两点之间的直线距离。当向量之间的精确数值差异很重要时,例如在聚类算法(例如 K-Means)中,它经常被使用。

公式

$$d(A, B) = \sqrt{\sum_{i=1}^{n} (A_i - B_i)^2}$$

关键细微之处:欧几里德距离对尺度敏感。如果一个特征的范围是 1-100,而另一个特征的范围是 10,000-500,000,则范围较大的特征将主导距离计算。通常在使用欧几里德距离之前需要标准化或归一化特征。

# Example: Euclidean distance in Qdrant
vectors_config = VectorParams(
    size=2048,
    distance=Distance.EUCLID
)

曼哈顿距离

  • 常见用例:稀疏数据、鲁棒的异常值处理。
  • 焦点:基于网格的距离(绝对差之和)。

曼哈顿距离与欧几里德距离相似,但计算距离时如同沿着网格线(水平和垂直)移动。

公式

$$d(A, B) = \sum_{i=1}^{n} |A_i - B_i|$$

关键细微之处:每个维度线性地贡献距离。单个维度的较大偏差会线性地增加距离,而不是二次地增加距离(如欧几里德距离)。这使得曼哈顿距离对单个维度中的极端异常值不那么敏感。

# Example: Manhattan distance in Qdrant
vectors_config = VectorParams(
    size=128,
    distance=Distance.MANHATTAN
)

总结:何时使用各种度量

如果您正在训练自己的模型或设计自定义特征,请使用以下指南

度量常见应用为什么?
余弦相似度NLP、语义搜索忽略幅度;关注语义含义(方向)。
点积推荐、排名捕捉方向和幅度(重要性/受欢迎程度)。
欧几里德距离空间数据、异常检测测量绝对物理或数值距离。
曼哈顿距离稀疏/表格数据比欧几里德距离对异常值更鲁棒。

关键要点

  1. 查看文档:如果您使用第三方嵌入模型,请使用其文档中建议的度量。
  2. 安全的默认值:如果文档不清楚,请选择余弦。Qdrant 会为余弦集合标准化向量,确保一致的排名行为。
  3. 自定义模型:如果您训练自己的模型,度量定义了“接近度”的衡量方式
    • 余弦关注方向。
    • 欧几里德测量直线距离(对尺度敏感)。
    • 曼哈顿测量网格距离(对异常值鲁棒)。
    • 点积考虑幅度和方向。
  4. 实验:Qdrant 允许您按命名的向量设置距离度量,从而可以轻松地对特定数据进行不同度量的 A/B 测试。

参考:Qdrant 文档中的距离度量