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.mzph.cn/diannao/63585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 出租车计价器系统设计(一) 江科大源码改写

STM32 出租车计价器系统设计 功能目标 驱动步进电机模拟车轮旋转,并实现调速功能。 设置车轮周长和单价,检测车轮转速和运转时间。 计算并显示行驶里程和价格。 硬件材料 28BYJ48 五线四相步进电机和 ULN2003 驱动板模块 测速传感器模块 嵌入式小系统…

顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍

大语言模型一般都是流式返回文字,如果等全部文字返回了一次性去TTS,那么延迟会非常严重,常用的方法就是通过标点符号断句,返回了一句话就提交给TTS。随着流TTS的出现,就可以直接把大模型返回的文字灌给流TTS&#xff0…

问题清除指南|AEROBLADE论文复现相关要点总结

前言:本篇博客总结本人在复现 CVPR 2024 论文 AEROBLADE 过程中遇到的一些问题及解决方案。 注:仅仅使用了论文github源码中的Quickstart部分。 论文链接🔗:AEROBLADE: Training-Free Detection of Latent Diffusion Images Using…

Qt初识_对象树

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Qt初识_对象树 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 什么是对象树 为什么要引…

排序算法(3):插入排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 插入排序 插入排序将序列分为已排序和未排序两部分,每次从未排序部分取出第一个元素,插入到已排序部分的适当位置。重复此过程直到所有元素排序完成。 图解 初始化第一个元素为已排序部分&#xff0…

Java版-图论-最小生成树-Kruskal算法

实现描述 为了造出一棵最小生成树,我们从最小边权的边开始,按边权从小到大依次加入,如果某次加边产生了环,就扔掉这条边,直到加入了 n-1 条边,即形成了一棵树。 实现代码 首选我们对所有的边&#xff0c…

深入解析 Spring Security —— 打造高效安全的权限管理体系

目录 前言1. 初识 Spring Security1.1 Spring Security 的两大核心功能1.2 Spring Security 的主要特点 2. 配置 Spring Security2.1 配置类概述2.2 基础配置示例2.3 示例解析 3. Spring Security 的进阶功能3.1 自定义用户服务3.2 注解式权限控制3.3 动态权限控制 4. 实战应用…

JetBrains IDE(IDEAWebStorm)配置GitHub Copilot

关于 GitHub Copilot 和 JetBrains IDE GitHub Copilot 在编写代码时提供 AI 对程序员的自动完成样式的建议。 有关详细信息,请参阅“关于 GitHub Copilot Individual”。 如果使用 JetBrains IDE,可以直接在编辑器中查看并合并来自 GitHub Copilot 的…

OLLAMA+FASTGPT+M3E 大模型本地化部署手记

目录 1.安装ollama 0.5.1 2.下载大模型 qwen2.5 3b 3.开启WSL 4.更新wsl 5.安装ubuntu 6.docker下载 6.1 修改docker镜像源 6.2 开启WSL integration 7.安装fastgpt 7.1 创建fastgpt文件夹 7.2 下载fastgpt配置文件 8.启动容器 9.M3E下载 9.1 下载运行命令 9.2…

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事,后文简称 云女士 ,非说 Go 的 Gin 框架比 Springboot 更加的开箱即用,我心想在 Java 里面 Springboot 已经打遍天下无敌手,这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗,非我要…

神经网络中的过拟合问题及其解决方案

目录 ​编辑 过拟合的定义与影响 过拟合的成因 1. 模型复杂度过高 2. 训练数据不足 3. 训练时间过长 4. 数据特征过多 解决方案 1. 数据增强 2. 正则化 3. Dropout 4. 提前停止 5. 减少模型复杂度 6. 集成学习 7. 交叉验证 8. 增加数据量 9. 特征选择 10. 使…

Pull down筛靶策略丨筛选药物与潜在靶蛋白之间相互作用的体外技术

小分子药靶筛选的Pull down实验是一种有效的筛选药物与潜在靶蛋白之间相互作用的体外技术。利用生物分子之间的亲和力原理,将生物素标记的小分子化合物固定在链霉亲和素的磁珠上,与蛋白裂解液进行孵育,孵育结束后与小分子结合的蛋白可以通过质…

Certimate自动化SSL证书部署至IIS服务器

前言:笔者上一篇内容已经部署好了Certimate开源系统,于是开始搭建部署至Linux和Windows服务器,Linux服务器十分的顺利,申请证书-部署证书很快的完成了,但是部署至Windows Server的IIS服务时,遇到一些阻碍&a…

UnityShaderLab 实现黑白着色器效果

实现思路:取屏幕像素的RGB值,将三个通道的值相加,除以一个大于值使颜色值在0-1内,再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现: ShaderLab实现: Shader "Bl…

No.4 笔记 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞&#xff1…

LeetCode 热题 100_环形链表(25_141_简单_C++)(哈希表;快慢指针)

LeetCode 热题 100_环形链表(25_141) 题目描述:输入输出样例:题解:解题思路:思路一(哈希表):思路二(快慢指针): 代码实现代码实现&…

GTC2024 回顾 | 优阅达携手 HubSpot 亮相上海,赋能企业数字营销与全球业务增长

从初创企业入门到成长型企业拓展,再到 AI 驱动智能化运营,HubSpot 为企业的每步成长提供了全方位支持。 2024 年 11 月下旬,备受瞩目的 GTC2024 全球流量大会(上海)成功举办。本次大会汇聚了全国内多家跨境出海领域企业…

Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战

Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战 前言1.何为Text2SQL(NL2sql)2.Text2SQL结构与挑战3.金融领域实际业务场景4.注意事项5.总结 前言 随着信息技术的迅猛发展,人机交互的方式也在不断演进。…

Tongweb7049M4有关SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱的处理方案(by lqw)

前提条件:Tongweb7049M4已在http通道里配置了https(如何配置https可以参考这个帖子:东方通TongWEB添加Https证书,开启SSL) 遇到客户在配置了https后,扫描漏洞提示: 有关SSL/TLS 服务器瞬时 Dif…

Jenkins部署svn项目

下载 Jenkins 的安装和设置 加载插件太慢,更换镜像地址 http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 安装svn插件 安装Deploy to container Plugin 工具配置jdk和maven 后端部署 源码管理添加svn地址和认证 增加构建步骤 Invoke to…