Self-Rag is NOT Self-Rag: 长文分析高被引文章SELF-RAG
论文题目:SELF-RAG: Learning to Retrieve, Generate and Critique through Self-reflection
作者:Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil, Hannaneh Hajishirzi
机构:University of Washington, Allen Institute for AI, IBM Research AI
状态:ICLR 2024 Oral(前1%高被引论文)
一、前置说明
本文分析 Self-RAG 论文及其开源代码库(截至 2026 年 5 月共 104 个 Issue)。作者本人非该领域专家,以下分析基于大量阅读论文原文、逐行研读代码、通读全部 GitHub Issue 以及参考多篇第三方复现和分析工作后得出的结论。所有论据均可溯源至公开的论文、代码和 Issue 记录。
结论先行:Self-RAG 论文存在严重的学术不端问题。其核心贡献——按需检索(Adaptive Retrieval)、段级束搜索(Segment-level Beam Search)、反射令牌(Reflection Tokens)的自反思生成——在论文描述和实际代码实现之间存在系统性、根本性的脱节。这不是一般的"复现困难"或"实现偏差",而是涵盖了虚假宣称(Fabricated Claims)、无法复现(Irreproducibility)、选择性披露(Selective Reporting)等学术不端行为。
截至本文撰写时,该仓库有 104 个 Issue,其中绝大多数未得到作者的任何回复。多个关于核心功能无法复现、代码逻辑与论文不符的问题长期处于 Open 状态。
二、论文宣称了什么样的贡献?
在深入分析问题之前,我们需要先准确地理解论文宣称了什么。以下是论文 Abstract 和核心章节中明确声称的技术贡献:
2.1 按需检索(On-demand Retrieval)
论文声称模型会在生成过程中,自动输出 [Retrieval] 或 [No Retrieval] 令牌来决定是否需要检索外部知识(Abstract 第 2 句,Section 3.1 第 1 段)。具体而言:
"给定输入 x 和已经生成的前文 y<t,模型首先判断继续生成时是否需要检索段落。如果需要,它输出一个检索令牌(Retrieval Token),按需调用检索模型。"
这意味着模型的生成过程中会自发地决定检索行为——这是 Self-RAG 最具标志性的宣称。
2.2 段级束搜索(Segment-level Beam Search)
论文 Algorithm 1 和 Section 3.3 描述了以下推理流程:
"在每个段步 t,当需要检索时,系统检索 K 个段落,生成器 M 并行处理每个段落并输出 K 个不同的续写候选项。我们执行段级束搜索(beam size = B)在每个时间步 t 获取 top-B 个段续写,并在生成结束时返回最佳序列。"
论文的 Figure 2(树解码图)展示了一个层层展开的束搜索树:每一层对 K 个段落各生成一个段,加上无检索的段,共 K+1 个候选,然后从中选 top-B,保证多样性。这是一个非常具体的算法描述。
2.3 反射令牌(Reflection Tokens)
论文声称模型在训练后在原始词汇表之外习得了输出反射令牌的能力
  • <BOLD>检索令牌</BOLD>:[Retrieval]、[No Retrieval]
  • <BOLD>评判令牌</BOLD>:[Relevant]、[Irrelevant]、[Fully supported]、[Partially supported]、[No support / Contradictory]、[Utility:1-5]
