From Easy to Hard: 两阶段选择器与阅读器在多跳问答中的应用
发表信息:本文发表于 ICASSP 2023(CCF-B 类会议)
1. 什么是多跳阅读理解?
多跳阅读理解(Multi-hop Question Answering)是自然语言处理领域中的一个极具挑战性的任务。与单跳问答不同,多跳问答需要模型在多个文档中进行推理,找到关联信息后才能给出正确答案。
1.1 "跳"的含义
"跳"指的是推理的步骤数量。每一跳都需要从文档中提取相关信息,并将这些信息连接起来形成最终答案。
1.2 多跳问题示例
示例问题:奥巴马妻子毕业于哪所学校?
flowchart TD
subgraph HOP1["第一跳"]
Q1["Q: 奥巴马的妻子是谁?"]
D1["Doc A: 米歇尔·奥巴马,美国第44任总统奥巴马的妻子"]
end
subgraph HOP2["第二跳"]
Q2["Q: 米歇尔·奥巴马本科毕业于哪所学校?"]
D2["Doc B: 米歇尔·奥巴马1985年毕业于普林斯顿大学,1991年获得哈佛法学院博士学位"]
end
subgraph HOP3["最终答案"]
ANS["Answer: 普林斯顿大学(本科)/ 哈佛大学(法学院)"]
end
Q1 --> D1
D1 --> Q2
Q2 --> D2
D2 --> ANS
style Q1 fill:#f9f,color:#333
style D1 fill:#bbf,color:#333
style Q2 fill:#ff9,color:#333
style D2 fill:#bbf,color:#333
style ANS fill:#bfb,color:#333
问题解析:
| 跳数 | 任务 | 涉及的文档 |
|---|---|---|
| 第一跳 | 找出奥巴马的妻子(米歇尔·奥巴马) | 文档A |
| 第二跳 | 查找她的毕业院校 | 文档B |
| 最终 | 整合两跳信息给出完整答案 | 合并结果 |
多跳体现在哪里?
- 无法直接回答:看第一个文档只能知道奥巴马的妻子是谁,但问题问的是毕业院校
- 需要链式推理:第一跳的结果("米歇尔·奥巴马")是第二跳问题的关键实体
- 两步信息整合:必须把两个文档的信息合在一起才能完整回答问题
- 桥接实体(Bridge Entity):"米歇尔·奥巴马"是把两跳串起来的桥梁,也是 FE2H 两阶段选择器重点捕捉的对象
2. 论文摘要
Title: From Easy to Hard: Two-stage Selector and Reader for Multi-hop Question Answering
作者: Weijun Lei et al. (南京大学)
Abstract:
多跳问答是一个具有挑战性的任务,需要QA系统在多个文档上进行复杂推理并提供支持性事实和准确答案。现有方法倾向于使用基于图的推理和问题分解来获取推理链,但这不可避免地引入了额外的复杂性和累积误差。
为了解决上述问题,我们提出了一个简单而有效的新框架——From Easy to Hard (FE2H),该框架通过移除干扰信息来获得更好的多跳QA任务上下文表示。
FE2H的核心理念:
- 借鉴人类迭代文档选择过程和渐进式学习习惯
- 将文档选择器和阅读器分为两个阶段,遵循从易到难的方式
具体来说:
- 文档筛选阶段:首先选择与问题最相关的文档,然后利用该文档进一步选择其他相关文档
- 问答阶段:阅读器首先在单跳QA数据集上训练,然后迁移到多跳QA任务
我们在流行的多跳QA基准测试HotpotQA上进行了全面评估,实验结果表明,我们的方法在HotpotQA排行榜(distractor设置)上优于所有其他方法。
论文链接: arXiv:2205.11729
代码链接: GitHub: hotpotqa_mrc
HotpotQA排行榜: https://hotpotqa.github.io/
3. 核心创新点
3.1 创新点一:两阶段文档筛选器
3.1.1 传统方法的痛点
在多跳问答任务中,每个问题通常配有10个干扰文档(distractors)。传统方法通常:
- 直接全局推理:将所有文档一起输入模型
- 一次性选择:一次性选出所有相关文档
这会导致:
- 无关信息带来的噪声干扰
- 推理复杂度呈指数级增长
- 错误在多跳推理过程中累积
3.1.2 FE2H 的解决方案:渐进式筛选
flowchart TD
subgraph TRAD["传统方法"]
T1["Q + 10 docs"] --> T2["Select all at once"]
T2 --> T3["Multi-hop reasoning"]
end
subgraph FE2H["FE2H 两阶段"]
F1["Q + 10 docs"] --> F2["Stage 1: Select relevant doc"]
F2 --> F3["Combine Q + doc1"]
F3 --> F4["Stage 2: Select 2nd hop"]
F4 --> F5["Reason on filtered docs"]
end
style F2 fill:#bfb,color:#333
style F4 fill:#bfb,color:#333
核心思想:借鉴人类的迭代阅读习惯,先找到"入口文档",再基于它找到后续相关文档。
3.1.3 为什么这样更有效?
| 特性 | 传统方法 | FE2H两阶段 |
|---|---|---|
| 信息利用 | 全局搜索 | 聚焦式检索 |
| 噪声引入 | 高(10个文档全量) | 低(逐阶段筛选) |
| 推理难度 | O(n) | O(n)(输入更小更聚焦) |
| 错误累积 | 多跳同时推理 | 分步验证 |
3.2 创新点二:从易到难的渐进式学习
3.2.1 核心灵感
人类在学习复杂任务时,天然地采用"从易到难"的方式:
flowchart LR
subgraph HUMAN["人类学习"]
H1["Learn to speak"] --> H2["Learn to read"] --> H3["Learn comprehension"] --> H4["Learn to write"]
end
subgraph FE2HT["FE2H 训练"]
E1["Single-hop QA"] --> E2["Simple reasoning"] --> E3["Multi-hop QA"]
end
style E1 fill:#bbf,color:#333
style E3 fill:#f9f,color:#333
3.2.2 渐进式训练策略
flowchart TD
subgraph STAGE1["Stage 1: Single-hop 预训练"]
P1["Train on SQuAD"] --> P2["Learn basic reading comprehension"]
P2 --> P3["Understand question intent"]
P3 --> P4["Locate answer boundaries"]
end
subgraph STAGE2["Stage 2: Multi-hop 迁移"]
P4 --> M1["Transfer to HotpotQA"]
M1 --> M2["Two-stage document selection"]
M2 --> M3["Multi-hop reasoning"]
end
style P1 fill:#bbf,color:#333
style M1 fill:#f9f,color:#333
3.2.3 为什么单跳数据很重要?
- 数据规模大:单跳问答数据集(如SQuAD)规模远大于多跳数据集
- 噪声少:单跳文档通常直接包含答案,干扰较少
- 学习基础能力:
- 问题理解
- 实体识别
- 答案定位
- 上下文推理
3.3 创新点三:简洁有效的框架设计
3.3.1 拒绝复杂,拥抱简单
| 特性 | 主流方法 | FE2H |
|---|---|---|
| 图结构 | 需要构建实体关系图 | 无需图结构 |
| 问题分解 | 需要显式分解问题 | 无需分解 |
| 预训练模型 | 复杂的多任务学习 | 简单的两阶段训练 |
| 推理复杂度 | O(n²) 甚至更高 | O(n) |
3.3.2 框架对比
flowchart TD
subgraph TRAD["传统方法 (Graph-based)"]
G1["Build knowledge graph"] --> G2["Entity linking"]
G2 --> G3["GNN reasoning"]
G3 --> G4["Multi-hop aggregation"]
end
subgraph FE2H["FE2H (Selection + Reader)"]
F1["Document selection"] --> F2["Single-hop pretrain"]
F2 --> F3["Multi-hop fine-tune"]
F3 --> F4["Answer generation"]
end
style G1 fill:#fbb,color:#333
style F1 fill:#bfb,color:#333
3.3.3 消融实验结果
论文中的消融实验证明了各组件的有效性:
| 模型变体 | Joint F1 | 提升 |
|---|---|---|
| 基础模型 | 74.2 | - |
| + 第一阶段筛选 | 75.8 | +1.6 |
| + 第二阶段筛选 | 76.1 | +0.3 |
| + 渐进式学习 | 76.5 | +0.4 |
4. FE2H框架详解
4.1 整体架构
flowchart TD
Q["Question"] --> DS1["Stage 1 Doc Selector"]
subgraph DOCSEL["文档选择阶段"]
DS1 -->|"Select relevant doc"| D1["Relevant Doc 1"]
DS1 -->|"Combine Q + Doc1"| DS2["Stage 2 Doc Selector"]
DS2 -->|"Select 2nd hop doc"| D2["Relevant Doc 2"]
end
subgraph QASTAGE["问答阶段"]
D1 --> Reader["Two-stage Reader"]
D2 --> Reader
Reader -->|"Single-hop mode"| Output1["Answer + Support"]
Reader -->|"Multi-hop mode"| Output2["Final Answer"]
end
style DS1 fill:#f9f,color:#333
style DS2 fill:#f9f,color:#333
style Reader fill:#ff9,color:#333
4.2 两阶段文档选择器
第一阶段:
- 输入:问题 + 所有候选文档
- 输出:选择最相关的文档(top-k)
第二阶段:
- 输入:问题 + 第一阶段选中的文档
- 输出:进一步筛选出与推理链相关的其他文档
4.3 两阶段阅读器
第一阶段(单跳模式):
- 在单跳问答数据集(如SQuAD)上进行预训练
- 学习基础的问答能力
第二阶段(多跳模式):
- 迁移到多跳问答任务
- 利用第一阶段学到的知识进行更复杂的推理
5. 与大模型Chain-of-Thought的联系与区别
5.1 Chain-of-Thought (CoT) 简介
Chain-of-Thought(思维链)是近年来大语言模型(如GPT-4、PaLM)的重要推理范式。其核心思想是:
flowchart LR
Q1["Question"] --> CoT1["Step-by-step reasoning
Step 1: ...
Step 2: ...
Step 3: ..."]
CoT1 --> A1["Final Answer"]
style Q1 fill:#f9f,color:#333
style CoT1 fill:#ff9,color:#333
style A1 fill:#bfb,color:#333
CoT的优势:
- 显式展示推理过程
- 提高模型的可解释性
- 在数学、逻辑推理任务上效果显著
5.2 FE2H vs Chain-of-Thought
| 特性 | FE2H | Chain-of-Thought |
|---|---|---|
| 推理方式 | 显式的文档筛选+阅读 | 隐式的思维链 |
| 信息利用 | 筛选相关文档,减少干扰 | 使用全部上下文 |
| 可解释性 | 高(清晰的文档选择过程) | 中(推理步骤可见) |
| 计算成本 | 较低(筛选减少输入) | 较高(完整上下文) |
| 适用场景 | 结构化文档检索 | 开放域推理 |
5.3 两者的联系
渐进式推理:两者都采用"逐步推理"的思想
- FE2H:从简单文档到复杂文档,从单跳到多跳
- CoT:从简单推理步骤到复杂推理步骤
中间结果:都依赖中间结果来增强最终答案
- FE2H:筛选出的相关文档
- CoT:推理过程中的中间结论
减少幻觉:通过结构化信息减少模型编造答案的风险
5.4 未来结合方向
flowchart TD
Q["Question"] --> Selector["Doc Selector"]
Selector -->|"Filter relevant docs"| Context["Filtered Context"]
Context --> CoT["Chain-of-Thought"]
CoT -->|"Verify intermediate steps"| Selector
CoT --> Answer["Final Answer"]
style Q fill:#f9f,color:#333
style Selector fill:#bbf,color:#333
style CoT fill:#ff9,color:#333
style Answer fill:#bfb,color:#333
可能的结合方向:
- 用CoT来解释为什么选择某些文档
- 用文档筛选结果来约束CoT的推理空间
- 迭代式:筛选 → 推理 → 验证 → 再筛选
6. 与 ReAct 的对比
6.1 ReAct 是什么
论文: ReAct: Synergizing Reasoning and Acting in Language Models
作者: Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, Yuan Cao
会议: ICLR 2023
ReAct 和 FE2H 都以 HotpotQA 作为多跳问答的评测基准,但选择了完全不同的技术路线。
ReAct 的核心思想是让大语言模型在 Thought → Action → Observation 的循环中自行推进推理:
- Thought(思考):LLM 分析当前状态,决定下一步需要什么信息;
- Action(行动):调用外部工具,例如
Search[米歇尔·奥巴马]这种 Wikipedia API 查询; - Observation(观察):拿到 API 返回的段落,把关键实体融入下一轮 Thought。
整个过程不需要任何针对任务的微调,只靠 few-shot 提示让 LLM 学会"生成启发式子问题"。这也是题目里"启发式问题"的来源——LLM 在 Thought 阶段动态构造下一跳的查询,而不是预定义规则。
6.2 用奥巴马妻子的例子看 ReAct
把前面那个问题放进 ReAct 框架里执行一遍:
Q: 奥巴马妻子毕业于哪所学校?
Thought 1: 我需要先知道奥巴马的妻子是谁。
Action 1: Search[Barack Obama wife]
Obs 1: 米歇尔·奥巴马 (Michelle Obama),美国第44任第一夫人。
Thought 2: 现在需要查找米歇尔·奥巴马的教育背景。
Action 2: Search[Michelle Obama education Princeton Harvard]
Obs 2: 米歇尔·奥巴马1985年毕业于普林斯顿大学,1991年获得哈佛法学院博士学位。
Thought 3: 已经拿到本科与法学院信息,可以给出答案。
Answer: 普林斯顿大学(本科)/ 哈佛大学(法学院)
可以看到,每一跳的 Thought 都是 LLM 当场生成的子问题,Action 对应一次外部检索,Observation 把新实体送入下一轮。整条推理链是 LLM 自己走出来的。
6.3 FE2H vs ReAct
| 维度 | FE2H | ReAct |
|---|---|---|
| 范式 | BERT 风格的有监督微调 | LLM + few-shot 提示,无需训练 |
| 推理结构 | 显式两阶段文档选择器 | Thought-Action-Observation 循环 |
| 信息源 | 闭域:题面给定的 10 个候选文档 | 开放域:实时调用 Wikipedia API |
| 启发式问题的来源 | 选择器对候选文档打分排序 | LLM 自由生成自然语言子问题 |
| 推理链生成 | 隐式:阅读器一次性产出答案 | 显式:每一跳 Thought 都是可见的中间步骤 |
| 训练数据 | 单跳 SQuAD → 多跳 HotpotQA | 仅靠几条 few-shot 示例 |
| 可解释性 | 选择出来的 top-k 文档 | 完整的 Thought-Action-Observation 轨迹 |
| 适用场景 | 闭域 QA、有标注数据 | 开放域工具调用、零样本能力 |
6.4 两者的内在联系
虽然技术路线完全不同,但 FE2H 和 ReAct 在抽象层面是同一种思路:
都是"启发式问题驱动"的迭代过程
- FE2H:选择器在每一步选出与"当前问题 + 已选文档"最相关的下一跳文档,本质上是在回答"下一跳应该关注哪个文档"这个问题;
- ReAct:LLM 在 Thought 阶段直接生成子问题,作为下一步 Action 的查询。
两者都在用一个启发式信号决定"下一跳往哪里跳",只是信号的生成主体不同。
都是"观察 → 行动 → 观察"的循环
- FE2H:观察(已选文档)→ 行动(再选下一跳文档)→ 观察(再选文档)…;
- ReAct:观察(API 返回)→ 行动(生成下一 Thought)→ 观察(再次 API 调用)…。
都强调"渐进"
- FE2H:从单跳预训练迁移到多跳微调,能力是渐进获得的;
- ReAct:Thought 由粗到细,每一步在前一步 Observation 的基础上推进。
6.5 落地取舍
| 场景 | 选 FE2H | 选 ReAct |
|---|---|---|
| 候选文档已经确定(10 篇阅读理解) | ✅ | |
| 需要从整个 Wikipedia 检索证据 | ✅ | |
| 模型资源受限,只能用 BERT 类小模型 | ✅ | |
| 有大模型推理预算,希望零样本上线 | ✅ | |
| 需要严格可解释的中间步骤 | ✅ | |
| 有大量单跳 + 多跳标注数据 | ✅ |
从研究谱系上看,FE2H 属于"在小模型 + 闭域标注数据"上把多跳 QA 推到极致的工作;ReAct 则代表"用大模型的推理 + 工具调用能力解决多跳问题"的另一条路线。两者在 HotpotQA 这个共同基准上互相印证了同一个直觉:多跳问答的本质,是用启发式信号把推理链串起来。
7. 实验结果
在HotpotQA数据集(distractor设置)上的表现:
| 模型 | Answer EM | Answer F1 | Support EM | Support F1 | Joint EM | Joint F1 |
|---|---|---|---|---|---|---|
| FE2H (ALBERT) | 71.89 | 84.44 | 64.98 | 89.14 | 50.04 | 76.54 |
| R3 | 71.27 | 83.57 | 65.25 | 88.98 | 49.81 | 76.02 |
| SAE+ | 70.74 | 83.61 | 63.70 | 88.95 | 48.15 | 75.72 |
FE2H在排行榜上取得了Joint F1 76.54的成绩,位列第一。
8. 总结
FE2H的核心贡献:
- 两阶段文档筛选:通过渐进式筛选有效减少干扰信息,提高信息利用率
- 从易到难的学习范式:先在简单任务上学习,再迁移到复杂任务
- 简洁有效:不依赖复杂的图结构或问题分解,方法简单但效果显著
这种方法为多跳问答提供了一种新的思路,同时也为大型语言模型的推理能力增强提供了参考。