【论文阅读】Self-DC:何时检索,何时生成?

news2024/12/27 9:52:02

对于RAG来说,什么时候利用外部检索,什么时候使用大模型产生已知的知识,以回答当前的问题?这是一个非常有趣的话题。
《Self-DC: When to retrieve and When to generate? Self Divide-and-Conquer for Compositional Unknown Questions》这篇论文正好探讨了这个问题。
文章的解决思路的核心就在于,首先得到大模型对问题的置信度分数,然后可以相应地选择处理问题的方式。将置信度评分分为[0,α-β],(α-β,α+β),[α+β,1]三个范围,其中α和β是超参数。因此,当置信度分数落在左侧([0,α−β])或右侧([α+β,1])时,可以分别调用检索-读取或生成-读取来回答。遇到不确定或令人困惑的问题时,就是(α-β,α+β)这个置信度区间的问题,将问题分解成几个子问题,旨在减少不确定性。然后,将所有子问题的答案结合起来,以提示大模型获得最终答案。
在这里插入图片描述

摘要

文章提出了一种新的方法来处理开放域问答中的组合性未知问题(Compositional Unknown Questions)。这些问题由一些已知或未知的子问题组成,传统的二元分类(已知或未知)方法在处理这类问题时变得次优和低效。为了解决这个问题,作者首次提出了一个组合性未知问题问答数据集(CuQA),并引入了一个自适应的框架,称为自划分-征服(Self-DC),使大型语言模型(LLMs)能够根据需求灵活地调用不同的方法,从而提高性能和效率。实验结果表明,Self-DC在两个数据集(CuQA和FreshQA)上的性能可与几个强基线模型相媲美,甚至更好,同时检索时间大大减少。

解决的主要问题

文章旨在解决以下问题:

  1. 组合性未知问题的识别和处理:这些问题包含多个子问题,有的可以用已知知识回答,有的需要未知知识。
  2. 高效调用不同方法:在不同的子问题上动态地使用生成-然后-读取(generate-then-read)或检索-然后-读取(retrieve-then-read)。
  3. 减少不必要的外部检索:避免对每个组合性未知问题都进行外部检索,以提高效率。

方法

为了解决上述问题,文章提出了以下方法:

  1. 数据集构建(CuQA):创建了一个新的数据集,自动收集基于维基百科的最新事件,以生成组合性未知问题。
  2. 自划分征服框架(Self-DC):提出了一个框架,该框架利用LLMs自身的置信度评分来决定是使用内部知识生成答案还是调用外部检索。框架包括以下几个关键组件:
    • 置信度评分获取:使用verbalize-based或probability-based方法来获取LLMs对问题回答的置信度。
    • 问题分解(decompose):将问题分解为多个子问题,以降低不确定性。
    • 子问题答案组合(combine-sub-qas):将分解得到的子问题的答案组合起来,形成对原始问题的最终答案。
    • 生成-然后-读取(generate-then-read):生成相关知识后,由LLMs回答问题。
    • 检索-然后-读取(retrieve-then-read):检索外部信息后,由LLMs回答问题。
      通过这种方法,Self-DC能够根据问题的复杂性和LLMs的置信度,智能地选择最合适的策略来解决问题,从而在保持高效性的同时提高回答的准确性。
      在这里插入图片描述

文章中提出的Self-DC(Self Divide-and-Conquer)框架的核心在于根据大型语言模型(LLMs)对问题的置信度分数来决定是调用外部检索还是生成已知知识来回答当前问题。具体来说,置信度分数的获取和不确定问题的分解方法如下:

置信度分数的获取

置信度分数通过以下两种方法获得:

  1. verbalize-based (verb): 指导LLMs输出0到100之间的置信度水平,这个置信度水平跟在问题答案后面。然后,将这个置信度水平重新映射到[0, 1]的范围内。
  2. probability-based (prob): 利用概率信息来计算置信度分数。具体来说,首先提示LLMs用几个词生成答案,然后获取生成内容中第i个标记的概率ˆpi。将序列中概率的平均值作为置信度分数。
    在这里插入图片描述

不确定问题的分解

