不要再卷神经验证器了:用维基百科"共现次数"当奖励,事实问答RL训练快 8 倍

核心摘要

事实问答的 RL 训练有个让人头疼的两难:用回答整体的对错当奖励信号太粗,一个推理链里一句对一句错,模型学不到细颗粒度的差异;想做句子级奖励就得堆神经验证器(NLI、LLM judge、知识库验证 pipeline),训练成本爆炸——一个 prompt 拉 16 条 rollout,每条又有好几句话,每句话都要请一次外部验证器,单卡训一次几十小时。

这篇 CorVer(Corpus Verify)的思路特别朴素:句子里的事实正不正确,跟主语-宾语在维基百科里"挨着出现"的频次有直接关系。所以不再训神经判官,把每句话拆出(subject, object)对,去维基百科 Infini-gram 索引上查一次共现次数,按分桶映射成 [-0.3, +0.1] 的小奖励,再通过 token-to-sentence 对齐把句子奖励铺到 token 级 advantage。整套方案每句话只要 0.5B 模型一次前向 + 一次索引查表,毫秒级。

效果是真的能打:6 个基座模型(3B 到 14B)× 5 个事实问答 benchmark 共 30 个 cell,对 Raw 全部正向;和 FoRAG / RLFH / FSPO / KnowRL 四个神经验证器 baseline 比,20 个 cell 里赢 18 个;训练时间快 4.8× 到 8.4×。Llama-3.1-8B 在五个 benchmark 上平均涨 4.06 个点。

我的判断:这不是一篇追求方法新颖度的论文,它的价值在于工程上重新审视了"句子级监督要靠谁来打分"这个假设。神经验证器和策略模型共享参数知识,越是稀有实体越靠不住——你最需要奖励信号的地方它最不准。CorVer 用语料库统计绕开了这个循环依赖,方向对、信号干净、跑得起来。值得做事实问答 RL 的同学认真看看。


论文信息

  • 标题:Verifiable Rewards Beyond Math and Code: Lightweight Corpus-Grounded Process Supervision for Factual Question Answering
  • arXiv ID:2605.29648
  • 链接:https://arxiv.org/abs/2605.29648
  • 作者:Shicheng Fan, Haochang Hao, Dehai Min, Weihao Liu, Philip S. Yu, Lu Cheng
  • 机构:University of Illinois Chicago
  • 发表日期:2026 年 5 月 28 日

一、问题动机:可验证奖励为什么"出了数学和代码就难"

数学和代码的 RL 训练为什么这两年这么火?因为它们有一个其他任务羡慕嫉妒恨的属性——奖励是程序化的。算错就是算错,跑不起来就是跑不起来,calculator 和 compiler 直接给一个确定信号。GRPO 那一套之所以 work,离不开这种"廉价、确定、可大规模"的 verifier。

事实问答没这个福利。

图1:从数学/代码到事实问答的"可验证奖励"鸿沟。Math/Code 用 calculator/compiler 即时给信号;事实问答没有这种程序化 verifier,先前的工作只能堆 NLI/LLM judge 等神经验证器,CorVer 把这块换成"语料库共现统计"

图1:可验证奖励超越数学和代码——CorVer 把"神经验证器"换成"语料库共现索引查表",跳出了句子级奖励必须依赖神经模型的思维定式

那现有方案是怎么处理的?大致两条路:

第一条路:响应级(response-level)奖励。 整段回答对不对给一个分。简单粗暴,缺点也显然——一段推理 trace 里第一句话是正确的事实,第二句话顺手编了个不存在的发布日期,第三句话又把答案给对了。最终 string-match 评成 GOOD,所有 token 拿到一样的正奖励,模型完全学不到"第二句话是错的"。

