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

news2024/11/15 13:36:22

随着组织继续利用生成式 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 应用程序 。 

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

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

相关文章

2024.9.4 作业

自己实现栈和队列的全类型 代码&#xff1a; /*******************************************/ 文件名&#xff1a;sq.h /*******************************************/ #ifndef SQ_H #define SQ_H #include <iostream> #include <stdexcept> using namespace…

文档一键生成组织架构图,这款在线AI工具让你事半功倍!

在呈现公司组织架构或部门层级时&#xff0c;经常会用到组织架构图&#xff0c;组织架构图是一种直观的可视化工具&#xff0c;用于展示一个组织内部的层级结构和各部门之间的关系。 在制作组织架构图时&#xff0c;如果拿到的是清晰的人员关系&#xff0c;绘制起来还比较简单…

LeetCode 热题100-64 搜索二维矩阵

搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c…

访问Swagger:java.lang.NumberFormatException: For input string: ““

你们好&#xff0c;我是金金金。 场景 启动项目&#xff0c;接着访问Swagger 依赖版本如下&#xff1a;1.5.20 查看控制台输出&#xff1a;报错如下 排查 首先看报错&#xff1a;For input string: “”&#xff1a;这个错误表明程序尝试将一个空字符串&#xff08;“”&#x…

JavaWeb JavaScript 9.正则表达式

生命的价值在于你能够镇静而又激动的欣赏这过程的美丽与悲壮 —— 24.8.31 一、正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用简单的API对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 1.语法 var pattnew RegExp(pattern,modi…

【qt踩坑】路径含中文导致的报错,以及 OpenGL的链接报错

​ 背景 本来是准备采用VSQt插件的方式来开发Qt的&#xff0c;但是学习过程中发现&#xff0c;这种模式还是没有直接用Qt Creator 开发来的方便&#xff0c;插件这种模式坑多&#xff0c;功能不完善。 不过在直接使用Qt Creator的时候也踩坑了&#xff1a; (最后发现&#x…

【达梦】“6103无效的时间类型值”解决办法

场景 使用DM数据迁移工具将excel文件里的数据导入到达梦数据库里。提示“无效的时间类型值”。 尝试 一看就是createTime等跟时间相关的字段出问题了。createTime在库里的数据类型为timeStamp。 尝试1&#xff1a;修改excel里此字段的类型&#xff0c;依旧报错。此方案失败。…

单向链表与双向链表

当使用单向链表查看链表中某个节点的数据&#xff0c;可以使用快慢指针法 快慢指针&#xff1a; 快慢指针是一种在链表和数组中常用的算法技巧&#xff0c;主要用于解决链表或数组中的问题&#xff0c;如检测环 存在、找到环的入口、计算链表的中点等。快慢指针的核心思想是…

【数学建模备赛】Ep07:灰色预测模型

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、&#xff1a;灰色预测模型☀️☀️☀️1. 灰色系统引入2. 方法3. 步骤① 累加法产生新序列② 利用部分和序列相邻两项的加权平均产生序列z③ 建立关于原始数据与序列z的灰微分方程④ 利用最小二乘法确定灰微分方程…

Orcad封装怎么添加

1 点击文件&#xff0c;添加库 2 添加封装 3 画二极管封装 1.先设置网格。 2..Library-->>olb文件 右键New Part 3.文件名建议规范命名。 4.place ployline 同时按shift画任意形状的封装 5 图形填充

18.求三数之和

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;双指针&#xff09; 这道题目与上一道题&#xff0c;求有效三角形的个数&#xff0c;十分类似&#xff0c;都是使用双指针算法来解决问题。 先进行排序&#xff0c;然后利用单调性进行调整&#xff0c;逐步逼近正确…

25届计算机毕业设计,如何打造Java SpringBoot+Vue博客系统,一步一脚印,开发心得分享

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Proteus 仿真设计:开启电子工程创新之门

摘要&#xff1a; 本文详细介绍了 Proteus 仿真软件在电子工程领域的广泛应用。从 Proteus 的功能特点、安装与使用方法入手&#xff0c;深入探讨了其在电路设计、单片机系统仿真、PCB 设计等方面的强大优势。通过具体的案例分析&#xff0c;展示了如何利用 Proteus 进行高效的…

JVM垃圾回收算法:标记-清除算法 、复制算法、 标记-整理算法、 分代收集算法、可达性分析算法

文章目录 引言I 标记回收算法(Mark-Sweep)算法思路不足II 复制算法(Copying)算法的思路缺点案例III 标记整理算法(Mark-Compact)思路IV 分代收集(以上三种算法的集合体)分代收集算法思想新生代算法:Minor GC使用复制算法老年代 GC算法:(Major GC / Full GC)使用标记…

【内网渗透】最保姆级的春秋云镜Certify打靶笔记

目录 flag1 flag2 flag3 flag4 flag1 fscan扫外网 访问8983端口&#xff0c;发现配置项有log4j 【vulhub】Log4j2&#xff1a;CVE-2021-44228漏洞复现_vulhub cve-2021-44228-CSDN博客 /solr/admin/collections?action${jndi:ldap://z5o5w8.dnslog.cn} dnslog测出可…

【数据结构】详解二叉搜索树及其实现

前言&#xff1a; 二叉搜索树是红黑树等的前身&#xff0c;掌握其操作和性质很重要。总结自用and分享。 目录 一、基本概念 二、其常见操作及其实现 1.定义节点 2.查找元素 3.插入元素 4.删除元素【难点】 三、性质分析 一、基本概念 如下所示&#xff1a;对于所有节点都…

小阿轩yx-Kubernetes高级调度

小阿轩yx-Kubernetes高级调度 前言 前面 Kubernetes 的调度基础实现了见表格自己的服务器部署到 Kubernetes在生产环境中&#xff0c;调度远比想象的要复杂 比如 某些程序只能部署在固定的几台机器上某些机器只能部署指定的 Pod节点挂了怎么快速修复节点挂了如何让影响最小…

DDS基本原理--FPGA学习笔记

DDS信号发生器原理&#xff1a; timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2024/09/04 15:20:30 // Design Name: hilary // Module Name: DDS_Module //module DDS_Module(Clk,Reset_n,Fword,Pword,Data);input Clk;input Reset_n;input [31:0]…

OpenBLAS QR decompose example

1. 安装 OpenBLAS release 版本&#xff1a; Makefile&#xff1a; all:wget https://github.com/OpenMathLib/OpenBLAS/archive/refs/tags/v0.3.27.tar.gztar zxf v0.3.27.tar.gz make -C OpenBLAS-0.3.27 FCgfortran -jinstall:make -C OpenBLAS-0.3.27 install PREFIX../lo…

字节跳动一面

字节跳动一面【C后端开发】 base &#xff1a; 深圳 岗位&#xff1a;C后端开发 时间&#xff1a; 2024/8/30 文章目录 基本介绍C语言1. 堆栈内存是否连续&#xff0c;为什么&#xff1f;2. int i0; i ; 两个线程同时执行10000次&#xff0c;i最终的数值是多少&#xff1f;3.…