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

Elasticsearch:更好的二进制量化(BBQ)对比乘积量化(PQ)

作者:来自 Elastic  Benjamin Trent

为什么我们选择花时间研究更好的二进制量化而不是在 Lucene 和 Elasticsearch 中进行生产量化。

我们一直在逐步使 Elasticsearch 和 Lucene 的向量搜索变得更快、更实惠。我们的主要重点不仅是通过 SIMD 提高搜索速度,而且还通过标量量化降低成本。首先是 4 倍,然后是 8 倍。然而,这还不够。通过乘积量化(Product Quantization 简称 PQ)等技术,可以在不显著降低召回率的情况下实现 32 倍的减少。我们需要实现更高级别的量化,以在速度和成本之间提供足够的权衡。

一种实现这一目标的方法是专注于 PQ(乘积量化)。另一种则是直接改进二值量化。剧透如下:

  • BBQ 的向量量化速度比 PQ 快 10-50 倍
  • BBQ 的查询速度比 PQ 快 2-4 倍
  • BBQ 的召回率与 PQ 相当或更好

那么,我们到底测试了什么?结果如何?

我们到底要测试什么?

从理论上讲,PQ 和 Better Binary Quantization(BBQ) 都有各种优缺点。但我们需要一套静态的标准来测试两者。拥有一个独立的 “优点和缺点(pros & cons)” 列表是一种过于定性的衡量标准。当然,事物有不同的好处,但我们希望有一套定量的标准来帮助我们做出决策。这遵循了类似于 Rich Hickey 解释的决策矩阵的模式。

我们的标准是:

  • 搜索速度
  • 索引速度平稳
  • 使用 HNSW 的索引速度
  • 合并速度
  • 内存减少可能
  • 该算法是否众所周知并在生产环境中经过实战测试?
  • 粗粒度聚类是否绝对必要?或者,该算法如何公平地只使用一个质心
  • 需要强力(brute force)过采样才能实现 95% 的召回率
  • HNSW 索引仍然有效,并且可以在与强力类似的重新排序下实现 +90% 的召回率

显然,几乎所有标准都是可衡量的,我们确实有一个我们认为重要的定性标准。对于未来的可支持性,成为一种众所周知的算法很重要,如果所有其他措施都与之相关,这可能是决策的转折点。

我们如何测试它?

Lucene 和 Elasticsearch 都是用 Java 编写的,因此我们直接用 Java 编写了两个概念证明。这样,我们就可以在性能上进行同类比较。另外,在进行乘积量化(Product Quantization, PQ)时,我们仅测试了最高 32 倍的空间压缩。虽然 PQ 可以通过减少码本数量(code books)进一步压缩空间,但我们发现对于许多模型来说,召回率会迅速下降到不可接受的水平,从而需要更高比例的过采样。

此外,由于优化 PQ(Optimized PQ)对计算资源要求较高,我们没有采用这种技术。

我们测试了不同的数据集和相似性指标。特别是:

  • e5Small,它只有 384 个维度,与其他模型相比,它的向量空间相当窄。你可以在我们的位向量博客中看到 e5small 的简单二进制量化表现有多差。因此,我们希望确保二进制量化的演变能够处理这样的模型。
  • Cohere 的 v3 模型,它有 1024 个维度,并且喜欢被量化。如果量化方法不适用于此方法,那么它可能不适用于任何模型。
  • Cohere 的 v2 模型有 768 个维度,其出色的性能依赖于最大内积的非欧几里得向量空间。我们希望确保它能够像乘积量化一样处理非欧几里得空间。

我们在基于 ARM 的 MacBook 上进行了本地测试,并在更大的 x86 机器上进行了远程测试,以确保无论 CPU 架构如何,我们发现的任何性能差异都是可重复的。

那么,结果如何呢?

e5small quora

这是一个较小的数据集,使用 e5small 构建了 522k 个向量。它的维度很少,嵌入空间很窄,因此无法与简单的二进制量化一起使用。由于 BBQ 是二进制量化的演变,因此验证它与 PQ 相比在如此不利的模型下是否有效非常重要。

在 M1 Max ARM 笔记本电脑上测试:

