为什么曼哈顿距离和余弦距离在返回相同文本块的情况下得分不同?

我在进行一个RAG构建的概念验证项目中,使用qdrant数据库和客户端对文档进行嵌入。

我发现当我使用曼哈顿距离来构建向量集合时,得分比使用余弦距离时要高。然而,返回的文本块是相同的。我不明白这是为什么以及如何发生的?我还在学习RAG的相关知识。提前感谢。

用户查询

什么是DoS?

余弦距离

response: [ScoredPoint(id=0, version=10, score=0.17464592, payload={'chunk': "它还包括用于操作、管理和维护(OAM)目的的开销字节。\n光网络单元(ONU)\nONU是用于无源光网络(PON)的设备。它将通过光纤电缆传输的光信号转换为可以由终端用户设备(如计算机和电话)使用的电信号。ONU位于用户所在地,充当光网络与用户本地网络之间的接口。"}, vector=None, shard_key=None)]

曼哈顿距离

response: [ScoredPoint(id=0, version=10, score=103.86209, payload={'chunk': "它还包括用于操作、管理和维护(OAM)目的的开销字节。\n光网络单元(ONU)\nONU是用于无源光网络(PON)的设备。它将通过光纤电缆传输的光信号转换为可以由终端用户设备(如计算机和电话)使用的电信号。ONU位于用户所在地,充当光网络与用户本地网络之间的接口。"}, vector=None, shard_key=None)]

回答:

有许多不同的数学函数可以用来计算两个嵌入向量之间的相似度:

  • 余弦距离,
  • 曼哈顿距离(L1范数),
  • 欧几里得距离(L2范数),
  • 点积,
  • 等等。

每种方法计算相似度的方式不同,其中:

  • 余弦距离测量两个非零向量之间的角度的余弦值。余弦距离对向量的方向敏感,对向量的幅度不那么敏感。

余弦距离

  • 曼哈顿距离测量两个向量对应元素之间的绝对差值。曼哈顿距离对向量的幅度敏感。

曼哈顿距离

  • 欧几里得距离测量两个向量之间的直线距离。

欧几里得距离

  • 点积测量两个向量之间角度的乘积与它们的幅度乘积。

点积

注:所有四张图片的来源

因此,相似度计算的结果是不同的,其中:

  • 余弦距离的范围始终是[0, 2]。
  • 曼哈顿距离的范围始终是[0, ∞)。
  • 欧几里得距离的范围始终是[0, ∞)。
  • 点积的范围始终是(-∞, ∞)。

请参见下表。

度量 范围 解释
余弦距离 [0, 2] 如果向量相同为0,如果向量完全相反为2。
曼哈顿距离 [0, ∞) 如果向量相同为0,随着绝对差值的总和增加而增加。
欧几里得距离 [0, ∞) 如果向量相同为0,随着平方差值的总和增加而增加。
点积 (-∞, ∞) 测量向量的对齐,可以是正数、负数或零,基于向量的方向。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注