当LLMs对问题的置信度分数处于不确定区间(α-β, α+β)时,采取以下步骤分解问题:

  1. 分解(decompose): 提示LLMs将总体问题系统地分解为几个更小的子问题。这些子问题的答案共同有助于推导出原始问题的解答。
  2. 迭代调用: 对于每个子问题,递归地调用Self-DC框架的主要函数,以获取每个子问题的答案。
  3. 组合子问题的答案(combine-sub-qas): 分解后,将调用主要函数进入下一次迭代,目的是得到每个子问题的答案。然后,将所有子问题的答案结合起来,以获得原始问题的答案,完成迭代。
    通过这种方法,Self-DC框架能够灵活地处理组合性未知问题,这些问题包含已知和未知的子问题。框架根据LLMs自身的置信度评分来动态地调用不同的功能,从而在必要时仅调用组合推理,而不是不加区分地对待所有问题。

终止条件

为了确保迭代不会无限制地进行下去,Self-DC设置了终止条件,包括:

  1. 子问题的数量变为1,即它可能是一个单一的问题。
  2. 迭代深度小于一个预定义的阈值t
    当满足这些条件时,将当前子问题视为未知问题,并调用检索-读取来处理。

实验结果表明,Self-DC在CuQA和FreshQA数据集上的有效性和效率上都优于几个强基线模型,展示了其在解决组合性推理问题方面的潜力。
文章提出的Self-DC方法通过动态地调用内部已知知识或外部未知知识,不仅在性能上可与现有的复杂迭代检索方法相媲美或更好,而且在检索次数上更少,展示了其在不同应用中通过精心选择超参数的潜力。

文章中定义了几个子函数(Sub-Functions)作为关键组件,以处理不同类型的问题并实现Self-DC(Self Divide-and-Conquer)框架的目标。这些子函数包括:

  1. generate-then-read: 这个子函数首先提示大型语言模型(LLMs)生成一个维基百科的背景文档来回答问题,然后要求LLMs通过引用生成的段落来回答问题。
  2. retrieve-then-read: 这个子函数使用检索器首先检索外部知识,然后要求LLMs通过引用检索到的段落来回答问题。
  3. decompose: 这个子函数提示LLMs将一个宽泛的问题系统地分解为几个更小的子问题。这些子问题的答案共同有助于推导出原始问题的解答。
  4. combine-sub-qas: 在分解之后,调用主要函数进入下一次迭代,目的是得到每个子问题的答案。然后,这个子函数将所有子问题的答案结合起来,以得到原始问题的答案,完成迭代。
  5. get_confidence_score: 这个子函数用于获取LLMs对问题回答的置信度分数,可以基于verbalize-based或probability-based方法来实现。

这些子函数共同工作,使Self-DC框架能够灵活地处理开放域问答中的组合性未知问题。框架根据LLMs的置信度分数来决定是直接生成答案、检索相关信息还是分解问题并递归求解。通过这种方式,Self-DC能够在必要时有效地调用组合推理,而不是对所有问题进行统一处理,从而提高了处理复杂问题的效率和性能。

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

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

相关文章

Transformer step by step--Positional Embedding 和 Word Embedding

Transformer step by step往期文章: Transformer step by step--层归一化和批量归一化 要把Transformer中的Embedding说清楚,那就要说清楚Positional Embedding和Word Embedding。至于为什么有这两个Embedding,我们不妨看一眼Transformer的…

3.1设计模式——Chain of Responsibility 责任链模式(行为型)