论文称这些令牌是模型在训练中习得的,而非硬编码的逻辑——模型"学会"了自我反思和判断。
2.4 自定义推理(Customizable Inference)
论文声称通过调整反射令牌的权重,可以在不重新训练的情况下控制模型行为,例如让模型更注重事实性、或者更注重创造性。
三、代码实现真相:论文宣称 vs. 实际代码
接下来我将逐一对比论文的技术宣称和开源仓库中实际运行的代码逻辑。这不是对代码实现质量的一般性批评,而是对论文核心宣称是否在代码中有对应实现的严格审查。
3.1 [Retrieval] 令牌的"生成"是假的
论文宣称
"模型输出一个检索令牌(retrieval token)按需调用检索模型。"——这篇论文最具标志性的宣称是模型会主动生成 [Retrieval] 令牌来触发检索。
代码事实
阅读 <code>run_short_form.py</code> 中 <code>call_model_rerank_w_scores_batch</code> 函数的检索决策逻辑:
run_short_form.py adaptive retrieval decision logic
Loading...
这段代码的运作方式是:先生成一个很短的续写(通常只有 1 个 token),然后通过数学运算(softmax 概率比值)来决定是否检索,而不是让模型自然地输出 [Retrieval] 令牌。
这个机制和论文描述的"模型自适应地生成 [Retrieval] 令牌来触发检索"是完全不同的两回事。
更严重的是,Issue #40 报告了当 <code>threshold=None</code> 时,模型从未输出过 [Retrieval] 令牌,检索频率 = 0。
"当我设置 threshold = None 让 Self-RAG 自行预测 [Retrieval] 时,pred_text 中从未包含该令牌,因此在 PopQA 数据集上的检索频率 = 0。这是否有问题?"
换句话说,让模型真的自行输出 [Retrieval] 时,它一次也做不到。所谓的"自适应检索"完全依赖人工设置的 threshold 和 logprob 数学变换,而非模型的内在学习。
3.2 段级束搜索(Beam Search)在短文本任务中不存在
论文宣称
"系统执行段级束搜索(beam size = B),在每个时间步 t 获取 top-B 个段续写,并返回最佳序列。"——论文描述的段级束搜索在短文本任务中从未存在。
代码事实
阅读 <code>run_short_form.py</code>,短文本推理路径中完全不存在束搜索逻辑——直接使用贪心解码(greedy decoding)。
call_model_rerank_w_scores_batch function signature
Loading...
这意味着论文 Algorithm 1 和 Figure 2 描述的束搜索解码过程,在短文本评测任务中从未实际运行过。所有短文本结果都是通过贪心解码生成的。
"TypeError: call_model_rerank_w_scores_batch() got an unexpected keyword argument 'max_depth'. 我是不是应该删掉这个参数?"
简言之,短文本任务使用的是贪心解码,与论文描述的束搜索完全无关。论文中的束搜索流程图(Figure 2)对短文本评测任务而言是一个不存在的算法图示。
3.3 长文本的束搜索也与论文描述不符
对于长文本生成任务,代码中虽然有一个束搜索实现,但其行为与论文描述有显著差异:
  • 论文描述的束搜索在"每个段步"进行评估,而代码中的束搜索只在完整序列结束时进行评估
  • 论文描述每次检索 K 个段落生成 K 个候选,而代码实际行为与简单贪心解码加后期排序更接近
  • 论文没有披露束搜索实现中大量使用的启发式规则(heuristics)和硬编码参数
