milvus-logo
LFAI
首页
  • 概念

相似度量

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

下表显示了这些广泛使用的相似度量如何与各种输入数据形式和 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)

两个向量 Embeddings 之间的 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 相似性系数衡量两个样本集之间的相似性,其定义为定义集的交集的卡方除以它们的联合的卡方。它只能应用于有限样本集。

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 计算出的相似度是不同的。

下一步

翻译自DeepL

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?