Elasticsearch 现在默认启用 BBQ,并通过 ACORN 实现过滤向量搜索

作者:来自 Elastic Gilad Gal

探索 Elasticsearch 的向量搜索如何以更快的速度、更低的成本提供更优结果。

试用向量搜索:使用这套自定进度的 Search AI 实操学习课程,亲自体验向量搜索。你可以开始免费云试用,或立即在本地机器上试用 Elastic。


在由 AI 驱动的搜索世界里,有三件事最重要:查询速度排序准确性,以及实现这些所需的资源成本。在 Elastic,我们持续在这三个方面突破极限。我很高兴分享 Elasticsearch 9.1 中的两项密集向量搜索新进展:一项名为 ACORN 的新算法,用于更快的过滤向量搜索;以及新证据表明,我们默认的量化方法 BBQ 不仅能降低成本,还可以提升排序质量。

ACORN:更智能的过滤搜索路径

现实世界的搜索很少是简单的“帮我找类似这个的东西”。它常常是 “帮我找尺码合适的类似产品” 或 “帮我找和上个季度类似的文档”。即使是避开已删除文档,也是一种过滤,因此实际中,过滤搜索非常常见。

让过滤向量搜索既快速又不损失准确性,是一个深层的技术挑战。 HNSW 算法基于图搜索,图中的节点表示向量。图是在索引时构建的,而不是查询时构建的。当支持预过滤时,为了得到准确结果(就像 Elasticsearch 所做的那样),最直接的方法是在图中遍历,只收集通过过滤的节点。问题在于,这种方法仍然会评估未通过过滤的节点,以便继续搜索它们的邻居和整个图,导致搜索变慢。当过滤条件较严格,大多数文档不通过过滤时,这个问题尤其明显。之前我们已有部分解决方案,但我们认为可以做得更好。

我们选择使用 ACORN-1(ANN Constraint-Optimized Retrieval Network),这是一篇 2024 年学术论文中描述的新算法,用于执行过滤 k 近邻(kNN)搜索。 ACORN 通过将过滤过程直接集成到 HNSW 图遍历中实现这一目标。使用 ACORN-1 时,只评估通过过滤的节点,但为了避免遗漏相关部分,会同时评估二级邻居(即邻居的邻居),前提是它们也通过过滤。 Elasticsearch 使用的 Lucene 实现中还包含一些启发式方法,进一步优化结果(详见博客)。

在选择具体算法和实现时,我们还探索了其他理论上可能进一步优化延迟的替代方案,但决定不采用它们,因为这些方法要求用户在索引前声明用于过滤的字段。而我们重视在文档导入后仍可灵活定义过滤字段的能力,因为现实中的索引是不断演变的。潜在的轻微性能提升不足以抵消灵活性丧失,我们也可以通过其他手段获得性能,例如 BBQ(见下文)。

结果是性能的大幅提升。我们测得典型加速为 5 倍,在某些高选择性过滤下提升更大。这对复杂的现实查询是一项巨大增强。要使用 ACORN-1,只需在 Elasticsearch 中执行过滤向量查询即可。

BBQ:更优排序的意外超能力

降低向量的内存占用对于构建可扩展、具成本效益的 AI 系统至关重要。我们的 Better Binary Quantization( BBQ )方法通过将高维 float 向量压缩约 32 倍来实现这一目标。我们之前在 Search Labs 博客中已经讨论过, BBQ 在召回率、延迟和成本方面优于诸如 Product Quantization 的其他技术:

  • Better Binary Quantization( BBQ )在 Lucene 和 Elasticsearch 中的应用

  • 如何将 Better Binary Quantization( BBQ )应用于你的使用场景,以及为什么要这么做

  • Better Binary Quantization( BBQ ) vs. Product Quantization

不过,直观的假设是,这种极大幅度、有损压缩必然会牺牲排序质量。然而我们近期的大规模基准测试显示,通过扩大图遍历范围并重新排序,我们完全可以弥补这一点,不仅在成本和性能上实现提升,还能提高相关性排序的质量。

BBQ 不仅仅是压缩技巧;它是一个复杂的两阶段搜索过程:

  • 广泛扫描:首先,使用体积极小的压缩向量快速扫描数据集,识别出一组排名靠前的文档。该集合的大小超过用户请求的前 N 个结果(即超采样)。

  • 精确重排:然后,从初始扫描中选出顶级候选项,使用它们原始的高精度 float32 向量进行重排,确定最终顺序。

