Elasticsearch:优化的标量量化 - 更好的二进制量化

作者:来自 Elastic Benjamin Trent

在这里,我们解释了 Elasticsearch 中的优化标量量化以及如何使用它来改进更好的二进制量化 (Better Binary Quantization - BBQ)。

我们的全新改进版二进制量化 (Better Binary Quantization - BBQ) 索引现在变得更强大了!在各方面的召回率都有提升(某些极端情况下提升高达 20%),并开启了将向量量化到任意 bit 大小的未来。从 Elasticsearch 8.18 开始,BBQ 索引现已采用我们最先进的优化标量量化算法作为技术支撑。

标量量化简史

标量量化(scalar quantization)在 Elasticsearch 8.12 中引入,最初是一个简单的最小/最大量化方案。每个 Lucene 段,我们会找到给定置信区间的全局分位数。然后使用这些分位数作为最小值和最大值来量化所有向量。虽然这种简单的量化功能强大,但它实际上只适用于整字节量化。

静态置信区间意味着静态分位数。它针对给定段中的所有向量计算一次,并且适用于较高的位值。

在 Elasticsearch 8.15 中,我们添加了半字节或 int4 量化。为了实现高召回率,我们添加了一个优化步骤,允许动态计算最佳分位数。这意味着不再有静态置信区间。Lucene 将为每个段计算最佳全局上分位数和下分位数。与 float32 向量相比,内存使用率降低了 8 倍。

动态搜索最佳分位数以减少向量相似性误差。此操作在向量样本集上全局执行一次,然后应用于所有向量。

最后,现在在 8.18 中,我们添加了局部优化标量量化。它优化了每个单独向量的分位数。允许在任何位大小下实现出色的召回率,即使是单比特量化。

什么是优化标量量化?

如需深入了解优化标量量化背后的数学和直觉,请查看我们关于优化标量量化的博客文章。这项工作有三个主要收获:

  • 每个向量都以 Apache Lucene 段的质心为中心。这使我们能够更好地利用可能的量化向量来表示整个数据集。
  • 每个向量都使用一组独特的优化分位数单独量化。
  • 使用非对称量化,允许在相同的内存占用下实现更高的召回率。

简而言之,在量化每个向量时:

  • 我们将向量置于质心上
  • 计算有限次数的迭代以找到最佳分位数。如果分位数不变或误差(损失)增加,则提前停止
  • 打包生成的量化向量
  • 存储打包的向量、其分位数、其分量的总和以及额外的误差校正项
以下是优化 2 位向量的分步视图。在第四次迭代之后,我们通常会停止优化过程,因为误差(损失)会增加。第一个单元格是每个单独组件的误差。第二个是 2 位量化向量的分布。第三个是整体误差的变化方式。第四个是当前步骤的分位数与正在量化的原始向量的叠加。

存储和检索

优化标量量化向量的存储和检索与 BBQ 类似。主要区别在于我们存储的特定值。

为每个二进制量化向量存储:dims/8 字节、上分位数和下分位数、附加校正项、量化分量的总和。

其中一个细微差别是校正项。对于欧几里得距离,我们存储中心向量的平方范数(squared norm)。对于点积,我们存储质心和非中心向量之间的点积。

性能

说得够多了。以下是四个数据集的结果。

  • Cohere 的 768 维多语言嵌入。这是一个分布良好的内积数据集。
  • Cohere 的 1024 维多语言嵌入。此嵌入模型针对量化进行了很好的优化。
  • E5-Small-v2 在 quora 数据集上量化。此模型通常在二进制量化方面表现不佳。
  • GIST-1M数据集。这个科学数据集为内积和量化开辟了一些有趣的边缘情况。

以下是 Recall@10|50 的结果:

DatasetBBQBBQ with OSQImprovement
Cohere 7680.9330.9380.5%
Cohere 10240.9320.9451.3%
E5-Small-v20.9720.9750.3%
GIST-1M0.7400.98924.9%

