精读笔记:FLARE — 主动检索增强生成

论文全名:Active Retrieval Augmented Generation
arXiv 编号:2305.06983v2(2023年10月22日最终版)
发表会议:EMNLP 2023
作者机构:Zhengbao Jiang, Frank F. Xu, Luyu Gao, Zhiqing Sun 等(均为 Carnegie Mellon University,语言技术研究所);另有 Sea AI Lab、FAIR Meta 合作者
代码仓库:https://github.com/jzbjyb/FLARE


阅读地图

本文共 9 节正文 + 附录。精读重点如下:

章节 内容 精读程度
Abstract 全文核心主张 全部精读
§1 Introduction 为什么需要主动检索 核心段落精读
§2 Retrieval Augmented Generation 形式化定义,铺垫框架 精读
§3 FLARE 方法 两种变体的完整机制 逐段精读(重点)
§4 Multi-time Retrieval Baselines 对比基线 精读
§5 Experimental Setup 4 个任务说明 要点精读
§6 Experimental Results 核心实验数字 重点段落精读
§7 Related Work 一句话带过 略读
§8 Conclusion + §9 Limitations 总结与局限 要点精读
附录 A–D 实现细节、超参、示例 prompt 一句话带过

阅读建议:先看 Abstract 把握全局,再看 §1 了解动机,然后重点攻克 §3(方法核心),最后看 §6 验证效果。


一、Abstract(摘要)

原文

Despite the remarkable ability of large language models (LMs) to comprehend and generate language, they have a tendency to hallucinate and create factually inaccurate output. Augmenting LMs by retrieving information from external knowledge resources is one promising solution. Most existing retrieval augmented LMs employ a retrieve-and-generate setup that only retrieves information once based on the input. This is limiting, however, in more general scenarios involving generation of long texts, where continually gathering information throughout generation is essential. In this work, we provide a generalized view of active retrieval augmented generation, methods that actively decide when and what to retrieve across the course of the generation. We propose Forward-Looking Active REtrieval augmented generation (FLARE), a generic method which iteratively uses a prediction of the upcoming sentence to anticipate future content, which is then utilized as a query to retrieve relevant documents to regenerate the sentence if it contains low-confidence tokens.

翻译

尽管大型语言模型在理解和生成语言方面能力卓越,它们仍有产生幻觉(hallucinate)、输出事实不准确内容的倾向。通过从外部知识库检索信息来增强语言模型是一种有前途的解决方案。然而,现有大多数检索增强语言模型采用"一次检索、一次生成"的模式——仅在输入阶段检索一次。这在涉及长文本生成的场景中存在局限,因为在整个生成过程中持续收集信息至关重要。本文提出了主动检索增强生成(active retrieval augmented generation)的广义视角——这类方法在生成过程中主动决定何时检索、检索什么。我们提出 FLARE(前向主动检索增强生成),一种通用方法:迭代地利用对下一句话的预测来预判未来内容,将其作为检索查询,若该句包含低置信度 token,则检索相关文档后重新生成该句。

新手讲解

核心问题是什么?

想象你要写一篇关于某人的传记。传统 RAG 的做法是:在动笔之前,先去图书馆查一次这个人的资料,拿着这些资料回来一口气写完全文。问题在于,传记要涉及很多方面——童年、教育、职业、成就——而你一开始只知道"写这个人",很难一次性把所有需要的资料都查到。

FLARE 的做法更像人类写作:边写边发现不懂的地方,发现了就去查,查完再继续写。具体来说,每次准备写下一句话时,先草拟一个"试写版",如果发现自己对这句话里某些词没把握(低概率/低置信度),就拿这句话去图书馆搜索,找到资料后重新正式写这句话。

术语解释:
- 幻觉(hallucinate):模型一本正经地编造不存在的事实,比如编造错误的日期、人名等
- 主动检索(active retrieval):检索不是被动地在开头发生一次,而是模型"主动"在认为需要时随时触发
- 低置信度(low confidence):模型生成某个词时,内部计算出的概率很低,说明模型对这个词"没把握"


