Rubric-Grounded Reinforcement Learning: Structured Judge Rewards for Generalizable Reasoning in Language Models

Paper: arXiv:2605.08061 Code: 代码搜索未找到开源实现

1. Motivation

这篇论文瞄准的是一个很具体但长期存在的问题:LLM 的 RL reward 往往把“好答案”压缩成一个单标量,例如 preference reward、pairwise comparison,或者 binary verifier。这样的信号在 math / coding 这类可验证任务上经常够用,但在 scientific QA、technical explanation、code review 这类开放式任务中,答案质量天然是可分解的。一个好答案不仅要“结论对”,还要术语精确、证据链完整、限制条件说清楚、方法学 caveat 不遗漏。把这些维度压成一个整体分数,会让优化目标变得欠约束。

作者要解决的具体问题是:能不能把这种多维质量结构直接变成 RL 训练信号,而不是仅仅把 rubric 当作评测器放在训练后使用。论文提出的 Rubric-Grounded RL 就是在回答这个问题:policy 只看问题 ,但 frozen LLM judge 在打分时额外看到 grounding passage 和结构化 rubric ,从而给出 criterion-level 的 partial-credit reward,再把它聚合成 GRPO 的训练信号。这个问题值得研究,有三个直接原因。第一,它把 “all-or-nothing” 的 verifier 奖励改成 partial credit,可以在模型还很差的训练早期也提供有效排序。

第二,它允许训练时使用 instance-specific grounding,但推理时不需要 retrieval,把监督信息留在参数更新里而不是 prompt 里。第三,若这种 reward 真能教会模型“更像技术评审或考试阅卷人那样回答”,它应该不只提升 in-domain rubric score,也可能迁移到外部 reasoning benchmark。

2. Idea

核心 insight 是:RL 优化器本身不一定要变,真正该变的是 reward 的生成过程。作者把 reward 写成一个由多个可验证 criterion 组成的结构化测量:judge 先分别给每个 criterion 打分,再按权重聚合成最终标量 reward。这样 policy 仍然吃一个 scalar reward,但这个 scalar 的来源不再是 free-form holistic judgment,而是显式分解后的质量坐标。关键创新有两层。

第一层是 rubric-grounded reward:judge 打分时看到隐藏的 grounding passage、rubric 以及模型回答,因此 reward 不只是“整体像不像好答案”,而是“是否满足了这份带证据约束的评分细则”。第二层是 information asymmetry:policy 在 rollout 时看不到 passage,只能从训练中内化这些 grounded criterion,这使它更像在接受有标准答案依据的闭卷训练,而不是 retrieval-augmented generation。它和现有方法的根本差异也很清楚。

与 standard verifiable RL 相比,这里没有唯一正确答案或 binary checker,而是多 criterion 的 structured judge reward;与 rubric-based evaluation / rubric-as-reward 类工作相比,这篇把 rubric 真正接进 online GRPO loop,而不只是训练后评测;与 process reward model 相比,它不需要人工逐步标注 step-level label,而是依赖书面 rubric 和 grounding passage 来构造可复用的 criterion-level supervision。

3. Method

3.1 Overall Framework

Figure 1 解读:整条 pipeline 分成 offline 和 online 两段。offline 侧先从 OSTI scientific / technical documents 中抽文档片段,合成三元组 (question, grounding passage, weighted rubric);online 侧 policy 只接收 question 并为每个 prompt 采样多个 candidate responses。随后 frozen LLM judge 读取同一个 question、隐藏的 grounding passage、待评分 response 以及 rubric,为每个 criterion 给出分数,再聚合成标准化 reward。图里最关键的设计不是“用 LLM 当 judge”,而是 judge 有额外证据、policy 没有。这让 reward 能惩罚 unsupported claim、遗漏事实和术语不精确等问题,但不会把系统直接退化成 retrieval inference。

整个方法可以概括成:

  1. 离线构建 document-grounded rubric 数据集。
  2. 在线对每个 prompt 采样 个回答。
  3. 用 frozen judge 对每个回答做 criterion-level 打分。
  4. 把 criterion score 聚合成归一化 scalar reward。
  5. 用 group-relative advantage 和 PPO-style clipped surrogate 更新 policy。

3.2 Multi-Criterion Judge Reward

给定问题 、grounding passage 、rubric 和模型回答 ,judge 先产生逐 criterion 分数 其中 是第 个 criterion 的权重。原始 reward 为 为了让不同 rubric 之间可比,作者再按总权重 做归一化: 实现层面还有几条非常关键的 judge interface 细节:

  • judge prompt 是严格结构化的,包含 system instruction、截断后的 grounding passage、question、response、按编号展开的 rubric,以及 JSON output schema;
  • rubric 中每个 criterion 不只是名字和权重,还包括 descriptionrequired_elementsscoring_guideverification_methodexpected_keywordsexpected_concepts
  • judge 解码温度固定为 ,目的是降低 reward variance;
  • parse failure 或 schema error 不会被“修补”,而是给 conservative zero reward;
  • 解析后的 reward 在实现里再 clip 到 ,避免数值边界问题。

这一步的直觉很重要:作者不是相信 judge 一次 holistic 打分一定可靠,而是希望把“答案好坏”拆成多个相对更可检查的子问题。即使最终仍回到一个 scalar reward,这个 scalar 已经带着多轴度量之后的结构。

3.3 Rubric-Grounded Policy Optimization

训练目标沿用 PPO / GRPO 体系,只是把普通 reward 换成了 rubric-grounded reward: $ \max_\theta ; \mathbb{E}{x \sim \mathcal{D},, y \sim \pi\theta(\cdot \mid x)}[r(x,y)]

  • \beta , \mathbb{E}{x \sim \mathcal{D}}[\mathrm{KL}(\pi\theta ,|, \pi_{\mathrm{ref}})]. x_iG{y_i^{(g)}}{g=1}^Gp_iR_i{R_i^{(g)}}{g=1}^G b_i^{(g)} = \frac{1}{G-1} \sum_{g’ \neq g} R_i^{(g’)}, \qquad \sigma_i = \mathrm{std}!\left({R_i^{(g’)}}_{g’=1}^G\right), A_i^{(g)} = \begin{cases} \dfrac{R_i^{(g)} - b_i^{(g)}}{\sigma_i + \delta}, & \sigma_i > 0, \ 0, & \text{otherwise}. \end{cases} $ 这里的核心不是单个回答拿了多少绝对分,而是 在同一道题、同一份 rubric、同一段 grounding 下,这个回答比同组其它回答好多少。这比跨 prompt 比较原始分数更稳定,因为每组内部面对的是固定评估上下文。

作者随后使用 PPO-style clipped surrogate。令每个 response token 的 ratio 为 则 clipped policy term 为 $ \ell_t^{\mathrm{clip}}

-\min\Big( r_t A_t,; \mathrm{clip}(r_t, 1-\epsilon_{\mathrm{clip}}, 1+\epsilon_{\mathrm{clip}})A_t \Big). k_3 c_t^{\mathrm{KL}}

e^{u_t} - 1 - u_t, \qquad u_t = \log \pi_{\mathrm{ref}} - \log \pi_\theta. L(\theta)

\frac{1}{\sum_{i,g} T_{ig}} \sum_{i,g,t} m_t^{(ig)}\big[ \ell_t^{\mathrm{clip}} + \beta c_t^{\mathrm{KL}} \big], m_t^{(ig)}\pi_{\mathrm{gen}} \leftarrow \pi_\theta\log \pi_\theta / \log \pi_{\mathrm{ref}}$,最后做梯度更新。

3.4 Why Partial Credit Helps

这篇论文最值得记住的不是某个训练 trick,而是它对 partial credit 的形式化。作者先定义归一化 criterion score 于是最终 reward 可写成 这说明 RL 实际优化的是一个先分解、再投影的 reward。binary verifier 最多只暴露两个 reward level;而 rubric 在投影前先暴露一个乘积空间 直观地说,回答可以从“全错”变成“术语对了但证据没说全”,再变成“证据和 caveat 都齐了”。这些中间状态都能产生有效梯度排序,而不是只有“完全满足 / 完全失败”两档。

另一个重要直觉是 localization。对于两个回答 , $ r(y^a) - r(y^b)

\sum_{j=1}^M \alpha_j \big(z_j(y^a) - z_j(y^b)\big). $ 因此即使优化器收到的仍是 scalar advantage,哪个 criterion 失败会通过权重精确影响 reward 差值。作者认为 localization 并不来自新 optimizer,而是来自更高分辨率的 measurement。

论文还给出一个 judge-noise heuristic。若 criterion noise 独立且方差相同为 ,则聚合后 reward noise 方差为 $ \mathrm{Var}(r)

\tau^2 \frac{\sum_j w_j^2}{W^2}