总体而言,我们发现,在我们新的优化标量量化的支持下,BBQ 提高了召回率,对于 GIST-1M 数据集而言,这一效果非常显著。

但是,索引时间呢?当然,所有这些每个向量的优化都必须加起来。答案是否定的。

以下是相同数据集的索引时间。

DatasetBBQBBQ with OSQDifference
Cohere 768368.62s372.95s+1%
Cohere 1024307.09s314.08s+2%
E5-Small-v2227.37s229.83s< +1%
GIST-1M1300.03s*297.13s-300%
  •  由于使用内积时量化方法在 GIST-1M 上效果很差,由于向量距离无法很好区分,因此构建 HNSW 图需要很长时间。。

结论

这种新的、最先进的量化方法不仅提高了 BBQ 索引的召回率,还解锁了未来的优化。我们现在可以将向量量化为任意位大小,并且我们想探索如何提供 2 位量化,在不重新排序的情况下在内存利用率和召回率之间取得平衡。

Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。

原文:Optimized Scalar Quantization: Even Better Binary Quantization - Elasticsearch Labs

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

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

相关文章

科普CMOS传感器的工作原理及特点

在当今数字化成像的时代&#xff0c;图像传感器无疑是幕后的关键 “功臣”&#xff0c;它宛如一位神奇的 “光影魔法师”&#xff0c;通过光电效应这一奇妙的物理现象&#xff0c;将光子巧妙地转换成电荷&#xff0c;为图像的诞生奠定基础。而在众多类型的图像传感器中&#xf…

IDEA中Maven依赖包导入失败报红的潜在原因

在上网试了别人的八个问题总结之后依然没有解决&#xff1a; IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因&#xff1a;<dep…

Java100道面试题

1.JVM内存结构 1. 方法区&#xff08;Method Area&#xff09; 方法区是JVM内存结构的一部分&#xff0c;用于存放类的相关信息&#xff0c;包括&#xff1a; 类的结构&#xff08;字段、方法、常量池等&#xff09;。字段和方法的描述&#xff0c;如名称、类型、访问修饰符…

虚表 —— 隐藏行(简单版)

因为隐藏行改变了listview内部行号处理机制&#xff0c;需要处理大量细节&#xff0c;如listview内部用于传递行号的各种消息、通知等、封装的各种读取行号的函数等。 所以在工作量很大&#xff0c;一处纰漏可能导致重大bug的情况下&#xff0c;仅对隐藏行功能进行了简单封装&…

UDP -- 简易聊天室

目录 gitee&#xff08;内有详细代码&#xff09; 图解 MessageRoute.hpp UdpClient.hpp UdpServer.hpp Main.hpp 运行结果&#xff08;本地通信&#xff09; 如何分开对话显示&#xff1f; gitee&#xff08;内有详细代码&#xff09; chat_room zihuixie/Linux_Lear…

python制作翻译软件

本文复刻此教程&#xff1a;制作属于自己的翻译软件-很简单【Python】_哔哩哔哩_bilibili 一、明确需求&#xff08;以搜狗翻译为例&#xff09; &#xff08;1&#xff09;网址&#xff1a;https://fanyi.sogou.com/text &#xff08;2&#xff09; 数据&#xff1a;翻译内容…

uni-app 资源引用(绝对路径和相对路径)方法汇总

文章目录 一、前言&#x1f343;二、绝对路径和相对路径2.1 绝对路径2.2 相对路径 三、引用组件四、引用js4.1 js 文件引入4.2 NPM支持 五、引用css六、引用json6.1 json文件引入 七、引用静态资源7.1 模板内引入静态资源7.2 css 引入静态资源7.3 js/uts 引入静态资源7.4 静态资…

在 ASP.NET CORE 中上传、下载文件

