论文解读《Revisiting Neural Retrieval on Accelerators》

news2024/10/6 1:41:52

论文链接:https://arxiv.org/pdf/2306.04039

一、摘要

信息检索和推荐应用中,检索任务是从大规模的语料库中找到一小部分相关的候选项。检索的关键组成部分是建模(用户,物品)的相似度,通常表示为两个学习嵌入向量的点积。这种形式允许高效的推理,通常称为最大内积搜索(MIPS)。尽管点积在实践中非常流行,但它无法捕捉复杂的用户-物品交互,这些交互是多方面的且可能具有较高的级别。因此,我们研究了在加速器上的非点积检索设置,并提出了混合对数几率(MoL)方法,它将(用户,物品)的相似度建模为基本相似度函数的自适应组合。这种新的形式具有表达力,可以建模高级别的用户-物品交互,并进一步适用于长尾数据。当与分层检索策略(h-indexer)相结合时,我们能够将MoL扩展到具有1亿条语料库的单个GPU上,并且延迟与MIPS基准相当。在公开数据集上,我们的方法可以提高命中率(HR)高达77.3%。在Meta公司的大型推荐平台上进行的实验显示出较强的指标提升和减少的流行度偏差,验证了所提出方法的性能和改进的泛化能力。

二、这篇论文做了什么

这是一篇双塔模型DSSM搜索优化的工作,传统的DSSM通过点积运算实现高效的向量查询,但是忽略了用户-物品之间复杂的交互信息,因此提出了改进希望能够学习到用户-物品之间复杂的交互信息。传统的DSSM检索是直接从海量数据中通过高纬向量查询算法得到topK个最相似的结果,而这篇工作的做法是:
(1)先通过h-indexer算法从海量数据中检索得到1e5个最相似的结果。
(2)从1e5个结果中采用MoL算法进行用户-物品的复杂信息计算得到更精确更相似的topK个物品结果。

大体的做法就是这样,但是这篇工作还涉及到很多工程方面的优化,比如向量压缩,浮点数计算优化等,去提升计算查询的速度,同时减少计算资源消耗。

2.1 h-indexer检索

在这里插入图片描述
h-indexer的检索流程如上图所示,主要流程是:

(1)输入所有参数,data表示海量的物品向量集合,query表示用户的查询向量信息,k表示最终需要返回给用户的物品数目,\lambda表示超参数。
(2)随机打乱data的索引,并选择\lambda个索引存入randIndices中,并利用点积运算计算这\lambda个物品向量与用户查询向量的相似度分数存入到sampledSimilarities中。
(3)选择相似度分数最高的第k/|data| * \lambda个相似度分数赋值给t,作为一个阈值。
(4)再去海量物品向量集合中找点积相似度分数大于t的物品,作为查询结果。

进一步涉及到3个细节优化处理。

2.1.1 点积运算优化

在这里插入图片描述
整理查询过程中GPU资源消耗如上述公式所示,可以直观看到,其计算强度可以粗略看成与批处理大小B成正比,与输入数据的字节宽度(byteW)成反比。因此提出利用INT8量化用户的请求,与半精度相比,由于INT8的存在,点积显示出1.5倍的速度提升。此外,INT8 GEMM的输出为INT32,可以直接通过顶部-k选择进行处理,而无需像常规做法中那样应用缩放/偏置进行反量化为FP32。

2.1.2 选择top-K个结果

在包含X个物品的集合中查找top-k’的时间复杂度为Ω(X log k’),这个复杂度由于较大的k’值而变得更加严重。因此,论文提出了一种近似的top-k方法,随机采样物品集合的一小部分来估计top k’项的阈值t,然后找到满足该阈值t的最多k’个样本。这将时间复杂度降低为Ω(X + rX log k’),其中采样比例r的取值范围为0.01到0.1。在实际生产环境中,这种改变比精确的top-k方法快约2.5倍,并且减少了h-indexer的延迟30%。值得一提的是,我们常用的用于查询高维向量top-k的算法为FAISS和TPUKNN,这两种算法可以非常高效快速的返回top-k个结果,但是由于其算法本身的设计逻辑问题,其k不能取很大,一般都是2048以内,而本文提出的算法是希望该步骤能查询返回1e5的结果,因此FAISS和TPUKNN算法不太适用。

2.1.3 索引选择

在算法2中,进一步优化了top-K选择后的索引选择操作。从一个包含1000万个项的池中提取和连接10万个项的嵌入向量是一项昂贵的操作,吞吐量约为0.15 TB/s。为此,本文设计了一个优化的GPU内核,通过利用数据局部性和高效的缓存机制,实现了2倍的吞吐量提升。

2.2 MoL检索

利用h-indexer算法得到1e5个结果后,现在进一步从1e5个结果中找出更符合我们需要的top-k个结果,因此引出了本文设计的MoL检索算法。算法流程如下图所示。
在这里插入图片描述

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

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

相关文章

TypeScript写好了,怎么运行啊!!!

环境搭建 Vs code Ctrlshiftp打开首选项—》打开工作区设置—》搜索Typescript 推荐开启的配置项主要是这几个: Function Like Return Types,显示推导得到的函数返回值类型;Parameter Names,显示函数入参的名称;Par…

搭建PHP开发环境:Linux篇

目录 一、引言 二、环境准备 三、安装Web服务器(Apache) Ubuntu/Debian系统: CentOS/Red Hat系统: 四、安装PHP解释器 Ubuntu/Debian系统: CentOS/Red Hat系统: 五、配置Apache以支持PHP Ubuntu/…

我在高职教STM32——LCD液晶显示(1)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…

基于CNN的掩码自编码器微调用于分类任务

