Milvus向量数据库03-搜索理论

Milvus向量数据库03-搜索理论

1-ANN搜索

通过 k-最近邻(kNN)搜索可以找到一个查询向量的 k 个最近向量。kNN 算法将查询向量与向量空间中的每个向量进行比较,直到出现 k 个完全匹配的结果。尽管 kNN 搜索可以确保准确性,但十分耗时。尤其是数据量大,向量维度高时,耗时更久。

相比之下,近似最近邻(ANN)搜索耗时更短。ANN 算法会预先构建索引。选择不同的索引算法会影响搜索速度、内存使用情况和准确性。各种类型的 ANN 索引算法主要分为 2 种思路:缩小搜索范围和将高维向量空间分解为低维子空间。

缩小搜索范围是指仅在可能性较高的候选项子集中对比查询向量,从而缩短搜索时间。但是可能结果不可避免地会返回不相关的向量。为确定一个向量是否在子集中,需要构建索引结构来对向量进行排序。

通常,有 3 种索引结构:图索引、树索引、哈希索引。

HNSW:图索引算法

  • HNSW:图索引算法链接

Hierarchical Navigable Small World(HNSW)算法通过创建多层接近图(Proximity graph)来索引向量空间。HNSW 算法在每 1 层中,都会在向量(或顶点)之间绘制连接相邻点的边,以形成单层Proximity graph,并最终形成多层图。底层包含所有向量及边。越上面的层,包含的向量和边越少。

创建分层 Proximity graph 后,搜索步骤如下:

  1. 在顶层找到一个向量作为入口点。

  2. 沿着可用的边逐渐移动到最近的向量。

  3. 一旦确定了顶层的最近向量,使用较低层的相同向量作为入口点,在该层中找到其最近邻。

  4. 重复上述步骤,直到找到底层的最近向量。

    Dkj8bpJswoXHzPxBz3hcOHSDnRg

LSH:哈希索引算法

  • LSH:哈希索引算法链接

局部敏感哈希(LSH)算法的基本思想为空间域转换。LSH 算法通过使用各种哈希函数将任意长度的数据映射为固定长度的值作为哈希,将这些哈希收集到哈希桶中,并将已经哈希到相同值的向量标记为候选对。

RRMybZeKQoGgQRx6kSNcvwxsnre

DiskANN:基于 Vamana 图的磁盘索引算法

  • DiskANN:基于 Vamana 图的磁盘索引算法链接

不同于 HNSW 算法构建分层图,Vamana 索引过程相对简单:

  1. 初始化随机图;

  2. 先定位全局质心并确定最近点来找到导航点。使用全局比较以最小化平均搜索半径。

  3. 使用初始化的随机近邻图和从步骤2开始的搜索起点执行近似最近邻搜索。使用搜索路径上的所有点作为候选近邻集,并采用 alpha = 1 的边缘修剪策略以减少搜索半径。

  4. 将 alpha 值调整为 alpha> 1(文献推荐将数值设置为 1.2)后,重复步骤 3 以优化图质量和召回率。

索引准备就绪后,搜索步骤如下:

  1. 加载相关数据,包括查询数据集、PQ 中心点数据、Codebook 数据、搜索起点和索引元数据。

  2. 使用索引数据集执行 cached_beam_search,计算每个点的访问次数,并缓存具有最高访问频率的 num_nodes_to_cache 个点。

  3. 默认情况下执行 WARMUP 操作,使用示例数据集执行 cached_beam_search

  4. 对于给定参数 L,使用查询集执行 cached_beam_search,并输出召回率和QPS等统计信息。查询时间不包括预热和热点数据统计信息。

更多详情,请阅读 《DiskANN: 十亿规模数据集上高召回高 QPS 的 ANNS 单机方案》。


2-相似度类型

在度量向量相似性时,相似度类型发挥着关键作用。选择恰当的相似度类型可以极大地提升分类与聚类的效果。

目前,Zilliz Cloud 支持以下相似度类型:欧氏距离(L2)、内积(IP)、余弦相似度(COSINE)、JACCARD (Beta)HAMMING (Beta)

下表总结了不同字段类型与其对应的相似度类型的映射关系。

| 字段类型                | 维度范围       | 支持的相似度类型       | 默认相似度类型   |
|-----------------------|------------|--------------------|--------------|
| FLOAT_VECTOR          | 2-32,768   | Cosine, L2, IP    | Cosine       |
| FLOAT16_VECTOR (Beta) | 2-32,768   | Cosine, L2, IP    | Cosine       |
| BFLOAT16_VECTOR (Beta)| 2-32,768   | Cosine, L2, IP    | Cosine       |
| SPARSE_FLOAT_VECTOR (Beta) | 无需指定维度 | IP                | IP           |
| BINARY_VECTOR (Beta)  | 8-32,768*8 | HAMMING (Beta), JACCARD (Beta) | HAMMING (Beta) |

下表展示了使用不同的相似度类型,其度量值的特点及取值范围。

相似度类型特点取值范围
L2较小的L2距离表示更高的相似性。[0, ∞)
IP较大的IP距离表示更高的相似性。[-1, 1]
COSINE较大的cosine值表示更高的相似性。[-1, 1]
JACCARD较小的Jaccard距离表示更高的相似性。[0, 1]
HAMMING较小的Hamming距离表示更高的相似性。[0, dim(vector)]

欧氏距离(L2)

  • 欧氏距离(L2)链接

欧氏距离主要是用来计算连接两点的线段的实际长度。

其计算公式如下:

HhIdbxRd7oGoDrxCGh6cBIX9ncf

其中,a = (a0, a1,…, an-1)b = (b0, b1,…, bn-1) 表示 n 维欧氏空间中的两个点。

L2 是最普遍的距离度量方法,在处理连续性数据时尤为有效。

📘说明

在选择 L2 作为度量标准时,Zilliz Cloud 仅计算开方之前的数值。

内积(IP)

  • 内积(IP)链接

两个 Embedding 向量间的 IP 距离可按以下方式定义:

LXkCbWG6IoCXSux5uc9cZn28nnc

当处理未归一化的数据或关注数据的大小和方向时,内积尤为重要。

📘说明

使用 IP 计算 Embedding 向量间的相似度时,须先对 Embedding 向量进行归一化。之后,内积即可等同于余弦相似度。

例如,Embedding 向量 X 归一化为 X’:

两个 Embedding 向量间的关联度如下所示:

余弦相似度(COSINE)

  • 余弦相似度(COSINE)链接

余弦相似度是通过计算两组向量之间的夹角余弦来衡量它们的相似度。可以把这两组向量想象为从同一起点(如 [0,0,…])出发,但朝向不同的线段。

计算两组向量 A = (a0, a1,…, an-1)B = (b0, b1,…, bn-1) 之间的余弦相似度,可使用以下公式:

M6C6b2W8toduLSxfV6ac3ZcDnQh

余弦相似度的值总是介于 [-1, 1] 之间。比如,两个向量的夹角越接近 0 度,余弦相似度越接近 1;两个向量的夹角为 90 度时,其相似度为 0;两个向量的夹角越接近 180 度,两个向量相似度越接近 -1。余弦值越大,表示两向量之间的夹角越小,意味着它们越相似。

通过 1 减去两向量间的余弦相似度,可以得到它们之间的余弦距离。

📘说明

该相似度类型目前还在测试阶段。升级您的集群至 Beta 版即可体验 COSINE 相似度类型。

JACCARD 距离 (Beta)

  • JACCARD 距离 (Beta)链接

JACCARD 相似系数用于衡量两个样本集之间的相似度,其定义是两个集合交集的元素数量除以它们并集的元素数量。该系数仅适用于有限样本集。

JACCARD 距离用于衡量数据集之间的不相似度,其计算方法是 1 减去 JACCARD 相似系数。对于二进制变量,JACCARD 距离等同于 Tanimoto 系数。

📘说明

该相似度类型目前仅适用于已升级到 Beta 版的 Zilliz Cloud 集群。

HAMMING 距离 (Beta)

  • HAMMING 距离 (Beta)链接

HAMMING 距离用于测量二进制数据字符串。两个等长字符串之间的距离是它们在不同比特位上的数量。

例如,假设有两个字符串,1101 1001 和 1001 1101。 11011001 ⊕ 10011101 = 01000100。由于其中有两个 1,因此 HAMMING 距离 d (11011001, 10011101) = 2。

📘说明

该相似度类型目前仅适用于已升级到 Beta 版的 Zilliz Cloud 集群。


3-一致性水平

在分布式数据库中,一致性水平确保在读写操作期间,每个节点或副本都能获取到相同的数据。Zilliz Cloud 提供 3 种一致性级别:Strong、Bounded 和 Eventually。Zilliz Cloud 默认采用的一致性水平为 Bounded。

