React 论文《ReAct: Synergizing Reasoning and Acting in Language Models》阅读笔记

news2024/12/23 22:32:37

文章目录

    • 1. 简介
      • 论文摘要翻译
      • 动机和主要贡献
    • 2. REACT : SYNERGIZING *RE*ASONING + *ACT*ING
    • 3. KNOWLEDGE-INTENSIVE REASONING TASKS
      • 3.1 设置
      • 3.2 方法
      • 3.3 结果和观察
    • 4. 决策任务
    • 5. 参考资料

1. 简介

论文摘要翻译

虽然大型语言模型(LLM)在自然语言理解和交互式决策制定等任务中表现出了令人印象深刻的性能,但它们的推理(例如思维链提示)和行动(例如行动计划生成)能力主要被作为单独的主题进行研究。 在本文中,我们探索使用 LLM 以交错的方式生成推理轨迹和特定于任务的动作,从而实现两者之间更大的协同作用:推理轨迹帮助模型归纳、跟踪和更新行动计划以及处理异常,而行动允许它与外部源(例如知识库或环境)交互并收集附加信息。

我们将名为 ReAct 的方法应用于多种语言理解和决策任务,并展示了其相比于SOTA基线的有效性以及改进了人类可解释性和可信度。 具体来说,在问答(HotpotQA)和事实验证(Fever)数据集上,ReAct 通过与简单的维基百科 API 交互,克服了思维链推理中普遍存在的幻觉和错误传播问题;并生成类似人类的任务解决轨迹,比没有推理轨迹的基线更具可解释性。 此外,在两个交互式决策基准(ALFWorld 和 WebShop)上,ReAct仅需要一两个上下文示例进行提示,而其成功率分别优于模仿和强化学习方法达34% 和10%。

动机和主要贡献

人类智能的一个独特特征是能够将面向任务的行动与言语推理(verbal reasoning)(或内心推理inner speech)无缝结合起来。而“行动”和“推理”之间的紧密协同作用使人类能够快速学习新任务并执行稳健的决策或推理,即使在以前未见过的情况下或面临信息不确定性时。比如在厨房做饭的例子:在任意两个具体行动之间,我们可能会用语言进行推理,以便跟踪进度(“既然所有材料都切好了,我应该把水壶的水加热一下”),处理异常情况或根据实际情况调整计划(“盐用完了,用酱油和胡椒来代替吧”),并意识到何时需要外部信息(“如何准备面团?让我在网上搜索一下”)。我们还可以采取行动如打开食谱阅读菜谱、打开冰箱、检查食材等来支持推理并回答问题如“我现在可以做什么菜?”

因为大模型的涌现能力,思维链方法(chain of thought, COT)可以用来对算法、常识和符号推理等任务得到答案,但是这种思维链方法是一个静态的黑匣子,模型用自己的内部表示来生成想法,所以可能会导致推理过程出现事实幻觉和错误传播等问题(下图的1b示例)。

目前也有不少工作是用大模型在交互环境中进行规划和行动(planning and acting),但是这些方法没有考虑用大模型来对更高阶的任务进行推理。

所以本文提出ReAct框架用语言模型结合推理和行动,它prompt LLM用一种交互性的方式生成与任务相关的言语推理轨迹和动作,这使得模型能够执行动态推理来创建、维护和调整高级行动计划(行动的理由),同时与外部环境(例如维基百科)交互将附加信息纳入推理(行为到推理)。

论文的主要贡献如下:

  1. 引入了 ReAct,一种新颖的基于提示的范式,可以在语言模型中协同推理和行动来解决一般任务;
  2. 在不同的基准上进行了大量的实验,以展示 ReAct 在few-shot学习设置中相对于单独执行推理或动作生成的方法的优势;
  3. 展示系统的消融和分析实验,以了解推理任务中的行动和交互任务中推理的重要性;
  4. 分析了 ReAct 在提示设置下的局限性(即对推理和行动行为的支持有限),并进行初步微调实验,显示通过额外的训练数据可以改进ReAct 的潜力。在更多的任务上应用ReAct,并将其与强化学习等相结合,可以进一步释放大型语言模型的潜力。

在这里插入图片描述

2. REACT : SYNERGIZING REASONING + ACTING

