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

Azure AI Search 中的二进制量化:优化存储和加快搜索速度

随着组织继续利用生成式 AI 的强大功能来构建检索增强生成 (RAG) 应用程序和代理,对高效、高性能和可扩展解决方案的需求从未如此强烈。

今天,我们很高兴推出二进制量化,这项新功能可将向量大小减少高达 96%,同时将搜索延迟减少高达 40%。

参考链接:Azure AI申请试用

 

什么是二进制量化?

二进制量化 (BQ) 是一种通过将每个维度表示为单个位来压缩高维向量的技术。此方法可大幅减少向量索引的内存占用,并以降低召回率为代价来加速向量比较操作。召回率的损失可以通过两种称为过采样和重新排序的技术来弥补,这为您提供了选择在应用程序中优先考虑哪些因素的工具:召回率、速度或成本。

 

为什么我应该使用二进制量化?

二进制量化最适用于想要以低成本存储大量向量的客户。 Azure AI Search 将向量索引保存在内存中,以提供最佳的搜索性能。 二进制量化 (BQ) 允许减小内存中向量索引的大小,从而减少适合数据所需的Azure AI Search分区数量,从而降低成本。

 

二进制量化通过将 32 位浮点数转换为 1 位值来减少内存中向量索引的大小,最多可将向量索引大小减少 28 倍(由于索引数据结构引入的开销,略低于理论上的 32 倍)。下表显示了二进制量化对向量索引大小和存储使用的影响。

 

表 1.1:向量索引存储基准

压缩配置文档数向量索引大小 (GB)总存储大小 (GB)% 矢量索引节省存储节省百分比
未压缩1百万5.7724.77
新加坡1百万1.4820.4874%17%
苯并噻嗪1百万0.23519.2396%22%

表 1.1 比较了三种不同向量压缩配置的存储指标:未压缩、标量量化 (SQ) 和二进制量化 (BQ)。数据显示二进制量化显著提高了存储和性能,向量索引大小节省高达 96%,总体存储节省高达 22%。MTEB/dbpedia 采用默认向量搜索设置和 OpenAI text-embeddings-ada-002 @1536 维度。

 

提高性能 

二进制量化 (BQ) 可提高性能,与未压缩索引相比,查询延迟可减少 10-40%。改进效果将根据过采样率、数据集大小、向量维数和服务配置而有所不同。BQ 速度快有几个原因,例如汉明距离比余弦相似度计算速度更快,而打包的位向量更小,从而提高了局部性。这使其成为速度至关重要的场合的绝佳选择,并且允许应用适度的过采样来平衡速度和相关性。

 

品质保持

使用二进制量化时,存储使用量的减少和搜索性能的提高是以召回率为代价的。但是,可以使用过采样和重新排序等技术有效地管理这种权衡。过采样会检索出更大的潜在文档集,以抵消量化造成的分辨率损失。重新排序将使用全分辨率向量重新计算相似度得分。下表显示了 OpenAI 和Cohere嵌入的MTEB 数据集子集 ,其中二进制量化均值为 NDCG@10  ,有无重新排序/过采样。

 

表 1.2:二进制量化对 MTEB 子集平均 NDCG@10 的影响

模型

无重新排序 (Δ / %)

重新排序 2x 过采样 (Δ / %)

Cohere Embed V3(1024天)

-4.883(-9.5%)

-0.393(-0.76%)

OpenAI 文本嵌入-3-小 (1536d)

-2.312(-4.55%)

+0.069(+0.14%)

OpenAI 文本嵌入-3-large (3072d)

-1.024(-1.86%)

+0.006(+0.01%)

表 1.2 比较了来自 MTEB 数据集子集的不同嵌入模型在使用未压缩索引的二进制量化时平均 NDCG@10 的相对点差异。

 

关键要点:   

  • 与无重新排序相比,BQ+重新排序可实现更高的检索质量
  • 在维度较低的模型中,重新排序的影响更为明显,而对于维度较高的模型,其影响较小,有时可以忽略不计
  • 强烈考虑使用全精度向量进行重新排序,以尽量减少甚至消除量化造成的召回损失

 

何时使用二进制量化

对于具有高维向量和大型数据集的应用程序,建议使用二进制量化,因为存储效率和快速搜索性能至关重要。它对于尺寸大于 1024 的嵌入特别有效。但是,对于较小的尺寸,我们建议测试 BQ 的质量或考虑使用 SQ 作为替代方案。此外,当嵌入以零为中心时,BQ 的表现非常出色,就像 OpenAI 和 Cohere 等流行的嵌入模型中一样。

 