第二条路:句子级奖励。FoRAG 用 retrieval-augmented 子声明验证,RLFH 让 LLM judge 打分,FSPO 用 NLI entailment,KnowRL 把每个原子事实拿去知识库验。这条路理论上 work,但有两个绕不开的问题:

  1. 成本爆炸。100 步训练 × 24 个 prompt × 16 条 rollout × 平均 3 句话 ≈ 每次训练 12 万次句子级 verifier 调用。每次调用都要喂给一个 NLI 模型或者 LLM 判官,你算算这个 GPU 账单。
  2. 循环依赖。这一点其实更致命——神经验证器自己也是 LLM,跟你的策略模型共用一套参数化知识。Kang & Choi (2023) 早就指出过:模型的事实召回能力跟主宾共现频次强相关,稀有实体上验证器自己就不可靠。换句话说,你的策略模型最需要奖励信号去纠偏的地方(rare entity),恰好是你的验证器最盲的地方。

说实话第二点是我看完导言后愣了一下的地方。我之前在做事实校验那条线的时候没特别想过这个问题:默认认为更大的 verifier 一定比 policy 更准。但作者这个论证挺扎实的——既然知识本身就 follow 共现规律,那共享参数化知识的 verifier 必然继承同样的盲区。

CorVer 的解题思路就藏在这个观察里:既然问题根源是"共现频次决定模型记不记得这个事实",那把共现频次本身拿出来当奖励信号,不是更直接吗?


二、方法:把"维基查表"做成训练时的过程奖励

2.1 一句话讲清整体 pipeline

图2:CorVer 训练流程——每条 rollout 切句、抽 (head, tail) 三元组、查 Wikipedia Infini-gram 索引拿共现次数、分桶映射成句子奖励,再通过 token-to-sentence 对齐叠到 GRPO 的 token-level advantage 上

图2:CorVer 整体 pipeline——核心是一条"抽三元组 → 查共现 → 分桶映射 → 对齐到 token"的轻量级链路,全程不调用任何神经验证器

整个流程拆成四步:

  1. 抽三元组:每句话用一个微调过的 0.5B 模型(QuCo-extractor,基于 Qwen2.5-0.5B-Instruct)抽出 (head, relation, tail),只保留第一个有效三元组(head 和 tail 都不为空、不是代词)。
  2. 共现查询:把 head 和 tail 都拆成 content words \(w_1, ..., w_k\),丢到 Infini-gram 引擎上做一次 CNF 形式的 AND 查询(在 1000-token 窗口内统计 token 位置级共现)。
\[c_i = \mathrm{count}_{\mathcal{W}}(w_1 \wedge \cdots \wedge w_k)\]
  1. 分桶映射成奖励:把整数计数 \(c_i\) 映射成一个有界的小奖励:
\[r_i^c = \begin{cases} \alpha_0, & c_i = 0 \\ \alpha_1, & 0 \lt c_i \lt \tau_1 \\ \alpha_2, & \tau_1 \leq c_i \lt \tau_2 \\ \alpha_3, & c_i \geq \tau_2 \end{cases}\]

论文里取 \((\alpha_0, \alpha_1, \alpha_2, \alpha_3) = (-0.3, -0.1, 0.0, +0.1)\)\((\tau_1, \tau_2) = (5, 20)\)。这两个阈值不是拍脑袋——后面 §6.1 会讲这是从 700 条人工标注的"共现次数 vs. 正确率"曲线上挑出最大的两个跳变点。

  1. Token-to-sentence 对齐:用 \(\sigma: \{1,...,T\} \to \{0,1,...,m\}\) 把每个 token 映射回它所在的句子。响应级返回是
\[R^r(x,y) = \lambda_j R^j(x,y) + \lambda_f R^f(y)\]

每个 token 的 raw return 是

\[R_t(x,y) = R^r(x,y) + \mathbf{1}[\sigma(t) > 0] \cdot \lambda_c \cdot r_{\sigma(t)}^c\]

注意这一步:标签和句间空白上的 token 只拿响应级奖励,句子内的 token 在响应级奖励之上叠加该句的局部 shaping同一条 rollout 里不同句子可以拿到完全相反的局部 advantage——这就是过程监督的精髓,整段 GOOD 的回答里那一句"编了个错日期"的局部梯度可以是负的。

2.2 这个 pipeline 为什么 cheap