对于一个与环境交互来解决任务的agent,在时刻t,一个agent从环境中收到了观察 o t ∈ O o_t \in \mathcal{O} otO,并且遵循策略 π ( a t ∣ c t ) \pi(a_t|c_t) π(atct)采取动作 a t ∈ A a_t \in \mathcal{A} atA,其中 c t = ( o 1 , a 1 , ⋯   , o t − 1 , a t − 1 , o t ) c_t = (o_1, a_1, \cdots, o_{t-1}, a_{t-1}, o_t) ct=(o1,a1,,ot1,at1,ot)是agent的上下文(context)。当 c t → a t c_t \rightarrow a_t ctat的映射是隐形的并且需要大量计算时,学习一个策略是有挑战的。 比如在上图的(1c)和(2a)都没有执行最终的正确动作。

而ReAct的思想很简单:将agent的动作空间增强变成 A ^ = A ∪ L \hat{\mathcal{A}} = \mathcal{A} \cup \mathcal{L} A^=AL, 其中的 L \mathcal{L} L是语言空间。一个属于语言空间的动作 a t ^ ∈ L \hat{a_t} \in \mathcal{L} at^L,被称为thought 或reasoning trace,它不影响外部环境,因此也不会有观察反馈。一个thought a t ^ \hat{a_t} at^意在对现有上下文 c t c_t ct推理来组合出有用的信息,并更新上下文 c t + 1 = ( c t , a t ^ ) c_{t+1} = (c_t, \hat{a_t}) ct+1=(ct,at^)以支持将来的推理或动作。

在上面的图1中,有用的thought的类型不定:

  • 拆分任务目标和创建行动计划(2b,Act 1; 1d, Thought 1)
  • 注入解决任务相关的常识知识(2b, Act 1)
  • 从观察中抽取重要的信息(1d, Thought2,4)
  • 跟踪进度和行动计划(2b, Act8)
  • 处理异常和调整行动计划(1d, Thought 3)等等

因为语言空间 L \mathcal{L} L是无限的,从这个增强空间学习是困难的并且需要很强的语言先验知识。在本文中,作者主要使用语言模型:PaLM-540B,在解决任务时使用few-shot上下文例子prompt模型来生成领域相关的动作或者thought,比如上面图中的(1d),(2b)。

每一个上下文例子是人工生成的用来解决任务实例的动作、thoughts和环境观察的轨迹,在论文附录C中展示了,比如对于HOTPOTQA的上下文例子如下:

"""
Question      What is the elevation range for the area that the eastern sector of the                      Colorado orogeny extends into? 
Thought 1     I need to search Colorado orogeny, find the area that the eastern sector of                 the Colorado orogeny extends into, then find the elevation range of the                      area.  
Action 1       Search[Colorado orogeny] 
Observation 1  The Colorado orogeny was an episode of mountain building (an orogeny) in                    Colorado and surrounding areas. 
Thought 2      It does not mention the eastern sector. So I need to look up eastern sector. Action 2       Lookup[eastern sector] 
Observation 2  (Result 1 / 1) The eastern sector extends into the High Plains and is called                the Central Plains orogeny. 
Thought 3      The eastern sector of Colorado orogeny extends into the High Plains. So I                     need to search High Plains and find its elevation range. 
Action 3       Search[High Plains] 
Observation 3    High Plains refers to one of two distinct land regions 
Thought 4       I need to instead search High Plains (United States). 
Action 4       Search[High Plains (United States)]
Observation 4   The High Plains are a subregion of the Great Plains. From east to west, the                 High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130                   m).[3] 
Thought 5       High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer                  is 1,800 to 7,000 ft. 
Action 5       Finish[1,800 to 7,000 ft]
"""

对于推理更重要的任务(上图中的(1)),作者们交替生成thoughts和action,所以任务轨迹是包括多个“thought-action-observation"步骤。 而对于像上图中的(2)的决策任务会涉及到很多动作,thoughts只需要在轨迹中最相关位置稀疏的出现,所以作者们让语言模型自行决定thought和动作的异步发生。

因为ReAct包括决策和推理能力,所以作者们认为它有几个独特特征:

  • Intuitive and easy to design:人类标注员将自己采取动作时的想法写上就可以了,没有特别的格式要求。
  • General and flexible:因为不限格式,thought空间也没有限制,所以适用且不限于各种任务:QA、事实验证、文字游戏、网页浏览等。
  • Performant and robust: 只用1-6个上下文例子,ReAct对新的例子显示出强的泛化性,在不同领域内相比于只推理或只行动的基线效果都更好。
  • Human aligned and controllable: ReAct的轨迹是可解释的,人很容易检查推理和事实的准确性。并且在过程中人也可以编辑thought来进行控制和纠正agent的行为(如论文第四节的Figure 5,这一点暂时还有点疑问)。

