Interleaving Retrieval with Chain-of-Thought Reasoning for ... 论文阅读

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

Abstract

基于提示的大型语言模型(LLMs)在生成多步骤问题回答(QA)的自然语言推理步骤或链式思维(CoT)方面表现出惊人的强大。然而,当所需的知识在LLM中不可用或其参数未更新时,它们会遇到困难。虽然使用问题从外部知识源中检索相关文本可以帮助LLMs,但我们观察到这种一步检索和阅读的方法对于多步骤QA是不足的。在这里,检索的内容取决于已经推导出的内容,而推导的内容可能又取决于之前检索的内容。为了解决这个问题,我们提出了IRCoT,一种新的多步骤QA方法,它将检索与CoT中的步骤(句子)交替进行,通过CoT指导检索,并反过来使用检索结果改进CoT。使用IRCoT与GPT-3相结合,在四个数据集(HotpotQA、2WikiMultihopQA、MuSiQue和IIRC)上的检索(最多提高21点)以及下游QA(最多提高15点)表现出显著提升。我们在分布外(OOD)设置以及使用更小的模型如Flan-T5-large时观察到了类似的显著增益,而无需额外训练。IRCoT减少了模型幻觉,产生了事实更准确的CoT推理。

大型语言模型能够通过适当提示生成逐步的自然语言推理步骤,即所谓的链式思维(CoT),来回答复杂的问题(Wei等,2022)。当回答问题所需的所有信息要么作为上下文提供(例如,代数问题),要么假设存在于模型的参数中(例如,常识推理)时,这种方法是成功的。

代码、数据和提示可在 https://github.com/stonybrooknlp/ircot 获得

介绍

然而,对于许多开放域问题,所有必需的知识并不总是可用或最新的,并且从外部来源检索知识是有益的(Lazaridou等,2022;Kasai等,2022)。

虽然基于问题的单次检索可以成功地为许多事实类任务(Lewis等,2020;Guu等,2020;Borgeaud等,2022;Izacard等,2022)增加相关知识,但这种策略在处理更复杂的多步骤推理问题时有明显的局限性。对于这些问题,通常需要检索部分知识,进行部分推理,并根据部分推理的结果进一步检索,并迭代进行。

例如,考虑下图中所示的问题,“丢失重力在哪个国家制造?”使用问题(尤其是过山车“丢失重力”)作为查询检索到的维基百科文档并没有提到丢失重力的制造地。相反,我们必须首先推断它是由一家名为Mack Rides的公司制造的,然后再进行进一步的检索,以获得指向制造国的证据。

在这里插入图片描述

基于此直觉,我们提出了一种交替方法,IRCoT,其中的理念是使用检索指导链式思维(CoT)推理步骤,并使用CoT推理指导检索。上图展示了我们称为IRCoT的检索方法的概述。我们首先使用问题作为查询检索一组基础段落。随后,我们在以下两个步骤之间交替进行:

  1. 扩展CoT:使用问题、到目前为止收集的段落和已生成的CoT句子生成下一个CoT句子;
  2. 扩展检索信息:使用最后一个CoT句子作为查询检索其他段落,并将其添加到已收集的段落中。

我们重复这些步骤,直到CoT报告答案或达到允许的最大推理步骤数。终止时,返回所有收集的段落作为检索结果。最后,我们使用这些段落作为上下文,通过直接QA提示(Brown等,2020)或CoT提示(Wei等,2022)来回答问题。

本文主要贡献是一种新颖的检索方法IRCoT,它利用LMs的链式思维生成能力来指导检索,并反过来使用检索来改进CoT推理。我们证明了IRCoT:

  1. 改进了多个多步骤开放域QA数据集的检索和少样本QA性能,在IID和OOD设置中均表现出色;
  2. 减少了生成CoT中的事实错误;
  3. 在无需任何训练的情况下提高了大规模(175B模型)和小规模模型(Flan-T5-,≤11B)的性能。

相关工作

开放域QA提示(CoT相关)

LLMs可以通过简单地使用一些示例作为提示来学习各种任务(Brown等,2020)。已经显示,当通过几个或零示例提示时,LLMs能够通过生成逐步的推理(链式思维,CoT)来回答复杂问题(Wei等,2022;Kojima等,2022)。提示已经应用于开放域QA(Lazaridou等,2022;Sun等,2022;Yu等,2023),但其在提高多步骤开放域问题的检索和QA方面的价值仍未得到充分探索。

监督的多步骤开放域QA