Algorithmquantization build time (ms)brute-force latency (ms)brute-force recall @ 10:50hnsw build time (ms)hnsw recall @ 10:100hnsw latency (ms)
BBQ10411199%10481796%0.25
Product Quantization593972099%23966096%0.45

CohereV3

此模型在量化方面表现出色。我们希望在单个粗粒度质心中处理更多向量(30M),以确保我们的小规模结果实际上可以转化为更多向量。

此测试是在 Google Cloud 中一台更大的 x86 机器上进行的:

Algorithmquantization build time (ms)brute-force latency (ms)brute-force recall @ 10:50hnsw build time (ms)hnsw recall @ 10:100hnsw latency (ms)
BBQ998363177698%4004322990%0.6
Product Quantization13116553579098%N/AN/AN/A

当谈到类似召回率的索引和搜索速度时,BBQ 显然是赢家。

内积搜索和 BBQ

我们在其他实验中注意到,在量化时,非欧几里得搜索可能很难准确实现。此外,简单的二值量化对向量的大小不敏感,而向量大小对于内积计算至关重要。

带着这个需要注意的点(脚注),我们花了几天时间研究代数,调整查询估算最后阶段的校正措施。结果是:成功了!

Algorithmrecall 10:10recall 10:20recall 10:30recall 10:40recall 10:50recall 10:100
BBQ71%87%93%95%96%99%
Product Quantization65%84%90%93%95%98%

就这样,圆满结束!

BBQ 与乘积量化的完整决策矩阵。

我们对更优二值量化(Better Binary Quantization, BBQ)感到非常兴奋!经过大量的尝试和验证,我们不断被其结果质量所惊艳 —— 每个向量维度仅保留 1 位信息就能达到如此效果。

敬请期待,它将在未来的 Elasticsearch 版本中与你见面!

Elasticsearch 包含许多新功能,助您构建适合各种场景的最佳搜索解决方案。欢迎查看我们的示例笔记本以了解更多,开启免费的云端试用,或在本地机器上体验 Elastic 的强大功能。

原文:Better Binary Quantization vs. Product Quantization - Search Labs

相关文章:

Elasticsearch:更好的二进制量化(BBQ)对比乘积量化(PQ)

作者:来自 Elastic Benjamin Trent 为什么我们选择花时间研究更好的二进制量化而不是在 Lucene 和 Elasticsearch 中进行生产量化。 我们一直在逐步使 Elasticsearch 和 Lucene 的向量搜索变得更快、更实惠。我们的主要重点不仅是通过 SIMD 提高搜索速度&#xff0…...

【GNU】gcc -g编译选项 -g0 -g1 -g2 -g3 -gdwarf

1、gcc -g的作用 GCC 的 -g 选项用于在编译时生成调试信息,这些信息会嵌入到生成的目标文件或可执行文件中,主要目的是为了支持调试器(如 gdb)对程序的调试工作。 1.1 生成调试信息 当你在编译代码时使用 -g 选项,GCC…...

MySQL【六】

存储过程 存储过程是一组为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 简单的说存储过程就是具有名字的一段代码。 存储过程的创建 CREATE PROC[ED…...

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下,比如1s需要10w次的采样结果,可以考虑使用定时器触发采样,定时器设置多少的时间就会多久采样转换一次。 再加上使用dma,采样的结果直接放在dma的数组里面。 实现了自动采样,自动…...

VTK知识学习(8)-坐标系统

1、概述 计算机图形学里常用的坐标系统有4种: 1)、Model坐标系统。定义模型时所采用的坐标系统,通常是局部的笛卡儿坐标系。 2)、World坐标系统。是放置Actor的三维空间坐标系。 Actor(vtkActor类&am…...

IO流部分串讲

一、IO流的概念简析: java将输入与输出比喻为"流",英文:Stream. 就像生活中的"电流","水流"一样,它是以同一个方向顺序移动的过程.只不过这里流动的是字节(2进制数据).所以在IO中有输入流和输出流之分,我们理解他们是连接…...

Excel——宏教程(2)

Excel——宏教程(2) 一)、处理单元格 1、直接赋值与引用 将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量,这是在excel中最简单的单元格赋值及引用方法。 如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I,并将I1的值…...

unity 中 RectTransform 的常用几个属性