3. KNOWLEDGE-INTENSIVE REASONING TASKS

以多跳问答和事实校验来说明知识密集型推理任务,在上图的(1d)中,通过与Wikipedia API交互演示了推理和行动的协同作用,ReAct可以检索信息来支持推理,并推理来决定检索什么内容。

3.1 设置

  • 领域:两个数据集:HotPotQA多跳问答数据集和FEVER事实确认数据集,对两个任务只考虑问题作为输入的情形。
  • 动作空间:用Wikipedia API来支持交互性检索,有三种动作类型:1. search[entity],返回实体wiki页面对应的开头5个句子,或者Wikipedia搜索引擎建议的最相似的5个实体。 2. lookup[string],查找在页面中包括string的下一个句子,类似于浏览器中的Ctrl+F快捷键。3. finish[answer],用答案结束当前任务。

3.2 方法

  • ReAct Promping: 从训练集中随机选取样本并人工标注作为few-shot例子,HotpotQA是6个例子,Fever是3个例子,作者们试验发现更多例子不会提升性能。如上图的1d所示,更多的例子在论文附录C,注意作者在写例子的时候,尝试了:

    • 问题分解(“I need to search x, find y, then find z”)
    • 从Wikipedia页面中提取信息 (“x was started in 1844”, “The paragraph does not tell x”)
    • 进行常识推理(“x is not y, so z must instead be…”)
    • 算数推理 (“1844 < 1989”)
    • 引重新定义搜索内容(“maybe I can search/look up x instead”)
    • 合成答案 (“…so the answer is x”).
  • 基线:将ReAct与如下几种基线对比:

    • Standard Promping(Standard): 也就是ReAct去掉所有的thought、actions、observation,如上面图片中的1a。
    • Chain-of-thought prompting(CoT):也就是现在流行的思维链,也就是ReAct去掉actions、observation,作为只有推理的基线,如上面图片中的1b。另外还比较了self-consistency baselin(CoT-SC),它取temperature=0.7 并采样21条CoT轨迹后采用大多数答案。
    • Acting-only prompt (Act),去掉React中thought,如上面图片中的1c。
  • 组合内外部知识:因为ReAct更基于事实,而CoT在推理结构上更准确,但是容易产生幻觉事实或thought,所以合并了ReAct和CoT-SC,基于如下启发式规则让模型决定什么切换到另一种方法:

    • ReAct → \rightarrow CoT-SC:当ReAct在指定步数内无法返回答案,则切换到CoT-SC,对HotpotQA设定为7步,Fever设定为5步。
    • CoT-SC → \rightarrow ReAct: 当n个CoT-SC样本的多数答案少于n/2时,则切换到ReAct。
  • Finetuning: 使用boostraping方法生成3000条正确的React轨迹微调小一点的语言模型PaLM-8/62B。

3.3 结果和观察

  • ReAct 比Act效果更好:下面图片中的表1显示ReAcT在两个任务上都比Act效果更好,特别是合成最后的答案时(如上面图片中1c-d)。在后面图片中的Figure 3也表明在Fine-tuning后推理也是有益处的。

在这里插入图片描述

  • ReAct vs. CoT: 上面图片中显示ReAct在Fever数据集上比CoT要好,在HotpotQA上比CoT要差。而为了更好的理解ReAct和CoT在HotpotQA上的行为区别,随机从对ReAct和COT各采样50条正确和错误的轨迹(共200条),然后人工标记它们的成功和错误模式,如下图的表2所示,一些关键结果如下,在论文附录E.1给了详细例子:
    • CoT的幻觉是一个严重问题,在成功模式下相比ReAct有更高的假阳性(14% vs 6%),并且造成了56%的错误。 而ReAct因为有外部知识库的存在更基于事实、更可信。
    • React的reasoning、action、observation步骤交替进行的结构让它更可靠,但是也限制了推理步骤的灵活性,所以React相比与CoT有更多的推理错误。 ReAct有一个明显的错误倾向是不断的重复之前的thought和actions,作者将它们归纳为”reasoning error"。
    • 对于React,从搜索中成功地检索出有用的知识很关键,无用的搜索造成23%的错误案例。

