Milvus - 相似度量详解

news/2024/10/30 10:43:41/

在数据分析、分类和聚类任务中,相似度量是核心工具之一,衡量不同向量之间的相似性。选择适当的距离度量不仅提升分类与聚类的准确性,同时可以优化索引性能。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.ppmy.cn/news/1543079.html

相关文章

51单片机快速入门之 步进电机的使用与 ULN2003 2024/10/21

51单片机快速入门之 步进电机的使用与 ULN2003 步进电机相关百科http://步进电机_360百科 https://baike.so.com/doc/656679-695086.html ULN2003相关百科 http://ULN2003_360百科 https://baike.so.com/doc/5356466-5591963.html ULN2003(图片来源于网络): 引脚1:CPU脉冲…

Web大学生网页作业成品——24节气之冬至介绍设计与实现(HTML+CSS)(1个页面)

🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…

HTML入门教程7:HTML样式

一、CSS基础 1. CSS简介 CSS(Cascading Style Sheets)用于描述HTML元素在屏幕、纸张或其他媒体上的显示方式。它可以控制元素的布局、颜色、字体、间距等。 2. CSS的三种应用方式 内联样式:直接在HTML元素的style属性中定义样式。内部样式…

100种算法【Python版】第8篇——群体智能优化算法之人工蜂群算法

本文目录 1 人工蜂群算法1.1 算法原理1.2 核心特点1.3 实现步骤1.4 可以解决的问题2 算法示例说明:复杂函数计算极值2.1 问题描述2.2 人工蜂群的思路2.3 python代码3 算法应用3.1 带有约束的三元函数极值3.1.1 问题描述3.1.2 python代码3.1.3 代码逻辑说明3.2 多产品生产调度整…

回归与分类中的过拟合问题探讨与解决

说明 欠拟合和过拟合是回归和分类问题中可能会遇到的现象。这两概念的解释以及解决的办法我在之前的博文[1]中有过介绍,不过在这篇文章中介绍得比较粗糙,本文想要更系统地对这两个概念进行阐述和实践。也算是对博文[1]的补充和拓展。 Blog 2024.10.29 博…

DRC-20开发指南:新一代区块链代币标准

区块链技术自比特币诞生以来,迅速发展成为全球科技与金融领域的创新中心。随着区块链技术的普及,数字代币作为一种新兴的数字资产类别,逐渐为更多人所熟知。从ERC-20到BRC-20,代币标准的演进一直在推动着区块链生态系统的创新与发…

【从零开始的LeetCode-算法】3211. 生成不含相邻零的二进制字符串

给你一个正整数 n。 如果一个二进制字符串 x 的所有长度为 2 的 子字符串 中包含 至少 一个 "1",则称 x 是一个 有效 字符串。 返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。 示例 1: 输入: n 3 输出&am…

信息输出组件(FITKCompMessageWidget)

在平台开发中,用户界面(UI)的友好性和交互性直接关系到应用程序的用户体验和满意度。一个高效、直观的信息展示机制,不仅能够提升用户的操作效率,还能在关键时刻为用户提供必要的指导和反馈。为了满足这一需求&#xf…