【RAG 论文】IRCoT:基于 CoT 的交叉检索解决多步骤问题

论文:Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions

⭐⭐⭐⭐

ACL 2023, arXiv:2212.10509

Code: github.com/stonybrooknlp/ircot

论文速读

大多数 RAG 都是一次检索来辅助 LLM 生成,但是面对多步骤推理问题,往往需要多次检索多次推理才能解决。

本文提出了 IRCoT:交叉进行 CoT 指导 retrieval 和使用 retrieval result 提升 CoT。也就是说,retrieval 和 reason 两个步骤必须相互通知。下图给了一个例子:

对于如上的问题, “In what country was Lost Gravity manufactured?” 单独问 LLM 或者单独在维基百科上搜索, 都很难得到答案. 但是通过如下步骤或许可以得到最终的答案:

  1. 首先将该问题在维基百科上搜索, 得到关于 《Lost Gravity》 的一些信息.
  2. LLM 能够从该信息中抓取到 《Lost Gravity》 的制作公司为 Mack Rides.
  3. 接着在维基百科中搜索 “The Lost Gradvity was manufactured by Mack Rides”, 我们会得到一些关于 Mack Rides 的信息.
  4. 基于该信息我们能够得到 (通过 LLM 抓取) “Mack Rides” 是一家德国公司的信息.
  5. 最终我们能够得到答案为: Germany.

上面的例子就是告诉我们,很多问题是需要检索 + 提取信息交替进行最后才能得到答案的。

整体思路如下图:

在这里插入图片描述

首先使用 question 从 Wikipedia 中检索出 K 个文档,之后交叉重复如下两个步骤,直到终止:

  1. reason-step:把 “question”、“目前为止收集到的所有 retrieved paragraphs”、“LLM 生成的所有 CoT 句子” 填充入下面的 prompt template,并输送给 LLM,让他做 generation,保留其生成的第一个句子作为本轮生成的 CoT sentence:
1715779228698
  1. retrieve-step:使用上一个 reason-step 得到的 CoT sentence,去 Wikipedia 检索出 K 个 paragraphs,将其加入到 retrieved paragraphs 中

重复交叉进行以上两个步骤,直到生成的 CoT sentence 中包含有 “answer is” 或者迭代轮数超过了 threshold。

实验与分析

该论文提出的 IRCoT:

  • 在多个 dataset 上均超过了 one-step retrieval 的模型
  • 在 OOD setting 中表现不错
  • 显著减少了 CoT 的事实错误
  • 对于较小 size 的 LLM 仍然有用
  • few-shot multi-step ODQA 的 SOTA 模型

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

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

相关文章

低成本创业分享,一个不用自己囤货、进货、直播的项目|抖音小店

大家好,我是喷火龙 在抖音上面开店,不仅可以卖自己的商品,还可以卖别人的商品赚差价, 并且不需要你囤货、进货、直播、剪视频,也不需要有粉丝。 这个项目就是抖音小店无货源。 很多朋友对抖音小店无货源模式的玩法…

Cache基本原理--以TC3xx为例(1)

目录 1.为什么要使用Cache 2.Memory与Cache如何映射 2.1 地址映射概设 3.小结 为什么要使用Cache?为什么在多核工程里要谨慎使用DCache?Cache里的数据、指令是如何与Memory映射? 灵魂三连后,软件工程师应该都会有模糊的回答&…

关于 vs2019 c++20 规范里的 STL 库里模板 decay_t<T>

(1) 这个模板,在库代码里非常常见。 decay 英文是“衰弱,消减” 的意思,大概能感觉到就是要简化模板参数 T 的类型,去掉其上的修饰符。因为常用且复杂,故单独列出其源码和注释。先举例其应用场景…

[数据结构]红黑树的原理及其实现

文章目录 红黑树的特性红黑树的时间复杂度推导:结论红黑树与AVL树比较 红黑树的插入红黑树的节点定义调整策略思考情况2:思考情况3: 代码实现myBTRee.htest.cpp 红黑树的特性 红黑树最常用的平衡二叉搜索树。跟AVL树不同的是,红黑…

Blender雕刻建模_笔画,镜像,动态拓扑

笔画 笔画选项,一般是对刷子(自由线)工具设置 描边方法如下:标红的为常用 -间隔:按一定间隔应用笔画的结果 例如:笔刷半径50,笔画间隔100%(笔刷直径的百分比)&#x…

C++ 中重写重载和隐藏的区别

重写(override)、重载(overload)和隐藏(overwrite)在C中是3个完全不同的概念。我们这里对其进行详细的说明 1、重写(override)是指派生类覆盖了基类的虚函数,这里的覆盖必…

GD32F103RCT6/GD32F303RCT6-UCOSIII底层移植(1)工程建立

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布: 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转: 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

OpenAI推出旗舰AI模型GPT-4o并免费开放

🦉 AI新闻 🚀 OpenAI推出旗舰AI模型GPT-4o并免费开放 摘要: OpenAI 未来的产品将以免费为优先,以让更多人使用为目标。OpenAI 发布了桌面版本的程序和更新后的 UI,更加简单自然。推出了新一代大模型 GPT-4o&#xf…

Qt自定义QpushButton分别在c++/python中实现

//.h文件#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> #include<QMouseEvent> #include<QPropertyAnimation> #include<QResizeEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; }class Widget : public QWi…

React Native 开发心得分享

有一段时间没更新了&#xff0c;花了点时间研究了下 React Native&#xff08;后续用 RN 简称&#xff09;&#xff0c;同时也用该技术作为我的毕设项目(一个校园社交应用&#xff0c;仿小红书)&#xff0c;经过了这段时间的疯狂折腾&#xff0c;对 RN 生态有了一定的了解&…

C语言/数据结构——栈的实现

一.前言 今天我们讲解新的领域——栈。 二.正文 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其允许在固定的一段进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#…