最近读了 RAG 和 ReAct 的两篇论文,并且记录了以下的学习笔记。
RAG
文提出了以下两个模型:
| RAG 模型 | 原理 | 实现 |
|---|---|---|
| RAG-Sequence | 让每份资料分别支撑整个答案,再把各份资料对整个答案的支持综合起来。 | 找出几份资料 → 分别依据每份资料评估整个答案 → 综合评分,选出答案。 |
| RAG-Token | 每写一个词,都综合各份资料的支持,所以答案的不同部分可以借助不同资料。 | 找出几份资料 → 每生成一个词都综合这些资料的预测 → 逐步写出完整答案。 |
两个模型都带了检索器DPR和生成器BART
检索器DPR:
先提前准备资料库:
- 切分资料:把维基百科文章切成每段约 100 个词的小段。
- 把每段变成向量:用一个 BERT 模型读取段落,输出一串数字,作为这段文字的表示。
- 建立索引:把这些向量放入 FAISS 索引,方便之后快速查找。
收到问题后:
- 用另一个 BERT 模型,把问题也变成向量。
- 比较问题向量和各段资料向量的匹配程度。
- 找出评分最高的 K 段资料。
- 将这些段落交给生成器,并把分数转换成权重,用于综合预测。
用 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.1 | ReAct 比只行动好,但单独使用不一定胜过 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% | 分析能帮助拆解目标、跟踪进度并指导行动,提高交互任务成功率 |
| 购物任务:WebShop | 1 个任务示例作为提示;测试 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% |
结论:资料完整时效果明显更好,但资料越多不一定越好。