在 Milvus 中,相似度度量方法用于衡量向量之间的相似程度,不同的度量方法有不同的特点、优缺点和适用场景。以下是对 Milvus 中常见相似度度量方法的详细介绍以及对应的 search
参数示例。
L2
)欧氏距离是最常用的距离度量方法之一,它计算的是两个向量在欧几里得空间中的直线距离。对于两个 n n n 维向量 x ⃗ = ( x 1 , x 2 , ⋯ , x n ) \vec{x}=(x_1,x_2,\cdots,x_n) x=(x1,x2,⋯,xn) 和 y ⃗ = ( y 1 , y 2 , ⋯ , y n ) \vec{y}=(y_1,y_2,\cdots,y_n) y=(y1,y2,⋯,yn),欧氏距离的计算公式为:
[d(\vec{x},\vec{y})=\sqrt{\sum_{i = 1}^{n}(x_i - y_i)^2}]
search
参数示例search_params = {
"metric_type": "L2",
"params": {
# 对于 IVF 索引,nprobe 表示搜索时要访问的聚类中心数量
"nprobe": 10
}
}
IP
)内积是两个向量对应元素乘积之和。对于两个 n n n 维向量 x ⃗ = ( x 1 , x 2 , ⋯ , x n ) \vec{x}=(x_1,x_2,\cdots,x_n) x=(x1,x2,⋯,xn) 和 y ⃗ = ( y 1 , y 2 , ⋯ , y n ) \vec{y}=(y_1,y_2,\cdots,y_n) y=(y1,y2,⋯,yn),内积的计算公式为:
[\vec{x}\cdot\vec{y}=\sum_{i = 1}^{n}x_iy_i]
search
参数示例search_params = {
"metric_type": "IP",
"params": {
# 对于 HNSW 索引,ef 表示搜索时的动态访问列表大小
"ef": 20
}
}
COSINE
)余弦相似度通过计算两个向量的夹角余弦值来衡量它们的相似性。它将向量的长度归一化,只考虑向量的方向。对于两个非零向量 x ⃗ \vec{x} x 和 y ⃗ \vec{y} y,余弦相似度的计算公式为:
[cos(\theta)=\frac{\vec{x}\cdot\vec{y}}{|\vec{x}||\vec{y}|}]
其中, ∥ x ⃗ ∥ \|\vec{x}\| ∥x∥ 和 ∥ y ⃗ ∥ \|\vec{y}\| ∥y∥ 分别是向量 x ⃗ \vec{x} x 和 y ⃗ \vec{y} y 的模。
search
参数示例search_params = {
"metric_type": "COSINE",
"params": {
# 对于 ANNOY 索引,search_k 表示搜索时访问的节点数量
"search_k": 100
}
}
HAMMING
)Hamming 距离主要用于二进制向量,它计算的是两个二进制向量中对应位不同的位数。例如,对于二进制向量 x ⃗ = ( 0 , 1 , 0 , 1 ) \vec{x}=(0,1,0,1) x=(0,1,0,1) 和 y ⃗ = ( 1 , 1 , 0 , 0 ) \vec{y}=(1,1,0,0) y=(1,1,0,0),它们的 Hamming 距离为 2。
search
参数示例search_params = {
"metric_type": "HAMMING",
"params": {}
}
JACCARD
)Jaccard 距离用于衡量两个集合之间的不相似性,它是 Jaccard 相似度的补集。对于两个集合 A A A 和 B B B,Jaccard 相似度的计算公式为:
[J(A,B)=\frac{|A\cap B|}{|A\cup B|}]
Jaccard 距离的计算公式为:
[d_J(A,B)=1 - J(A,B)]
search
参数示例search_params = {
"metric_type": "JACCARD",
"params": {}
}
综上所述,在选择相似度度量方法时,需要根据数据的特点和具体的应用场景来进行综合考虑。不同的度量方法在不同的场景下可能会有不同的表现,合理选择度量方法可以提高向量搜索的准确性和效率。