学习笔记:RAG 与 ReAct 学习笔记

最近读了 RAG 和 ReAct 的两篇论文,并且记录了以下的学习笔记。

RAG

文提出了以下两个模型:

RAG 模型原理实现
RAG-Sequence让每份资料分别支撑整个答案,再把各份资料对整个答案的支持综合起来。找出几份资料 → 分别依据每份资料评估整个答案 → 综合评分,选出答案。
RAG-Token每写一个词,都综合各份资料的支持,所以答案的不同部分可以借助不同资料。找出几份资料 → 每生成一个词都综合这些资料的预测 → 逐步写出完整答案。

两个模型都带了检索器DPR和生成器BART

检索器DPR:

先提前准备资料库:

  1. 切分资料:把维基百科文章切成每段约 100 个词的小段。
  2. 把每段变成向量:用一个 BERT 模型读取段落,输出一串数字,作为这段文字的表示。
  3. 建立索引:把这些向量放入 FAISS 索引,方便之后快速查找。

收到问题后:

  1. 用另一个 BERT 模型,把问题也变成向量。
  2. 比较问题向量和各段资料向量的匹配程度。
  3. 找出评分最高的 K 段资料。
  4. 将这些段落交给生成器,并把分数转换成权重,用于综合预测。

用 DPR 预训练双编码器初始化检索器并构建文档索引。

生成器BART

BART 本身的结构和预测方式相同,区别在于 RAG 怎么综合 BART 根据不同资料做出的预测。

1. 编码器:读输入

RAG 把“问题”和“一段检索到的资料”拼在一起,交给 BART。例如:

问题:《神曲》分成哪三个部分? 资料:《神曲》包含地狱篇、炼狱篇和天堂篇……

编码器将这些文字变成一组数字表示,供解码器使用。你可以把它理解成“阅读材料并整理出可用的信息”。

2. 解码器:逐步写答案

解码器同时参考:

  • 编码器处理过的问题和资料;
  • 自己已经写出的内容。

论文中,BART 分别读取“问题+资料 A”“问题+资料 B”等输入,做出预测:

  • RAG-Sequence:综合 BART 在不同资料下对整个答案的概率。
  • RAG-Token:每一步综合 BART 在不同资料下对下一个 token的概率

解码

束搜索:生成答案时,每一步保留几条得分较高的候选,而不是只保留一条。例如同时保留“出生于……”和“出生在……”,继续往后写,最后比较完整答案。

RAG 模型原理实现
RAG-Token每一步综合,然后继续写它每一步都能算出一个统一的“下一个 token 的概率”,故直接把这个综合概率交给普通束搜索,就能逐步生成答案。
RAG-Sequence先分别写候选,再综合评分1. 每段资料分别运行束搜索,生成几条候选答案。
2. 汇总候选答案。
3. 对每条候选,综合它在各段资料下的概率。
4. 选择综合得分最高的答案。

我个人认为,RAG-Token更加适合需要结合多份材料回答问题的情况。因为其可以融合所有的资料输出答案。而RAG-SequenceToke通过每段资料分别输出了答案,其他的资料可以决定最后选择的是哪一份答案,但是其他资料的信息并没有在生成过程中被充分融合,这其实导致了信息的丢失。假设最后选出了答案1,那么其是根据资料A进行生成的,所以不一定包含了资料B或者C的信息。

实验

文章作者做了充分的实验:

实验训练集结果证明了什么
开放域问答:自己查资料回答问题Natural Questions、TriviaQA、WebQuestions、CuratedTrec 的问题—答案对在 NQ、WebQuestions、CuratedTrec 上达到当时最佳;Sequence、Token 各有优势检索+生成能有效回答事实问题,生成式方法也能胜过抽取式方法
自由文本问答:生成完整句子回答MS-MARCO 的问题—答案对Sequence 比 BART 的 BLEU-1、ROUGE-L 都高2.6 分外部资料能帮助模型组织更好的完整回答
Jeopardy 问题生成:给实体,生成猜谜题SearchQA 的实体答案—题目对Q-BLEU-1:Token22.2,Sequence21.4,BART19.7;人工评价更认可 RAG 的事实性和具体性检索也能帮助知识型文本创作;Token 在此任务中更有优势
事实验证:判断声明是否有证据支持FEVER 的声明—标签对三分类:RAG72.5%,BART64.0%;二分类:RAG89.5%,BART81.1%RAG 也能做分类,而且不必提供“应该检索哪段证据”的训练标注
生成多样性分析沿用 MS-MARCO、Jeopardy 实验训练的模型不重复三元词组的比例:Sequence 高于 Token,两者都高于 BART检索能提高这些任务上的输出多样性
检索器消融:冻结检索器,或换成 BM25沿用上述任务训练集,改变检索器设置冻结检索器后,各任务成绩下降;BM25 在 FEVER 更好,但其他任务总体较差学习检索通常有帮助,但向量检索并非所有任务都更好
更换知识库:切换 2016/2018 年维基百科索引不重新训练,使用 NQ 训练的 RAG;测试 82 个发生领导人变化的职位资料年份与答案年份匹配:正确率70%/68%;不匹配:12%/4%只换外部资料,也能更新模型的一部分事实回答
增加检索数量:测试时查更多段落沿用 NQ、MS-MARCO 训练的模型;训练时检索 5 或 10 段NQ 上,Sequence 在测试范围内随段落增多而提高;Token 在约10 段时达到峰值查更多资料不一定更好,效果取决于模型和任务

