Ewe: Improving Factuality with Explicit Working Memory¶
会议: ACL 2025
arXiv: 2412.18069
代码: 无(Meta FAIR)
领域: 其他
关键词: factuality, working memory, RAG, fact-checking, hallucination, KV cache
一句话总结¶
提出 Ewe(Explicit Working mEmory),在 LLM 解码过程中引入由多个 KV cache 单元组成的显式工作记忆,实时接收检索知识反馈和事实核查反馈,检测到错误时删除错误句子并用更新后的记忆重新生成,在 4 个事实性长文本生成基准上将 VeriScore F1 提升 2–6 分且不损失回答有用性。
研究动机¶
- LLM 幻觉问题严重:大语言模型在长文本生成中容易产生事实性错误(hallucination),尤其在知识密集型问答场景下,错误信息会大量出现。
- 传统 RAG 仅提供单次静态知识:标准 RAG 在生成前一次性检索文档拼接到 prompt 前,无法随着生成进程动态更新知识,当生成的文本偏离初始检索内容时知识就过时了。
- 迭代 RAG 方法受限于传统设计:FLARE 和 Self-RAG 虽然引入逐句检索和自省机制,但知识仍然只作为输入字符串的一部分,缺乏灵活的多源信息融合机制。
- 缺乏实时事实核查闭环:现有方法仅依赖检索获取新知识,却没有验证已生成内容是否正确的机制,无法在生成过程中及时纠错。
- 多源反馈融合困难:检索知识和事实核查反馈具有不同属性(检索提供背景信息,事实核查针对具体细节),传统方法难以优雅地整合这两种信息流。
- 计算效率低下:迭代方法每轮更新都需要重新处理所有 context 文档的 embedding,当仅部分知识需要更新时造成大量冗余计算。
方法详解¶
整体框架¶
Ewe 在标准 Transformer 解码基础上增加两个核心机制:定期暂停获取反馈 和 记忆增强生成。
3.1 初始化¶
给定输入 prompt,使用 Contriever 从 C4 + Wikipedia 检索 \(k\) 个相关文本段落,分别通过语言模型编码为 \(k\) 个 KV cache 记忆单元,存入工作记忆。与 RAG 直接将段落拼接到 prompt 前不同,Ewe 将每个段落独立编码并并行存储。
3.2 实时反馈机制¶
生成过程中,Ewe 每隔 \(T_r\) 步暂停获取检索反馈,每隔 \(T_v\) 步暂停获取事实核查反馈(实验中 \(T_r=1, T_v=8\)),仅在有新完整句子生成时触发:
- 检索反馈:以原始问题 + 当前生成句子为 query,用 Contriever 从 C4 + Wikipedia 检索新段落。检索分数超过阈值的段落被视为相关知识,用于更新工作记忆。
- 事实核查反馈:使用 VeriScore 的 claim 提取模型和验证模型作为事实核查器。先从新生成句子中提取 atomic claims,再用 Google snippets 验证每个 claim 是否有支撑证据。若有错误 claim,将反驳信息(正确事实)作为新记忆单元追加到工作记忆,同时删除错误句子并从上一时间步回溯重新生成。
3.3 工作记忆刷新¶
工作记忆采用 FIFO(先进先出) 更新策略。来自检索器和事实核查器的新文本段落被编码为 KV cache,使用相同的 positional ID 并行处理。记忆存储在模型上下文的前部(先于 prompt 和已生成文本),更新时无需重新处理已有内容。
3.4 注意力聚合¶
在每一层的自注意力计算中,将每个记忆单元分别与上下文拼接,进行标准自注意力运算,再用注意力归一化项加权聚合:
其中 \(k\) 个记忆单元各自与上下文拼接产生 \(k\) 个 hidden vector,额外保留一个纯上下文的 hidden vector(第 \(k+1\) 项)以提升长输出的流畅性。
3.5 与已有方法的关系¶
Ewe 可退化为多种已有方法的特例: - \(k=1\),不暂停 → 标准 RAG - \(k=1\),逐句暂停 + 低概率触发检索 → FLARE - 多记忆单元 + 仅检索反馈 → 迭代 RAG 的增强版
实验¶
评估设置¶
- 基座模型:Llama-3.1-70B 和 Llama-3.1-8B(instruction-tuned)
- 数据集:LongFact(250 prompts)、Fava(141)、AlpacaFact(241)、Biography(181)
- 事实性指标:VeriScore F1(claim 提取 + 验证的精确率/召回率调和平均)
- 有用性指标:AlpacaEval Win Rate(GPT-4o 作为 judge,以 Llama-3.1-70B 为基线)
- 基线方法:Base model、RA(检索增强)、Nest(半参数解码)、DRAGIN(动态检索)、CoVe(验证链)、CoVe w/ Retrieval
表 1:主实验结果(VeriScore F1 / AlpacaEval Win Rate)¶
| 模型 | LongFact F1 | LongFact WR | Fava F1 | Fava WR | AlpacaFact F1 | AlpacaFact WR | Biography F1 | Biography WR |
|---|---|---|---|---|---|---|---|---|
| Llama-3.1-70B | 64.3 | - | 52.0 | - | 63.8 | - | 37.1 | - |
| + RA | 72.7 | 41.2 | 56.8 | 37.1 | 66.0 | 43.1 | 43.8 | 49.4 |
| + Nest | 63.2 | 9.1 | 50.3 | 24.1 | 58.1 | 30.2 | 41.5 | 22.1 |
| + DRAGIN | 71.5 | 38.2 | 57.2 | 33.9 | 65.3 | 31.5 | 42.8 | 33.5 |
| + CoVe | 63.8 | 39.3 | 49.5 | 33.4 | 61.5 | 33.3 | 37.7 | 31.3 |
| + CoVe w/ Retrieval | 67.4 | 31.8 | 52.6 | 23.1 | 64.0 | 28.8 | 38.2 | 29.4 |
| + Ewe | 75.9 | 50.1 | 61.0 | 50.1 | 66.9 | 49.9 | 49.7 | 50.2 |
| Llama-3.1-8B | 63.1 | 40.6 | 51.0 | 36.5 | 65.3 | 26.7 | 28.9 | 24.2 |
| + RA (8B) | 65.9 | 28.1 | 51.8 | 16.8 | 63.9 | 18.5 | 41.4 | 21.3 |
| + Ewe (8B) | 67.3 | 40.5 | 53.1 | 36.2 | 65.5 | 28.0 | 42.2 | 21.5 |
表 2:不同检索数据源的影响(VeriScore F1,50 prompts 子集)¶
| 数据源 | LongFact | Biography | AlpacaFact | Fava |
|---|---|---|---|---|
| Wikipedia | 67.9 | 46.1 | 55.5 | 52.5 |
| C4 | 70.8 | 44.6 | 53.7 | 53.3 |
| C4 + Wikipedia | 74.8 | 48.4 | 53.3 | 52.3 |
表 3:人类评估一致性(Cohen's Kappa)¶
| 方法 | Cohen's Kappa |
|---|---|
| RA(基线) | 0.61 |
| Ewe | 0.65 |
Cohen's Kappa > 0.61 被认为是高度一致,Ewe 使用 VeriScore 做推理时反馈并未降低与人类的一致性,确认 VeriScore 提升确实转化为真实的事实性改善。
关键发现¶
- Ewe 在所有 4 个数据集上均取得最高 VeriScore F1,70B 模型上绝对提升 2–6 分,且 AlpacaEval Win Rate 接近 50%,说明事实性提升不以有用性为代价。
- 8B 模型的提升幅度小于 70B,假设是小模型利用反馈的能力较弱,不能总是正确地重新生成修正后的句子。
- 记忆单元数量需适度:过多记忆单元导致过时信息在 FIFO 策略下长时间留存,降低精确率。
- 记忆单元长度存在 trade-off:短单元提高精确率但降低召回率(注意力更聚焦单篇),长单元提高召回率但降低精确率(多篇混合分散注意力)。
- 检索阈值需平衡:阈值过低引入不相关信息,过高则排除过多检索结果,二者都损害 F1。
- 不同数据集偏好不同数据源:LongFact/Fava 偏好 C4,Biography/AlpacaFact 偏好 Wikipedia,C4 + Wikipedia 组合在 LongFact 和 Biography 上进一步提升。
- 模型置信度可替代固定间隔:用 entropy 或 min-prob 作为触发信号,在合适阈值下可以用更少的验证次数取得更好或相当的 F1。
- 事实核查反馈形式很重要:直接提供支撑段落优于"请不要生成以下错误声明"的指令模板,后者容易导致模型误解并在输出中复述错误内容。
亮点¶
- 统一框架:Ewe 将 RAG、FLARE、迭代检索等已有方法统一为特例,提供更通用的视角。
- 双流反馈:同时利用检索知识(背景信息)和事实核查(纠错细节),两者编码进并行的 KV cache 记忆单元,自然融合。
- 高效增量更新:仅更新需要刷新的记忆单元,未过时的知识直接复用 KV cache,避免重复编码。
- 实时纠错闭环:检测→删除→回溯→重生——完整的 online 纠错管道。
- 与流式场景天然适配:语音输入等无法回退修改的场景中,Ewe 可边接收边检索边生成。
局限性¶
- 仅验证英文文本数据集,多语言和非事实性 prompt 的效果未知。
- 仅支持文本反馈,未探索多模态(图像、表格等)反馈。
- 人类评估规模较小(仅 120 条标注),大规模验证仍需补充。
- 推理成本高:每步可能涉及检索 + 事实核查 + 重生成,计算开销显著高于单次 RAG。
- FIFO 记忆更新策略简单:实验中探索了基于相关性分数等替代策略但未优于 FIFO,更优更新机制留待未来工作。
- 事实核查器依赖外部搜索引擎(Google snippets),搜索质量和延迟成为瓶颈。
相关工作¶
- 迭代/自适应检索增强:FLARE(逐句低概率触发检索)、DRAGIN(注意力+熵的置信度度量)、Self-RAG(自省 critique 模型)、ITER-RETGEN(用上轮输出作为查询)。Ewe 的区别在于用 KV cache 记忆替代文本拼接,以及通过记忆而非字符串传递事实核查反馈。
- 验证链方法:CoVe 仅依赖 LLM 自身推理进行验证,不引入外部知识,在长文本中效果受限。
- 长上下文记忆:Memory3 将训练语料的 128-token chunk 编码为 KV cache 作为显式记忆,推理时检索最相关记忆。Ewe 的目标不同——不预编码整个语料库,而是在迭代解码中动态更新记忆。Memorizing Transformers 和 LongMem 用相似思路扩展上下文窗口。
- 事实性评估:FActScore、SAFE、VeriScore 共享"分解为 atomic claims + 外部验证"的范式,VeriScore 使用 Google snippets 而非 Wikipedia,更高效且覆盖更广。
评分¶
- 新颖性: ⭐⭐⭐⭐ 工作记忆+双流反馈的架构设计优雅,但 KV cache 记忆非首创(Memory3 等已有先例)
- 实验充分度: ⭐⭐⭐⭐⭐ 4 数据集 + 5 个基线 + 人类评估 + 丰富消融(记忆数量/长度/阈值/数据源/反馈形式)
- 写作质量: ⭐⭐⭐⭐ 与已有方法的退化关系阐述清晰,框架图直观
- 实用价值: ⭐⭐⭐⭐ 推理成本高限制实际部署,但为长文本事实生成提供了灵活框架