在这里插入图片描述

  • ReAct + CoT-SC是更好的prompt方式, 在上面图片的表1中ReAct → \rightarrow CoT-SC和 CoT-SC → \rightarrow ReAct分别是在HotpotQA和Fever上最好的prompt方式。下面的Figure 2展示了CoT-SC中不同样本数时的效果。这个结果表明了推理任务将内部知识和外部知识恰当的组合起来的价值。

在这里插入图片描述

  • ReAct方法在fine-tuning时表现最好,如下图的Figure 3显示了四种方法在HotpotQA上prompting和finetuning的对比所示。 作者们相信如果用更大的标注数据集去finetuning,有可能会比最先进的有监督的方法效果更好。

在这里插入图片描述

4. 决策任务

在ALFWorld和WebShop两个数据集上测试了ReAct的效果。

结果如下图中的table 3和table 4, ReAct在两个数据集上都优于Act。
在这里插入图片描述

5. 参考资料

  1. Yao, Shunyu, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, and Yuan Cao. 2022. “ReAct: Synergizing Reasoning and Acting in Language Models,” October.
  2. 论文主页

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

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

相关文章

医疗实施-集成平台下门诊就诊流程详解

目录 集成平台下门诊就诊流程详解1.患者建档2. 门诊挂号3. 医生就诊4.处方开立5.费用收取、6、科室执行医嘱集成平台下门诊就诊流程详解 这篇文章是考虑医院使用了集成平台之后,门诊就诊流程详解。与我的文章《医疗实施-门诊就诊流程详解》的大致一样,供学有余力的人阅读。 …

图解java.util.concurrent并发包源码系列——深入理解ReentrantLock,看完可以吊打面试官

图解java.util.concurrent并发包源码系列——深入理解ReentrantLock&#xff0c;看完可以吊打面试官 ReentrantLock是什么&#xff0c;有什么作用ReentrantLock的使用ReentrantLock源码解析ReentrantLock#lock方法FairSync#tryAcquire方法NonfairSync#tryAcquire方法 Reentrant…

SpringBoot笔记:SpringBoot 集成 Dataway

文章目录 1、什么是 Dataway?2、主打场景3、技术架构4、整合SpringBoot4.1、maven 依赖4.2、初始化脚本4.3、整合 SpringBoot 5、Dataway 接口管理6、Mybatis 语法支持7、小结 1、什么是 Dataway? 官网地址&#xff1a;https://www.hasor.net/docs/guides/quickstart Da…

连通块是什么

刷题的时候遇到一个名词概念&#xff0c;连通块是什么&#xff1f; 在图论中&#xff0c;无向图中的连通块&#xff08;也叫作连通分量&#xff09;是指原图的一个子图&#xff08;即该子图只包含原图中的部分或全部顶点及边&#xff09;&#xff0c;该子图任意两个顶点都能通…

Swift 环境搭建

Swift是一门开源的编程语言&#xff0c;该语言用于开发OS X和iOS应用程序。 在正式开发应用程序前&#xff0c;我们需要搭建Swift开发环境&#xff0c;以便更好友好的使用各种开发工具和语言进行快速应用开发。由于Swift开发环境需要在OS X系统中运行&#xff0c;因此其环境的…

智能指针shared_ptr:自定义删除器

重点&#xff1a; 1.普通指针转化成智能指针。 2.智能指针创建的时候&#xff0c;第二个参数是自定义删除器&#xff0c;默认情况下&#xff0c;shared_ptr调用delete()函数。 class A { public:void Get() { cout << b << endl; }; private:int b{ 10 }; };clas…

Java 与其他编程语言:比较分析

Java 擅长可移植性和可靠性&#xff0c;Python 擅长通用性和简单性&#xff0c;JavaScript 擅长 Web 开发&#xff0c;C 擅长性能&#xff0c;Go 擅长效率。 在广阔的软件开发世界中&#xff0c;选择正确的编程语言对于任何项目的成功都至关重要。Java 是一种以其多功能性和可移…

交换机Vlan实验

介绍 Vlan表示虚拟局域网。 常见的网络安全技术 VlanACL Vlan的作用 Vlan隔离了广播域&#xff0c;增加了网络的安全性。 知识点 默认vlan vlan1 是默认vlan&#xff0c;主要机器开机了&#xff0c;默认所有的接口都属于Vlan1 交换机的接口模式 Access : 这个模式用来…