这种超采样加重排的过程是一种强大的校正机制,常常能发现纯 float32 HNSW 搜索在其较有限图遍历中可能遗漏的高相关结果

排序结果证明一切

为了衡量效果,我们使用了 NDCG@10(归一化折扣累计增益@10),这是一项评估前 10 条搜索结果质量的标准指标。 NDCG 分数越高,说明相关性更高的文档排名越靠前。你可以在我们的排序评估 API 文档中了解更多信息。

我们在 BEIR 数据集中的 10 个公开数据集上运行了多项基准测试,比较了传统 BM25 搜索、使用 e5-small 模型的向量搜索( float32 向量),以及同一模型结合 BBQ 的向量搜索。我们选择 e5-small,是因为根据之前的基准测试, BBQ 在高维向量上表现最佳,而我们希望在其挑战较大的场景下测试 BBQ —— 比如 e5-small 生成的低维向量。我们使用 NDCG@10 进行测量,这是一个考虑结果顺序的排序质量指标。下面是我们观察到的结果的代表性示例。

Data setBM25e5-small float32e5-small BBQ with defaults
Climate-FEVER0.1430.19980.2059
DBPedia0.3060.31430.3414
FiQA-20180.2510.30020.3136
Natural Questions0.2920.48990.5251
NFCorpus0.3210.29280.3067
Quora0.8080.85930.8765
SCIDOCS0.1550.13510.1381
SciFact0.6830.65690.677
Touché-20200.3370.20960.2089
TREC-COVID0.6150.71220.7189

结果令人震撼。在 10 个数据集中, BBQ 在其中 9 个的排序质量优于纯 float32 搜索。即便在唯一的例外中,差异也可以忽略不计。此外,在这 10 个数据集中, BBQ 是整体表现最好的方法之一,在 6 个数据集中排名第一。顺带一提,最佳排序结果通常是通过将 BM25 与向量查询结合使用,并融合其他因素如距离、时间和热度来获得的,而 Elasticsearch 在这种类型的查询中表现出色。

有人可能会问: BBQ 是有损压缩,为什么它的排序会优于 float32?确实,在 BBQ 中我们进行超采样并用 float32 向量进行重排,但理论上使用 float32 时,我们应该可以直接用 float32 向量为所有文档排序。那么为什么 BBQ 排序反而更好?

答案在于:在 HNSW 中,我们每个分片只评估一部分向量,这由一个参数 num_candidates 决定。默认情况下,在未使用量化时, num_candidates = 1.5 * k,其中 k 是返回给用户的结果数量。你可以在这里阅读我们为确定该默认值所进行的基准测试。

而当我们使用 BBQ 进行量化时,向量比较速度更快,因此我们可以使用更大的 num_candidates,同时还降低了延迟。经过基准测试,我们将 BBQ 的默认 num_candidates 设置为 max(1.5 * k, oversample * k)。

对于上面的基准测试,我们使用默认设置,其中 k = 10,因此 num_candidates 的计算如下:

  • Float32: 1.5*k = 1.5*10 = 15
  • BBQ: max(1.5*k, oversample*k) = max(1.5*10, 3*10) = 30

由于 num_candidates 的不同,使用 BBQ 时我们扫描了更大范围的 HNSW 图,并在前 30 个候选中获得了更优的结果,这些候选随后由 float32 重排。这也解释了 BBQ 如何带来更好的排序质量。你可以根据自己的需求设置 num_candidates(例如见此),或者像大多数用户一样,信任我们的基准测试并使用默认值。

这也回答了我曾被咨询的一个问题:“是用 e5-large 搭配 BBQ 更好,还是用 e5-small 搭配 float32 更好?”答案现在非常明确。使用更强大的模型 e5-large 搭配 BBQ,能够兼得所有优势:

  • 更优排序:来自更强大的 e5-large 模型,再通过 BBQ 进一步增强。

  • 更低延迟:得益于极高效率的 BBQ 搜索流程。

  • 更低成本:由于内存缩减 32 倍。

这是一种三赢的局面,证明你无需在质量和成本之间做取舍。

正因为 BBQ 的优势已经得到验证,我们在 Elasticsearch 9.1 中将 BBQ 设为默认的量化方法,适用于维度 ≥ 384 的密集向量。我们推荐大多数现代嵌入模型使用该方法,这些模型通常能很好地在向量空间中分布,使其非常适合 BBQ 的方式。