RectTransform rectTransform this.GetComponent<RectTransform>(); rectTransform this.transform as RectTransform; Vector3 vector1 rectTransform.position; //自身轴心点相对于锚点的位置&#xff08;编译器显示的pos&#xff09; …...

项目-摄像

树莓派摄像头使用方法 Camera教程 https://www.raspi.cc/index.php?cread&id53&page1 nanopc-t4 ​https://www.raspi.cc/index.php?cread&id53&page1 摄像头型号 Raspberry Pi Camera Rev 1.3 检测故障 dmesg | grep -i mipi piNanoPC-T4:~$ dmesg | …...

摄像机ISP和DSP的区别?

影像处理器是现代数字相机、手机等电子设备中极其重要的一部分&#xff0c;它能够对传感器采集的图像进行多种操作&#xff0c;从而得到更高质量的图像。常见的两种影像处理芯片有ISP&#xff08;Image Signal Processor&#xff09;和DSP&#xff08;Digital Signal Processor…...

Ubuntu24安装配置NDK

1、下载NDK 下载压缩包&#xff0c;下载地址如下&#xff0c;建议下载LTS支持版本。 https://developer.android.google.cn/ndk/downloads?hlcs 2、解压缩 将NDK解压到指定文件夹。如&#xff1a;/opt 或者先解压&#xff0c;再移动到指定目录下。 3、配置环境变量 找到…...

【Next】中间件

概述 Next.js 的 中间件 (Middleware) 是一种在请求完成之前运行的函数&#xff0c;用于对入站请求进行处理和操作。它可以在路由匹配前执行逻辑&#xff0c;用于身份验证、请求重写、重定向、设置响应头等任务。 使用场景 身份验证&#xff1a;在用户访问页面前检查登录状态…...

Vulnhub靶场案例渗透[11]- Momentum2

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 代码审计5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 - Difficulty : medium - Keywords : curl, bash, code reviewThis wor…...

STM32设计防丢防摔智能行李箱-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…...

Vue Mixin混入机制

在 Vue.js 中&#xff0c;Mixin&#xff08;混入&#xff09;是一种可复用代码的机制&#xff0c;用于在多个组件之间共享逻辑。通过混入&#xff0c;可以将通用功能提取到一个独立的文件中&#xff0c;然后在组件中引入并使用&#xff0c;而无需重复代码。 基本概念 Mixin 是…...

数据库类型建表

接着上次的数据库笔记&#xff1a; 初始数据库 &#xff08;是博主自己写的&#xff09; 1.数据库类型 1.1数值类型 数据类型大小说明对应JAVA类型BIT[(M)]M指定位数&#xff0c;默认值为1二进制数&#xff0c;M的范围从1—64&#xff0c;存储数值范围从0—2^M-1常用Bool…...

iOS 18 导航栏插入动画会导致背景短暂变白的解决

问题现象 在最新的 iOS 18 系统中,如果我们执行导航栏的插入动画,可能会造成导航栏背景短暂地变为白色: 如上图所示:我们分别向主视图和 Sheet 弹出视图的导航栏插入了消息,并应用了动画效果。可以看到,前者的导航栏背景会在消息插入那一霎那“变白”,而后者则没有任何…...

深度学习之人脸检测

在目标检测领域可以划分为了人脸检测与通用目标检测&#xff0c;往往人脸这方面会有专门的算法&#xff08;包括人脸检测、人脸识别、人脸其他属性的识别等等&#xff09;&#xff0c;并且和通用目标检测&#xff08;识别&#xff09;会有一定的差别&#xff0c;着主要来源于人…...

解决前后端发版本时候,手动清除浏览器缓存