开源仓库 JJLi0427/CNN_Masked_Autoencoder: Design a patches masked autoencoder by CNN (github.com)https://github.com/JJLi0427/CNN_Masked_Autoencoder CNN自编码器 前面的文章中我们模仿MAE的思路用CNN做了一个掩码自编码器 动手小实验,用CNN来构建Mase…

C++语法01 基本框架

目录 什么是 C ? 新建源程序 保存源程序 程序基本框架 #include using namespace std; int main() return 0; 编译 运行 什么是 C ? C语言,是基本的程序设计语言之一【程序设计语言,简单的来说就是编写代码来操控计…

【漏洞复现】Jenkins文件读取漏洞(CVE-2024-23897)

简介 jenkins是啥? 简单理解就是:一个开源的、用于方便代码管理、部署的基于web的平台,用于提高团队开发效率(生产力)。 Jenkins CLI 任意文件读取漏洞 CVE-2024-23897 是怎么回事? Jenkins提供了一个命令…

哈喽GPT-4o——对GPT-4o 文本创作的思考与看法

目录 用法1:创作小说用法2:创作散文用法3:创作诗歌1、古诗2、现代诗 用法4:创作儿童故事用法5:创作剧本 大家好,我是哪吒。 都说ChatGPT4o是目前文本创作的最强大模型,它都可以用于哪些方面的文…

Mac 安装HomeBrew(亲测成功)

1、终端安装命令: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"执行后,没有安装git,会先安装,安装后再执行一下命令。 2、根据中文选择源安装 3、相关命令 查看版本号&a…

Maven下载安装、环境配置(超详细)(包括Windows、IDEA)

目录 一、引言 二、下载和安装 Maven (1)首先保证 Java 的环境是正常的。 1、电脑桌面上右击 " 此电脑 ",点击属性。 2、点击高级系统设置。 3、点击环境变量。 4、找到系统变量中的 Path。 5、点击新建,然后把…

win10重装系统如何操作,附上详细系统重装图文教程(2024年新)

win10重装系统如何操作呢?电脑使用时间长了,会出现各种各样的问题,如重要的系统文件被删除导致电脑无法正常运行,电脑运行内存空间不足,电脑卡顿等。Win10重装系统很简单,这里分享超详细的重装系统方法&…

20240611-WWDC2024-visionOS 2/Apple Intelligence/ARKit

目录 1 visionOS 2 1)从2D图像提取左右眼的视角,生成空间照片——利用机器学习 2)提供丰富的API和框架 2 Apple Intelligence 1)自动对通知优先级排序、缩略通知、专注模式 2)Siri可以根据屏幕内容执行相关操作 …

AI赋能——六月转折点的高效赋能策略

致所有内容创作者的2024财富密钥:六月转折点的高效赋能策略 随着六月的脚步渐近,我们正站在一个前所未有的时代转折点上——一个由人工智能引领的变革时代。在这个关键时期,我们诚挚地向您推荐一套专为自媒体量身定制的效率提升方案&#xf…

用python克隆了前男友的声音

声音克隆开源项目推荐:MockingBird 项目简介 MockingBird 是一个由开源社区开发的声音克隆项目,托管在 GitHub 上。该项目旨在通过深度学习技术实现高质量的声音克隆,使用户能够合成任意人的声音,并生成自然、流畅的语音输出。M…

温湿度采集与OLED显示

目录 一、什么是软件I2C 二、什么是硬件I2C 三、STM32CubeMX配置 1、RCC配置 2、SYS配置 3、I2C1配置 3、I2C2配置 4、USART1配置 5、TIM1配置 6、时钟树配置 7、工程配置 四、设备链接 1、OLED连接 2、串口连接 3、温湿度传感器连接 五、每隔2秒钟采集一次温湿…

这个开源软件,送给爱读书的你!!【送源码】

对于喜欢阅读的人来说,一定经历过从一本厚厚的修仙书籍到MP3、MP4的阅读时代,再到现今的手机软件。 但是现在的阅读软件经常会遇见以下问题:比如广告弹窗太多,排版乱,甚至很多的APP都进入会员时代,再加上一…

Python爬虫实战案例之——MySql数据入库

Hello大家好,我是你们的南枫学长,咱们今天来学——爬虫之MySql数据入库。 话不多说,导入咱们的老朋友: Pymysql就是我们Python里面的mysql库,主要功能就是用来连接MySql数据库,那么下载还是一样的操作去进…

报表开发工具DevExpress Reporting v23.2 - 增强PDF导出、多平台打印等

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v23.2…

05、部署 YUM 仓库及NFS 共享服务

目录 5.1 部署YUM软件仓库 5.1.1 准备网络安装源(服务器端) 1、准备软件仓库目录 2、安装并启用vsftpd服务 5.1.2 配置软件仓库位置(客户端) 5.2 使用yum工具管理软件包 5.2.1 查询软件包 1、yum list——查询软件包列表 …

JavaScript日期对象、DOM节点操作(查找、增加、克隆、删除)

目录 1. 日期对象2. DOM节点操作2.1 查找节点2.2 增加节点2.3 克隆节点2.4 删除节点 1. 日期对象 实例化日期对象: 获取当前时间: new Date()获取指定时间: new Date(2023-12-1 17:12:08) 日期对象方法: 方法作用说明getFullYear()获得年份获取四位年份getMonth…

建筑学跑路:揭秘热门转行新选择!

话说建筑学真的是我见过最关心同行的专业,每个建筑学跑路的帖子下面都有人问:你跑哪里去了? 很多人表示,我也想跑 当然不仅建筑学,园林的、城规的、土木的也会来凑热闹: 很多小伙伴分享了自己的转行经历&a…