二、Introduction(引言)核心段落

段落一:单次检索的局限

原文关键句:

These single-time retrieval augmented LMs outperform purely parametric LMs, particularly for short-form knowledge-intensive generation tasks such as factoid question answering, where the information needs are clear in the user's input, and it is sufficient to retrieve relevant knowledge once solely based on the input.

翻译:

这些"单次检索"增强语言模型在短文本知识密集型任务(如事实问答)上表现出色,因为在这类任务中,信息需求在用户输入中就已清晰,仅基于输入检索一次就足够了

新手讲解:

"你的生日是哪天?"——这种问题的答案是固定的一条信息,查一次就够了。但"请给我写一篇关于气候变化的综合报告"——这个任务要涉及温室气体、冰川融化、政策应对……你不可能在开头查一次"气候变化"就把所有信息都拿齐了。单次检索对短问答够用,对长文本生成就捉襟见肘。


段落二:长文本生成的特殊性

原文关键句:

In contrast to short-form generation, long-form generation presents complex information needs that are not always evident from the input alone. Similar to how humans gradually gather information as we create content such as papers, essays, or books, long-form generation with LMs would require gathering multiple pieces of knowledge throughout the generation process.

翻译:

与短文本生成相比,长文本生成呈现出复杂的信息需求,这些需求并不总是从输入本身中就能看出来。就像人类在创作论文、文章或书籍时逐渐收集信息一样,语言模型的长文本生成也需要在整个生成过程中持续收集多项知识

新手讲解(类比):

这里论文用了一个完美的类比,我们把它展开说:

你在写一篇关于"拜登总统"的传记。
- 第一步:你查了"拜登是谁",知道他是美国第46任总统
- 写到"教育经历"时,你发现自己不记得他上了哪所大学,于是去查——原来是特拉华大学,不是宾夕法尼亚大学
- 写到"参选2020年大选"时,你又忘了宣布参选的日期,再去查——是2019年4月25日

你无法在动笔前就知道自己会需要查哪些具体细节。信息需求是随着写作推进动态浮现的。这正是 FLARE 要解决的问题。


段落三:核心问题与假设

原文关键句:

Our hypothesis regarding when to retrieve is that LMs should retrieve information only when they lack the required knowledge to avoid unnecessary or inappropriate retrieval... Given the observation that large LMs tend to be well-calibrated and low probability/confidence often indicates a lack of knowledge, we adopt an active retrieval strategy that only retrieves when LMs generate low-probability tokens.

翻译:

我们关于何时检索的假设是:语言模型只有在缺乏必要知识时才应该检索,以避免不必要或不当的检索……鉴于观察到大型语言模型倾向于有良好的校准性(calibration),且低概率/低置信度通常意味着知识缺失,我们采用一种主动检索策略,仅在语言模型生成低概率 token 时才触发检索。

新手讲解:

校准性(calibration) 是什么意思?它指的是模型对自己"有多确定"的判断是否准确。一个校准良好的模型,当它说"我80%确定答案是X"时,X 确实有80%的概率是对的。

大型语言模型(尤其是 GPT 系列)被发现有比较好的校准性。这意味着:当模型生成某个词的概率很低时,这个词大概率是错的或不确定的——这正是模型在暗示"我对这里没把握,需要查一查"。

类比:你在写作时,写到某个数字(比如某个历史事件的年份)时内心会犹豫——"好像是1997年?还是1998年?"这种犹豫就对应模型的"低置信度"。此时你会去查资料,FLARE 也会在此时触发检索。


三、§2 Retrieval Augmented Generation(形式化框架)

2.2 单次检索增强生成

原文:

The most common choice is to directly use the user input as the query for retrieval and generate the complete answer at once: y = LM([D_x, x])

翻译:

最常见的做法是直接用用户输入作为检索查询,然后一次性生成完整答案:y = LM([D_x, x])(其中 D_x 是基于输入 x 检索到的文档集合)

新手讲解:

这个公式很简单:把检索到的文档 D_x 和用户问题 x 拼在一起,喂给语言模型,一次性输出答案 y。这就是 RAG 原论文(Lewis et al., 2020)的做法。整个过程只有一次检索、一次生成


2.3 主动检索增强生成框架

原文(核心公式):

Formally, at step t (t ≥ 1), the retrieval query q_t is formulated based on both the user input x and previously generated output y_{<t}:

q_t = qry(x, y_{<t})

Given retrieved documents D_{q_t}, LMs continually generate the answer until the next retrieval is triggered or reaches the end:

y_t = LM([D_{q_t}, x, y_{<t}])

翻译:

形式上,在第 t 步(t ≥ 1),检索查询 q_t 基于用户输入 x 和之前已生成的内容 y_{<t} 来构建:

q_t = qry(x, y_{<t})(qry 是查询构建函数)

给定检索到的文档 D_{q_t},语言模型持续生成答案,直到下一次检索被触发或到达末尾:

y_t = LM([D_{q_t}, x, y_{<t}])(当前生成 = 语言模型读取当前检索结果 + 原始输入 + 已有内容)

新手讲解:

这个框架把"生成"拆分成了若干步骤,每一步都可以重新触发检索。注意几个关键设计:

  1. 查询可以随着生成动态变化:每步的 q_t 不只依赖原始问题 x,还依赖已经生成的内容 y_{<t},所以查询会随生成进展而更新
  2. 只保留当前检索结果:论文明确说"丢弃之前步骤检索到的文档",只用当前步骤的文档,以防超出模型的输入长度限制
  3. 检索与生成交织:不是先全部检索再全部生成,而是检索一步、生成一步、再检索、再生成……

四、§3 FLARE 方法(核心,逐段精读)

开篇直觉

原文:

Our intuition is that (1) LMs should only retrieve information when they do not have the necessary knowledge to avoid unnecessary or inappropriate retrieval, and (2) the retrieval queries should reflect the intents of future generations.

翻译:

我们的直觉是:(1) 语言模型只有在缺乏必要知识时才应检索,以避免不必要的检索;(2) 检索查询应该反映未来生成的意图

新手讲解:

这句话点出了两个关键设计原则:

为什么向前看更好?想象你刚写完"拜登1965年毕业于……",如果用这句话去检索,你会找到关于"1965年"和"拜登毕业"的资料。但你接下来要写的是"他在哪所大学获得了法学学位",用"接下来要写的那句话"去检索,才能找到最相关的信息。


3.1 FLARE_instruct:带检索指令的变体

原文:

Inspired by Toolformer (Schick et al., 2023), a straightforward way of expressing information needs for retrieval is to generate "[Search(query)]" when additional information is needed, e.g., "The colors on the flag of Ghana have the following meanings. Red is for [Search(Ghana flag red meaning)] the blood of martyrs, ..."

翻译:

受 Toolformer 启发,一种直接表达检索信息需求的方式是:在需要额外信息时生成"[Search(query)]",例如:"加纳国旗上的颜色有以下含义。红色代表 [Search(加纳国旗红色含义)] 烈士的血……"

新手讲解:

这个变体的思路很直觉:教模型在写作时"喊停"并说出需要查什么

具体操作是:给模型一个特殊的 Prompt,分两个"技能":
- 技能1:告诉模型"当需要更多信息时,写 [Search(查询词)]"
- 技能2:告诉模型如何完成具体任务(比如多跳问答)

当模型在输出中写出 [Search(xxx)],系统就截断生成,用 xxx 去检索,把找到的文档插在输入前面,然后继续生成。

局限:这个方法依赖模型主动"想起"要插入搜索指令,但实践中发现模型有时生成的搜索查询不够可靠,或者插入频率不稳定。这促使作者提出了第二种更直接的变体。


3.2 FLARE_direct:直接 FLARE(重点)

原文:

Since we cannot fine-tune black-box LMs, we found queries generated by FLARE_instruct through retrieval instructions might not be reliable. Therefore, we propose a more direct way of forward-looking active retrieval that uses the next sentence to decide when and what to retrieve.

