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

2024-04-26 00:20

本文主要是介绍【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在工业界形成的一种范式,原来是有模糊提到的,但是现在的信心,应该是越来越足了。

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

这篇关于【RAG 论文】Adaptive-RAG:自适应地根据 query 难度来选择合适的 RAG 模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936202

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount