跳到主要内容

相似度度量

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

以下表格展示了这些广泛使用的相似度度量方法如何与各种输入数据形式和Milvus索引相匹配。

度量类型索引类型
  • 欧氏距离 (L2)
  • 内积 (IP)
  • 余弦相似度 (COSINE)
  • FLAT
  • IVF_FLAT
  • IVF_SQ8
  • IVF_PQ
  • GPU_IVF_FLAT
  • GPU_IVF_PQ
  • HNSW
  • DISKANN
度量类型索引类型
  • Jaccard
  • 汉明距离
  • BIN_FLAT
  • BIN_IVF_FLAT
度量类型索引类型
IP
  • SPARSE_INVERTED_INDEX
  • SPARSE_WAND

欧氏距离 (L2)

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

欧氏距离的公式如下:

euclidean

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

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

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

内积 (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 相似系数衡量两个样本集之间的相似度,定义为定义集合的交集的基数除以它们的并集的基数。它只能应用于有限的样本集。

Jaccard similarity coefficient

Jaccard 距离衡量数据集之间的不相似度,通过从 1 中减去 Jaccard 相似系数得到。对于二元变量,Jaccard 距离等同于 Tanimoto 系数。

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是数据库中化学式的二进制表示

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

常见问题解答

Details

如果度量类型为内积,为什么向量搜索的top1结果不是搜索向量本身? 这种情况发生在使用内积作为距离度量时,未对向量进行归一化的情况下。

什么是归一化?为什么需要归一化?

规范化指的是将嵌入(向量)转换为其范数等于1的过程。如果您使用内积来计算嵌入的相似性,则必须对嵌入进行规范化。规范化后,内积等于余弦相似度。

详细信息请参阅维基百科

Details

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

下一步