翻译:

由于我们无法对黑盒语言模型进行微调,我们发现 FLARE_instruct 通过检索指令生成的查询可能不够可靠。因此,我们提出了一种更直接的前向主动检索方式:使用下一句话来决定何时检索、检索什么

新手讲解:

FLARE_direct 的核心思路是一个精妙的转换:既然我想用"接下来要写的内容"去检索,不如直接先草拟一遍下一句,拿它去检索,再正式写

整个流程就像"先起草,再润色":先随手写一句,发现写得没把握,去查资料,再认真写一遍。


3.2.1 基于置信度的主动检索

原文(核心机制):

At step t, we first generate a temporary next sentence ŝ_t = LM([x, y_{<t}]) without conditioning on retrieved documents. Then we decide whether to trigger retrieval and formulate queries based on ŝ_t. If the LM is confident about ŝ_t, we accept it without retrieving additional information; if not, we use ŝ_t to formulate search queries q_t to retrieve relevant documents, and then regenerate the next sentence s_t.

翻译:

在第 t 步,我们首先不借助检索文档生成一个临时的下一句话 ŝ_t = LM([x, y_{<t}])。然后基于 ŝ_t 决定是否触发检索。如果模型对 ŝ_t 有信心,就直接接受它;如果没有,就用 ŝ_t 来构建检索查询 q_t,检索相关文档,然后重新生成下一句 s_t。

原文(决策公式):

$$y_t = \begin{cases} \hat{s}t & \text{if all tokens of } \hat{s}_t \text{ have probs} \geq \theta \ s_t = \text{LM}([\mathcal{D}{q_t}, x, y_{<t}]) & \text{otherwise} \end{cases}$$

翻译:

新手讲解:

这是 FLARE 最核心的机制,用一个流程图来理解:

步骤 t:
1. 先草拟一句(不看任何文档): ŝ_t
2. 检查这句话里每个词的概率
   ├─ 全部概率 ≥ θ?→ 模型有信心 → 直接采用 ŝ_t,进入步骤 t+1
   └─ 有词概率 < θ?→ 模型没把握 → 用 ŝ_t 去检索文档 → 看着文档重写这句 → 得到 s_t,进入步骤 t+1

关键参数 θ(阈值)
- θ = 0:永不检索(退化为普通 LM)
- θ = 1:每句都检索(完全依赖检索)
- 实践中 θ = 0.8 左右效果较好,意味着"只要有词的概率低于80%就检索"

为什么用句子(sentence)作为基本单位?

论文解释:句子是合适的语义单元——比词短语"太短"(信息不完整,难以检索),比段落"太长"(可能包含太多不同话题)。以句子为单位检索既能捕捉完整的信息需求,又不至于把不同话题混在一起。


3.2.2 基于置信度的查询构建

原文:

One way to perform retrieval is to directly use the next sentence ŝ_t as the query q_t... However, it has a risk of perpetuating errors contained in it. For example, if the LM produces the sentence "Joe Biden attended the University of Pennsylvania" instead of the correct fact that he attended the University of Delaware, using this erroneous sentence as a query might retrieve misleading information.

翻译:

一种检索方式是直接把下一句 ŝ_t 用作查询 q_t……然而,这有传播句子中已有错误的风险。例如,如果模型生成了"拜登就读于宾夕法尼亚大学"(而正确事实是特拉华大学),用这个错误的句子作为查询可能会检索到误导性信息

新手讲解:

这里指出了一个潜在的问题:模型本来就是因为"没把握"才要检索,但"没把握的那句话"本身可能就包含错误内容。用错误的查询检索,可能反而强化错误。

比如:
- 模型猜:拜登上的是宾夕法尼亚大学(错的)
- 用"拜登宾夕法尼亚大学"去检索
- 检索结果恰好找到宾夕法尼亚大学相关的拜登信息(比如他在那里演讲过)
- 模型看了这个结果,更加"确信"错误答案了

