相似性度量
在 Milvus 中,相似性度量用于衡量向量之间的相似性。选择一个好的距离度量方法能够显着提高分类和聚类性能。
以下表格展示了这些常用的相似性度量方法与各种输入数据形式和 Milvus 索引的对应关系。
相似性度量方法 | 索引类型 |
---|---|
欧几里得距离(L2) | FLAT IVF_FLAT IVF_SQ8 IVF_PQ GPU_IVF_FLAT GPU_IVF_PQ HNSW DISKANN |
内积(IP) | |
余弦相似度 |
距离度量方法 | 索引类型 |
---|---|
Jaccard | BIN_FLAT BIN_IVF_FLAT |
Hamming |
欧几里得距离(L2)
欧几里得距离本质上衡量了连接两个点的线段的长度。
欧几里得距离的公式如下:
其中 a = (a 0 , a 1 ,..., a n-1 ) 和 b = (b 0 , b 1 ,..., b n-1 ) 是 n 维欧几里得空间中的两个点。
这是最常用的距离度量方法,在数据连续时非常有用。
内积(IP)
两个嵌入向量之间的内积距离定义如下:
如果你需要比较非归一化的数据或关心其幅度和角度,内积距离更为有用。
假设 X'是从嵌入向量 X 归一化得到的:
两个嵌入向量之间的相关性如下:
余弦相似度
Cosine 相似度使用两组向量之间的夹角的余弦来衡量它们的相似性。你可以将这两组向量想象为起点相同([0,0,...])但指向不同方向的两条线段。
要计算两组向量 A = (a 0 , a 1 ,..., a n-1 ) 和 B = (b 0 , b 1 ,..., b n-1 ) 之间的余弦相似度,请使用以下公式:
余弦相似度始终在区间 [-1, 1] 内。例如,两个成比例的向量的余弦相似度为 1,两个正交的向量的相似度为 0,两个相反的向量的相似度为 -1。余弦越大,两个向量之间的角度越小,表示这两个向量越相似。
通过将其与 1 相减,可以得到两个向量之间的余弦距离。
Jaccard 距离
Jaccard 相似系数测量两个样本集之间的相似性,定义为定义集合的交集的基数除以其并集的基数。它只能应用于有限样本集。
Jaccard 距离测量数据集之间的不相似性,通过从 1 中减去 Jaccard 相似系数来得到。对于二元变量,Jaccard 距离等价于 Tanimoto 系数。
Hamming 距离
Hamming 距离测量二进制数据字符串之间的距离。等长字符串之间的距离是位不同的位置的数量。
例如,假设存在两个字符串,1101 1001 和 1001 1101。
11011001 ⊕ 10011101 = 01000100。由于这包含两个 1,Hamming 距离 d(11011001,10011101)= 2。
结构相似性
当一个化学结构作为另一个化学结构的一部分出现时,前者称为子结构,后者称为超结构。例如,乙醇是乙酸的子结构,乙酸是乙醇的超结构。
结构相似性用于确定两个化学式是否相似,即一个是另一个的超结构或子结构。
要确定 A 是否是 B 的超结构,请使用以下公式:
其中:
- A 是要检索的化学式的二进制表示
- B 是数据库中化学式的二进制表示
一旦返回 0
,A 就不是 B 的超结构。否则,结果相反。
要确定 A 是否是 B 的子结构,请使用以下公式:
其中:
- A 是要检索的化学式的二进制表示
- B 是数据库中化学式的二进制表示
一旦返回 0
,A 就不是 B 的子结构。否则,结果相反。
常见问题解答
下一步
- 了解更多有关于 Milvus 中支持的 index types。