距离计算方式

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

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

数据格式距离计算方式索引类型
浮点型欧氏距离(L2)、内积(IP)FLAT, IVFLAT, IVFSQ8, IVFSQ8H, IVFPQ, RNSG, HNSW
二值型杰卡德距离(Jaccard)、谷本距离(Tanimoto)、汉明距离(Hamming)、超结构(superstructure)(仅 FLAT 支持)、子结构(substructure)(仅 FLAT 支持)FLAT, IVFLAT

欧氏距离(L2)

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

欧氏距离的计算公式为:

euclidean

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

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

内积 (IP)

内积计算两条向量之间的夹角余弦,并返回相应的点积。

内积距离的计算公式为:

ip

假设有 A 和 B 两条向量,则 ||A||||B|| 分别代表 A 和 B 归一化后的值。cosθ 代表 A 与 B 之间的余弦夹角。

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

在向量归一化之后,内积与余弦相似度等价。因此 Milvus 并没有单独提供余弦相似度作为向量距离计算方式。

杰卡德距离

杰卡德相似系数计算数据集之间的相似度,计算方式为:数据集交集的个数和并集个数的比值。计算公式可以表示为:

Jaccard similarity coefficient

杰卡德距离是用来衡量两个数据集差异性的一种指标,被定义为 1 减去杰卡德相似系数。对于二值变量,杰卡德距离等价于谷本系数。

Jaccard distance

杰卡德距离适合字符串相似性度量。

谷本距离

对于二值变量,谷本距离公式可表示为:

tanimoto distance

在 Milvus 中,谷本距离仅支持二值变量。

值域从 0 到正无穷。

对于二值变量,谷本系数等价于杰卡德距离:

tanimoto coefficient

对于二值变量,谷本系数值域为 0 到 +1(+1 的相似度最高)

汉明距离

汉明距离计算二进制字符串之间的距离。两个等长字符串之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。

比如,假设有两条字符串 1101 1001 和 1001 1101。比较时,如果字符相同用 0 表示,如果字符不同则用 1 表示。

11011001 ⊕ 10011101 = 01000100

所以以上两条字符串之间的汉明距离为 2。

超结构

超结构主要用来计算某化学结构与其超结构的相似度。值越小则相似度越大。Milvus 目前只返回距离为 0 的结果。

超结构的公式可表示为:

superstructure

其中

  • 分子式 B 是分子式 A 的超结构。
  • NA 表示分子式 A 的化学指纹中二进制位的数量。
  • NB 表示分子式 B 的化学指纹中二进制位的数量。
  • NAB 表示分子式 A 和 B 的化学指纹中共有的二进制位的数量。

子结构

子结构主要用来计算某化学结构与其子结构的相似度。值越小则相似度越大。Milvus 目前只返回距离为 0 的结果。

子结构的公式可表示为:

substructure

其中

  • 分子式 B 是分子式 A 的子结构。
  • NA 表示分子式 A 的化学指纹中二进制位的数量。
  • NB 表示分子式 B 的化学指纹中二进制位的数量。
  • NAB 表示分子式 A 和 B 的化学指纹中共有的二进制位的数量。