跳至主要内容
前往文档
⌘U
Weaviate 数据库

使用 Weaviate 的 APIs 和工具开发 AI 应用

部署

部署、配置和维护 Weaviate 数据库

Weaviate Agents

使用 Weaviate 构建和部署智能代理

Weaviate Cloud

在云端管理和扩展 Weaviate

更多资源

集成
贡献者指南
活动 & 工作坊
Weaviate Academy

需要帮助?

Weaviate Logo询问 AI 助手⌘K
社区论坛

距离度量

可用的距离度量

如果未显式指定,Weaviate 中的默认距离度量是 cosine。它可以在模式的一部分中,在 vectorIndexConfig 字段中设置为以下任何类型 (示例)

比较距离

在所有情况下,较大的距离值表示较低的相似度。相反,较小的距离值表示较高的相似度。

名称描述定义范围示例
cosine余弦(角度)距离。
[参见注 1]
1 - cosine_sim(a,b)0 <= d <= 20:相同的向量

2:相反的向量。
dot基于点积的距离指示。

更准确地说,是负点积。
[参见注 2]
-dot(a,b)-∞ < d < ∞-3:比 -2 更相似

2:比 5 更相似
l2-squared两个向量之间的平方欧几里得距离。sum((a_i - b_i)^2)0 <= d < ∞0:相同的向量
hamming向量在每个维度上的差异数量。sum(|a_i != b_i|)0 <= d < dims0:相同的向量
manhattan沿直角轴测量的两个向量维度的距离。sum(|a_i - b_i|)0 <= d < ∞0:相同的向量

如果您缺少您最喜欢的距离类型并希望将其贡献给 Weaviate,我们很乐意审核您的 PR

附加说明
  1. 如果选择 cosine,所有向量将在读取时归一化为长度 1,并使用点积来计算距离,以提高计算效率。
  2. 点积本身是一种相似度度量,而不是距离度量。因此,Weaviate 返回负点积,以坚持较小的距离值表示更相似的结果,而较大的距离值表示不太相似的结果的直觉。

距离实现和优化

在典型的 Weaviate 用例中,CPU 时间的大部分用于计算向量距离。即使使用近似最近邻索引 - 这会导致更少的计算 - 距离计算的效率对 整体性能 产生重大影响。

Weaviate 使用 SIMD(单指令多数据)指令来处理以下距离度量和架构。可用的优化按所示顺序解析(例如 SVE -> Neon)。

距离arm64amd64
cosinedotl2-squaredSVE 或 NeonSapphire Rapids with AVX512,或 Any with AVX2
hammingmanhattan无 SIMD无 SIMD

如果您喜欢处理汇编编程、SIMD 和向量指令集,我们很乐意收到您对尚未获得 SIMD 特定优化的组合的贡献。

API 中的距离字段

API 中以两种方式公开了 distance

  • 每当涉及 向量搜索 时,距离可以作为结果的一部分显示,例如使用 _additional { distance }
  • 每当涉及 向量搜索 时,距离可以指定为限制条件,例如使用 nearVector({distance: 1.5, vector: ... })

距离与确定性

v1.14 版本之前,API 中仅提供 certainty。确定性的原始想法是将距离分数归一化为 0 <= certainty <= 1 之间的值,其中 1 表示相同的向量,0 表示相反的向量。

然而,这个概念仅适用于 cosine 距离。对于其他距离度量,分数可能是无界的。因此,首选的方法是使用 distance 而不是 certainty

为了保持向后兼容性,当距离为 cosine 时,仍然可以使用 certainty。如果选择任何其他距离,则无法使用 certainty

另请参阅 搜索 API:附加属性(元数据)

更多资源

问题和反馈

如果您有任何问题或反馈,请在 用户论坛 中告诉我们。