milvus-logo
LFAI
首页
  • 概念

相似度量

在 Milvus 中,相似度量用于衡量向量之间的相似性。选择一个好的距离度量有助于显著提高分类和聚类性能。

下表显示了这些广泛使用的相似度量如何与各种输入数据形式和 Milvus 指数相匹配。

度量类型 索引类型
  • 欧氏距离 (L2)
  • 内积 (IP)
  • 余弦相似度 (COSINE)
  • 平面
  • IVF_FLAT
  • IVF_SQ8
  • IVF_PQ
  • GPU_IVF_FLAT
  • GPU_IVF_PQ
  • HNSW
  • DISKANN
度量类型 索引类型
  • 雅卡德
  • 汉明
  • BIN_FLAT
  • BIN_IVF_FLAT
度量类型 索引类型
IP
  • 稀疏反转索引
  • SPARSE_WAND

欧氏距离(L2)

从本质上讲,欧氏距离测量的是连接两点的线段的长度。

欧氏距离的计算公式如下:

euclidean 欧几里得

其中a= (a0,a1,...,an-1) 和b= (b0,b0,...,bn-1) 是 n 维欧几里得空间中的两点。

这是最常用的距离度量,在数据连续时非常有用。

当选择欧氏距离作为距离度量时,Milvus 只在应用平方根之前计算数值。

内积(IP)

两个嵌入式之间的 IP 距离定义如下:

ip IP

如果需要比较非标准化数据,或者需要考虑幅度和角度,IP 会更有用。

如果对归一化的嵌入式应用 IP 距离度量,其结果相当于计算嵌入式之间的余弦相似度。

假设 X' 是由嵌入 X 归一化而来:

normalize 归一化

两个嵌入式之间的相关性如下:

normalization 归一化

余弦相似度

余弦相似度使用两组向量之间角度的余弦来衡量它们的相似程度。你可以把两组向量看成是从同一个原点([0,0,...])出发但指向不同方向的两条线段。

要计算两组向量A = (a0,a1,. .. ,an-1)B = (b0,b1,...,bn-1) 之间的余弦相似度,请使用下面的公式:

cosine_similarity 余弦相似度

余弦相似度始终位于区间[-1, 1]。例如,两个正比向量的余弦相似度为1,两个正交向量的余弦相似度为0,两个相反向量的余弦相似度为-1。余弦越大,两个向量之间的夹角越小,说明这两个向量之间的相似度越高。

用 1 减去它们的余弦相似度,就可以得到两个向量之间的余弦距离。

雅卡德距离

杰卡德相似系数用于测量两个样本集之间的相似性,其定义是:定义集的交集的卡入度除以它们的结合的卡入度。它只能应用于有限样本集。

Jaccard similarity coefficient 杰卡德相似系数

雅卡距离测量数据集之间的不相似性,通过从 1 减去雅卡相似系数得到。对于二进制变量,雅卡距离等同于谷本系数。

Jaccard distance 雅卡距离

汉明距离

汉明距离测量二进制数据字符串。两个长度相等的字符串之间的距离是比特不同的比特位置数。

例如,假设有两个字符串:1101 1001 和 1001 1101。

11011001 ⊕ 10011101 = 01000100.由于其中包含两个 1,所以汉明距离 d (11011001, 10011101) = 2。

结构相似性

当一种化学结构作为更大化学结构的一部分出现时,前者称为子结构,后者称为上结构。例如,乙醇是乙酸的子结构,乙酸是乙醇的上结构。

结构相似性用于确定两个化学式是否相似,即其中一个化学式是另一个化学式的上层 结构或下层结构。

要确定 A 是否是 B 的上结构,请使用下式:

superstructure 上层建筑

其中

  • A 是要检索的化学式的二进制表示形式
  • B 是数据库中化学式的二进制表示形式

一旦返回0A就不是B 的上层结构。否则,结果正好相反。

要确定 A 是否是 B 的子结构,请使用下面的公式:

substructure 子结构

其中

  • A 是要检索的化学式的二进制表示形式
  • B 是数据库中化学式的二进制表示形式

一旦返回0 ,则A不是B 的子结构。否则,结果正好相反。

常见问题

如果度量类型是内积,为什么向量搜索的 top1 结果不是搜索向量本身?如果使用内积作为距离度量时没有对向量进行归一化处理,就会出现这种情况。
什么是归一化?为什么需要归一化?

归一化指的是转换嵌入(向量)使其法向量等于 1 的过程。如果使用内积计算嵌入相似度,就必须对嵌入进行归一化处理。归一化后,内积等于余弦相似度。

更多信息,请参阅维基百科

为什么使用欧氏距离 (L2) 和内积 (IP) 作为距离度量会得到不同的结果?检查向量是否归一化。如果没有,则需要先对向量进行归一化处理。从理论上讲,如果向量没有归一化,用 L2 计算出的相似度与用 IP 计算出的相似度是不同的。

下一步

翻译自DeepLogo

反馈

此页对您是否有帮助?