个人的思考

作者对海明威作品的实验,确实证明了Token在需要多个参考答案作答的情况下可能会表现得更好,但作者并没有做单一参考答案无法回答问题的情况的实验,所以其实不是很能佐证我的观点。个人认为还应该对这种情况进行实验。

ReAct

这篇文章作者提出了ReAct,并且与CoT做了对比。

CoT 是 Chain-of-Thought,思维链。

例如:

先找到这部电影的导演,再查导演的出生地,最后回答。

ReAct 来自 Reasoning + Acting,推理与行动相结合。

例如:

先想:需要找到这部电影的导演 → 搜索电影,查到导演 → 再想:需要知道他的出生地 → 搜索导演,查到出生地 → 最后回答。

实验

这篇论文主要做了 4 类任务实验,以及微调和消融实验。

实验训练集/提示示例结果证明了什么
多跳问答:HotpotQA从训练集选6 个案例,编写“分析—行动—观察”示例,提示 PaLM-540B精确匹配:ReAct27.4,CoT29.4,Act25.7;ReAct 与 CoT-SC 结合最高达35.1ReAct 比只行动好,但单独使用不一定胜过 CoT;结合内部知识与外部检索更有效
事实验证:FEVER从训练集选3 个案例作为提示示例准确率:ReAct60.9%,CoT56.3%,Act58.9%;CoT-SC 与 ReAct 结合达64.6%查询外部证据有助于事实判断,结合两种方法还能进一步改善
模拟家庭任务:ALFWorld每类任务编写3 条示例轨迹,每次选其中 2 条作为提示;测试 134 个未见任务6 种提示配置中,ReAct 平均成功率57%、最佳71%;Act 最佳45%,BUTLER 最佳37%分析能帮助拆解目标、跟踪进度并指导行动,提高交互任务成功率
购物任务:WebShop1 个任务示例作为提示;测试 500 条购物要求成功率:ReAct40.0%,Act30.1%,模仿学习29.1%,模仿学习+强化学习28.7%;专家人类59.6%分析有助于理解商品信息、选择符合要求的选项,但距离人类仍有差距
小模型微调使用模型生成且最终答案正确的3000 条轨迹,微调 PaLM-8B/62B,并比较不同轨迹格式微调后的 ReAct 在所比较方法中最好;8B ReAct 超过全部 62B 提示方法,62B ReAct 超过全部 540B 提示方法学习“如何分析并获取信息”,可以让较小模型获得较强表现
分析形式消融:ReAct 与 ReAct-IM沿用 ALFWorld 示例,把分析改成类似 Inner Monologue 的环境与进度描述最佳成功率:ReAct71%,ReAct-IM53%分析的内容很重要;目标拆解、常识和计划调整比仅描述状态更有帮助
错误类型分析不额外训练;人工分析 HotpotQA 中 ReAct、CoT 各 50 条成功和 50 条失败轨迹,共200 条CoT 失败案例中56%涉及幻觉;ReAct 失败更多涉及推理错误47%、搜索结果问题23%外部反馈能减少事实幻觉,但会带来检索失败、重复操作等其他问题

这篇文章的大部分实验都没有对模型进行调整,而是在提示词层面进行了修改。除了小模型微调的那个实验。

实验

12 个问题 × 7 种条件,共 84 条生成

条件正确率
无资料0%
检索前 1 段41.7%
检索前 2 段0%
检索前 4 段58.3%
完整证据91.7%
缺失证据/无关资料0%

结论:资料完整时效果明显更好,但资料越多不一定越好。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