library_name: transformers
tags:
- 奖励模型
- 过程奖励模型
- 生成式奖励模型
- 过程监督
- 思维链
- 验证
- 数学推理
- 代码验证
license: apache-2.0
pipeline_tag: text-generation
ThinkPRM-1.5B 模型卡
ThinkPRM-1.5B 是基于 R1-Distill-Qwen-1.5B 架构的生成式过程奖励模型(PRM)。该模型经过微调,能够通过生成显式的验证思维链(CoT)对推理过程(如数学解题步骤)进行逐步验证,并为每一步骤标注正确性。其设计具有极高的数据效率,相比传统判别式 PRM 所需监督数据量显著减少,同时保持强劲性能。
以下是模型输出示例:
模型详情
模型描述
ThinkPRM-1.5B 通过为给定解题步骤前缀生成自然语言评述和正确性判断,提供步骤级验证评分。该模型利用基础大推理模型(LRM)的底层推理能力,并通过在合成生成的验证思维链小规模数据集(1千例)上微调进行增强。这些合成思维链由 QwQ-32B-Preview 生成,并依据 PRM800K 数据集中的真实步骤标签进行过滤以确保质量。
模型采用标准语言建模目标,具有可解释性,并能通过生成更长或多条验证思维链来扩展过程验证计算。在 ProcessBench、MATH-500、AIME '24、GPQA-Diamond 和 LiveCodeBench 等基准测试中,其性能优于基于相同 R1-Distill-Qwen-1.5B 架构但使用约100倍更多标签训练的LLM-as-a-judge和判别式PRM基线模型。
模型来源
- 代码库:GitHub
- 论文:《Process Reward Models that Think (arXiv:2504.16828)》论文链接
直接用途
ThinkPRM-1.5B 专为验证逐步推理过程的正确性设计,主要用途包括:
- 解决方案评分:为候选解决方案分配步骤级或总体评分,用于Best-of-N采样排序或指导推理任务中的树搜索
- 生成验证依据/思维链:产生详细解释步骤正确/错误原因的验证思维链,增强可解释性
- 独立验证:评估给定问题-解决方案对的正确性
该模型已在数学推理(MATH、AIME)、科学问答(GPQA)和代码生成(LiveCodeBench)领域完成评估。详见论文。
局限性
- 过度自信:生成式PRM可能产生接近0或1的分数聚类,未必反映真实不确定性
- 步骤标签干扰:自回归特性可能导致早期错误步骤判断影响后续步骤评估
- 格式/提示敏感性:性能可能受输入解决方案格式和验证提示的细微影响(尽管微调相比LLM-as-a-judge已降低此敏感性)
快速开始
from transformers import AutoModelForCausalLM, AutoTokenizer
from vllm import LLM, SamplingParams
model_id = "launch/ThinkPRM-1.5B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
llm = LLM(model=model_id, max_model_len=16384)
problem = "解方程: 2x + 3 = 7"
prefix = "步骤1: 两边减3: 2x = 4\n步骤2: 除以2: x = 1"
prompt = f"""你需要验证以下数学问题及其分步解答:
[题目]
{problem}
[解答]
{prefix}
请审查并评判解答中的每个步骤是否正确。若解答不完整,仅验证已提供的步骤"""
prompt = tokenizer.apply_chat_template([
{'role': "user", "content": prompt}
], tokenize=False, add_generation_prompt=True) + "\n逐步验证如下:"
sampling_params = SamplingParams(
temperature=0.0,
max_tokens=4096,
stop=None
)
outputs = llm.generate(prompt, sampling_params)
verification_cot = outputs[0].outputs[0].text
print(verification_cot)
"""
步骤1: 两边减3: 2x = 4
评述:从方程2x + 3 = 7出发,两边减去3是隔离变量的正确操作。即2x + 3 - 3 = 7 - 3,简化为2x = 4。此步骤正确。
步骤2: 除以2: x = 1
评述:为求解x,需将方程两边除以2。即2x / 2 = 4 / 2,应得x = 2。但解答给出x = 1,此处存在错误。
**最终输出**
逐步验证:
步骤1: 两边减3: 2x = 4
评述:本步骤正确。对方程2x + 3 = 7执行减3操作有效隔离变量,得到2x = 4。
步骤1判定:\boxed{正确}
步骤2: 除以2: x = 1
评述:本步骤错误。方程2x = 4两边除以2应得x = 2而非x = 1。
步骤2判定:\boxed{错误}
整体解答是否正确?否
"""