创建 Web API 来提供跨客户端和服务器的文件上传和下载是常有的事。本文将介绍如何通过 ASP.NET CORE 来实现。 首先在 Visual Studio 中创建空的 Web API 项目&#xff0c;然后选择目标框架 .Net Core 3.1。 创建名为 FileController 的控制器&#xff0c;提供操作文件的接口…

基于 GEE Sentinel-1 数据集提取水体

目录 1 水体提取原理 2 完整代码 3 运行结果 1 水体提取原理 水体提取是地理信息和遥感技术的关键应用之一&#xff0c;对于多个领域都具有重要的应用价值。它有助于更好地管理水资源&#xff0c;保护环境&#xff0c;减少灾害风险&#xff0c;促进可持续发展&#xff0c;以…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

新年感悟:2025年1月7日高铁随想

2025年1月7日&#xff0c;乘坐在从珠海去广州南的C7676高铁上&#xff0c;突然悟明白两个事情。 首先&#xff0c;不管学习任何东西&#xff0c;总结是一个非常关键的经验。以前&#xff0c;总是幻想着能找到一本书&#xff0c;或者一个特别优秀的老师&#xff0c;仅仅通过看看…

centOS7

特殊权限 set_uid 赋予所有者身份 chmod us 文件 set_gid 赋予所有组身份 chmod gs 文件/目录 sticky_bit 防火墙 firewall-cmd 开启端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent 重启防火墙 systemctl restart firewalld 查看开启的所有端口 fi…

Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录

1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件&#xff0c;此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…

HCIA-Access V2.5_8_2_EPON基本架构和关键参数

EPON数据利用方式 EPON和GPON同样只有一根光纤&#xff0c;所以为了避免双向发送数据出现冲突&#xff0c;我们同样采用WDM技术&#xff0c;那么主要利用两个波长&#xff0c;一个是1490纳米的波长&#xff0c;一个是1310纳米的波长&#xff0c;下行OLT给ONU发送数据的时候&…

新一代智能工控系统网络安全合规解决方案

01.新一代智能工控系统概述 新一代智能工控系统是工业自动化的核心&#xff0c;它通过集成人工智能、工业大模型、物联网、5G等技术&#xff0c;实现生产过程的智能化管理和控制。这些系统具备实时监控、自动化优化、灵活调整等特点&#xff0c;能够提升生产效率、保证产品质量…

前端使用Get传递数组形式的数据

前端使用Get传递数组形式的数据 前端后端接收 不能直接使用 JSON.stringify()传输参数&#xff0c;或者直接用json数据传输&#xff0c;后端均会应为包含了非法的符号 [与 ]而报错。 前端 主要在于对Array形式的数据进行转换&#xff0c;拼接成字符串&#xff0c;采用join方…

Centos 下安装 GitLab16.2.1

参考 https://blog.csdn.net/weixin_46059351/article/details/140649426 https://blog.csdn.net/qq_46028493/article/details/144993598 Centos 安装 GitLab 修改 yum 的配置 首先查看目前配置的 yum&#xff1a; cat /etc/yum.repos.d/CentOS-Base.repo应该是这个样子…

uniapp 微信小程序 自定义日历组件

效果图 功能&#xff1a;可以记录当天是否有某些任务或者某些记录 具体使用&#xff1a; 子组件代码 <template><view class"Accumulate"><view class"bx"><view class"bxx"><view class"plank"><…

刚体变换矩阵的逆

刚体运动中的变换矩阵为&#xff1a; 求得变换矩阵的逆矩阵为&#xff1a; opencv应用 cv::Mat R; cv::Mat t;R.t(), -R.t()*t

php反序列化 ctf例题演示 框架安全(TP,Yii,Laravel) phpggc生成框架利用pop

前言 php反序列化的框架的利用的pop是非常难写的 并且 我们不知道他的利用方法 所以PHPGGC是一个包含unserialize()有效载荷的库以及一个从命令行或以编程方式生成它们的工具。当在您没有代码的网站上遇到反序列化时&#xff0c;或者只是在尝试构建漏洞时&#xff0c;此工具…