每条句子的奖励成本 = 一次 0.5B 模型 forward + 一次 Infini-gram 查表。Infini-gram 是个 disk-based suffix array 索引,单次 CNF 查询毫秒级。整个 pipeline 没有任何 GPU 上跑的神经验证器,也没有外部 API 调用。

我自己复现过类似 retrieval-augmented 的 reward 路径,那种每条 rollout 都要走一遍 dense retrieval + cross-encoder 的方案,单次训练光 reward 计算就能跑掉一晚上。CorVer 这个量级是真的打开了 full-scale rollout 的门——后面我们会看到,跟 FSPO 比快 8.4×。

2.3 一个细节我比较欣赏:奖励量级控制

判官奖励是 \(r_{good} - r_{bad} = +2.0 - (-1.0) = 3.0\),而每条 rollout 平均 3 句话 × \(\alpha_3 = 0.1\),所以共现奖励的最大贡献只有 0.3——比判官奖励小一个数量级。这意味着 CorVer 是 shaping 而不是 override:共现奖励调整 token 级信用分配,但不会把一个明显答错的回答因为"每句话共现都很高"就给翻成正奖励。这个量级关系是显式设计的,不是侥幸。


三、实验:30 个格子全部正向,神经验证器输给查表

3.1 主实验:4 个基座 × 5 个 benchmark

训练只用 NQ-Open 训练集 + WebQuestions,剩下 4 个 benchmark 都是严格的 OOD。

Model Method TriviaQA NQ-Open PopQA SimpleQA TruthfulQA Avg.
Llama-3.2-3B Raw 55.39 34.13 15.92 1.55 5.63 22.52
FoRAG 60.66 37.15 22.53 2.22 5.20 25.55
FSPO 22.28 10.61 4.44 0.37 3.92 8.32
KnowRL 49.60 30.53 15.28 1.32 5.63 20.47
CorVer 62.24 43.41 23.75 2.57 7.47 27.89
Llama-3.1-8B Raw 71.86 40.66 28.85 5.20 6.61 30.64
FoRAG 69.40 42.71 32.17 5.32 6.31 31.18
FSPO 63.43 39.25 23.54 5.12 8.63 27.99
KnowRL 68.41 38.53 25.45 2.33 6.00 28.14
CorVer 76.52 48.34 35.30 5.92 10.28 35.27
Qwen3-4B Raw 51.14 24.65 17.51 2.52 8.45 20.85
CorVer 53.77 26.59 19.33 3.12 10.65 22.69
Qwen3-8B Raw 62.84 29.61 20.34 2.57 6.49 24.37
CorVer 63.99 32.80 21.83 2.73 9.18 26.11

Table 1 节选,加粗为该模型块内最好。CorVer 在 20 个 cell 里赢了 18 个,仅在 Qwen3-8B 的 PopQA(落后 0.26 pp)和 SimpleQA(落后 0.58 pp)上输给基线,且都在噪声范围内。

我看 Table 1 的时候有几个判断:

第一,KnowRL 在大模型上反而比 Raw 还差——Llama-3.1-8B 上 KnowRL 平均是 28.14,Raw 是 30.64。这正好印证了导言里的"循环依赖"论点:KnowRL 用知识库验证原子事实,但当策略本身已经 8B 量级、对常见实体已经有靠谱的参数化知识时,验证器的 noise 反而把训练带歪了。

第二,FSPO 在 Llama-3.2-3B 上崩掉了(22.28 对比 Raw 的 55.39,腰斩)。NLI entailment 在 reduced 配置下信号噪声太大,小模型扛不住。这种"baseline 在某些 cell 上灾难性失败"的情况,恰恰说明这些方法的鲁棒性问题。

第三,FoRAG 和 RLFH 在 8B 模型的 TriviaQA 上居然拉跨(FoRAG 69.40,Raw 71.86)。这种"在容易的 benchmark 上反而被 RL 训残"的现象,作者没多说,但其实暴露了基于 retrieval 或 LLM judge 的 reward 在已经掌握得很好的子集上会引入虚假梯度的问题。

3.2 跨模型 scaling:30 个 cell 全部正向