今天就开始吧

ACORN 和 BBQ 的这些进展让你能够在 Elastic 上构建更强大、可扩展且具成本效益的 AI 应用。你可以以高速执行复杂的过滤查询,同时提升排序相关性并大幅降低内存成本。

升级到 Elasticsearch 9.1,享受这些新功能。

  • 在我们的文档中了解更多关于 kNN 搜索和向量量化的内容。
  • 通过我们的排序评估 API 深入了解排序质量。

我们帮你处理复杂性,让你专注于打造出色的搜索体验。祝搜索愉快。

原文:Elasticsearch now with BBQ by default & ACORN for filtered vector search - Elasticsearch Labs

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

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

相关文章

Java 14 新特性解析与代码示例

Java 14 新特性解析与代码示例 文章目录Java 14 新特性解析与代码示例1. 开关表达式(Switch Expressions)2. 记录类型(Records)3. 文本块(Text Blocks)4. instanceof的模式匹配(Pattern Matchin…

在虚拟机ubuntu上修改framebuffer桌面不能显示图像

目录 一、测试程序 二、排查原因 三、为什么 Xorg 会导致程序无法工作&#xff1f; 一、测试程序 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #in…

语言模型的评估指标整理

语言模型&#xff08;Language Models&#xff09;是自然语言处理&#xff08;NLP&#xff09;的核心组件&#xff0c;广泛应用于机器翻译、文本生成、对话系统等领域。随着模型复杂度的提升&#xff0c;如何科学、系统地评估模型性能变得至关重要。评估指标不仅帮助我们理解模…

【开发技术】.Net中配置Serilog日志分级记录

目录 一、目的 二、解决方案 2.1 下载serilog包 2.2 Serilog配置 2.2.1 使用多个File sink配置不同的最小日志级别 2.2.2 使用Filter条件分流到不同文件 三、使用建议 四、文章总结 一、目的 在日常开发中&#xff0c;需要根据不同的场景去记录日志&#xff0c;根据实际…

聊聊如何判断发现的缺陷属于前后端

目录 一、观察缺陷现象 二、检查网络请求&#xff08;核心方法&#xff09; 三、模拟请求验证后端 四、查看日志 五、数据流分析 六、判断前后端缺陷方法 判断发现的缺陷是前后端&#xff0c;可以通过观察缺陷现象&#xff0c;检查网络请求&#xff0c;查看后端日志&…

Python3与MySQL的PyMySQL连接与应用

Python3与MySQL的PyMySQL连接与应用 引言 随着互联网技术的飞速发展,数据库在各个领域的应用日益广泛。MySQL作为一种开源的关系型数据库管理系统,因其稳定性和高效性,被广泛应用于各种场景。Python作为一种高级编程语言,以其简洁、易读、易学等特点,受到了广大开发者的…

智慧城市SaaS平台|市政公用管理系统

【道路监测运维系统】1.数据可视化a) 实时监控支持对道路监测数据进行分析评估&#xff0c;为道路养护、交通管理、环境保护等提供数据支撑2.道路基础设施监测支持对道路基础设施的运行状态进行实时监测&#xff0c;包括路面状况3.交通流量监测支持对道路交通流量进行实时监测&…

Maven 配置阿里云镜像加速

Maven 配置阿里云镜像加速&#xff1a; 完整配置步骤&#xff08;Windows 系统&#xff09; 1. 找到 Maven 的 settings.xml 文件 全局配置&#xff1a;D:\software\apache-maven-3.9.11\conf\settings.xml用户配置&#xff1a;C:\Users\Admin\.m2\settings.xml&#xff08;推荐…

去除视频字幕 3 : 继续研究 IOPaint,记录几个问题

1. 为什么单独运行&#xff0c;效果很好&#xff0c;批量运行&#xff0c;效果很差。 1. 我运行 iopaint start --modellama --devicecuda --port8080在浏览器中单独选择图片&#xff0c;涂选区域&#xff0c;然后处理&#xff0c;此时的效果非常好。2. 但是我进行 iopaint ru…

【深度之眼机器学习笔记】04-01-决策树简介、熵,04-02-条件熵及计算举例,04-03-信息增益、ID3算法