为了解决这个问题,作者提出了两种查询改进方法:


方法一:隐式查询——掩码低置信度词

原文:

Masked sentences as implicit queries. The first method masks out low-confidence tokens in ŝ_t with probabilities below a threshold β ∈ [0,1], where a higher β results in more aggressive masking. This removes potential distractions from the sentence to improve retrieval accuracy.

翻译:

隐式查询——掩码句:第一种方法将 ŝ_t 中概率低于阈值 β 的低置信度 token 遮掉(mask),β 越高遮掉的词越多。这去除了句子中潜在的干扰,提高检索准确性。

新手讲解(图示):

原句:Joe Biden attended the University of Pennsylvania, where he earned a law degree.
(下划线部分是低概率词)

掩码后查询:Joe Biden attended _, where he earned ___.

这样检索时,"宾夕法尼亚大学"这个错误的词被遮掉了,检索器会根据"拜登 attended _____ 大学"的语境去找,更可能找到正确结果。


方法二:显式查询——生成问题

原文:

Generated questions as explicit queries. Another method is to generate explicit questions that target the low-confident span in ŝ_t. For example, if the LM is uncertain about "the University of Pennsylvania", a question like "Which university did Joe Biden attend?" can help retrieve relevant information.

翻译:

显式查询——生成问题:另一种方法是针对 ŝ_t 中低置信度的片段生成明确的问题。例如,如果模型对"宾夕法尼亚大学"不确定,生成"拜登就读于哪所大学?"这样的问题可以帮助检索相关信息。

具体流程(Prompt 3.2)

用户输入 x
已生成内容 y_{≤t}
给定以上段落,请提问一个答案是 "z" 的问题。

其中 z 是被识别出的低置信度片段。系统用 gpt-3.5-turbo 生成问题,然后用这些问题检索。

新手讲解:

这个方法更聪明:不是把有错误的句子直接扔给搜索引擎,而是把低置信度的词当成"未知答案",反推出一个"查询问题"

类比:你在写"拜登上了 ___ 大学",你不确定那个空应该填什么。与其拿整句话去 Google,不如直接搜"Joe Biden 上了哪所大学"——这个问题查询更精准。

总结公式:

$$q_t = \begin{cases} \emptyset & \text{if all tokens of } \hat{s}_t \text{ have probs} \geq \theta \ \text{mask}(\hat{s}_t) \text{ or } \text{qgen}(\hat{s}_t) & \text{otherwise} \end{cases}$$


3.3 实现细节

原文:

Base LM: We validate our method on one of the most advanced GPT-3.5 LMs text-davinci-003 by iteratively querying their API.

Document corpus and retrievers: For datasets that mainly rely on knowledge from Wikipedia, we use the Wikipedia dump from Karpukhin et al. (2020) and employ BM25 as the retriever. For datasets that rely on knowledge from the open web, we use the Bing search engine as our retriever.

翻译:

基础语言模型:使用 GPT-3.5 中最强的 text-davinci-003,通过 API 迭代调用。

文档库和检索器:对于主要依赖维基百科知识的数据集,使用 BM25 检索器在维基百科语料上检索;对于需要从开放网络获取知识的数据集,使用必应搜索引擎。

新手讲解:


五、§4 Multi-time Retrieval Baselines(多次检索基线)

基线方法总览

原文:

The aforementioned approaches can retrieve additional information while generating. However, they have notable drawbacks: (1) Using previously generated tokens as queries might not reflect what LMs intend to generate in the future. (2) Retrieving information at a fixed interval can be inefficient because it might occur at inappropriate points. (3) Question decomposition approaches require task-specific prompt engineering, which restricts their generalizability in new tasks.

翻译:

上述方法能在生成过程中检索额外信息,但有明显缺陷:(1) 用已生成的 token 作查询,可能无法反映模型未来要生成的内容。(2) 按固定间隔检索可能低效,因为可能在不合适的时机检索。(3) 问题分解方法需要任务特定的 prompt 工程,限制了其在新任务上的通用性。

新手讲解:

论文对比了三类基线,帮助理解 FLARE 的优越性:

基线类型 检索时机 检索查询 主要缺陷
前文窗口法(Previous-window) 每 l 个 token 检索一次 前 l 个 token 时机固定,查询反映过去不反映未来
前句法(Previous-sentence) 每句话检索一次 上一句话 时机固定,查询反映过去不反映未来
问题分解法(Question decomposition) 动态(模型生成子问题时) 分解出的子问题 需要手工标注任务特定示例,不通用
FLARE_direct(本文) 动态(低置信度时) 下一句话(前向) 无上述缺陷

六、§5 Experimental Setup(实验设置)

四个任务

原文:

We evaluate FLARE on 4 diverse tasks/datasets involving generating long outputs, including multihop QA (2WikiMultihopQA), commonsense reasoning (StrategyQA), long-form QA (ASQA), and open-domain summarization (WikiAsp).

翻译:

在 4 个涉及长文本生成的多样任务/数据集上评估 FLARE,包括:多跳问答(2WikiMultihopQA)、常识推理(StrategyQA)、长文本问答(ASQA)、开放域摘要(WikiAsp)。

新手讲解:

多跳问答(Multi-hop QA) 是什么?

"多跳"(multi-hop)指的是回答一个问题需要"跳"经过多步推理,每一步依赖前一步的答案。

例如:"Versus 的创始人为什么去世?"
- 第一跳:谁是 Versus 的创始人?→ Gianni Versace
- 第二跳:Gianni Versace 怎么死的?→ 被枪击身亡

每一跳都需要检索不同的信息,这正是 FLARE 动态检索的用武之地——第一跳结果生成后,需要用新信息触发第二次检索。

四个任务的选择策略性很强:
- 2WikiMultihopQA:测试多步推理能力,FLARE 动态检索最能发挥优势
- StrategyQA:是/否题,测试常识推理
- ASQA:模糊问题(同一问题有多种解释),需要覆盖多个角度
- WikiAsp:开放域摘要,需要从网络实时收集多方面信息


七、§6 Experimental Results(实验结果)

6.1 总体结果

原文:

FLARE outperforms all baselines on all tasks/datasets, indicating that FLARE is a generic method that can effectively retrieve additional information throughout the generation. Among various tasks, multihop QA shows the most significant improvement.

翻译:

FLARE 在所有任务/数据集上均优于所有基线,表明 FLARE 是一种能在整个生成过程中有效检索额外信息的通用方法。在各任务中,多跳问答的提升最为显著

新手讲解(关键数字,2WikiMultihopQA,Table 1):

方法 EM(精确匹配) F1
无检索 28.2 36.8
单次检索 39.4 48.8
前文窗口(Previous-window) 43.2 52.3
问题分解(Question decomposition) 47.8 56.4
FLARE_direct(本文) 51.0 59.7

FLARE_direct 的精确匹配率(51.0%)比单次检索(39.4%)提升了约 12 个百分点,比最强基线问题分解法(47.8%)还高 3.2 个百分点——而问题分解法需要手工标注任务特定的示例,FLARE 不需要。

为什么多跳问答提升最大?

原文解释:多跳 QA 有清晰的任务定义和明确的推理路径(2步推理得出最终答案),这使语言模型更容易生成与主题相关的输出。每跳之间的信息需求切换,正好对应 FLARE 的动态检索触发机制。


6.2 消融实验(Ablation Study)

前向检索 vs 后向检索

原文(Table 3 结果):

Using the next sentence to retrieve is clearly better than using the previous sentence, confirming our hypothesis.

翻译:

用下一句话检索明显优于用上一句话检索,证实了我们的假设。

数据(2WikiMultihopQA):

查询来源 EM F1
前一句(过去视角) 39.0 49.2
下一句(前向视角) 48.8 57.6

差距接近 10 个百分点,非常显著。这是 FLARE 最重要的消融实验,直接验证了"前向查询"这一核心巧思的有效性。

新手讲解:

这个实验排除了其他变量(两种方法都是"每句必检索"),只改变查询是用"上一句"还是"下一句"。结果差异如此之大,说明:

用"接下来要说什么"来检索,远比用"刚才说了什么"检索更有效

类比:你写完"拜登上大学"这句话,有两种检索策略:
1. 用已写的内容检索:"拜登上大学" → 可能找到很多关于他大学生活的泛泛信息
2. 用将要写的内容检索:"拜登获得了 ___ 法学学位" → 精准找到他毕业于哪所法学院

显然第二种更直接命中你的需求。


主动检索的重要性

原文:

On 2WikiMultihopQA, the performance plateaus when the retrieval percentage exceeds 60%, indicating that retrieval when LMs are confident is not necessary. On StrategyQA, the performance drops when the retrieval percentage exceeds 50%, indicating that unnecessary retrieval can introduce noise and impede the original generation process.

翻译:

在 2WikiMultihopQA 上,当检索比例超过 60% 后,性能趋于平稳,说明模型有信心时检索没有必要。在 StrategyQA 上,当检索比例超过 50% 后,性能下降,说明不必要的检索会引入噪音,干扰原本的生成过程。

新手讲解:

这个实验回答了:"为什么不直接每句都检索呢?"

答案是:过度检索有害。当模型其实已经知道答案时,强行去检索,可能会:
1. 把无关信息混入上下文,干扰模型
2. 浪费计算资源和 API 费用
3. 在 StrategyQA(常识推理)这样依赖内部知识的任务上,检索外部文档反而引入噪音

实验发现,在 40%-80% 的句子上触发检索通常能达到最佳性能,具体比例因任务而异。


查询构建方法对比

原文(Table 5):

Retrieving directly with the complete sentence (β = 0) is worse than masking tokens with low probabilities, confirming our hypothesis that low-confidence erroneous tokens can distract retrievers.

翻译:

直接用完整句子检索(β=0,不掩码)效果差于掩码低概率词,证实了低置信度的错误 token 会分散检索器注意力的假设。

数据(2WikiMultihopQA,不同掩码阈值 β):

β(掩码阈值) EM
0.0(不掩码) 48.8
0.2 49.8
0.4 51.0
0.6 50.6

掩码 β=0.4 时效果最好(51.0%),说明适度去除不确定词有助于检索,但过于激进地掩码(β 过高)则会删除太多信息,反而降低检索质量。


八、§8 Conclusion(结论)

原文:

To aid long-form generation with retrieval augmentation, we propose an active retrieval augmented generation framework that decides when and what to retrieve during generation. We implement this framework with forward-looking active retrieval that iteratively uses the upcoming sentence to retrieve relevant information if it contains low-confidence tokens and regenerates the next sentence. Experimental results on 4 tasks/datasets demonstrate the effectiveness of our methods.

翻译:

为了用检索增强来辅助长文本生成,我们提出了一个主动检索增强生成框架,在生成过程中决定何时检索、检索什么。我们通过前向主动检索来实现这一框架——迭代地使用即将生成的句子来检索相关信息(当该句包含低置信度 token 时),并重新生成该句。在 4 个任务/数据集上的实验结果证明了方法的有效性。


九、§9 Limitations(局限性)

原文:

From an engineering perspective, interleaving generation and retrieval with a naive implementation increases both overheads and the cost of generation. LMs need to be activated multiple times (once for each retrieval) and a caching-free implementation also requires recomputing the previous activation each time after retrieval.

翻译:

从工程角度看,简单实现时将生成与检索交织会增加额外开销和生成成本。语言模型需要被多次激活(每次检索一次),且无缓存的实现还需要每次检索后重新计算之前的激活。

新手讲解:

FLARE 有三个主要局限值得注意:

  1. 计算成本高:每次触发检索就要重新调用语言模型 API,比单次检索贵很多
  2. 对短输出帮助有限:实验发现 FLARE 在 Wizard of Wikipedia(平均约 20 个 token 的短输出)上没有显著收益——输出太短,信息需求简单,动态检索发挥不了优势
  3. 检索质量天花板:如果检索器本身找不到正确文档,FLARE 也无能为力