PACELC 定理:权衡一致性、可用性、时延

  • PACELC 定理:权衡一致性、可用性、时延链接

PACELC 定理是 CAP 定理的延伸,在分布式数据库中,用户需要在可用性和一致性之间做选择,否则,就在延迟和一致性之间做选择。虽然高一致性保证了数据的准确性,但其代价是更长的搜索延时。相反,低一致性保证了更快的搜索速度,但可能会牺牲数据准确性。因此,您需要根据具体的使用案例场景选择合适的一致性水平。

  • 强一致性(Strong)

    强一致性(Strong)是最严格的级别,确保用户始终读取最新版本的数据,提供最高的数据准确性。但是,采用 Strong 等级一致性可能导致搜索延迟增加。

    ETVBbtdQooUhB3xm9aScmWyinvd

    Strong 一致性水平最适用于功能测试和在线金融系统等对于数据准确性有着极高要求的场景。

  • 有限过期一致性(Bounded)

    有限过期一致性(Bounded)顾名思义,允许数据在一小段时间内不一致,但整体而言数据还是一致的。Bounded 能够平衡延时和数据准确性。

    MIF3bSN8yoWbjhxnDL5cDeK4n1g

    Bounded 适用于视频推荐平台等系统,偶尔的数据不一致不会严重影响系统性能。

  • 最终一致性(Eventually)

    最终一致性(Eventually)是最宽松的级别,允许数据不一致,但最终随着时间推移收敛到数据一致的状态。Eventually 不会严格遵照数据读写顺序。

    NErQbWhpVotFHLxHpG2cDbuGnxe

    Eventually 通过牺牲即时一致性来提升搜索性能,因此用于追求搜索速度而非即时数据准确性的场景,如产品评论展示系统等。

利用保证时间戳实现一致性

  • 利用保证时间戳实现一致性链接

Zilliz Cloud 通过保证时间戳(GuaranteeTs)实现不同的一致性水平。保证时间戳主要用于控制查询节点,需要等到 GuaranteeTs 之前的所有都可查看后,才能开始执行搜索或查询。不同一致性级别,GuaranteeTs 值也不同:

  • **强一致性(Strong):**GuaranteeTs 设为系统最新时间戳,QueryNodes 需要等待 ServiceTime 推进到 当前最新时间戳才能执行该 Search 请求。

  • **最终一致性(Eventually):**GuaranteeTs 设为一个特别小的值(比如说设为 1),跳过一致性检查,立刻在当 前已有数据上执行 Search 查询。

  • **有限过期一致性(Bounded):**GuaranteeTs 是一个比系统最新时间稍旧的时间,在可容忍范围内可以立刻执行查询。

如需了解一致性和保证时间戳的实现机制,请阅读本文。


4-Reranking重排序

Zilliz Cloud 通过 hybrid_search() API,实现了 hybrid search 功能,结合了复杂的 reranking 策略,以优化多个 AnnSearchRequest 对象的搜索结果。本文将详细介绍 reranking 机制,阐述其重要性以及在 Milvus 中实施不同 reranking 策略的方法。

Reranking 是 hybrid search 中的一个关键步骤,它整合了基于多个向量字段的检索结果,确保最终输出结果的相关性和准确性。目前,Zilliz Cloud 支持以下 reranking 策略:

WeightedRanker 分数加权平均算法的核心思想是对多个召回路的输出结果的分数进行加权平均计算,以得到一个综合的结果,其中不同召回路的贡献可由预设的权重来决定。例如,在多模态搜索中,文本描述可能被认为比图像中的颜色分布更重要。

from pymilvus import WeightedRanker# Use WeightedRanker to combine results with specified weights
rerank = WeightedRanker(0.8, 0.8, 0.7) 

RRF(Ranked Retrieval Fusion,排序检索融合)是一种常见的检索融合算法,此方法侧重于使用排名信息,将每个系统的排名结果加权并合并,以提高整体检索的相关性和效果。当希望对所有向量字段给予平等考虑,或当字段的相对重要性不确定时,通常采用此策略。


5-知识总结

以下是文章内容要点的思维导图:

graph TDA --> B[ANN搜索]A --> C[相似度类型]A --> D[一致性水平]A --> E[Reranking重排序]B --> B1[k-最近邻(kNN)搜索]B --> B2[近似最近邻(ANN)搜索]B --> B3[索引算法]B --> B4[HNSW:图索引算法]B --> B5[LSH:哈希索引算法]B --> B6[DiskANN:磁盘索引算法]C --> C1[L2]C --> C2[IP]C --> C3[COSINE]C --> C4[JACCARD]C --> C5[HAMMING]D --> D1[一致性水平]D --> D2[PACELC定理]D --> D3[强一致性-Strong]D --> D4[有限过期一致性-Bounded]D --> D5[最终一致性-Eventually]D --> D6[保证时间戳实现一致性]E --> E1[Reranking重排序]E --> E2[hybrid_search API]E --> E3[WeightedRanker]E --> E4[RRF-Ranked Retrieval Fusion]

详细知识点如下:

ANN搜索

  • k-最近邻(kNN)搜索:找到查询向量的 k 个最近向量。
  • 近似最近邻(ANN)搜索:耗时更短,预先构建索引。
  • 索引算法:缩小搜索范围和将高维向量空间分解为低维子空间。
  • HNSW:图索引算法:创建多层接近图。
  • LSH:哈希索引算法:空间域转换。
  • DiskANN:磁盘索引算法:基于 Vamana 图的索引过程。

相似度类型

  • L2:较小的L2距离表示更高的相似性。
  • IP:较大的IP距离表示更高的相似性。
  • COSINE:较大的cosine值表示更高的相似性。
  • JACCARD:较小的Jaccard距离表示更高的相似性。
  • HAMMING:较小的Hamming距离表示更高的相似性。

一致性水平

  • 一致性水平:确保读写操作期间数据一致性。
  • PACELC定理:权衡一致性、可用性、时延。
  • 强一致性(Strong):最严格的级别,确保数据准确性。
  • 有限过期一致性(Bounded):允许数据在一小段时间内不一致。
  • 最终一致性(Eventually):允许数据不一致,最终收敛。
  • 保证时间戳实现一致性:通过保证时间戳实现不同一致性水平。

Reranking重排序

  • Reranking重排序:整合基于多个向量字段的检索结果。
  • hybrid_search API:实现 hybrid search 功能。
  • WeightedRanker:分数加权平均算法。
  • RRF(Ranked Retrieval Fusion):排序检索融合算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/36471.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Error relaunching VirtualBox VM process: 5 启动虚拟机时发生了错误

出现错误 一大早起来发现虚拟机打不开,看了虚拟机日志是正常的,还回了个档都不行。 最后我突然想起之前在哪看到过:“完美游戏平台会导致虚拟机的问题。” 解决方法 于是我把完美游戏卸载了,发现,真的&#xf…

基于Springboot的校园交友网站设计与实现

1.1 管理信息系统概述 管理信息系统是计算机在信息管理领域的一种实用技术。通过运用管理科学、数学和计算机应用的原理及方法,在符合软件工程规范的原则下,形成一套完整的理论和方法体系。是一个以人、计算机和其他外部设备组成的可以进行信息的收集、…

FinalShell找不到窗口问题

原因可能Java程序可能记住了之前的窗口位置 笔记本外接了4K显示器,但是在打开一个用Java写的桌面应用FinalShell时候,经常找不到窗口 1. winTab键,选中FinalShell 也可以直接点一下 聚焦 2.按AltSpace(空格) 放大之后 拖下就好了

重生之我在异世界学编程之C语言:深入结构体篇(下)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言结构体的自引用实现链表一、链表的基…

linux学习day03_linux文件与目录管理

1、相对路径和绝对路径的区别 绝对路径:路径的写法“一定由根目录 / 写起”,例如: /usr/share/doc 这个目录。 相对路径:路径的写法“不是由 / 写起”,例如由 /usr/share/doc 要到 /usr/share/man 下面 时&#xff0…

深入浅出:Gin框架中的测试与Mock

深入浅出:Gin框架中的测试与Mock 引言 在现代软件开发中,编写高质量的代码离不开有效的测试。对于Web应用程序来说,单元测试、集成测试和端到端测试都是确保系统稳定性和可靠性的重要手段。本文将带你深入了解如何在Gin框架中进行测试&…

未来网络技术的新征程:5G、物联网与边缘计算(10/10)

一、5G 网络:引领未来通信新潮流 (一)5G 网络的特点 高速率:5G 依托良好技术架构,提供更高的网络速度,峰值要求不低于 20Gb/s,下载速度最高达 10Gbps。相比 4G 网络,5G 的基站速度…