\frac{\tau^2}{M_{\mathrm{eff}}}, \qquad M_{\mathrm{eff}} = \frac{W^2}{\sum_j w_j^2}. $ 这不是 reliability guarantee,但说明多 criterion 分解在 noise 部分独立时,确实有机会比单次 holistic 打分更稳。

3.5 Document-Derived Rubric Pipeline

作者用 roughly 100,000 篇 OSTI scientific / technical documents 实例化这个框架。选择这类语料的理由很现实:文档规模大、天然带 grounding、而且不需要对每个 criterion 手工标注。

离线数据构建分三步:

  1. Semantic analysis:先把文档转成结构化表示 ,包括 genre、primary contribution、central concepts、technical depth、dominant reasoning mode。
  2. Joint question-rubric synthesis:条件于 和文档本身,LLM 生成 个三元组 。作者要求问题和 rubric 必须脱离原文也能自洽,问题要测深层理解而非表层 recall,rubric 必须包含定义好的字段集合,criterion 权重要反映其对整体质量的贡献。
  3. Rubric enrichment:后处理再给每个 criterion 补充 expected terminology、core concepts 和 verification patterns,提升 inter-rater consistency。

筛选阶段还有一组 hard filters:minimum criteria per rubric、minimum total weight、non-empty question、所有 criterion 字段齐全、权重非负。失败样本直接丢弃。附录 E 给出的 schema 也很有复现价值,核心字段包括:

  • question
  • passage
  • criteria[]
  • question_rationale
  • document_analysis.{genre, contribution, concepts, depth, reasoning_mode}
  • doc_hash

这说明作者不是简单“让模型写题目再写答案”,而是把数据管线本身设计成一个可审计、可恢复、可并发生成的结构化系统。

3.6 Pseudocode

由于论文没有公开 release code,下面的 pseudocode 基于正文公式、Algorithm 1、Appendix D 和 Appendix E,而不是某个具体仓库实现。

def synthesize_rubric_examples(document, generator, min_criteria=5):
    analysis = generator.semantic_analyze(document)
    raw_examples = generator.generate_question_passage_rubric_pairs(
        document=document,
        analysis=analysis,
    )
 
    keep = []
    for ex in raw_examples:
        criteria = ex["criteria"]
        total_weight = sum(c["weight"] for c in criteria)
        if not ex["question"].strip():
            continue
        if len(criteria) < min_criteria:
            continue
        if total_weight <= 0:
            continue
        if any(c["weight"] < 0 for c in criteria):
            continue
        if any(not c.get("required_elements") for c in criteria):
            continue
 
        enriched = generator.enrich_rubric(
            ex,
            add_expected_keywords=True,
            add_expected_concepts=True,
            add_verification_patterns=True,
        )
        keep.append(enriched)
 
    return keep
def judge_reward(question, passage, response, rubric, judge_client):
    prompt = {
        "system": (
            "You are a strict, objective academic evaluator. "
            "Return ONLY a valid JSON object."
        ),
        "source_passage": passage,
        "question": question,
        "response": response,
        "criteria": rubric["criteria"],
    }
 
    result = judge_client.generate(prompt, temperature=0.1)
    parsed = safe_parse_json(result)
    if parsed is None:
        return 0.0, {}
 
    scores = {}
    max_total = sum(c["weight"] for c in rubric["criteria"])
    for c in rubric["criteria"]:
        raw_score = parsed["scores"].get(c["id"], 0.0)
        scores[c["id"]] = max(0.0, min(raw_score, c["weight"]))
 
    total = sum(scores.values())
    reward = max(0.0, min(total / max_total, 1.0))
    return reward, scores
def rubric_grounded_grpo_step(policy, ref_policy, batch, judge_client,
                              group_size=32, eps_clip=0.2,
                              beta=0.01, delta=1e-8):
    rollouts = []
 
    for example in batch:
        question = example["question"]
        passage = example["passage"]
        rubric = example["criteria"]
 
        responses, logp_gen = policy.sample_group(question, group_size)
        rewards = []
        for y in responses:
            reward, _ = judge_reward(question, passage, y, {"criteria": rubric}, judge_client)
            rewards.append(reward)
 
        sigma = torch.tensor(rewards).std().item()
        for g, (y, lp_gen, r) in enumerate(zip(responses, logp_gen, rewards)):
            loo = (sum(rewards) - r) / (group_size - 1)
            advantage = (r - loo) / (sigma + delta) if sigma > 0 else 0.0
            rollouts.append((question, y, lp_gen, advantage))
 
    loss_terms = []
    for question, response, lp_gen, advantage in rollouts:
        lp_theta = policy.logprob(question, response)
        lp_ref = ref_policy.logprob(question, response)
 
        ratio = torch.exp(lp_theta - lp_gen)
        clipped = torch.clamp(ratio, 1 - eps_clip, 1 + eps_clip)
        policy_loss = -torch.minimum(ratio * advantage, clipped * advantage)
 
        u = lp_ref - lp_theta
        kl_k3 = torch.exp(u) - 1 - u
        loss_terms.append(policy_loss + beta * kl_k3)
 
    loss = torch.stack([x.mean() for x in loss_terms]).mean()
    loss.backward()
    return loss.item()