意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些对象练成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 实现 其中 Handle定义一个处理请求的接口:(可选…

Java中的ArrayList集合

特点: ArrayList中的一些方法: 1、add(Object element):向集合的末尾添加元素 add(int index,Object element):在列表的指定位置(从0开始)插入指定元素 2、size():返回列表的中的元素个数 3、get(int index):返回下标为index位置的…

鸿蒙应用ArkTS开发- 选择图片、文件和拍照功能实现

前言 在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙原生应用中,我们怎么开发这样的功能呢? 本文会给大家对这个功能点进行讲解,我们采用的是拉起系统组件来进行图片…

【注解和反射】性能分析

继上一篇博客【注解和反射】通过反射动态创建对象、调用普通方法、操作属性-CSDN博客 目录 九、性能分析 代码分析 完整代码 分析结果 九、性能分析 代码分析 (1)这部分代码是一个简单的基准测试,它测量了在Java中使用普通方式调用一个…

解决Jmeter 4.x 请求到elasticsearch 中文乱码的问题

文章目录 前言解决Jmeter 4.x 请求到elasticsearch 中文乱码的问题 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话&#…

Android kotlin 协程异步async与await介绍与使用

一、介绍 在kotlin语言中,协程是一个处理耗时的操作,但是很多人都知道同步和异步,但是不知道该如何正确的使用,如果处理不好,看似异步,其实在runBloacking模块中使用的结果是同步的。 针对如何同步和如何异…

从 MySQL 到 ClickHouse 实时数据同步 —— Debezium + Kafka 表引擎

目录 一、总体架构 二、安装配置 MySQL 主从复制 三、安装配置 ClickHouse 集群 四、安装 JDK 五、安装配置 Zookeeper 集群 六、安装配置 Kafaka 集群 七、安装配置 Debezium-Connector-MySQL 插件 1. 创建插件目录 2. 解压文件到插件目录 3. 配置 Kafka Connector …

快速搭建产品原型

今天要推荐的是一款能协助大家快速搭建产品原型的网站。对应产品经理来说,还真是个利器。 墨刀 https://modao.cc/brand 让想法快速呈现。 画APP原型图,很方便。 快速创建第一个原型文件。 在免费模版上进行修改。 感兴趣的同学去使用体验下吧~ 《Androi…

LabVIEW专栏七、队列

目录 一、队列范例二、命令簇三、队列应用1.1、并行循环队列1.2、命名队列和匿名队列1.2.1、命名队列1.2.2、匿名队列 1.3、长度为1的队列 队列是一种特殊的线性表,就是队列里的元素都是按照顺序进出。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为…

mysql reset slave reset master

mysql reset slave reset master 1、问题背景2、问题分析3、解决方法3.1、锁定主库,手动同步主库数据到从库,使得主从数据库数据一致3.1、从机执行stop slave、reset slave3.2、从机上再次指定主机的binlog文件名和偏移量3.3、从机执行 start slave3.4、…

蓝牙低能耗安全连接 – 数值比较

除了 LE Legacy 配对之外,LE Secure Connections 是另一种配对选项。 LE 安全连接是蓝牙 v4.2 中引入的增强安全功能。它使用符合联邦信息处理标准 (FIPS) 的算法(称为椭圆曲线 Diffie Hellman (ECDH))来生成密钥。对于 LE 安全连接&#xff…

MMSeg搭建模型的坑

Input type(torch.suda.FloatTensor) and weight type (torch.FloatTensor) should be same 自己搭建模型的时候,经常会遇到二者不匹配,以这种情况为例,是因为部分模型没有加载到CUDA上面造成的。 注意搭建模型的时候,所有层都应…

汽车企业安全上网解决方案

需求背景 成立于1866年的某老牌汽车服务独立运营商,目前已经是全球最大的独立汽车服务网络之一,拥有95年的历史,在全球150多个国家拥有17,000多个维修站,始终致力于为每一位车主提供高品质,可信赖的的专业汽车保养和维…

win10加入域环境

win10加入域环境 导航 文章目录 win10加入域环境导航一、关闭防火墙二、使客户端的电脑指向于域控服务器三、检验是否加入了域 一、关闭防火墙 在进行加入域服务之前,我们需要先关闭防火墙(为了不必要的麻烦) 按 winr调出运行窗口,输入 control打开控制面板 点击系统和安全点…

42. UE5 RPG 实现火球术伤害

上一篇,我们解决了火球术于物体碰撞的问题,现在火球术能够正确的和攻击目标产生碰撞。接下来,我们要实现火球术的伤害功能,在火球术击中目标后,给目标造成伤害。 实现伤害功能的思路是给技能一个GameplayEffect&#x…

JAVA毕业设计136—基于Java+Springboot+Vue的房屋租赁管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的房屋租赁管理系统(源代码数据库)136 一、系统介绍 本项目前后端分离,分为管理员、用户、工作人员、房东四种角色 1、用户/房东: …

正态性检验

t检验、方差分析(ANOVA)等参数检验都有一个共同的前提条件:样本数据必须服从正态分布,即样本数据必须来源于一个正态分布的总体,若样本数据不服从正态分布,就不能用以上参数检验对数据进行分析,…

OpenCV鼠标绘制线段

鼠标绘制线段 // 鼠标回调函数 void draw_circle(int event, int x, int y, int flags, void* param) {cv::Mat* img (cv::Mat*)param;if (event cv::EVENT_LBUTTONDBLCLK){cv::circle(*img, cv::Point(x, y), 100, cv::Scalar(0, 0, 255), -1);} }// 鼠标回调函数 void dra…

.NET 个人博客-添加RSS订阅功能

个人博客-添加RSS订阅功能 前言 个人博客系列已经完成了 留言板文章归档推荐文章优化推荐文章排序 博客地址 然后博客开源的原作者也是百忙之中添加了一个名为RSS订阅的功能,那么我就来简述一下这个功能是干嘛的,然后照葫芦画瓢实现一下。 RSS简述…