BQ + 重新排序/过采样的工作原理是搜索内存中的压缩向量索引并使用存储在磁盘上的全精度向量进行重新排序,从而让您在保持强大的搜索质量的同时大幅降低成本。这种方法通过利用内存和 SSD 来实现在内存受限的设置下高效运行的目标,从而为大型数据集提供高性能和可扩展性。

 

BQ 是我们过去几个月来在性价比方面做出的改进,可节省存储空间并提高性能。通过采用此功能,组织可以实现更快的搜索结果和更低的运营成本,最终带来更好的结果和用户体验。

 

更多功能现已全面开放

我们很高兴地告诉大家,Azure AI Search 现已正式推出多项向量搜索增强功能。这些更新让用户可以更好地控制 RAG 解决方案中的检索器,并优化 LLM 性能。以下是主要亮点:

  • Azure AI Search 的 Azure OpenAI集成矢量化现已正式发布!
  • 支持二进制向量类型: Azure AI Search 支持包括二进制向量在内的窄向量类型。此功能可以以较低的成本存储和处理更大的向量数据集,同时保持快速的搜索功能。
  • 向量加权:此功能允许用户在混合搜索场景中为向量查询分配相对重要性,而不是术语查询。它允许用户优先考虑向量相似性而不是关键字相似性,从而更好地控制最终结果集。
  • 文档增强:使用针对矢量和混合搜索查询量身定制的评分配置文件增强您的搜索结果。无论您优先考虑新鲜度、地理位置还是特定关键字,我们的新功能都可以进行有针对性的文档增强,确保为您提供更相关的结果。

 

Azure AI Search 入门 

要开始使用二进制量化,请访问我们的官方文档: 减小矢量大小 - Azure AI 搜索 | Microsoft Learn

  • 了解有关Azure AI Search和所有最新功能的更多信息。     
  • 开始在Azure 门户、Azure CLI、管理 REST API、ARM 模板或Bicep 文件中创建搜索服务。       
  • 了解 Azure AI Search 中的检索增强生成。 
  • 探索我们的Python、  .NET、  Java和 JavaScript预览客户端库 ,提供多种集成方法来满足不同的用户需求。  
  • 探索如何使用Azure AI Studio创建端到端 RAG 应用程序 。 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【MySQL】索引使用规则——(覆盖索引,单列索引,联合索引,前缀索引,SQL提示,数据分布影响,查询失效情况)
  • python07-单元测试框架unittest1-1
  • JS都有哪些操作数组的方法
  • JS简介 JS特点
  • 用ceres实现lio-sam平面点匹配
  • python开发VTK入门
  • Amazon QuickSight 实验
  • 秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie
  • Python画笔案例-030 实现打点之斜正方
  • 1306. 跳跃游戏 III
  • 【GIT】idea中实用的git操作,撤回commit,撤回push、暂存区使用
  • Oracle中数据类型 NVARCHAR2 与 VARCHAR2 的对比
  • 【嵌入式】内存未对齐导致程序崩溃(铺获信号量SIGBUS,数值7)
  • Ubuntu上qt使用SSH样式表
  • zm-tree-org 数据量过大时,全部展开后,根节点点击收缩,树形消失
  • 【css3】浏览器内核及其兼容性
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Apache Pulsar 2.1 重磅发布
  •  D - 粉碎叛乱F - 其他起义
  • es6
  • in typeof instanceof ===这些运算符有什么作用
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript实现分页效果
  • Java的Interrupt与线程中断
  • java概述
  • MD5加密原理解析及OC版原理实现
  • Python_OOP
  • ReactNativeweexDeviceOne对比
  • Service Worker
  • 看域名解析域名安全对SEO的影响
  • 你不可错过的前端面试题(一)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何学习JavaEE,项目又该如何做?
  • 设计模式走一遍---观察者模式
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云移动端播放器高级功能介绍
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #pragma once与条件编译
  • ()、[]、{}、(())、[[]]命令替换
  • (1)无线电失控保护(二)
  • (南京观海微电子)——示波器使用介绍
  • (转)Sublime Text3配置Lua运行环境
  • (转)winform之ListView
  • .gitignore文件---让git自动忽略指定文件
  • .Net MVC + EF搭建学生管理系统
  • .NET程序员迈向卓越的必由之路
  • .NET连接数据库方式
  • .net项目IIS、VS 附加进程调试
  • @Autowired @Resource @Qualifier的区别
  • @基于大模型的旅游路线推荐方案
  • [@Controller]4 详解@ModelAttribute
  • []C/C++读取串口接收到的数据程序