【RAG 论文】Adaptive-RAG:自适应地根据 query 难度来选择合适的 RAG 模型

论文:Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity
⭐⭐⭐⭐
Code:github.com/starsuzi/Adaptive-RAG
NAACL 2024,arXiv:2403.14403

文章目录

    • 一、论文速读
    • 二、实现细节
      • 2.1 三种难度的 user query
      • 2.2 user query 的难度分类
    • 三、实验结果及分析
      • 3.1 Adaptive-RAG 的模型效果
      • 3.2 classifier 的效果
    • 总结

一、论文速读

这篇论文提出了 Adaptive-RAG 方案,特点是在 QA 场景中,能够自适应地根据 user query 的难度选择合适的 RAG 模型来解决,比如对于直接性的 query,就可以直接让 LLM 回答,对于简单的 query,只需要一轮 retrieval 就可以让 LLM 完成回答,而对于复杂的需要 multi-hop 的 query,则需要多轮 retrieval 才能让 LLM 完成回答。

本论文指出了以下两个观察到的现象

  • 用户大多数的问题都是简单的问题,少数情况下才是需要多条推理的复杂问题
  • 简单的问题使用复杂的 RAG 模型存在开销的浪费,而复杂的问题又无法用简单的 RAG 模型来解决

为此,本论文才提出了如下的方案(最右边的 C 就是本论文提出的 Adaptive-RAG 的思路):

不同的 RAG 方案

如上图,在 C 所示的思路中,存在一个 classifier 来对 user query 做困难度分类,然后再交由三种用于处理不同复杂的 RAG 模型的其中一个来完成解决。

二、实现细节

2.1 三种难度的 user query

本工作将 user query 的难度分为了三种,并给出了三种对应的解决策略:

  1. Non Retrieval for QA:对于 Straightforward Query,不需要经过检索,直接由 LLM 回答即可。
  2. Single-step Approach for QA:对于 Simple Query,只需要经过一轮检索即可获取支持 LLM 回复的 doc
  3. Multi-step Approach for QA:对于 Complex Query,需要多步、复杂的检索才能得到答案

2.2 user query 的难度分类

我们已经定义了 user query 的难度有三类,对于一个具体的 user query,如何将其分类呢?

这里就是训练了一个小语言模型作为 classifier,输入是 user query,输出是 query 的难度。原论文使用了 T5-large 并再训练得到的 classifier。

但是,目前并没有可用的 query-complexity pairs 数据集,因此,论文介绍了该工作是如何收集到用于训练 classifier 数据集的。query-complexity paris 是借助于已有的 QA 数据集来构建,为已有的 QA 数据集的 pair 标注 complexity label 来构建本实验所需的数据集。该数据集的收集主要包括两个过程

  1. Generate silver data from predicted outcomes of models:意思是说,假如难度分成 [A, B, C] 三个等级,A 最简单,C 最困难,那么给定一个 query,首先先让 LLM 直接回答,如果 LLM 回答正确,则将 query 标记为 A;如果 LLM 经过一轮检索后生成正确答案,则将 query 标记为 B;如果 LLM 经过多轮检索后生成正确答案,则将 query 标记为 C。
  2. Utilize inductive bias in datasets:经过第一个过程,有些 query 仍然无法被标记,因为可能三种 RAG 模型都没有生成正确答案,这个时候只能利用这个过程来完成标注。这时候利用一个特点:这些 benchmark datasets 的数据都有一定的偏向性,比如一个 dataset 可能都比较偏 single-hop,而另一个 dataset 可能就都比较偏 multi-hop,对于偏 single-hop 的则直接标为 B,否则直接标为 C。

经过以上两个过程,我们的数据集就构建出来了。

三、实验结果及分析

这里作者做了不少的工作,甚至还包括了 classifier 的模型效果。

3.1 Adaptive-RAG 的模型效果

作者选用的数据集都有点旧了,single-hop 用的是 SQuAD、Natural Questions、TriviaQA,multi-hop 用的是 MuSiQue、HotpotQA、WikiMultiHopQA。

baseline 主要选择的是 No Retrieval、Self-RAG 和 Multi-step Approach:

Adaptive-RAG 效果

  • 相比于 Self-RAG,准确率等效果提升很明显,但由于需要做更多的检索和预测,耗时上有了稍微明显的提升
  • 相比于 Multi-step Approach,耗时明显降低了,至于效果也降低了一些

总体上来看,Adaptive RAG 算是有效的提升了,它以少量时间为代价,提升了最终的问答效果。