3.7 Reference Mapping

Reference: 代码搜索未找到开源实现;下表给出正文与附录中的实现锚点,便于后续自行复现。

Paper ConceptPaper Anchor复现时应实现的对象
Multi-criterion judge reward§3.1, Eq. (1)–(2)criterion 打分、总权重归一化、reward clipping
Group-relative advantage§3.2, Eq. (4)–(6)leave-one-out baseline、group std、 stabilizer
PPO-style GRPO loss§3.2, Eq. (7)–(9), Algorithm 1ratio、clipped surrogate、 KL、token mask
Structured credit assignment§3.3, Eq. (10)–(15)criterion normalization、weighted projection、noise heuristic
Document-derived rubric pipeline§3.4, Appendix Esemantic analysis、question-rubric synthesis、schema validation
Judge interfaceAppendix Dstrict evaluator prompt、JSON schema、low-temperature decoding

论文公式与 released code 实现差异:由于未找到开源实现,当前无法做 paper-vs-code discrepancy audit。

4. Experimental Setup

4.1 Datasets

训练数据来自 roughly 100,000 篇 OSTI scientific / technical documents 构造出的 document-grounded QA 环境。论文把它表述为 approximately 100K document-grounded questions;每个样本都包含:

  • 一个 question
  • 一段 grounding passage
  • 一份含 5–10 个 weighted criteria 的 structured rubric

数据集按 70% / 15% / 15% 划分为 training / validation / test。training split 用于 online RL reward computation,validation split 用于 checkpoint selection 与调参,test split 用于 held-out rubric evaluation。

4.2 Baselines and Evaluation

比较对象有三类:

  • Base: Llama-3.1-8B-Instruct,不做额外训练。
  • SFT: 在同一 document-derived corpus 的 question-answer pairs 上做 supervised warm-start;只用于 in-domain rubric evaluation 对比。
  • Ours: 同一个 base model 经 rubric-grounded GRPO 后的结果。

评测分两组:

  1. In-domain held-out rubric reward:在 held-out question-rubric test split 上,用同一个 judge GPT-OSS-20B 打分。
  2. OOD reasoning benchmarksGSM8KMATHGPQA MainGPQA Diamond
    其中 GSM8K / MATH 用 final-answer exact match,GPQA Main / GPQA Diamond 用 standard multiple-choice accuracy。论文强调这些 benchmark 都不来自训练 corpus,因此更像 transfer test 而非 recall test。

4.3 Models and Infrastructure

  • Policy / Reference model: Llama-3.1-8B-Instruct
  • Question-rubric generation model: GPT-OSS-120B
  • Judge model: GPT-OSS-20B
  • Training framework: NeMo-RL 2

作者明确把 policy generation 和 judge evaluation 拆成两类 worker:前者更 GPU-bound,后者更 latency-bound 且需要大量远程 judge 调用。这是因为每个 GRPO step 需要 次 judge calls,实际 wall-clock bottleneck 主要在 judge 侧。

4.4 Hyperparameters

  • 主实验每个 optimization step 使用 个 prompts。
  • 每个 prompt 采样 个 responses。
  • effective batch size 为
  • rollout 限制为 single-turn。
  • 启用 leave-one-out baseline 和 reward normalization。
  • KL 采用 approximation。
  • optimizer 为 AdamW,learning rate ,weight decay 0.01,max grad norm 1.0
  • warmup 为 13 steps,之后 constant learning-rate schedule。
  • judge 侧使用 N = 32 workers,temperature ,token budget 16,000,maximum passage length 50,000 characters,worker batch size 4

需要特别注意的是:论文主文没有给出 GPU 型号、GPU 数量以及总训练步数 / epoch 数,因此这些信息不能从文中精确恢复;如果后续要复现,必须自己补实验预算。

5. Experimental Results

5.1 In-Domain Held-out Rubric Evaluation

