THUNLP-MT/pverify

GitHub: THUNLP-MT/pverify

该项目是论文《开放性数学问题的悲观验证》的官方代码库,通过多并行验证器实现高效的数学证明正确性检验。

Stars: 6 | Forks: 1

# pverify 论文《开放性数学问题的悲观验证》官方代码库 在悲观验证中,我们对同一个证明构建多个并行的验证过程,如果其中任何一个报告错误,则判定该证明不正确。这种简单的技术在许多数学验证基准测试中显著提高了性能,且不会引入过多的额外预算。在测试时扩展中,其 token 效率甚至超过了扩展的 long-cot。 ![gpt-5-mini 效率](https://static.pigsec.cn/wp-content/uploads/repos/cas/78/78c0907994740f5d8b8660ffb12ce646c6c825faadf0f856e4600a34ebfb5f0d.jpg) ![qwen3-30b-a3b 效率](https://static.pigsec.cn/wp-content/uploads/repos/cas/bd/bdb32f27be38a777293d82d0d518a58886656c2015e397629beb21343ad707c4.jpg) 本仓库包含所有三种 pverify 方法的官方实现,以及一个完整的基线,用于复现我们论文中的所有结果。在 `cases` 文件夹下还包含了我们案例研究的完整详细信息列表。我们也鼓励社区对悲观验证进行更多实验,以更好地确定其真实性能。 ## 用法 你可以通过以下步骤开始使用此仓库: - 创建一个使用 Python 3.11 的环境并安装依赖项:`pip install -e .`(如果你使用 `uv`,则运行 `uv sync`)。 - 使用你的模型端点运行验证器,并选择一种 reviewer 风格。示例(在 QZ bench 上进行渐进式验证): `python main.py --reviewer progressive --eval_dataset NP_dataset/qz_bench_eval.jsonl --proof_model gpt-5-mini --eval_model gpt-5 --prover_base_url --prover_api_key ` - 要跳过证明生成并仅验证现有样本,请传入 `--verifier_samples `(例如 `Salesforce/Hard2Verify`、`NP_dataset/gradingbench.csv`)。 - 日志文件(指标、样本和成本)将写入 `eval_logs//`;使用 `--log_dir` 进行调整。 - 我们实验的即用型命令模板位于 `scripts/` 中(gradingbench、Hard2Verify、QZ bench)。 请注意,如果你想评估 QZ bench 中的结果,你需要首先通过一个强大的验证器运行证明和评估。你需要先运行 `scripts/qz_bench_gpt_5_mini_gen.sh`,并将其日志目录作为 `scripts/qz_bench_gpt_5_mini_eval.sh` 中的 `verifier_samples` 传入。 ## ArxivMathGradingBench 该仓库支持 35 篇论文的 `LukeBailey181Pub/ArxivMathGradingBench` 数据集。准备一次: ``` python scripts/prepare_arxiv_math_grading_bench.py ``` 对于每篇论文确切标注的 arXiv 版本,这将创建: - `pdfs/arXiv-.pdf`:完整渲染的论文; - `source_archives/arXiv-.src`:原始的 arXiv 源响应; - `sources//`:安全提取的完整源代码树; - `proof_bundles/arXiv-.tex`:所有文本格式的 TeX/BibTeX/样式 源文件按原样拼接而不进行重写,并带有明确的文件边界; - `manifest.jsonl`:元数据、路径、源文件列表和 SHA-256 哈希值。 下载是幂等的,并且会重试临时的网络故障。文件是 根据每篇论文自身记录的许可从 arXiv 获取的,因此 作为本地生成的数据保留,而不是提交到此仓库中。 直接在准备好的证明包上运行评估: ``` python main.py \ --eval_dataset LukeBailey181Pub/ArxivMathGradingBench \ --arxiv_data_dir NP_dataset/arxiv_math_grading_bench \ --reviewer pessimistic \ --reviews 4 \ --eval_model \ --eval_base_url \ --eval_api_key \ --location_judge_model ``` 此数据集始终跳过证明构建和证明生成。它的 `problem` 字段被特意设为空字符串;完整、逐字的源 包被放置在 `proof` 中。空问题会激活整篇论文审查 模式。标准的悲观 rollouts 会在 `` 内接收整个证明一次。 渐进式悲观验证在其第一次迭代中使用相同的整篇论文 提示;随后的每个聚焦请求都包含 完整的 `` 和一个 ``。reviewer 被指示 将论文本身的研究问题、定理和证明作为目标。 每次悲观运行还会写入 `reviewer_input_audit.json`,记录 问题为空的标志、整篇论文的字符数以及论文 在每个请求中出现的次数。这使得意外遗漏或重复 论文输入的情况可以直接被审计,而无需在日志中复制源文件。 如果验证器报告错误,一个单独的 location-judge agent 会将 报告与标注的 `Location of Error` 进行比较。在论文层面上,一个真正的 负样本需要同时满足拒绝和匹配的错误位置。通过、错误的 位置或无法解析的位置判断均被视为假阳性。由此产生的 `tn`、`fp` 和 `tnr = tn / (tn + fp)` 将被写入 `verifier_eval.json` 中的 `location_aware` 下;每篇论文的判断结果将保留在 `verifier_samples.json` 和 `samples.json` 中。 对于渐进式运行,`verifier_eval.json["progressive_iteration_metrics"]` 中的每个条目还包含 带有累积 `tn`、`fp`、`accuracy`、`tnr` 和 `new_tn_this_iteration` 的 `location_aware_metrics`。因为所有 35 篇论文都是真实负样本, 位置感知准确率等于 TNR;`metrics_if_stopped["accuracy"]` 保持 在错误位置匹配之前的原始正确拒绝准确率。 **CLI 参数** - `--eval_dataset, -ed`(字符串,默认为 `""`):用于评估的数据集路径或 HF 名称;参见 `NP_dataset/` 预设和 `Salesforce/Hard2Verify`。 - `--proof_model, -pm`(字符串,默认为 `""`):用于生成证明的模型 ID。 - `--eval_model, -em`(字符串,默认为 `""`):用于判断证明的模型 ID。 - `--log_dir`(字符串,默认为 `eval_logs`):写入带时间戳的运行文件夹的基础目录。 - `--reasoning_effort`(字符串,默认为 `medium`,可选范围 `minimal|low|medium|high`):发送给支持模型的推理深度。 - `--reviewer`(字符串,默认为 `standard`,可选范围 `standard|pessimistic|vpessimistic|progressive|ppruning`):验证策略。 - `--reviews`(整数,默认为 `3`):多审查验证器(`pessimistic`、`ppruning`)每个样本的最大审查次数。 - `--chunk_length`(整数,默认为 `7`):`vpessimistic` 每个 chunk 的行数。 - `--progressive_max_iters`(整数,默认为 `3`):`progressive` 的细化轮数。 - `--progressive_min_chunk_size`(整数,默认为 `6`):`progressive` 每个 chunk 的最小行数。 - `--prover_base_url`(字符串,默认为 `""`):prover 模型的端点基础 URL。 - `--eval_base_url`(字符串,默认为 `""`):evaluator 的端点基础 URL(为空时回退到 prover 基础 URL)。 - `--prover_api_key`(字符串,默认为 `""`):prover 端点的 API key。 - `--eval_api_key`(字符串,默认为 `""`):evaluator 端点的 API key(为空时回退到 prover 的 key)。 - `--enable_thinking` / `--no-enable_thinking`(标志,默认开启):切换特定于提供商的 `enable_thinking` 参数。 - `--verifier_samples`(字符串,默认为 `""`):预设计算问题/证明的路径或数据集名称(跳过新的证明生成,并在可用时使用存储的真实标签)。 - `--arxiv_data_dir`(字符串):准备好的 ArxivMathGradingBench 目录。 - `--location_judge_model`(字符串):独立的错误位置判断器;默认为 `--eval_model`。 - `--location_judge_base_url` / `--location_judge_api_key`:location judge 的可选端点覆盖。
标签:DLL 劫持, Python, 人工智能, 大模型评估, 大语言模型, 数学推理, 无后门, 用户模式Hook绕过, 答案验证, 逆向工具