我在进行一个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,随着平方差值的总和增加而增加。 |
点积 | (-∞, ∞) | 测量向量的对齐,可以是正数、负数或零,基于向量的方向。 |