附录(A–D)一句话概括:附录包含 FLARE_instruct 的 logit 调整实现细节、四个数据集的实验参数配置(Table 9)、以及各任务的完整 few-shot 示例 prompt(Prompt D.1–D.10),感兴趣可参考原文复现实验。


十、核心思想总结与类比

FLARE 的完整工作流程图

输入: "生成关于乔·拜登的摘要"
           ↓
初始检索(基于问题本身)
           ↓
步骤1: 草拟第一句 → 全部有信心 → 直接采用
    s1: "乔·拜登(生于1942年11月20日)是美国第46任总统。"

步骤2: 草拟第二句 → 发现低概率词(他上了哪所大学?)
    ŝ2: "拜登就读于[宾夕法尼亚大学],获得了[法学学位]。"
                        ↑低置信度        ↑低置信度
    → 构建查询: "拜登就读于 _____,获得了 _____ 学位"
    → 检索 → 找到:他毕业于特拉华大学(本科)
    → 重新生成:
    s2: "拜登1965年毕业于特拉华大学,获文学学士学位,主修历史和政治学。"

步骤3: 草拟第三句 → 发现低概率词(具体宣布参选日期?)
    ŝ3: "拜登于2019年[8月18日]宣布参加2020年总统大选。"
                              ↑低置信度
    → 检索 → 找到:实际日期是2019年4月25日
    → 重新生成:
    s3: "拜登于2019年4月25日宣布参加2020年总统大选。"
           ↓
继续迭代,直到生成完毕

为什么长文本生成尤其需要动态检索

对比两种场景:

短文本问答(传统 RAG 足够):
- 问题:美国第46任总统是谁?
- 信息需求:一个人名,完全可以从问题预判
- 一次检索 → 一次生成,搞定

长文本生成(需要 FLARE):
- 任务:写一篇关于拜登的综合传记
- 信息需求随生成进展不断涌现:
- 写基本信息时需要:出生日期、职位
- 写教育经历时需要:就读大学、学位、年份
- 写参选历程时需要:宣布日期、竞选政策
- 写执政期间时需要:重大政策、法案细节……
- 没有哪次初始检索能够预判并覆盖所有这些需求

这就是 FLARE 的价值所在:把知识获取从"一次性备货"变成"按需采购"

与传统 RAG 的对比总结

维度 传统 RAG FLARE
检索时机 仅在输入阶段一次 生成过程中按需多次
触发条件 总是(有输入就检索) 低置信度时才检索
检索查询 原始问题 即将生成的下一句话(前向)
适合场景 短文本知识问答 长文本生成、多跳推理
对模型要求 无需修改 无需修改(推理时即用)
计算成本 低(检索1次) 较高(可能检索多次)

十一、关键术语索引

术语 英文 含义
主动检索 Active Retrieval 模型根据自身状态主动决定是否检索,而非被动固定触发
置信度 Confidence 模型生成某个 token 的概率;低概率 = 低置信度 = 没把握
多跳问答 Multi-hop QA 需要通过多步推理、每步依赖前步结果才能回答的问题
校准性 Calibration 模型对自身确定程度的判断与实际准确率的吻合程度
阈值 θ Threshold θ 判断是否触发检索的概率下限;低于此值则检索
掩码阈值 β Masking Threshold β 构建隐式查询时,低于此概率的词被遮掉
前向查询 Forward-looking Query 用"接下来要写的句子"而非"已写内容"作为检索查询
幻觉 Hallucination 模型生成的事实不准确内容,如编造日期、名称等
BM25 BM25 一种基于词频统计的传统检索算法,不依赖神经网络

本精读笔记基于论文原文 arXiv:2305.06983v2,涵盖 Abstract、Introduction 核心段落、§2 全部、§3 全部(逐段)、§4 基线对比、§5 实验设置、§6 关键实验结果,约 7500 字。附录内容(A–D)以一句话带过。