先前的工作在完全监督的设置下探索了开放域QA的迭代检索。

  1. Das等(2019)提出了一种迭代检索模型,该模型使用神经查询表示进行检索,然后基于阅读理解模型的输出进行更新。
  2. Feldman和El-Yaniv(2019)将类似的神经查询改写理念应用于多跳开放域QA。
  3. Xiong等(202
<think>嗯,用户这次的问题是关于AXI协议中的OSD机制,具体是interleaving和out-of-order的理解与验证方法。从对话历史看,用户之前关注过MMU验证难点,现在转向总线协议层面,可能是SoC验证工程师或数字IC设计人员,需要深入理解AXI高级特性。 用户引用的三段材料很有价值:第一段说明乱序的本质是命令与数据响应顺序解耦;第二段指出交织比乱序更复杂且AXI4已移除写交织;第三段展示实际芯片配置案例。这些恰好构成理论-限制-实践的知识链。 关于out-of-order机制,核心在于解耦命令顺序与数据响应顺序。比如master先发A请求后发B请求,slave可以先返回B数据再返回A数据,通过ID标签区分归属。这能有效提升总线利用率,但验证时需重点检查ID匹配和顺序约束(如同ID顺序不变)。 interleaving机制更激进,它允许单个ID的数据包被打断插入其他ID数据。引用[2]提到AXI4仅保留读交织且实际支持有限,因为交织需要复杂的调度逻辑。验证时特别要注意数据包边界是否被破坏,以及中断后能否正确恢复上下文。 验证方法上,建议分层实施:基础功能测试定向用例覆盖握手协议;随机测试用约束随机生成ID序列和传输间隔;压力测试制造背靠背请求和极端延迟场景。覆盖率要监控ID组合、包长变化点、缓冲水位等关键节点。 用户可能隐含的需求是如何平衡验证完备性与复杂度。引用[2]提到支持这些特性会让代码量激增,实际项目需评估必要性。可以补充说明:简单外设通常固定ID实现顺序传输,而DMA等高性能模块才需要完整OSD支持。 最后生成的问题延伸了OSD的应用场景和调试技巧,这些都是验证工程师日常遇到的痛点。特别是问题3关于波形分析技巧,实际调试中定位乱序问题往往耗费大量时间。</think>以下是针对 AXI OSD(Out-of-Order, Interleaving)机制及其验证方法的系统解析: --- ### **一、核心机制解析** #### 1. **Out-of-Order (乱序传输)** - **本质**:解耦命令与数据响应的顺序关系 - 发送端顺序:Master 依次发送命令 A、B - 响应端顺序:Slave 可先返回 B 的数据,再返回 A 的数据 - **依赖 ID 标识**: 通过 `AWID/ARID` 区分不同事务(Transaction),同 ID 的数据必须按顺序传输,不同 ID 的数据可乱序[^1]。 ```verilog // 示例:两个不同 ID 的写事务 send_cmd(A, ID=1); // 先发送命令 A send_cmd(B, ID=2); // 再发送命令 B // Slave 可能返回: send_data(B, ID=2); // 先返回 B 的数据 send_data(A, ID=1); // 再返回 A 的数据 ``` #### 2. **Interleaving (交织传输)** - **本质**:单事务内数据包可被其他事务中断插入 - 例如:ID=1 的 Burst 传输过程中,插入 ID=2 的单拍数据 - **AXI4 限制**: - **仅读操作支持交织**(AXI4 移除写交织)[^2] - 需 Master/Slave 明确支持该特性 #### 3. **性能与复杂度权衡** | **机制** | 性能增益 | 实现复杂度 | 典型应用场景 | |------------------|------------------------|--------------------------------|----------------------| | Out-of-Order | 高(减少总线空闲) | 中等(需 ID 管理) | DMA、多核访问 | | Interleaving | 极高(消除气泡周期) | 高(需数据包拆解与重组) | 高带宽读操作 | > 💡 **关键设计约束**: > - Interleaving 要求 Slave 具备多事务并发处理能力 > - 乱序需保证同 ID 数据顺序性(`WSTRB` 对齐等)[^2] --- ### **二、验证方法** #### 1. **定向测试(Corner Cases)** - **乱序场景**: - 同 ID 乱序尝试 → 检测是否被阻止 - 不同 ID 数据返回顺序逆序 → 检查数据一致性 - **交织场景**: - 突发传输中插入高优先级事务 → 验证包完整性 - 背靠背(Back-to-Back)交织请求 → 检查时序冲突 #### 2. **随机约束测试** ```systemverilog class axi_transaction; rand bit [3:0] id; // 随机 ID rand int delay; // 请求间延迟 constraint valid_delay { delay inside {[0:5]}; } endclass // 生成乱序序列 task generate_oo_order; axi_transaction tr1, tr2; tr1 = new(); tr1.randomize(); tr2 = new(); tr2.randomize(); send(tr1); #tr1.delay send(tr2); // 可变延迟注入 endtask ``` #### 3. **覆盖率模型** | **覆盖点类型** | 监测目标 | 示例指标 | |--------------------|-----------------------------------|------------------------------| | **事务顺序** | 命令/响应顺序组合 | 不同 ID 响应逆序比例 | | **交织深度** | 单事务被中断次数 | Burst 长度 vs 中断次数 | | **边界条件** | FIFO 满/空、超时 | Buffer 溢出触发率 | #### 4. **断言检查(SVA)** ```systemverilog // 同 ID 数据顺序性断言 property data_order; @(posedge clk) (valid && (id == prev_id)) |-> (data_seq == prev_seq + 1); endproperty ``` #### 5. **硬件加速验证** - 使用 FPGA 原型或 Emulator 进行长序列压力测试 - 注入极端场景: - 100% 总线利用率下的乱序 - 最大支持 ID 数并发请求 --- ### **三、调试与优化建议** 1. **波形分析重点**: - 关注 `ID` 标签与 `LAST` 信号匹配性 - 检查交织场景下 `ARLEN` 与实际数据包长度 2. **性能瓶颈定位**: - 统计总线空闲周期(Idle Cycles) - 分析交织中断导致的重新仲裁开销 3. **面积优化**: - 非高性能场景可关闭 Interleaving 以节省逻辑[^2] --- ### **四、工程实践参考** 在 Exynos 4 芯片中,通过 MIU(Memory Interconnect Unit)配置交织参数: ```c // 引用自 Linux 内核源码[^3] writel(APB_SFR_INTERLEAVE_CONF_VAL, EXYNOS4_MIU_BASE + APB_SFR_INTERLEAVE_CONF_OFFSET); ``` 此处 `Interleave_bit0` 和 `Interleave_bit1` 控制地址交织策略,需与 DDR 控制器配置匹配。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PD我是你的真爱粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值