图3:跨模型 scaling 热力图。6 个基座模型(3B 到 14B)× 5 个 benchmark 共 30 个 cell,CorVer 相对 Raw 的提升全部为正

图3:CorVer 在 6 个模型 × 5 个 benchmark 上的提升热力图——所有 30 个 cell 都是正向。最大涨幅集中在 TriviaQA、NQ-Open、PopQA;SimpleQA 和 TruthfulQA 提升较小但都为正(这两个 benchmark 在 3B-14B 范围内 Raw 准确率本就不到 10%,天花板很低)

更值得说的是 NA-rate(refusal)的两种模式:

  • Qwen3 家族:refusal 率显著下降,意味着提升来自"把以前拒答的题答对了",而不是无脑乱猜
  • Llama 家族:refusal 率反而小幅上升,意味着提升来自"该答的答对了 + 不会的更倾向于拒答"

两种模式都健康,但路径不一样。这个观察对工程落地有价值——不同基座模型 RL 训完后的"性格"本来就不一样,不能用单一 NA-rate 指标评估改进效果。

3.3 训练时间:快 4.8× 到 8.4×

图4:四个方法在四个基座模型上的平均训练时间(小时),柱子上标注相对 CorVer 的减速倍数

图4:CorVer 训练平均 3.2 小时,FSPO 平均 8.4× 慢,KnowRL 7.8× 慢,RLFH 是最快的 baseline 也慢 4.8×。在 Qwen3-8B 上 FSPO 直接干到 65.8 小时——基本上就是不可行的

这张图我建议想做事实问答 RL 的同学盯着多看几秒。不是说 CorVer 快得多么炫技,而是说 baseline 那一栏的数字直接劝退了所谓的"full configuration"——你不可能用一个标准 LoRA + G=16 的配置去跑 65.8 小时换一个比 Raw 还差的结果。Table 1 里 baseline 都是 reduced configuration(更小的 LoRA rank 和 G)跑出来的,作者也大方承认了这点。换句话说:对比的真正含义并不是同等算力下哪种 reward 信号更好,而是哪种 reward 设计能支撑可部署的训练配置——后者其实是工业落地更关心的问题。


四、关键分析:共现到底为什么 work

4.1 共现次数和事实正确率的真实关系

图5:基于 700 条人工标注的"共现次数 vs. 句子事实正确率"经验曲线。绿色虚线是 Eq.(2) 的 reward 边界(c=5, c=20),灰色点线是没采用的 c=10 候选切分点

图5:句子事实正确率随共现次数 c 单调递增——c=0 时只有 23%,c≥20 时达到 81%。这就是把共现当 reward 的实证依据

这张图非常关键。它告诉你:

  • c=0(在维基里完全查不到这个主宾对):只有 23% 的句子是正确的——所以 \(\alpha_0 = -0.3\) 给惩罚是合理的
  • c≥20:81% 的句子正确——给 \(\alpha_3 = +0.1\) 的奖励
  • 阈值选 5 和 20 不是拍脑袋——是 5(+17 个点跳变)和 20(+8 个点跳变)这两个最大的精度断点。中间还有个 c=10 的候选只跳了 +3 个点,被作者明确放弃了

我的第一反应是:这种"先做人工校准再设阈值"的做法,比起直接用某个软函数(sigmoid 之类)映射,可解释性强很多,而且对工程落地友好——线上 debug 时你能直接看每条样本的 c 值落在哪个桶,对应什么奖励。

4.2 消融:per-token 对齐才是灵魂

变体 TriviaQA NQ-Open PopQA SimpleQA TruthfulQA
Raw 71.86 40.66 28.85 5.20 6.61
CorVer 完整版 76.52 48.34 35.30 5.92 10.28
A1: 去掉 QuCo(vanilla GRPO) 71.3 45.9 34.6 5.4 6.8
A2: 去掉 Judge 76.1 42.6 31.7 4.8 7.1
A3: 去掉 per-token 对齐 72.9 46.3 34.9 5.8 6.6
A4: 去掉 self-filter 75.0 46.0 33.5 5.1 8.0