在.html页面中添加标签 后端配置nginx,让index.html不缓存 location /index.html { add_header Cache-Control “no-cache, no-store”; }在vite.config.ts中添加 rollupOpyions: { output: { // 输出编译后的文件名称&#xff1a;【文件名称.时间戳】、【文件名称.版本号.…...

mysql8.4+mysql router读写分离

以下为容器环境内搭建 准备工作: 拉取镜像: 镜像版本mysql8.4container-registry.oracle.com/mysql/community-router8.4 下载mysql_shell mysql-shell-9.0.1-linux-glibc2.17-x86-64bit.tar.gz 下载地址: https://downloads.mysql.com/archives/shell/ 参考 这里对这篇文章…...

说说你对spring的IOC的理解

面试 IOC指的就是控制反转&#xff0c;指的就是创建对象的控制权的转移&#xff0c;简单来说&#xff0c;由之前的手动new对象&#xff0c;转换成了由spring自动生产&#xff0c;spring利用java的反射机制&#xff0c;根据配置文件或注解在运行时动态创建并管理对象。...

网络安全这个技能学会了,不考研也能迅速找到高薪工作

网络安全这个技能学会了&#xff0c;不考研也能迅速找到高薪工作 近几年“考研热”持续升温&#xff0c;报名人数和报录比屡创新高。据数据显示&#xff1a;2003年全国考研人数仅仅才70万&#xff0c;直至2017年考研人数才刚刚突破200万。而今年考研人数居高达457万&#xff0…...

BERT-base-uncased完全指南:从基础原理到实战应用

BERT-base-uncased完全指南&#xff1a;从基础原理到实战应用 【免费下载链接】bert-base-uncased 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/bert-base-uncased 一、认知铺垫&#xff1a;为什么BERT改变了NLP格局&#xff1f; 1.1 BERT的突破性意义何…...

图床项目(二) 接口设计

接口设计 1 . muduo 网络模型 该模型相较于普通的reactor模型复杂一点&#xff0c;其中包括mainReactor 和 多个 subReactor &#xff0c;其中每一个 subReactor对应一个线程。 其中 mainReactor 负责处理新连接 &#xff0c; 并将连接均匀分配给 subReactor &#xff0c;后续…...

OpenClaw任务编排技巧:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF复杂流程分解策略

OpenClaw任务编排技巧&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF复杂流程分解策略 1. 为什么需要任务编排 上周我尝试用OpenClaw自动完成一篇技术博客的写作和发布&#xff0c;结果遭遇了连环翻车&#xff1a;模型先花20分钟生成了偏离主题的初稿&…...

无线通信入门:为什么说DFT是提升OFDM信道估计性能的“降噪神器”?

无线通信中的降噪艺术&#xff1a;DFT如何让OFDM信道估计更精准 想象一下&#xff0c;你正试图在嘈杂的咖啡馆里听清朋友的谈话。背景音乐、周围人的聊天声、杯盘碰撞声都在干扰你获取清晰的信息。无线通信中的信道估计面临类似的挑战——如何在充满噪声的传输环境中&#xff0…...

手把手教你用STM32驱动迪文屏:从RS232配置到页面控件交互全流程

STM32与迪文屏深度开发实战&#xff1a;工业级GUI交互全解析 迪文屏作为工业控制领域广泛采用的HMI解决方案&#xff0c;其与STM32的协同工作能力已成为嵌入式开发者的必备技能。不同于传统TFT-LCD的简单驱动&#xff0c;迪文屏通过串口协议实现的动态交互&#xff0c;为设备控…...

【SpringBoot】scanBasePackages实战:从默认扫描到精准控制的进阶指南

1. 为什么需要自定义组件扫描路径 第一次用SpringBoot开发项目时&#xff0c;我发现只要把启动类放在顶层包下&#xff0c;所有子包的组件都能自动注册。这种"开箱即用"的特性确实方便&#xff0c;但后来接手一个老项目时遇到了问题&#xff1a;启动耗时长达2分钟&am…...

ComfyUI图片生成视频大模型技术选型与实战:从原理到生产环境部署

最近在搞一个AI视频生成的项目&#xff0c;用到了ComfyUI这个可视化工作流工具。说实话&#xff0c;刚开始选模型的时候真是眼花缭乱&#xff0c;Stable Diffusion Video、ModelScope、RunwayML……每个都说自己好&#xff0c;但实际用起来坑真不少。今天就把我趟过的路和总结的…...

在曹妃甸哪里可以吃到当天现捕上来的野生海鲜?

在曹妃甸&#xff0c;想要吃到当天现捕上来的野生海鲜&#xff0c;高尚堡老刘海鲜绝对是个绝佳的选择。2006 年&#xff0c;一群世代靠海吃海的渔民&#xff0c;在渤海湾码头开起了这家“老刘海鲜饭店”。起初他们只是想把自家渔船捕捞的野生海鲜&#xff0c;用最朴素的做法端给…...