这里有个小问题,论文给出的数据中,Self-RAG 的效果也有点太差了。。

3.2 classifier 的效果

如下是论文给出的不同 size 的 classifier 的效果对比:

classifier 效果

额,,其实这算是文本分类的 classifier 模型,但效果确实不太行,整体 ACC 只有 54.52%。

另外可以看出,classifier 的模型大小对效果影响并不大(都表现一般),这就可以根据实际部署情况来决定了。

总结

论文指出的观察到的现象确实是存在的,即用户大多数的问题都是简单问题,少数情况下才是复杂的问题,本工作提出的根据 user query 的复杂程度来选择 RAG 模型能够有效的在 effectiveness 和 efficiency 之间取得一个平衡。

另外,觉得公众号 Adaptive-RAG:根据难度自适应检索方案 | 叉烧 给出的总结与反思很不错,这里做一个引用摘抄:


论文读完了,聊一下本文读完的感想,后续会有文章展开聊。

  • 多次查询确实是有问题的,有些查询可能并不需要那么多,可能是多余的甚至是反效果的,本文的自适应确实是有一定收益。
  • 新增一种划分策略的思路,可以通过难度来划分应对策略,这个不仅在处理性能上有收益,在最终效果上也有收益。
  • 分类这块,可以看到这个分类的效果确实比较差,个人感觉原因主要是在分类问题的定义上,难度和大模型、和知识库支持、和问题领域之类的差异会比较大,本身分类效果不好应该是意料之中,不过好奇是这个分类器的优化会给RAG整体效果带来多大收益仍未可知。
  • self-rag被放进来进行对比,结果发现非常拉胯,有些让人出乎意外。感觉这里有打开方式、适应场景等的问题,有展开分析的价值。

最近读的几篇论文,大都是围绕着选择适配大模型的知识的策略,内部进行组件的划分,从而提升最终的预测效果,配合目前工业界对业务落地RAG的观察,我自己能看到后续RAG在工业界形成的一种范式,原来是有模糊提到的,但是现在的信心,应该是越来越足了。

  • 检索和大模型之间是先后的关系,先检索后大模型推理,当然这个应该是显而易见的,但从整体架构而言,这点绕不开。
  • 检索横向铺开,根据不同的业务需求和资源定制不同的检索策略,因为横向,所以允许多标签,形成多路召回。
  • 检索结果出来后,进行多内容的合并、筛选和判别,选择最合适的结果送入大模型,呼应第一条里提及检索模块和大模型模块之间的先后关系。

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

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

相关文章

使用FPGA实现逐级进位加法器

介绍 逐级进位加法器就是将上一位的输出作为下一位的进位输入,依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构,应该很容易理解吧。 下面我也列举了一位加法器,可以看下。 电路结构 设计文件 1位加法器 librar…

Docker 的数据管理 端口映射 容器互联 镜像的创建

目录 概念 概念 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。总结:因为容器数据是临时保存的为了安全,就要让数据保持持久化。 1&#…

OceanBase单机版安装体验

前情提要 上周OceanBase开发者大会过后,作为观察员也来体验一下OB的安装。业内有某个国产安装用了两周,这种其实有点劝退了。话说就是10年前,没搞过Oracle的人也不用两周安装一个数据库啊。今天看看OB的(一体化)安装。…

计算机网络----第十三天

DNS协议和文件传输协议 DNS: 含义:用于域名和IP地址的互相解析 DNS域名: 背景:通过IP地址访问目标主机,不便于记忆 域名的树形层次化结构: ①根域 ②顶级域:主机所处的国家/区域&#xf…

一纸歉文难挽人心,特步站在了“悬崖边”

撰稿|多客 来源|贝多财经 日前,一场马拉松赛事风波把特步推上了舆论风口。 此次事件说起来也并不复杂,在4月14日举办的2024北京半程马拉松赛最后冲刺的几百米,几位外籍选手在超过何杰后,对何杰做出回头看、摆手示意的动作&…

谁是存储器市场下一个“宠儿”?

AI浪潮对存储器提出了更高要求,高容量、高性能存储产品重要性正不断凸显,存储产业技术与产能之争也因此愈演愈烈:NAND Flash领域,闪存堆叠层数持续提升;DRAM领域HBM持续扩产,技术不断迭代,同时3…

Spring 5源码学习

文章目录 一. 访问[spring官网], 找到Spring Framework,点击红色标记github仓库,下载对应的分支代码,本人下载5.1.x二. 安装gradle三. 调整spring-framework配置四. 开始编译五.导入idea 一. 访问[spring官网], 找到Spring Framework&#xf…