A1 vs A3 的对比是最有意思的——A3 保留了完整的 QuCo 信号总量,但把它退化成响应级标量(即每条 rollout 算出 QuCo 平均后给整段一样的奖励)。结果 TriviaQA 从 76.52 掉到 72.9,跟没有 QuCo 的 A1 (71.3) 差不多。

这就是关键。

共现奖励的价值,主要不来自总分多少,而来自它在 token 层面的差异化分配。一段回答里第一句和第三句受到不同的局部梯度,这个 dense supervision 才是过程监督的本意。把它平均掉就退化成了一个噪声更大的响应级 baseline。

A2(去掉 Judge)在 TriviaQA 上几乎打平 full(76.1 vs 76.52),但在 NQ-Open 上掉了 5.7 个点——TriviaQA 是个相对简单的 benchmark,QuCo 信号自带足够的"答对了大概率共现高"的相关性,但出了 TriviaQA 这种舒适区,judge 还是必要的。

4.3 Gain 归因:是给稀有实体续命还是给热门实体加 buff

这一节我觉得是全文最有判断力的部分。作者抛出两个相反假设:

  • Rescue 假说:CorVer 提升最大应该出现在"稀有实体"上——因为模型本来就不会,正好用共现信号纠偏
  • Signal-density 假说:CorVer 提升最大应该出现在"热门实体"上——因为热门实体的共现统计才足够稠密,能区分对错

PopQA 提供了维基月浏览量字段,按浏览量四分位切了 Q1(最稀有)到 Q4(最热门)。

Quartile Pageviews Llama-3.1-8B Δ OLMo-2-13B Δ
Q1(稀有) 2–224 +5.47 +3.68
Q2 224–914 +5.13 +4.33
Q3 914–5,293 +8.39 +5.51
Q4(热门) 5,293–15.1M +7.50 +9.03

OLMo 是完全单调递增的:越热门,提升越大。Llama 在 Q3 到 Q4 有个小回落(57.06 → 64.55),作者认为这是 ceiling effect(Llama 的 Q4 Raw 已经 57%,OLMo 的 Q4 Raw 才 50%,提升空间不一样大)。

总体上 Signal-density 假说赢了

这个发现挺反直觉的——按理说 RL 训练应该把模型不会的东西教会,但 CorVer 实际上是在"模型本来就半懂不懂的中等热度实体"上发挥最大作用。这也直接推出了 CorVer 的局限性:在稀有实体上反而是该方法最弱的地方,因为共现统计本身在那里就稀疏。作者大方承认了这一点,比那些藏着掖着的论文舒服多了。

4.4 三元组聚合规则的对比

变体 Cor.(%) NA(%) Mean len Time
First(论文采用) 62.24 5.04 150 1.0×
Min(取所有三元组共现的最小值) 57.27 0.33 40 1.2×
RelCheck(再加上关系 token 一起查) 61.37 6.58 150 1.7×

这表也很有意思:

  • Min 把回答压扁了——平均长度从 150 直接缩到 40。模型学到的不是"产出更多正确事实",而是"产出尽量少的句子来规避被取最小"。这种 reward hacking 的形式特别巧妙,体现了过程监督设计里"任何聚合方式都会被策略 reverse-engineer"的本质矛盾
  • RelCheck 太脆:维基百科里的关系 token 有几十种表达("directed" vs "was the director of"),加上去查共现经常返回 0,把正确句子也错杀了

最简单的"取第一个三元组"反而又快又准。作者这个 ablation 让我想起 Sutton 的 bitter lesson——加越多归纳偏置,越容易在某个边缘 case 翻车。

4.5 工程经验

作者还分享了两条"算不上严格结论但 production-relevant"的经验:

1. SFT cold-start 反而伤害事实召回。 用 397B 的 Qwen3 MoE teacher 蒸 CoT trace 给目标模型做 SFT 再 GRPO,比直接对 raw 模型做 GRPO 还差。作者的解释是 capacity mismatch:学生被迫模仿它执行不了的推理链,本来能答对的题反而被"被迫但错误的 deliberation"带歪。这个观察其实跟最近几篇关于"小模型蒸大模型 reasoning 反而退化"的工作一致。

