当前位置: 首页 > article >正文

Milvus 中常见相似度度量方法

在 Milvus 中,相似度度量方法用于衡量向量之间的相似程度,不同的度量方法有不同的特点、优缺点和适用场景。以下是对 Milvus 中常见相似度度量方法的详细介绍以及对应的 search 参数示例。

1. 欧氏距离(L2 Distance,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  
    }
}

2. 内积(Inner Product,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  
    }
}

3. 余弦相似度(Cosine Similarity,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  
    }
}

4. Hamming 距离(Hamming Distance,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。

优点
  • 计算简单:Hamming 距离的计算只需要比较二进制位,计算复杂度较低。
  • 适用于二进制数据:在处理二进制编码的向量时,Hamming 距离是一种非常合适的度量方法。
缺点
  • 只适用于二进制向量:对于非二进制向量,Hamming 距离无法使用。
适用场景
  • 哈希算法和二进制编码数据:例如在图像检索中,使用哈希算法将图像特征编码为二进制向量,然后使用 Hamming 距离进行快速匹配。
search 参数示例
search_params = {
    "metric_type": "HAMMING",
    "params": {}
}

5. Jaccard 距离(Jaccard Distance,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)]

优点
  • 适用于集合数据:Jaccard 距离能够很好地处理集合数据,反映集合之间的重叠程度。
缺点
  • 对集合的大小和元素分布敏感:Jaccard 距离的结果可能会受到集合大小和元素分布的影响。
适用场景
  • 文本分类和聚类:在文本处理中,可以将文本表示为词的集合,然后使用 Jaccard 距离进行文本的分类和聚类。
  • 社交网络分析:用于分析用户之间的兴趣相似度,例如比较用户关注的话题集合。
search 参数示例
search_params = {
    "metric_type": "JACCARD",
    "params": {}
}

综上所述,在选择相似度度量方法时,需要根据数据的特点和具体的应用场景来进行综合考虑。不同的度量方法在不同的场景下可能会有不同的表现,合理选择度量方法可以提高向量搜索的准确性和效率。


http://www.kler.cn/a/586207.html

相关文章:

  • 考研复习,主动学习”与“被动接收”的结合之道
  • Android自动化测试工具
  • 高级java每日一道面试题-2025年2月26日-框架篇[Mybatis篇]-Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式 ?
  • linux 下 ohmyzsh,miniconda 全局安装
  • 本地化语音识别CapsWriter结合内网穿透远程会议录音秒变文字稿
  • Java高频面试之集合-11
  • Day08 实例:3个网站实例探究算法对于密文加密的影响
  • Kafka 消费者组的重平衡
  • 深度学习优化-Gradient Checkpointing
  • ORACLE 19.8版本遭遇ORA-600 [kqrHashTableRemove: X lock].宕机的问题分析
  • CSS:不设定高度的情况,如何让flex下的两个元素的高度一致
  • 历次科技泡沫对人工智能发展的启示与规避措施
  • Python----计算机视觉处理(opencv:图片灰度化)
  • Unity屏幕适配——立项时设置
  • Python使用FastAPI结合Word2vec来向量化200维的语言向量数值
  • 缓存使用的具体场景有哪些?缓存的一致性问题如何解决?缓存使用常见问题有哪些?
  • 蓝思科技冲刺港股上市,双重上市的意欲何为?
  • TI的Doppler-Azimuth架构(TI文档)
  • 山东省新一代信息技术创新应用大赛-计算机网络管理赛项(样题)
  • LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析