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

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

下面将详细介绍常用的几种距离度量方法及其适用场景。

1. 欧氏距离(L2)

欧氏距离用于测量两点间的直线距离,适用于数据连续的场景。欧氏距离的计算公式如下:

d L 2 ( a , b ) = ∑ i = 0 n − 1 ( a i − b i ) 2 d_{L2}(a, b) = \sqrt{\sum_{i=0}^{n-1} (a_i - b_i)^2} dL2(a,b)=i=0n1(aibi)2

其中, a = ( a 0 , a 1 , … , a n − 1 ) a = (a_0, a_1, \dots, a_{n-1}) a=(a0,a1,,an1) b = ( b 0 , b 1 , … , b n − 1 ) b = (b_0, b_1, \dots, b_{n-1}) b=(b0,b1,,bn1) 为 n 维欧氏空间中的两点。在 Milvus 中,当选择欧氏距离作为相似度度量时,系统只会计算平方和,以减少计算负担。

2. 内积(IP)

内积(Inner Product, IP)度量定义了两个嵌入之间的相似度,适合需要考虑幅度的场景。内积的计算公式如下:

IP ( X , Y ) = ∑ i = 0 n − 1 X i ⋅ Y i \text{IP}(X, Y) = \sum_{i=0}^{n-1} X_i \cdot Y_i IP(X,Y)=i=0n1XiYi

对于已归一化的数据,内积相当于余弦相似度。假设嵌入 X ′ X' X 是通过对嵌入 X X X 归一化得到的:

X ′ = X ∥ X ∥ X' = \frac{X}{\|X\|} X=XX

则 (X’) 和 (Y’) 的内积相当于计算其余弦相似度。

3. 余弦相似度

余弦相似度衡量的是两向量之间的角度,适用于衡量方向一致性而不关心长度的场景。计算余弦相似度的公式如下:

cosine_similarity ( A , B ) = ∑ i = 0 n − 1 A i ⋅ B i ∑ i = 0 n − 1 A i 2 ⋅ ∑ i = 0 n − 1 B i 2 \text{cosine\_similarity}(A, B) = \frac{\sum_{i=0}^{n-1} A_i \cdot B_i}{\sqrt{\sum_{i=0}^{n-1} A_i^2} \cdot \sqrt{\sum_{i=0}^{n-1} B_i^2}} cosine_similarity(A,B)=i=0n1Ai2 i=0n1Bi2 i=0n1AiBi

余弦相似度的取值范围为 [ − 1 , 1 ] [-1, 1] [1,1],值越大,两个向量之间的夹角越小,相似度越高。

4. 雅卡德距离

雅卡德相似系数用于测量两个样本集的相似性,定义为交集的大小除以并集的大小。其公式为:

Jaccard ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{Jaccard}(A, B) = \frac{|A \cap B|}{|A \cup B|} Jaccard(A,B)=ABAB

雅卡德距离则为 1 − Jaccard ( A , B ) 1 - \text{Jaccard}(A, B) 1Jaccard(A,B),通常用于二进制数据或离散数据的比较。

5. 汉明距离

汉明距离用于衡量两个相同长度的二进制字符串之间的不同位数。其公式如下:

d Hamming ( X , Y ) = ∑ i = 0 n − 1 XOR ( X i , Y i ) d_{\text{Hamming}}(X, Y) = \sum_{i=0}^{n-1} \text{XOR}(X_i, Y_i) dHamming(X,Y)=i=0n1XOR(Xi,Yi)

例如,字符串 “1101 1001” 和 “1001 1101” 的汉明距离为 2。

6. 结构相似性

在化学结构分析中,结构相似性用于判断一个化学结构是否是另一个结构的子结构或上层结构。假设有化学式的二进制表示 (A) 和数据库中的化学式 (B),判断公式如下:

  • 上层结构判断:

superstructure ( A , B ) = { 1 , 若  A  是  B  的上层结构 0 , 否则 \text{superstructure}(A, B) = \begin{cases} 1, & \text{若 } A \text{ 是 } B \text{ 的上层结构} \\ 0, & \text{否则} \end{cases} superstructure(A,B)={1,0, A  B 的上层结构否则

  • 子结构判断:

substructure ( A , B ) = { 1 , 若  A  是  B  的子结构 0 , 否则 \text{substructure}(A, B) = \begin{cases} 1, & \text{若 } A \text{ 是 } B \text{ 的子结构} \\ 0, & \text{否则} \end{cases} substructure(A,B)={1,0, A  B 的子结构否则

结语

在 Milvus 中选择合适的相似度量方式和索引类型,不仅能提升检索效率,还能更好地适应数据的多样性与实际应用场景。


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

相关文章:

  • JWT令牌与微服务
  • More Effective C++之技术Techniques,Idioms,Patterns_条款26-27
  • IIC驱动EEPROM
  • 目标检测——基于yolov8和pyqt的螺栓松动检测系统
  • 原点安全再次入选信通院 2024 大数据“星河”案例
  • springboot项目对数据库密码加解密
  • HarmonyOS 5.0应用开发——用户文件操作
  • git入门教程9:配置Git钩子
  • 线程数组一例
  • 信息学科平台系统构建:Spring Boot框架深度解析
  • Kubernetes中常见的volumes数据卷
  • BES2600WM---HiLink RM56 EVK
  • 基于yolov5的输电线,电缆检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)
  • 视频QoE测量学习笔记(二)
  • Python+pandas读取Excel将表头为键:对应行为值存为字典—再转json
  • el-datepicker此刻按钮点击失效
  • 哈希——哈希表处理哈希冲突的方法
  • Python小游戏20——超级玛丽
  • 微信小程序 - 获取汉字拼音首字母(汉字英文首字母)根据汉字查拼音,实现汉字拼音首字母获取,在小程序上实现汉字的拼音提取首字母!
  • 什么是贪心算法
  • Apache POI—读写Office格式文件
  • HarmonyOS ArkTS Web组件jsbridge
  • Hadoop-002-部署并配置HDFS集群
  • Codeforces Round 981 (Div. 3) (A~F)
  • Java入门10——封装(private)
  • 【Linux】--- 开发工具篇:yum、vim、gcc、g++、gdb、make、makefile