【RAG 论文】IRCoT:基于 CoT 的交叉检索解决多步骤问题
大多数 RAG 都是一次检索来辅助 LLM 生成,但是面对多步骤推理问题,往往需要多次检索多次推理才能解决。本文提出了 IRCoT:交叉进行 CoT 指导 retrieval 和使用 retrieval result 提升 CoT。也就是说,retrieval 和 reason 两个步骤必须相互通知。下图给了一个例子:对于如上的问题, “In what country was Lost Gravi
论文:Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions
⭐⭐⭐⭐
ACL 2023, arXiv:2212.10509
论文速读
大多数 RAG 都是一次检索来辅助 LLM 生成,但是面对多步骤推理问题,往往需要多次检索多次推理才能解决。
本文提出了 IRCoT:交叉进行 CoT 指导 retrieval 和使用 retrieval result 提升 CoT。也就是说,retrieval 和 reason 两个步骤必须相互通知。下图给了一个例子:
对于如上的问题, “In what country was Lost Gravity manufactured?” 单独问 LLM 或者单独在维基百科上搜索, 都很难得到答案. 但是通过如下步骤或许可以得到最终的答案:
- 首先将该问题在维基百科上搜索, 得到关于 《Lost Gravity》 的一些信息.
- LLM 能够从该信息中抓取到 《Lost Gravity》 的制作公司为 Mack Rides.
- 接着在维基百科中搜索 “The Lost Gradvity was manufactured by Mack Rides”, 我们会得到一些关于 Mack Rides 的信息.
- 基于该信息我们能够得到 (通过 LLM 抓取) “Mack Rides” 是一家德国公司的信息.
- 最终我们能够得到答案为: Germany.
上面的例子就是告诉我们,很多问题是需要检索 + 提取信息交替进行最后才能得到答案的。
整体思路如下图:
首先使用 question 从 Wikipedia 中检索出 K 个文档,之后交叉重复如下两个步骤,直到终止:
- reason-step:把 “question”、“目前为止收集到的所有 retrieved paragraphs”、“LLM 生成的所有 CoT 句子” 填充入下面的 prompt template,并输送给 LLM,让他做 generation,保留其生成的第一个句子作为本轮生成的 CoT sentence:
- 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 模型
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)