RK3588平台开发系列讲解(文件系统篇)什么是 VFS

文章目录 一、什么是 VFS二、VFS 数据结构2.1、超级块结构2.2、目录结构2.3、文件索引结点2.4、打开的文件2.5、四大对象结构的关系沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 今天我们一起来瞧一瞧 Linux 是如何管理文件,也验证一下 Linux 那句口号:一切皆为文…

卡尔曼滤波 | Matlab实现无迹kalman滤波仿真

文章目录 效果一览文章概述研究内容程序设计参考资料效果一览 文章概述 卡尔曼滤波 | Matlab实现无迹kalman滤波仿真 研究内容 无迹kalman滤波(UKF)不是采用的将非线性函数线性化的做法。无迹kalman仍然采用的是线性kalman滤波的架构,对于一步预测方程,使用无迹变换(UT)来…

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取数…

【技能实训】DMS数据挖掘项目(完整程序)

文章目录 1. 系统需求分析1.1 需求概述1.2 需求说明 2. 系统总体设计2.1 编写目的2.2 总体设计2.2.1 功能划分2.2.2 数据库及表2.2.3 主要业务流程 3. 详细设计与实现3.1 表设计3.2 数据库访问工具类设计3.3 配置文件3.4 实体类及设计3.5 业务类及设计3.6 异常处理3.7 界面设计…

优雅记录与保留:探秘Spring Boot与Logback的高级日志输出与存储

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 优雅记录与保留&#xff1a;探秘Spring Boot与Logback的高级日志输出与…

Java中运算符要注意的一些点

目录 1. 算术运算符 1. 1 基本四则运算符&#xff1a;加减乘除模( - * / %) 1.2. 增量运算符 - * % 2. 关系运算符 3. 逻辑运算符 3.1. 逻辑与 && 3.2. 逻辑 || 3.3. 逻辑非 ! 3.4. 短路求值 4. 位运算符 4.1. 按位与 &: 如果两个二进制位都是 …

WebGL: 几个入门小例子

本文罗列几个WebGL入门例子&#xff0c;用于帮助WebGL学习。 一、概述 WebGL (Web Graphics Library)是一组基于Open ES、在Web内渲染3D图形的Javascript APIs。 Ref. from Khronos Group: WebGL WebGL™ is a cross-platform, royalty-free open web standard for a low-lev…

代码随想录算法训练营之JAVA|第二十一天| 77. 组合

今天是第21天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 77. 组合https://leetcode.cn/problems/combinations/description/ 第一想法 需要从N个数中选取K个数&#xff0c;那么第一想法肯定是k个for循环&#xff0c;每个for循环选取一个数&#x…

K8S系列文章之 kubeasz部署K8S环境

自动化安装方式&#xff08;kubeasz&#xff09;* 生产环境推荐&#xff08;首次安装下载相关配置和安装包&#xff09;是基于Ansible实现的部署工具 简单介绍 每一具体k8s集群的详细配置参数文件 Ansible 任务配置文件 镜像安装包 安装部署步骤 前提 &#xff1a; 保证Ansib…

4个顶级的支持消费级硬件的NeRF软件平台

似乎每天都有大量的创新发布&#xff0c;人们很容易感到不知所措。因此&#xff0c;让我们放慢脚步&#xff0c;看看4个主流的支持消费级硬件的NeRF 平台。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 1、Instant-NGP&#xff08;Instant-NeRF&#xff09; 2022 年…

使用nativephp开发桌面应用测试

2023年7月21日10:29:03 官网&#xff1a;https://nativephp.com/ 源码&#xff1a;https://github.com/NativePHP/laravel 看起像laravel团队的作品 安装&#xff1a;注意需要php8.1以上&#xff0c;laravel10以上 composer create-project laravel/laravel example-app或者&am…

SpringBoot集成Redisson实现延迟队列

一、场景 1、下单未支付&#xff0c;超过10分钟取消订单 2、货到后7天未评价&#xff0c;自动好评 二、实现方案 1、使用xxl-job 定时任务按时检测&#xff0c;实时性不高 2、使用RabitMQ的插件rabbitmq_delayed_message_exchange插件 3、 redis的过期检测 redis.conf 中…