论文最核心的结果是 held-out rubric reward:

MethodHeld-out Rubric Reward
Base26.1%
SFT tuned41.8%
Ours (GRPO)71.7%

这组数字说明两件事。第一,单纯做 SFT 已经能把 rubric reward 从 26.1% 拉到 41.8%,说明 document-derived QA 环境本身是有监督价值的。第二,rubric-grounded GRPO 在同一 base initialization 上进一步把 reward 拉到 71.7%,提升幅度远大于 SFT over Base 的提升,说明 partial-credit judge reward 并不只是 noisy evaluator,而是足够强的优化信号。

Figure 2 解读:这是与 Table 1 同一 rubric-judge protocol 下的可视化比较。论文正文只给出了 verbal summary:GRPO-tuned Llama-3.1-8B 从 base model 大约 2.6/10 的 judge score 提升到大约 7.1/10,接近图中展示的 GPT-OSS-120B,并超过若干更大模型。这个图强调的不是“打赢某个特定 baseline”,而是 rubric-grounded reward 把一个 8B policy 推到了接近强 judge / 大模型的 rubric-scored 行为区域

5.2 Transfer to External Reasoning Benchmarks

外部 benchmark 的精确数字如下:

MethodGSM8KMATHGPQA MainGPQA DiamondAvg. Δ
Base84.5350.0625.2224.24-
Ours85.4452.8833.9332.32+5.13

对应的单项增益是:

  • GSM8K: +0.91
  • MATH: +2.82
  • GPQA Main: +8.71
  • GPQA Diamond: +8.08

最有意思的现象不是“全线都升”,而是 GPQA 两项的增益显著大于 math benchmark。作者的解释很合理:训练时 reward 鼓励的是 scientific / technical answer 中的事实协调、证据连接、术语精确和不确定性表达,这和 GPQA 所需的科学推理形态更接近;而 GSM8K / MATH 更依赖显式计算流程,和 document-grounded technical QA 的 reward geometry 只部分重叠。

5.3 Training Dynamics and Safeguards

Figure 3 解读:训练 reward 和 validation reward 在整个 GRPO run 中同步上升,而 zero-reward judge outcomes 单调下降。最重要的信息不是“曲线变高了”,而是 validation-training gap 始终有界,这意味着提升不像是只发生在 sampled training prompts 上。作者因此用 held-out reward 作为 checkpoint selection 的主要依据。

围绕 judge exploitation,论文没有做人类评审或 cross-judge agreement study,但给了四个 interface safeguard:

  • low-temperature judging:,降低随机性;
  • structured parsing:judge 必须返回 schema-conforming JSON;
  • document-grounded scoring:judge 能看 passage,policy 不能;
  • held-out validation:持续监控 held-out rubric reward,而不是只盯训练分数。

这些 safeguard 并不能证明 reward hacking 不存在,但说明作者是把 judge interface 当成方法设计的一部分,而不是实现细节。

5.4 Ablation-like Findings, Limitations, and Conclusions

严格来说,这篇论文没有传统意义上的 component ablation table。最接近 ablation 的证据是:

  • training dynamics 显示 validation reward 跟随 training reward 一起上升,而不是只在训练样本上刷分;
  • transfer 结果显示 gain 主要集中在 GPQA,而不是所有 benchmark 等幅增长;
  • Discussion 里明确指出该方法更适合“质量可以自然分解成可检查 criterion,且有 instance-level grounding”的任务,而不适合 genuinely holistic behavior 或 criteria 很难 formalize 的场景。

论文自己承认的限制也很具体:

  • 只在一个 model scale(8B)上报告主结果;
  • 只使用一个 corpus family(OSTI-derived scientific / technical documents);
  • 只使用一个 judge family;
  • 只展示单次 GRPO run,没有 confidence interval,也没有多个 random seeds 的方差报告;
  • 只验证了 single-turn answering;
  • training 与 validation 使用同一 judge family,因此 held-out reward 不能完全排除 judge-specific reward hacking;
  • rubric pipeline 会继承 synthesizer LLM 和 OSTI source corpus 的 bias。

整体上,这篇论文的贡献可以概括成一句话:它证明了 structured, document-grounded, criterion-level reward 可以在不改变 GRPO 优化器主体的情况下,给 LLM post-training 提供更高分辨率的 partial-credit 信号,并把这种信号迁移成外部 scientific reasoning 增益。证据还不够宽,但方法论价值很高,因为它把“怎样把复杂质量标准写进 RL reward”这件事讲得很清楚。