1. 决策树与熵 1.1 决策树简介 下面有一个贷申请样本表&#xff0c;有许多特征 我们根据特征数据生成一棵树&#xff0c;比如年龄有青年&#xff0c;中年&#xff0c;老年三个类别&#xff0c;那么就有三个分支&#xff0c;分别对应着三种类别。如果是青年那么就看工作&#xf…

八股文场景题

如何预估接口上线后的 QPS 问题引入 这个问题其实是一个非常实际的问题&#xff0c;因为我们在开发需求后&#xff0c;例如&#xff1a;新增了一个接口 有一个步骤是值得做的&#xff0c;那就是预估这个接口的QPS 因为我们是可以去调配对应服务器的数量和运行配置的 例如我…

【Web安全】深入浅出理解“SQL注入-伪静态注入”及空格限制绕过技巧

文章目录什么是伪静态注入&#xff1f;伪静态注入中如何绕过空格限制&#xff1f;1. 用注释符替代空格2. 用不可见字符&#xff08;URL 编码&#xff09;替代3. 用括号分隔语句4. 用特殊符号替代核心逻辑往期文章【Web安全】一次性搞懂 ReDOS 漏洞原理/检测/防御 【Web安全】一…

【读论文】Step-Audio 2 深度解读:迈向工业级语音交互的「全能型选手」

引言:step-Audio升级 语音交互技术,作为人机交互最自然、最直接的方式之一,正以前所未有的速度发展。从简单的语音指令到流畅的语音对话,我们对 AI 的期望越来越高。然而,要让 AI 真正成为我们的“知心伙伴”,仅仅能“听懂”和“说出”还远远不够。 一个理想的语音 AI,…

java web 重定向

目录结构 demo\day20\src\com\demo\service\Dome1.javademo\day20\src\com\demo\service\Dome2.javademo\day20\src\com\demo\service\Dome3.javademo\day20\src\com\demo\service\Dome4.javademo\day20\web\WEB-INF\lib\javax.servlet.jardemo\day20\web\index.jspdemo\day20\…

MySQL(配置)——MariaDB使用

一、简介 MariaDB 和 MySQL 作为两个流行的关系型数据库管理系统&#xff0c;它们的区别可以从多个角度来探讨。尽管 MariaDB 最初是 MySQL 的一个分支&#xff0c;但随着时间的推移&#xff0c;它们逐渐在功能、性能和开发方向上有所不同。MariaDB 是 MySQL 的一个分支&#x…

Web3:赛道划分与发展趋势解析

区块链技术现在已经从单一的加密货币支付系统发展为涵盖金融、艺术、组织治理和社区文化的多元生态系统。这次我们将深入解析 DeFi&#xff08;去中心化金融&#xff09;、NFT&#xff08;非同质化代币&#xff09;、DAO&#xff08;去中心化自治组织&#xff09;与 MEME&#…

LeetCode 283 - 移动零

思路 使用双指针法&#xff0c;一次遍历完成原地修改。 慢指针 slow&#xff1a;指向下一个非零元素应该被放置的位置。快指针 fast&#xff1a;遍历整个数组&#xff0c;寻找非零元素。 当 fast 遇到非零数时&#xff0c;将其值赋给 slow 指向的位置&#xff0c;然后 slow 前进…

8. 网络层

在复杂的网络环境中确定一个合适的路径.1. IP协议1. 基本概念IP协议&#xff1a;提供一种能力(有非常大的概率&#xff0c;做到某事)&#xff0c;把数据报从主机A&#xff0c;跨网络&#xff0c;送到主机B --> 必须要有方式&#xff0c;标识通信两端唯一性&#xff01;&…

【通识】线性代数(Linear Algebra)

线性代数被广泛应用于抽象代数和泛函分析中&#xff1b;通过解析几何&#xff0c;线性代数能被具体表示&#xff0c;线性代数被泛化为算子理论。而非线性模型被近似为线性模型&#xff0c;应用场景多为自然科学和社会科学。 费马和笛卡尔的工作&#xff0c;线性代数出现于十七世…

Qt 嵌入式界面优化技术

在嵌入式系统中&#xff0c;界面性能直接影响用户体验和系统稳定性。由于嵌入式设备通常资源受限&#xff08;如低性能 CPU、有限内存、小尺寸屏幕&#xff09;&#xff0c;需针对性优化 Qt 界面以实现流畅显示和高效交互。本文从渲染引擎、资源管理、布局优化到硬件加速&#…