Rewrite-Retrieve-Read 框架:以 query 重写为起点,从源头优化检索质量
01 — 为什么需要给 query "整容"?
背景与动机
大语言模型虽强,但存在两大致命问题:
- ✅ 幻觉生成:模型可能生成不存在的事实
- ⏱️ 知识时效性滞后:训练数据截止时间限制
检索增强(RAG) 通过引入外部知识完美缓解了这两个问题,成为知识密集型任务的标准解决方案。
传统 RAG 的短板
传统的 "检索-然后-阅读"(Retrieve-then-Read) 框架存在明显短板:
- 检索查询直接使用原始输入:完全忽略了输入文本与真实检索需求的差距
- 复杂问题无法有效检索:多跳问答等复杂问题直接作为查询时,不仅无法补充有效知识,还会引入冗余噪声
- 黑箱大模型无法直接调优:现有方法要么优化检索器,要么设计复杂交互流程,成本高且效果有限
直观例子
💡 问题:"Lady Mary-Gaye Curzon 最小的女儿与 Douglas Smith 共同出演的 2017 年电影是什么?"
- ❌ 直接检索:用这个长句检索会让搜索引擎抓不住重点
- ✅ 重写后:"2017 年电影 Lady Mary-Gaye Curzon 最小的女儿 Douglas Smith",检索效率大幅提升
这正是该研究的核心洞察:优化检索的起点(query),比优化后续环节更高效、更省资源。
02 — 核心框架:Rewrite-Retrieve-Read 三步法
研究提出的全新框架在传统 RAG 流程前增加了 query 重写步骤,形成"重写-检索-阅读"的闭环:
graph LR
A[原始输入 x] --> B[Query Rewrite<br/>查询重写]
B --> C[Retrieve<br/>检索]
C --> D[Read<br/>阅读]
D --> E[最终输出]
2.1 Query Rewrite(查询重写):精准匹配检索需求
基于原始输入 x(如开放域问答的问题、多项选择的"问题+选项"),生成更贴合检索需求的查询。
基础方案(无训练)
直接用大语言模型(如 ChatGPT)作为冻结重写器:
- 📝 输入格式:"指令 + 1-3 个固定演示样例 + 原始输入"
- 📤 输出:0 个(无需检索)、1 个或多个搜索查询
- 🎯 适配任务:HotPotQA 需输出简短短语查询,MMLU 需针对"问题+选项"优化查询
进阶方案(可训练)
用预训练的 T5-large(7.7 亿参数)作为可训练重写器:
- 🔧 训练方式:双阶段训练(预热训练 + 强化学习)
- 🎯 目标:让重写器更适配下游冻结的检索器与阅读器
2.2 Retrieve(检索):高效获取高质量上下文
用重写后的查询调用搜索引擎(实验选用必应):
检索结果处理方式
| 方式 | 描述 | 优势 |
|---|---|---|
| 片段拼接 | 直接提取网页相关片段并拼接 | 快速获取核心信息 |
| URL解析+BM25筛选 | 解析网页完整文本后,用BM25算法筛选高相关段落 | 减少冗余信息干扰 |
2.3 Read(阅读):结合外部知识生成可靠输出
将原始输入 x 与检索到的上下文文档 doc 结合,输入冻结的大语言模型阅读器:
- 🤖 阅读器选择:ChatGPT(gpt-3.5-turbo)和 Vicuna-13B
- 📥 输入格式:
- 无检索增强:仅输入
x - 有检索增强:输入
<doc> + x + (重写查询)
- 无检索增强:仅输入
03 — 可训练重写器的双阶段训练
为了让小模型精准适配流程,研究设计了"预热训练 + 强化学习"双阶段训练:
第一阶段:预热训练(Warm-up)
目标:让 T5-large 先掌握"如何生成能让阅读器正确回答的查询"
训练流程
graph TB
A[训练集原始输入 x] --> B[ChatGPT重写<br/>生成候选查询]
B --> C[检索 + 阅读器验证]
C --> D{阅读器能<br/>正确回答?}
D -->|是| E[纳入预热数据集]
D -->|否| F[丢弃]
E --> G[T5-large微调<br/>对数似然损失]
局限性
- 性能依赖伪数据质量(人工提示可能非最优)
- 模型规模较小(T5-large 参数有限)
第二阶段:强化学习(RL)
目标:根据最终任务效果调整查询生成策略,采用 PPO(近端策略优化)算法
任务建模(马尔可夫决策过程)
| 元素 | 定义 |
|---|---|
| 状态 (s_t) | 当前已生成的查询片段 + 原始输入 |
| 动作 (a_t) | 生成下一个查询 token |
| 奖励 (R) | 检索效果 + 阅读器回答效果 + KL 散度正则项 |
奖励函数组成
R = α × EM分数 + β × F1分数 + γ × 检索命中率 - λ × KL散度
- EM 分数:阅读器回答的精确匹配度
- F1 分数:衡量回答质量
- 检索命中率:检索文档是否含正确答案
- KL 散度:防止与初始模型偏差过大
训练逻辑
- 固定基准策略(预热后的重写器)生成查询样本
- 用 PPO 算法更新模型参数
- 限制新策略与基准策略的差异,保证训练稳定
04 — 实验验证:多数据集持续提效
实验在知识密集型任务的两大核心场景展开:
- 📚 开放域问答:HotPotQA、AmbigNQ、PopQA
- ✍️ 多项选择问答:MMLU(人文、STEM、社会科学等 4 大类)
4.1 开放域问答:破解复杂问题检索难题
HotPotQA(多跳推理)性能对比
| 方法 | EM (%) | F1 (%) |
|---|---|---|
| 直接推理(无检索) | 32.36 | - |
| 传统 RAG | 30.47 | - |
| LLM 冻结重写器 | 32.80 | - |
| 可训练重写器 | 34.38 | 45.97 |
传统 RAG 在 HotPotQA 上表现低于无检索,证明复杂问题直接检索会引入噪声。而 query 重写能将复杂问题拆解为精准查询,从源头避免噪声干扰。
AmbigNQ(消歧问答)& PopQA(长尾知识)
| 数据集 | 传统 RAG EM | 可训练重写器 EM | 提升 |
|---|---|---|---|
| AmbigNQ | 45.80% | 47.80% | +2.0% |
| PopQA | 43.20% | 45.72% | +2.52% |
4.2 多项选择问答:适配不同能力阅读器
MMLU 性能对比(ChatGPT 作为阅读器)
| 类别 | 直接推理 | LLM 重写器 | 提升 |
|---|---|---|---|
| 人文科学 | 75.6% | 77.0% | +1.4% |
| STEM | 58.8% | 63.5% | +4.7% |
| 社会科学 | 81.3% | 81.0% | -0.3% |
弱模型增益更显著(Vicuna-13B)
| 类别 | 直接推理 | LLM 重写器 | 提升 |
|---|---|---|---|
| 人文科学 | 39.8% | 43.2% | +3.4% |
| 其他 | 50.2% | 59.3% | +9.1% |
弱模型的参数化知识更薄弱,query 重写带来的"高质量检索上下文"能更直接地填补缺口,是低成本提升弱模型性能的高效方案。
4.3 检索质量:命中率提升
AmbigNQ 数据集检索命中率
| 方法 | BM25 筛选 | 片段拼接 |
|---|---|---|
| 传统 RAG | 76.4% | 61.1% |
| LLM 冻结重写器 | 77.5% | 63.1% |
| 可训练重写器 | 82.2% | 63.5% |
query 重写的核心价值是"让检索器找对方向"——避免原始输入的歧义、冗余导致的"无效检索",从源头提升上下文文档的相关性。
05 — 典型案例效果
通过具体案例直观理解 query 重写的优化效果:
案例 1:多跳问题
Q0(原始问题):
"Which 2017 movie starring the youngest daughter of Lady Mary-Gaye Curzon was directed by a Polish-American filmmaker?"
Q1(LLM 重写):
"2017 movie youngest daughter Lady Mary-Gaye Curzon Polish-American filmmaker"
Q2(T5 重写):
"Charlotte Calthorpe 2017 film"
结果:成功召回女演员 Charlotte Calthorpe 的参演作品《Beach Rats》
案例 2:关键词优化
Q0(原始问题):
"Which 2000 American animated comedy film featured the song 'All Star'?"
Q1/Q2(重写):
"2000 movie 'All Star' song"
结果:避免歧义检索,快速定位《怪物史莱克》
案例 3:选择题简化
Q0(原始问题+选项):
"A community planner wants to build a fitness center... What is an environmental constraint that must be considered?"
Q1/Q2(重写):
"community planner fitness center environmental impact"
结果:简化冗余背景,强化核心角色,快速定位"环境影响"相关答案
06 — 总结与启示
核心贡献
- ✅ 源头优化思路:优化检索的起点(query)比优化后续环节更高效
- ✅ 双阶段训练:预热训练 + 强化学习,让小模型精准适配 RAG 流程
- ✅ 多场景验证:在开放域问答、多项选择问答等任务上持续提效
实践启示
| 场景 | 建议方案 |
|---|---|
| 🚀 快速部署 | 使用 LLM 冻结重写器(如 ChatGPT)+ 少样本提示 |
| 💰 成本优化 | 训练 T5-large 等小模型,降低推理成本 |
| 🎯 性能极致 | 双阶段训练可训练重写器,针对特定任务优化 |
| 🤖 弱模型增强 | Query 重写对弱模型性能提升更显著 |
未来方向
- 🔍 多模态检索:扩展到图像、视频等多模态场景
- 🌐 实时优化:在线学习,根据用户反馈持续优化重写策略
- 🔗 端到端训练:探索联合训练重写器、检索器和阅读器
Query 重写不是"简单的文字改写",而是从算法源头优化"输入与检索需求匹配度"的关键环节——它让检索器"有的放矢",让阅读器"事半功倍",最终实现检索增强系统性能的高效提升。