2. 小模型(3B/4B)需要 anchor question 才能稳定训练。 只用 learning-zone(部分对部分错)的样本训 3B/4B 会发散,把"全对"的 anchor 题加回来才稳。8B 以上不需要。这个经验我自己在做小模型 RL 的时候也踩过类似坑——小模型的 reward variance 容易把策略推到一个 "everything looks bad" 的局部最优,需要正样本锚定。


五、我的判断:什么场景该抄这套,什么场景不该

值得直接借鉴的点

  1. 核心洞察:奖励信号的可扩展性瓶颈不在"模型够不够强",而在"信号源是不是和策略解耦"。语料库统计是和策略完全解耦的,所以不存在循环依赖。这个思路其实可以泛化到其他任务——比如代码事实校验可以用 code corpus 里的 API 共现频次,medical QA 可以用医学文献共现,说到底都是"用结构化外部信号绕开 verifier 训练成本"。
  2. Token-to-sentence 对齐的工程意义:Ablation 里 A1 vs A3 的对比直接说明,dense token-level supervision 不是奢侈品,是基础设施。你给整段一样的奖励,跟没给没区别。
  3. 奖励量级显式设计:让 shaping signal 比主信号小一个数量级,这种 hyperparameter discipline 比所谓的"自动 reward weighting"实用得多。

这套方案的局限性也得说清楚

  1. 稀有实体上 CorVer 最弱——这恰恰是事实问答里最让人头疼的子集。论文 §6.3 的 quartile 分析坦承了这一点。如果你的业务场景以长尾实体为主(比如垂直领域的专业 QA),CorVer 的边际贡献会显著缩水。
  2. 依赖一个 high-quality 的 corpus index。维基够通用,但放到中文场景或者特定行业,你需要自己 build Infini-gram 索引——这部分成本论文里没算进对比。
  3. Triplet extractor 是 0.5B 微调过的 QuCo。如果你的句子结构跟英文 Wikipedia 训练集差异大(比如多 entity 嵌套、长句、口语),抽出第一个有效三元组的策略可能错过关键事实。

最大的开放问题:CorVer 只在 GRPO 上验证了。论文 §6.6 留了个 future work 说"应该可以泛化到 PPO/REINFORCE/DPO",但实际跑起来什么样没人知道。我个人比较好奇这个 reward 在 DPO 的 preference pair 构造上能不能用——理论上可以,但 preference 学习对 reward 量级和噪声的敏感度跟 policy gradient 不一样。


六、一些工程落地的建议

如果你正在做事实问答方向的 RL 训练,这篇论文里我会重点抄的几个点:

  1. 先别急着上神经验证器。用语料库共现做一个 baseline,看看能拿到多少。CorVer 的实现复杂度其实极低——一个 0.5B 三元组抽取模型 + Infini-gram 索引就够。
  2. 永远做 reward 信号的 calibration。论文 §6.1 那个 700 条人工标注的"共现 vs 正确率"曲线,是 CorVer 阈值能选好的根本原因。不要拍脑袋选阈值,做几百条人工标注就能省掉后面的反复调参。
  3. Token-level alignment 不是优化项是必选项。把任何 sentence-level 信号铺到 token 级 advantage,是这套方案 work 的关键。如果你只是把信号做成 response-level 平均,相当于白搭。
  4. 先用 Raw + GRPO 跑一遍。论文 SFT cold-start 反而退化的发现挺重要——别默认 SFT warmup 一定有用。

最后,再次想强调一下我对这篇论文的整体定位:它不是方法论上的颠覆,但是工程哲学上的清晰。在 RL 训练越来越卷"用大模型当 verifier 给小模型评分"的当下,能跳出来说"也许我们一开始就不该用神经验证器",这本身就值得点赞。


参考链接

  • 论文:https://arxiv.org/abs/2605.29648
  • 代码(announced):https://github.com/shichengf/CorVer
  • 相关:QuCo (Min et al., 2025) - 推断时共现验证的前置工作
  • 相关:Infini-gram (Liu et al., 2024) - 底层语料库索引引擎

觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我