【STM32+HAL+Proteus】系列学习教程---ADC(查询、中断、DMA模式下的电压采集)

实现目标 1、学会STM32CubeMX软件关于ADC的配置 2、掌握ADC三种模式(查询、中断、DMA)编程 3、具体目标:1、将开发板单片机采集到的电压值上传至上位机串口调试助手显示。 一、ADC 概述 1、什么是ADC? ADC(Analog to Digit…

【课程发布】软考高项目十大管理ITTO宫殿记忆法新版第四版正式发布

软考高项十大管理ITTO宫殿记忆法视频课程: 平台:荔枝微课 连接:十方教育 各位软考高级信息系统项目管理师考生好,新版第四版十大管理ITTO宫殿记忆法视频课程终于发布了,之前苦等的考生终于迎来了救星,再也…

浅谈数据模型

1:事实表和维表的概述 前言:数据仓库是一种用于存储和管理大量数据的技术。其中,事实表和维表是数据仓库中的两个重要概念,首先了解一下事实表和维度表 1.事实表:是指用于存储测量“事实数据”的表,事实数…

算法学习笔记Day8——回溯算法

本文解决几个问题: 回溯算法是什么?解决回溯算法相关的问题有什么技巧?回溯算法代码是否有规律可循? 一、介绍 1.回溯算法是什么? 回溯算法就是个多叉树的遍历问题,关键在于在前序和后序时间点做一些操作…

Java基础入门day35

day35 js 简介 js:JavaScript,是一种解释性语言,动态类型、弱类型的计算机语言 它的解释器被称之为JavaScript引擎,作为浏览器的一部分,广泛用于客户端脚本语言,用来给html网页增加动态功能 问题描述&…

哈希表练习题

前言 本次博客将要写一写,哈希表的一些使用 哈希表主要是一个映射,比如数组就是一个哈希表 是一个整型对应另一个整型,介绍的哈希表还是要以写题目为例 第一题 242. 有效的字母异位词 - 力扣(LeetCode) 直接来看…

chrome插件 脚本 使用和推荐

chrome插件使用 在极简插件中可以进行下载并进行安装, 内部有安装教程在极简插件中搜索"油猴",下载一个油猴插件,并安装,可以用于下载很多的用户脚本用户脚本下载地址Greasy Fork,里面有很多实用的用户脚本供下载,并在油猴中进行管理 推荐的插件 Tampermonkey 篡改…

小红书自动互动,建立个人品牌的秘密武器!

在数字化的今天,个人品牌的重要性不言而喻。它不仅能让你在人群中脱颖而出,还能为你的事业或生意带来无尽的机会。然而,建立并推广个人品牌并非易事,需要策略、耐心和一定的工具辅助。在这里,我们要探讨的是如何利用小…

【Python数据库】Redis

文章目录 [toc]数据插入数据查询数据更新数据删除查询存在的所有key 个人主页:丷从心 系列专栏:Python数据库 学习指南:Python学习指南 数据插入 from redis import Redisdef insert_data():redis_cli Redis(hostlocalhost, port6379, db…

智慧健康旅居养老产业,做智慧旅居养老服务的公司

随着社会的进步和科技的飞速发展,传统的养老模式已经无法满足 现代老年人的多元化 需求。智慧健康旅居养老产业应运而生,成为了一种新型的养老模式,旨在为老年人提供更加舒适、便捷、安全的养老生活。随着社会的进步和人口老龄化趋势的加剧&a…

如何3分钟,快速开发一个新功能

背景 关于为什么做这个代码生成器,其实主要有两点: 参与的项目中有很多分析报表需要展示给业务部门,公司使用的商用产品,或多或少有些问题,这部分可能是历史选型导致的,这里撇开不不谈;项目里面也有很多C…

Sping源码(七)—context: component-scan标签如何扫描、加载Bean

序言 简单回顾一下。上一篇文章介绍了从xml文件context component-scan标签的加载流程到ConfigurationClassPostProcessor的创建流程。 本篇会深入了解context component-scan标签底层做了些什么。 component-scan 早期使用Spring进行开发时,很多时候都是注解 标…

项目上线流程(保姆级教学)

01:注册阿里云账户 02:登录阿里云 03:在桌面新建记事本保存个人账号密码等信息 04:完成重置密码 05:安装宝塔面板 命令行 yum install -y wget && wget -O install.sh http://download.bt.cn/install/instal…