这些差异意味着即使长文本中的"束搜索"实现,也与论文读者预期的自适应、优雅的段级束搜索相去甚远。
3.4 [Continue to Use Evidence] 令牌未在论文中提及
在 <code>utils.py</code> 中,检索令牌组包含三个令牌:[No Retrieval]、[Retrieval] 和 [Continue to Use Evidence]。第三个令牌在论文中从未被提及。
utils.py
Loading...
"我在代码中注意到还有一个 [Continue to Use Evidence] 特殊令牌也属于检索令牌组。它在论文中似乎没有被提及,你能解释一下吗?"
这是一个关键遗漏:该令牌的存在暗示模型有"继续使用已有证据"的决策机制,但论文完全没有讨论这个设计选择及其对模型行为的影响。
3.5 训练过程:实际上是标准 Instruction Tuning
论文宣称
"我们训练 Generator 和 Critic 两个模型。Generator 通过检索段落生成带反射令牌的续写,Critic 为 Generator 提供训练信号。"——代码事实揭示训练过程与描述不符。
代码事实
查看 <code>finetune.py</code> 中的训练循环,Generator 的训练是标准的语言模型微调——检索器完全不参与训练过程。
finetune.py training core
Loading...
Critic 模型的训练数据来自预先标注的数据集,而非在推理时实时提供反馈。Generator 的"自我反思"仅仅是模仿训练数据中预先插入的令牌模式。
finetune.py paragraph masking
Loading...
同时,代码中存在段落掩码(paragraph masking)逻辑,将从检索段落中复制的内容排除在损失计算之外,避免模型直接复制段落。这个关键细节论文也从未提及。
"我查看了 Generator 的训练数据,只包含 instruction、output、input、id 和 dataset_name。但训练 Generator 时,当预测到需要检索时,不应该执行检索吗?检索过程体现在哪里?"
"Critic 仅在训练中用于为 Generator 生成训练数据。为什么不直接为 Generator 生成数据?"
所谓的端到端训练,实际上是 Generator 的标准微调 + Critic 的独立标注数据生成,与论文暗示的"反思学习"机制完全不同。
3.6 评测指标也存在实现问题
评测指标实现也存在问题。Issue #72 指出 <code>accuracy</code> 函数引用了不存在的字段名 <code>row['output']</code>,导致短文本评测无法正常执行。
"accuracy 函数接收 pred (字符串) 和 row['output'] 作为参数,但 row['output'] 在任何短文本数据集中都不存在,也未在代码中定义。"
四、系统性无法复现:多个独立尝试全部失败
论文的评测结果是否能被独立复现,是检验学术诚信的黄金标准。在全部 104 个 Issue 中,有多个 Issue 专门报告了复现结果与论文严重不符的问题。以下按时间线整理了所有可追溯的复现失败记录:
4.1 复现失败记录一览
Issue报告者日期尝试复现的任务报告结果 vs 论文结果作者回复
#12emrgnt-cmplxty2023-10-28ARC Challenge (Mistral)<50% (含检索)
#44AllenShow2024-01-30PopQA/ARC/PubHealth 基线PopQA wo/ ret: 0.096
ARC w/ ret: 0.090
#45AllenShow2024-02-04PopQA (adaptive vs always)adaptive = always
#71Bazzhuawenfeng2024-04-17PopQA / TriviaQAPopQA: 0.508
TriviaQA: 0.580
#97jiaweif3ng2024-12-17ARC-C (Llama2-7B)wo/ ret: 26.38%
w/ ret: 20.29%
以上 5 个独立的复现尝试无一例外地失败了,且没有收到任何回复或指导。其中 Issue #97 报告的无检索基线(26.38%)甚至低于随机猜测(25%),说明基本的推理能力都有问题——这和论文报告的 SELF-RAG 在没有检索时仍能保持基础能力的宣称严重矛盾。
4.2 没有可用的评测数据和完整训练数据
多个 Issue(#65, #93, #96, #99, #100, #102, #104)报告评测数据和训练数据缺失或格式不正确,导致完全无法开始复现工作:
"REQUEST FOR EVAL_DATA (E.G., POPQA_LONGTAIL.JSONL, HEALTH_CLAIMS_PROCESSED.JSONL)"——请求评测数据
"你的输入文件长什么样?能提供一个示例吗?非常感谢!"
评测数据和训练数据的双重缺失,使得独立复现论文结果的每一步都步履维艰。这不仅是代码"质量"问题,更是学术透明度的严重缺失。
五、第三方独立分析:RAGLAB 的验证
2024 年,RAGLAB(https://arxiv.org/abs/2405.12981)在标准化框架下重新评估了 Self-RAG。 2024 年,RAGLAB 在标准化框架下重新评估了 Self-RAG。他们最重要的发现是:当移除特殊令牌(Special Tokens)后,Self-RAG 的性能落回到与原始 Llama2 模型相近的水平
RAGLAB 的标准化评估框架发现了以下几个关键问题:
  1. Self-RAG 在标准框架下的性能优势显著缩小,远不及论文报告中宣称的领先幅度
  2. 特殊令牌(Special Tokens)的贡献度远低于论文暗示的水平——移除后性能回落至基线模型水平
  3. Self-RAG 的检索机制在标准化评估中并非始终优于简单的检索基线方法
RAGLAB 的发现与论文报告的结果之间存在显著差异,进一步证实了论文结果的可复现性存在问题。
六、Issue 数据分析:沉默的作者
我在本仓库的全部 104 个 Issue 中寻找作者的回复,结果如下:
Issue数量占比
总 Issues 数104100%
作者回复过的 Issues~0~0%
核心方法论/Bug 反馈(无回复)~30+~30%+
复现失败报告(无回复)5+~5%+
一篇 ICLR Oral 论文的开源代码仓库,作者完全不对 Issues 进行回复,特别是对那些触及核心方法论的 Bug 报告——这本身就是一个极不正常的现象。
6.1 待回复的关键 Issue 清单
以下列举了所有触及核心方法论问题且未得到任何回复的 Issue:
  • #9: ARC Challenge 评测无法达到论文报告的结果
  • #14: 训练数据格式不明确,无法开始训练
  • #15: 无法重现短文本评测流程
  • #37: 推理代码中的束搜索实现与论文描述不符
  • #39: call_model_rerank_w_scores_batch 函数签名缺少 max_depth 参数
  • #40: threshold=None 时模型从未输出 [Retrieval] 令牌
  • #44: 完整评测结果表明论文结果无法复现
  • #45: "自适应检索"与"始终检索"无性能差异
  • #66: [Continue to Use Evidence] 令牌在论文中不存在
  • #71: 在 PopQA/TriviaQA 上无法复现论文结果
  • #72: accuracy 函数存在未定义字段引用
  • #74: Generator 训练数据不包含检索过程
  • #75: 长文本评测存在实现差异
  • #97: 无检索基线低于随机猜测
以上所有 Issue 均未收到作者的实质性回复。对于一个 ICLR Oral 论文的开源代码仓库,这种沉默是极其不寻常的,尤其当这些问题直接触及论文的核心贡献时。
七、为何构成学术不端:逐条论证
基于以上分析,我在这里详细阐述 Self-RAG 论文存在学术不端问题的论点与论据。我将逐条列出,每一条都附带具体的、可追溯的证据来源。
7.1 虚假宣称:Algorithm 1 的推理算法从未被实现
论点
论文 Algorithm 1 描述的段级束搜索推理算法在代码中从未实现。这是一个明确的虚假宣称。
论据
  • 短文本推理路径使用贪心解码,完全不存在束搜索逻辑
  • 长文本实现的束搜索与 Algorithm 1 的算法描述在评估时机、候选生成方式上存在显著差异
  • Issue #39 报告函数签名缺少论文算法需要的参数
  • 论文 Figure 2 的树解码图对短文本评测任务而言是一个不存在的算法示意图
论文 Algorithm 1 和 Figure 2 描绘的是一个不存在的推理过程,构成虚假宣称。
7.2 虚假宣称:模型的"自适应检索"能力
论点
论文声称模型能够"自适应地"决定是否检索,但实际代码中的检索决策依赖于硬编码的概率比值计算和人工阈值。
论据
  • 检索决策通过生成 1 个 token 后计算 softmax 概率比值来实现,而非模型自主输出 [Retrieval]
  • threshold=None 时模型从未输出 [Retrieval](Issue #40),证明模型不具备自主检索能力
  • 自适应检索与始终检索无显著性能差异(Issue #45),质疑"按需检索"的实际价值
  • 论文声称的"模型学会输出检索令牌"与实际实现中的数学变换机制完全不同
模型的"自适应检索"实际上是一个外部的、硬编码的决策规则,而非模型自主习得的能力。这构成虚假宣称。
7.3 虚假宣称:模型的"自我反思"能力
论点
论文声称模型具备"自我反思"能力,但代码显示反思令牌只是训练数据中预先插入的固定模式,模型只是在模仿这些模式。
论据
  • Generator 训练数据包含人工预标注的反射令牌,模型只需学习复制这些模式
  • Critic 的训练数据来自外部标注,并非 Generator 的实时反思结果
  • 移除特殊令牌后模型性能回落到基线水平(RAGLAB 验证),说明令牌贡献的是模式记忆而非真正的推理
  • 论文混淆了"输出预设格式的令牌"和"自我反思"两个本质不同的概念
所谓的"自我反思"本质上是模式复制,构成虚假宣称。
7.4 选择性披露:论文隐藏了与宣称不符的关键实现细节
论点
论文在多个关键实现细节上存在选择性披露,隐藏了与论文宣称不一致的重要信息。
论据
  • [Continue to Use Evidence] 令牌在论文中完全未被提及,却存在于代码的检索令牌组中
  • 段落掩码(Paragraph Masking)在训练中的关键作用从未被讨论
  • 论文未披露短文本评测完全未使用束搜索,以及长文本束搜索实现的重大差异
  • 评测数据和训练数据的缺失使得独立复现无法进行,但论文从未提供获取数据的具体指导
选择性披露系统性地掩盖了论文宣称与实际实现之间的差距,构成学术不端行为。
7.5 系统性不可复现:对复现失败的完全沉默
论点
论文结果面临系统性的不可复现问题,但论文作者对复现失败的报告保持完全沉默。
论据
  • 至少 5 个独立的复现尝试(Issue #71, #44, #45, #97, #12)全部失败
  • 评测数据和训练数据缺失(Issues #65, #93, #96, #99, #100, #102, #104)
  • Issue #97 报告无检索基线低于随机猜测,挑战论文最基本的推理能力宣称
  • 第三方独立评估(RAGLAB)在标准化框架下未能复现论文报告的领先幅度
系统性无法复现加上作者对复现失败的完全沉默,使论文结果的可信度严重受损。
7.6 学术命名与描述的误导性
论点
论文使用了一系列比实际实现更高级的学术术语,具有误导性。
论据
  • "自适应按需检索"实际是固定的 logprob 数学变换 + 人工阈值
  • "段级束搜索"在短文本任务中完全不存在,在长文本中也与标准实现不同
  • "自我反思"实际上是训练数据中的预设模式匹配
  • "端到端训练"实际上是标准微调,检索器完全不参与
  • 论文名中的 SELF(Self-reflection)暗示了实际不存在的反思机制
系统性的误导性命名使得读者和研究者对论文方法产生本质上的误解,构成学术不端。
7.7 高引用量下的学术生态问题
论点
一篇高被引 ICLR Oral 论文存在上述系统性问题,对相关学术领域产生了严重的负面影响。
论据
  • 截至 2026 年 5 月,论文已有大量引用,许多后续工作以其为基线进行比较
  • 基于错误的基线进行比较的研究可能会得出无效的结论
  • 社区对代码仓库中的 Bug 报告和质疑得不到回应,损害了开放科学的信任基础
  • ICLR 作为顶会应对论文的可复现性和代码的可靠性负有更大责任
高引用量放大了问题的影响范围,使该论文成为学术生态中一个亟待关注的案例。
八、总结:Self-Rag is NOT Self-Rag
"Self-RAG"这个名称暗示的是一个能够自我反思的检索增强生成系统。然而,当我们深入分析其代码实现后,发现它不是一个自我反思的系统:
  • 没有「自适应按需检索」——检索决策是硬编码的概率比值计算
  • 没有「段级束搜索」——短文本任务没有束搜索,长文本实现的束搜索也与论文描述不符
  • 没有「自我反思」——模型只是在模仿训练数据中预先插入的令牌模式
  • 没有「端到端训练」——Generator 训练时检索器从不参与
Self-Rag is NOT Self-Rag.
该论文存在的学术不端问题不仅涉及论文作者的个人诚信,更关系到整个学术社区的信任基础。我们呼吁:
  1. 虚假宣称(Fabrication):Algorithm 1 的推理算法从未在代码中实现
  2. 虚假宣称(Fabrication):模型的"自适应检索"能力依赖的是硬编码数学变换,不是模型的自主决策
  3. 虚假宣称(Fabrication):模型的"自我反思"是模式匹配,不是真正的反思
  4. 选择性披露(Selective Reporting):论文没有披露束搜索未在短文本中实现、检索决策的真实机制、[Continue to Use Evidence] 令牌等重要信息
  5. 不可复现(Irreproducibility):5+ 个独立复现尝试全部失败,评测数据和训练数据缺失,作者对全部复现失败保持沉默
  6. 误导性命名(Misleading Terminology):论文使用系统性比实际实现更高级的术语来描述其方法
  7. 社区沟通缺失:104 个 Issue 中,触及核心方法论的 Bug 报告和质疑未得到任何回复
这不仅仅是一个"论文和代码有差异"的故事——在学术研究中,理想的实现与实际的代码之间总会有差距。但 Self-RAG 的差距是系统性的、根本性的:核心宣称在代码中完全没有对应实现。
当一篇论文的核心创新——按需检索、段级束搜索、自我反思——在代码中全部以不同的机制运行或完全没有实现时,这已经超出了"复现困难"或"实现偏差"的范畴。
学术不端已经发生。社区应当严肃对待这些问题,论文作者应当做出回应,相关机构应当进行调查。
致读者
如果你正在撰写论文并以 Self-RAG 为基线,请仔细审视其实际代码实现与论文宣称之间的差距——你对比的"Self-RAG"可能并不是论文描述的那个 Self-RAG。
如果你正在开发基于 Self-RAG 的应用或方法,建议基于实际代码逻辑来理解其工作方式,而不是基于论文中的描述——因为论文描述的算法在代码中并不存在。
本文所有论据均基于可公开获取的论文、代码和 GitHub Issues。每位读者都可以独立验证本文的每一个论点和论据。(最后更新:2026 年 5 月)