LDR6500U PD取电协议芯片:高效充电与智能管理的典范

在当今快速发展的电子设备市场中,高效、安全、稳定的充电技术已成为衡量设备性能的重要指标之一。而LDR6500U,作为乐得瑞科技有限公司针对USB PD(Power Delivery)协议及Quick Charge(QC)协议开发的一款高性…

Plugin - 插件开发05_Solon中的插件实现机制

文章目录 Pre概述插件插件扩展机制(Spi)插件扩展机制概述插件扩展机制的优势 插件扩展机制实现步骤第一步:定制插件实现类示例代码:插件实现类 第二步:通过插件配置文件声明插件示例插件配置文件:META-INF/…

JAVA-二叉树的概念和性质

目录 一.树形结构 1.1 概念 1.2 树的概念(重要)​编辑 补充:高度和深度的区别 1.3 树的应用 二. 二叉树(重点) 2.1 概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 2.4 选择题 一.树形结构 1.1 概念 树是一种 非线性 的数据结构&…

SVM的基本思想

一、SVM的基本思想 SVM的基本思想是在样本的向量空间中寻找一个超平面,使得两类样本被分割在平面的两端。这样的平面理论上有无穷多个,但SVM的目标是找到一个最优的超平面,即两侧距离超平面最近的样本点到超平面的距离被最大化的超平面。这个…

【TCP 网络通信(发送端 + 接收端)实例 —— Python】

TCP 网络通信(发送端 接收端)实例 —— Python 1. 引言2. 创建 TCP 服务器(接收端)2.1 代码示例:TCP 服务器2.2 代码解释: 3. 创建 TCP 客户端(发送端)3.1 代码示例:TCP…

day08 接口测试(3)——postman工具使用

下载 postman 的历史版本:Postman 历史版本下载 - 简书 今天开始学习 postman 这个测试工具啦。 【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、postman简介 2、postman的安装 3、给postman安装插件——newman 3.1 环境安装 3.1.1 安…

README写作技巧

做一个项目,首先第一眼看上去要美观,这样才有看下去的动力。做项目亦是如此,如果每一步应付做的话,我想动力也不会太大,最终很大概率会放弃或者进度缓慢。 1.README组成 README是对项目的一个说明,它对观看…

渗透测试---burpsuite(5)web网页端抓包与APP渗透测试

声明:学习素材来自b站up【泷羽Sec】,侵删,若阅读过程中有相关方面的不足,还请指正,本文只做相关技术分享,切莫从事违法等相关行为,本人与泷羽sec团队一律不承担一切后果 视频地址:泷羽---bp&…

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之前端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目之前端环境搭建 2 前端环境搭建2.1 环境准备2.2 创建Vue3项目2.3 项目搭建准备2.4 安装Element Plus2.5 安装axios2.5.1 配置(创建实例,配置请求,响应拦截器)2.5.2 …

11.27-12.5谷粒商城

目录 新增商品 1.上线会员服务 2. 获取分类关联的品牌 3.获取选定分类下的属性分组和属性 4.新增商品vo 5.保存商品信息 6.Spu检索 7.Sku商品检索 新增商品 1.上线会员服务 将会员服务注册到nacos注册中心,启用服务注册发现EnableDiscoveryClient。 同时新增…

深入解析非桥PCI设备的访问和配置方法

往期内容 本文章相关专栏往期内容,PCI/PCIe子系统专栏: 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 Uart子系统专栏: 专栏地址:Uart子系统 Linux内核早期打印机制与RS485通信技术 – 末片,有专栏内容观看…

ArrayList常见操作源码逐句剖析

目录 前言 正文 1.需要了解的一些字段属性 1.存储 ArrayList 元素的数组缓冲区。 2.集合的大小 3.默认集合容量大小 2.ArrayList对象创建 1.无参构造 2.有参构造1 3.有参构造2 3.添加元素add(E e)以及扩容机制 ​编辑 后言 前言 源码的剖析有助于理解设计模式&…

现代密码学|Rabin密码体制及其数学基础 | 椭圆曲线密码体制及其运算 | DH密钥交换及中间人攻击

文章目录 参考Rabin密码体制及其数学基础中国剩余定理二次剩余Rabin密码体制实例 椭圆曲线密码体制及其运算原理运算规则加密解密实例 DH密钥交换及中间人攻击中间人攻击 参考 现代密码学|Rabin密码体制及其数学基础 现代密码学|椭圆曲线密码体制及其运…