距离计算方式

Milvus 基于不同的距离计算方式比较向量间的距离。选择合适的距离计算方式能极大地提高数据分类和聚类性能。

以下表格列出了 Milvus 目前支持的距离计算方式与数据格式、索引类型之间的兼容关系。

距离计算方式 索引类型
欧氏距离 (L2)
  • FLAT
  • IVF_FLAT
  • IVF_SQ8
  • IVF_SQ8H
  • IVF_PQ
  • RNSG
  • HNSW
内积 (IP)

欧氏距离(L2)

欧氏距离计算的是两点之间最短的直线距离。

欧氏距离的计算公式为:

euclidean

其中 a = (a1, a2,..., an) 和 b = (b1, b2,..., bn) 是 n 维欧氏空间中的两个点。

欧氏距离是最常用的距离计算方式之一,应用广泛,适合数据完整,数据量纲统一的场景。

内积 (IP)

两条向量内积距离的计算公式为:

ip

假设有 A 和 B 两条向量,则 ||A||||B|| 分别代表 A 和 B 归一化后的值。

内积更适合计算向量的方向而不是大小。

如需使用点积计算向量相似度,则必须对向量作归一化处理。处理后点积与余弦相似度等价。

假设 X' 是向量 X 的归一化向量:

normalize

两者之间的关系为:

normalization

常见问题

为什么向量距离计算方式是内积时,搜索出来的 top1 不是目标向量本身? 向量距离计算方式用内积时,如果向量未归一化,会出现这样的情况。
什么是归一化?Milvus 中为什么有时候需要归一化?

归一化指的是通过数学变换将向量的模长变为 1 的过程。如需使用点积计算向量相似度,则必须对向量作归一化处理。处理后点积与余弦相似度等价。

可参阅文章 向量搜索的简明数学基础

为什么欧氏距离和内积在计算向量相似度时的结果不一致? 如果欧氏距离和内积返回不一致的结果,需要检查数据是否已经归一化。如果没有,请先对数据进行归一化。理论上可以证明,对于未归一化的数据,欧氏距离和内积的结果是不一致的。
编辑
© 2019 - 2020 Milvus. All rights reserved.