作者 | Maple小七

整理 | NewBeeNLP

稠密向量检索巨大的内存占用一直是限制其落地的一大瓶颈。实际上,DPR生成的768维稠密向量存在大量冗余信息,我们可以通过某种压缩方法以少量的精度损失换取内存占用的大幅下降。

今天分享一篇来自EMNLP 2021的论文,讨论了三种简单有效的压缩方法:

  • 无监督PCA降维

  • 有监督微调降维

  • 乘积量化

实验结果表明简单的PCA降维有着很高的性价比,能够以少于3%的top-100准确度损失换取48倍的压缩比,以少于4%的top-100准确度损失换取96倍的压缩比。

  • Simple and Effective Unsupervised Redundancy Elimination to Compress Dense Vectors for Passage Retrieval

Introduction

近两年来,以DPR为代表的稠密向量检索模型在开放域问答等领域得到了广泛的应用。虽然DPR能够提供更准确的检索结果,但DPR所生成的向量索引的内存占用是很大的。

比如当我们对维基百科建立索引时,基于倒排索引的BM25仅占用2.4GB的内存,而DPR生成的768维稠密向量则需要占用61GB的内存,这比BM25足足多出了24倍,而这多出的24倍的内存在多个数据集上仅换取了平均2.5%的指标提升(Top-100 Accuracy)。

可以猜测的是,DPR生成的768维稠密向量或许太大了,可能是存在大量冗余的,我们可以尝试用少量的精度损失换取内存占用的大幅下降。针对这个问题,本文探索了三种简单有效的稠密向量压缩方法,包括主成分分析(Principal Component Analysis, PCA)、乘积量化(Product Quantization, PQ)和有监督降维(Supervised Dimensionality Reduction)。

Quantifying Redundancy

首先,我们先确认DPR稠密向量是否存在冗余,作者给出了两个常用指标:PCA的「解释方差比」(explained variance ratio),以及和的「互信息」(mutual information)。

PCA利用特征分解将一组可能存在相关性的向量变换到线性无关的特征向量构成的的坐标系下,并保留方差较大的方向,丢弃方差较小的方向,而解释方差比则是度量PCA降维效果的指标:

其中是从大到小第个的特征值对应的方差,和分别表示PCA降维前和降维后的维度。该比值说明了保留前个特征向量能保留原始稠密向量方差的比例。

另一种衡量向量冗余度的方法是计算和的互信息,互信息可以根据公式得到:

其中可以利用DPR的优化目标近似计算:

402 Payment Required

互信息的上界是,为了和PCA对比,我们可以对互信息做标准化。

经过不同程度的PCA降维,解释方差比和标准互信息随向量维度的变化趋势如下图所示。我们可以发现,200维左右是一个甜区,「将768维的向量降维到200维,降维后的向量能够保留90%的方差和99%的互信息,而进一步降维会导致信息量的急速下降。」

Dense Vector Compression

接下来,我们尝试三种简单的方法来压缩稠密向量:

  • 「Supervised Approach:」 我们可以简单地在双塔编码器的顶部分别增加两个线性层

    和来降维,在训练时可以冻结下层参数,仅微调线性层,同时我们还可以增加一个正交规范化损失鼓励和互相正交,这能使得降维后的点积相似度和降维前的scale是一致的。

  • 「Unsupervised Approach:」 我们可以将和混在一起,然后对这一向量集拟合一个线性PCA变换,在推理阶段,使用拟合到的PCA变换对DPR生成的向量进行降维。

  • 「Product Quantization:」 我们还可以使用乘积量化来进一步压缩向量大小,其基本原理是将维的向量分解成个子向量,每个子向量采用-means量化,并使用比特存储。比如,一个维的向量占用了比特,通过将其分解为个比特的子向量,该向量的大小便压缩到了比特,即原始大小的,平均来说,每个维度所占用的比特数从降低到了。

Experiment & Results

作者在NQ、TriviaQA、WQ、CuratedTREC、SQuAD上测试了DPR的top-准确率(前个召回结果中至少有一个正确的比例),实验细节可参见原文。

Dimensionality Reduction

我们首先对比有监督降维和无监督降维的表现,其中PCA-*Linear-*分别是无监督PCA降维和有监督微调降维(仅微调线性层)的结果,而DPR-*表示不冻结下层参数,与线性层联合微调的结果。可以发现,在向量维度较大的时候(、),无监督PCA的表现更好,当向量维度较小的时候(),有监督微调的表现会更好,然而这时候模型性能下降得也非常明显,因此总体来说无监督PCA更有实用价值。

虽然理论上Linear-*可以学习到PCA-*拟合的线性映射,但想要让参数收敛到一个好的解并不简单。另外,冻结下层参数(Linear-*)比不冻结(DPR-*)的结果都要好,这同样是训练不充分所导致的。综上,在大多数情况下,我们仅需要做简单的线性PCA变换,就能获取很不错的压缩比了。

Product Quantization

乘积量化是一种非常有效的压缩方法,作者在上述实验结果的基础上进一步加入了乘积量化,实验结果如下表所示,其中PQ-2表示经过量化之后每个维度所占用的比特数为。从下表可以看出,PQ-1压缩过于激进了,虽然其压缩比是PQ-2的两倍,但指标下降却不止两倍,这是很不划算的。

综上,我们认为PCA降维加乘积量化是最好的压缩方式,如果我们将指标下降幅度限制在平均4%以内,我们可以使用PCA-128+PQ2将稠密向量压缩96倍,将维基百科的向量索引的内存占用从61GB降低到642MB,同时将推理时间从7570ms降低到416ms。

Hybrid Search

大量研究已表明结合稀疏向量检索(BM25)和稠密向量检索能够提升性能,其中最简单有效的方法是对分数做线性加权求和:

402 Payment Required

这里我们简单地设定,即稠密检索和稀疏检索等权。

加入混合检索可以进一步提升性能,下图展示了不同压缩方法的检索准确率和索引大小的关系,其中每条曲线从左到右依次为PQ1PQ2w/o PQ,图中的黑色虚线为帕累托边界,原始的768维DPR向量并没有落在帕累托边界上,表明其的确有改进的空间。具体来说,「PCA-256+PQ2+Hybrid Search的压缩策略将61GB的索引大小降低到了3.7GB,其Top-100准确率甚至比原始DPR更好(+0.2%)。」

Discussion

限制稠密向量检索模型落地的一大瓶颈就是推理时延和内存消耗的问题,这篇论文通过实验证明了简单的主成分分析加上乘积量化,在辅以稀疏向量检索,就能在保证准确度的前提下大幅减少内存占用,提升检索速度,颇具实用价值。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

END -

万物皆可Graph | 当推荐系统遇上图神经网络(四)

2022-02-07

业界分享 | 美团搜索排序实践

2022-01-28

硬核!一文梳理经典图网络模型

2022-01-25

从 Google 离职了!

2022-01-16

向量检索模型落地:瓶颈及解法!相关推荐

  1. 【NLP】向量检索模型落地:瓶颈及解法!

    作者 | Maple小七 整理 | NewBeeNLP 稠密向量检索巨大的内存占用一直是限制其落地的一大瓶颈.实际上,DPR生成的768维稠密向量存在大量冗余信息,我们可以通过某种压缩方法以少量的精度 ...

  2. 双塔模型的瓶颈究竟在哪?

    作者 | Maple小七 整理 | NewBeeNLP 开放域问答系统的泛化性和鲁棒性一直是一个业界难题,其中位于最顶层的稠密检索模型(Dense Retriever)常常被诟病其OOD泛化能力不如传 ...

  3. 算法工程 # 深度学习算法落地最后一公里:工业界中的大规模向量检索

    前言:现代深度学习实践中很多场景其实都是对输入数据进行处理.嵌入,最终获得一个 embedding,然后对 embedding 进行相似度检索,而工业界中的被检索数据往往是海量的,因此深度学习模型落地 ...

  4. 开发者的520!11位业界大咖齐聚,深度解读AI大模型落地“解法”

    明天就是"520"了,在这个特殊的日子里,面向开发者的AI告白盛会--WAVE SUMMIT 2022深度学习开发者峰会即将准点上线! 随着数据井喷.算法进步以及算力的突破,效果好 ...

  5. 向量检索的索引构建算法综述

    目录 VectorRetrieval github 落地场景 背景 框架 检索模型--暴力搜索.倒排索引 检索模型--kd-Tree.Annoy KD-Tree: Annoy: 检索模型--LSH 检 ...

  6. 蚂蚁金服 ZSearch 在向量检索上的探索

    图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享 引言 ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索, ...

  7. 13 种高维向量检索算法全解析!数据库顶会 VLDB 2021 论文作者干货分享

    编者按: 以图搜图.商品推荐.社交推荐等社会场景中潜藏了大量非结构化数据,这些数据被工程师们表达为具有隐式语义的高维向量.为了更好应对高维向量检索这一关键问题,杭州电子科技大学计算机专业硕士王梦召等人 ...

  8. AAAI 2023 | 基于多模态标签聚合的视频检索模型TABLE,多项SOTA

    ©作者 | QQ浏览器搜索技术中心.腾讯PCG ARC Lab 来源 | 机器之心 近年来,互联网短小视频内容的爆发式增长,对视频 - 文本检索(Video-Text Retrieval)的能力提出了 ...

  9. 《搜索引擎-信息检索实践》7.2.1 分类应用与检索/BM25检索模型

    1.简介 在所有的二元检索模型中,文档会被归为两类,相关文档和不相关文档.我们的任务是确定新来的文档是属于相关文档还是不相关文档. 如何判断相关与否,我们认为新来的文档如果属于相关文档的概率大于不相关 ...

最新文章

  1. mysql的基本知识
  2. 2-4 js基础-事件对象小结
  3. Angular html property的值如何被更新的
  4. [html] iframe框架都有哪些优缺点?
  5. java数组元素是类_Java数组及其常用类
  6. xquery删除_XQuery实例删除SQL XML文档
  7. php 二进制 保存文件,PHP打开一个二进制文件,修改了内容如何再保存回去呢?...
  8. 求出字符“2013-9-8”与“2013-10-1”相差的天数
  9. 学习面向对象的第一天,感觉还好啦
  10. oracle 定时器调用存储过程
  11. java NumberFormat数字格式化
  12. android后厨打印机漏单,后厨打印丢单解决方案
  13. NC65新增按钮、新增按钮拦截器,某个字段制作超链接
  14. 【Eclipse中的Preferences窗口中没有Server的解决方案】【Eclipse配置Tomcat】
  15. c#学习笔记之八 函数的代表delegate的用法:c# 求 三角函数 指数函数 积分
  16. FFA 2021 专场解读 - 平台建设
  17. 免费资源分享(六) Unity3D 雷达实时定位插件
  18. 20-Django REST framework-Serializer序列化器
  19. ADS仿真3_双枝短截线匹配电路设计
  20. Python如何通过主函数调用类

热门文章

  1. 赛锐信息:SAP 程序优化
  2. 模型优化在风控中的运用(全)
  3. asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
  4. JavaScript异常处理
  5. okHttp3 源码分析
  6. Request介绍及演示样例 PART1
  7. 单链表的尾插,头插,遍历,查找和插入
  8. 1.1 STL 概述
  9. ETL__pentaho__SPOON_PDI
  10. mysql基础之存储引擎