MWPBench 数学应用题统一评测基准:数据集构成、双引擎评测流程与模糊判分源码解析(unilm/mathscale)

MWPBench 数学应用题统一评测基准:数据集构成、双引擎评测流程与模糊判分源码解析(unilm/mathscale) MWPBench 数学应用题统一评测基准数据集构成、双引擎评测流程与模糊判分源码解析unilm/mathscale【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilmMWPBenchMath Word Problem Bench是 unilm 仓库mathscale/MWPBench目录下实现的数学指令微调模型统一评测基准它将 GSM8K、MATH、TAL-SCQ、Math23k、Ape210k、GaokaoBench-Math、AGIEval 系列等多个来源的数学题集合并为 20K 训练 18K 测试的标准化评测数据并新增了填补高等教育评测空白的 CollegeMath 数据集。阅读本文后你可以完整掌握如何在本地用 vLLM 评测指令模型、如何通过 OpenAI 接口评测 API 模型、答案提取与模糊匹配判分的底层逻辑以及各指标micro/macro 平均、分学科加权的计算方式从而在统一协议下公平、可复现地比较不同数学推理模型。一、MWPBench 的定位与数据集构成MWPBench 的目标是为数学应用题Math Word Problem方向上做过指令微调instruction tuning的模型提供一个综合且统一的评测基准解决各家模型在各自数据集、各自协议下测分无法公平对比的问题出处见 mathscale/MWPBench/README.md多来源数据合并GSM8K小学/初中难度应用题、MATH竞赛数学按 Algebra、Geometry 等子学科划分、TAL-SCQ、Math23k、Ape210k、GaokaoBench-Math高考数学英文题、AGIEval 系列高考数学、SAT 数学等标准化考试CollegeMath由开源大学教材派生的全新数据集用于填补高等教育阶段数学推理评测的空白覆盖代数、微积分、向量微积分、概率、线性代数、微分方程等子学科统一评测协议所有数据集使用同一套 prompt 模板、采样参数、答案提取与模糊匹配规则打分保证跨数据集、跨模型的可比性与可复现性Fresh-GaokaoMath-2023额外收录的 2023 年高考数学最新 30 道题用于考察模型对新鲜题目的泛化能力该集题目较新仓库建议评测时人工复核提取的答案。规模上README 声明 MWPBench 包含20K 训练数据点与18K 测试数据点每个问题都配有便于自动验证的简明答案。仓库内的实际数据文件为 JSON Lines 格式实测行数为数据文件相对路径实际行数说明训练集data/full_train.json20857对应 README 所述约 20K 训练点测试集data/full_test.json17470对应 README 所述约 18K 测试点新鲜高考题data/fresh_gaokao_math_2023.json302023 年高考数学最新 30 题需要说明的是每条数据按其原始许可证单独发布数据记录中带有license字段仅限研究用途。数据格式每条记录为单行 JSON以 fresh_gaokao 集第一行为例核心字段如下{ data_topic: FreshGaokaoMath2023, data_source: FreshGaokaoMath2023, question: Let \\( M \\{x | x 2 \\geq 0\\} \\) and \\( N \\{x | x - 1 0\\} \\). Determine \\( M \\cap N \\)., answer: \\( \\{x | -2 \\leq x 1\\} \\), license: , question_number: fresh_gaokao.1 }data_topic评测分组的关键字段。评测驱动程序按该字段把样本切分成不同任务分别计算准确率再汇总出层级指标详见第六节data_source题目原始来源如gsm8kquestion/answer题干与简明参考答案question_number全局唯一题号如test.0、fresh_gaokao.1便于定位与人工复核。二、评测环境准备按照 README 的说明运行评测前需要基于 open-instruct 的项目要求搭建环境核心依赖为torch、transformers、vllm、openai四件套。仓库提供了两份可直接使用的配置1. 依赖清单 requirements.txt其中与评测直接相关的版本锁定为vllm0.3.2 openai0.28.1 torch transformers ...注意openai0.28.1是旧版 SDKChatCompletion.create接口风格与评测脚本中的调用方式一致升级 SDK 需要相应修改eval_openai/driver.py的调用代码。2. 容器化方案 Dockerfile基于 CUDA 11.8 镜像一键复刻环境FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 RUN apt-get update RUN apt-get install -y python3 pip git sudo wget vim screen htop jq net-tools infiniband-diags perftest RUN ln -s /usr/bin/python3 /usr/bin/python COPY requirements.txt /root/requirements.txt RUN pip install -r /root/requirements.txt WORKDIR ~ CMD [/bin/bash]该基础镜像同时安装了 InfiniBand 诊断工具infiniband-diags、perftest说明评测面向多卡/多机 GPU 环境的场景设计。三、用 vLLM 评测本地指令模型评测本地本地权重路径的指令模型从MWPBench目录执行cd MWPBench python -m eval_vllm.driver \ --data_file data/full_test.json \ --model_name_or_path local_path_to_your_model \ --batch_size 60 \ --tensor_parallel_size number_of_gpus \ --prompt_template alpacascripts目录提供了等价的封装脚本 eval_vllm.alpaca.4gpus.sh第一个位置参数传入模型路径默认 4 卡、batch size 60、alpaca 模板MODEL_PATH$1 NUM_GPUS4 BATCH_SIZE60 PROMPT_TEMPLATEalpaca python -m eval_vllm.driver \ --model_name_or_path $MODEL_PATH \ --batch_size $BATCH_SIZE \ --tensor_parallel_size $NUM_GPUS \ --prompt_template $PROMPT_TEMPLATEvLLM 驱动程序的完整参数eval_vllm/driver.py 的parse_argsL194-L205定义了全部命令行参数除 README 示例用到的 4 个外还有若干便于细粒度实验的开关参数默认值说明--model_name_or_pathNone本地模型权重路径--data_filedata/full_test.json评测数据文件可换成data/fresh_gaokao_math_2023.json等--target_tasksNone只评测指定任务可取值见下方任务列表--save_dirresults/model.prompt_template结果输出目录--max_num_examples_per_task2000每个任务最多评测的样本数设-1关闭截断| --batch_size60批推理大小--tensor_parallel_size4张量并行 GPU 数--prompt_templatealpaca可选none/alpaca/alpaca_force_ans/alpaca_cot--verbose关打印每题清洗后的预测/参考答案与判定结果--target_tasks支持的任务名完整列表即数据集中出现的data_topic值为gsm8k, MATH.Algebra, MATH.Counting__Probability, MATH.Geometry, MATH.Intermediate_Algebra, MATH.Number_Theory, MATH.Prealgebra, MATH.Precalculus, college_math.algebra, college_math.precalculus, college_math.calculus, college_math.vector_calculus, college_math.probability, college_math.linear_algebra, college_math.differential_equation, tal, gaokao_bench_math_en, math23k_en, ape210k_en, agieval.gaokao-math-en, agieval.math, agieval.sat-math这 23 个任务名恰好印证了 MWPBench 的数据构成8 个 MATH 子学科 7 个 CollegeMath 子学科 9 个单集任务gsm8k、tal、gaokao_bench_math_en、math23k_en、ape210k_en 与 AGIEval 三件套。采样与生成策略模型初始化与采样参数在 driver.py#L127-L130model LLM(modelargs.model_name_or_path, tensor_parallel_sizeargs.tensor_parallel_size) stop_tokens [Question:, Question, USER:, USER, ASSISTANT:, ASSISTANT, Instruction:, Instruction, Response:, Response, /s] sampling_params SamplingParams(temperature0, top_p1, max_tokens2048, stopstop_tokens)temperature0、top_p1贪心解码保证评测结果确定、可复现max_tokens2048数学推理允许较长的解题链stop_tokens防止模型模仿对话格式继续自问自答或复读 prompt一旦生成上述指令模板关键词即截断。四、通过 OpenAI 接口评测托管模型评测 ChatGPT 等 API 模型时使用另一个驱动 eval_openai/driver.pycd MWPBench python -m eval_openai.driver \ --data_file data/full_test.json \ --openai_model gpt-4-0314 \ --num_threads 5 \ --prompt_template alpaca_force_ans \ --verbose脚本入口在模块加载阶段从环境变量读取凭据driver.py#L14-L16运行前需先设置export OPENAI_API_KEYyour_key # 可选export OPENAI_ORGANIZATIONyour_org对应的封装脚本为 eval_openai.alpaca_force_ans.shOPENAI_MODEL$1 NUM_THREADS10 PROMPT_TEMPLATEalpaca_force_ans python -m eval_openai.driver \ --openai_model $OPENAI_MODEL \ --num_threads $NUM_THREADS \ --prompt_template $PROMPT_TEMPLATE \ --verboseOpenAI 驱动的完整参数eval_openai/driver.py#L223-L235参数默认值说明--openai_modelgpt-3.5-turbo-0613API 模型名README 示例用gpt-4-0314--num_threads10并发请求线程数multiprocessing.Pool--failure_sleep_time10请求失败后的重试等待秒数--retry_limit200单题最大重试次数--data_file/--target_tasks/--save_dir/--max_num_examples_per_task/--prompt_template/--verbose同 vLLM 版语义与 vLLM 版一致请求参数在 driver.py#L145-L151 固定为temperature0、top_p1、n1、max_tokens2048与 vLLM 版保持同一评测协议。单题请求逻辑request_one_exampleL41-L65带完整的重试循环失败后 sleepfailure_sleep_time秒再试直到成功或达到retry_limit耗尽重试后该题以空回答参与判分即记为错误这保证了大批量请求下整体流程不会因个别失败而中断。五、提示词模板统一协议的载体两个驱动程序共享同一组 prompt 模板定义在 eval_vllm/driver.py#L14-L33OpenAI 版在 eval_openai/driver.py#L20-L39 中复制了相同定义共 4 种模板名行为典型用途none直接把题干塞给模型{instruction}无指令格式基线alpaca经典 Alpaca 指令格式### Instruction: 题干 ### Response:本地模型评测默认模板alpaca_force_ans在 alpaca 基础上追加提示Try to conclude your response with The answer is ....API 模型评测默认模板显著提高答案可提取率alpaca_cot在 Response 后预置Lets think step by step.引导思维链考察 CoT 提示增益模板选择直接影响判分is_correct的答案提取策略依赖boxed 框 / answer is 句式等线索alpaca_force_ans显式要求模型以 The answer is ... 收尾正是为配合这一提取链路设计的。六、答案提取与模糊匹配判分util.pyMWPBench 判分的核心在 eval_vllm/util.py两个驱动程序都直接调用其中的util.is_correct(completion, answer, verbose)README 致谢部分说明该模糊匹配代码参考了 crfm-helm 与 WizardMath 两个开源项目。整个判定分两步从生成文本中提取候选答案→与参考答案做规范化等价判断。6.1 答案提取四级优先级is_correctutil.py#L282-L336先把生成文本与参考答案整体转小写然后按以下优先级依次尝试提取\\boxed{...}/\\fbox{...}框体unbox_and_extract用大括号配对扫描找出所有 boxed 内容取最后一个作为候选答案对应数学题最终答案惯例最后一个数字若参考答案本身是数字则用正则[\-]?\d*[\.,/]?\d在全文中抓取所有数字取最后一个——覆盖最终答案是 18这类无框体输出answer is / solution is 句式截取该短语之后的内容并截断到下一个句点换行处、去掉尾随句号兜底 is 句式取全文最后一个is之后的片段同样做句末清洗四级均未命中则直接判错并记录failed extracting answer from completion。6.2 规范化与等价判定提取出的候选答案与参考答案都经过strip_stringutil.py#L153-L223做 LaTeX 清洗处理了大量数学表达变体((3)/(4))→\\frac{3}{4}3/4纯数字→\\frac{3}{4}fix_a_slash_b\\frac12→\\frac{1}{2}fix_fracs\\sqrt3→\\sqrt{3}fix_sqrttfrac/dfrac统一为frac删除千分位逗号、换行、空格、\\left/\\right、角度符号^{\\circ}、美元符、百分号并剔除右侧单位如\\text{ m}特殊等价0.5直接改写为\\frac{1}{2}使得小数与分数形式可互相命中。随后is_equivutil.py#L249-L280按以下规则判定等价两边都是数字 → 转float后做数值相等比较0.5 1/2即判对参考答案是单一行内公式$...$→ 判参考串是否包含于预测串预测答案非数字且长度 ≥ 3 → 判预测串是否包含于参考串容忍多余前缀/单位写法参考答案非数字且长度 ≥ 3 → 判参考串是否包含于预测串否则做字符串全等兜底。文件末尾L338-L341还内置了一个可独立运行的自测用例给一段含The answer is $a 6 - \\sqrt{6}$的完整解题文本与参考$2$直接python -m eval_vllm.util即可观察提取与判定过程适合调试判分行为。七、指标计算与结果文件评测主循环按data_topic分组逐任务评测每个任务的样本经 prompt 模板格式化后批量生成、逐题判分。driver.py#L140-L192 的指标汇总逻辑为三层结构任务级每个任务如MATH.Geometry、gsm8k单独计算 accuracy层级加权所有MATH.*子任务按样本量加权平均得到顶层MATH总分所有college_math.*子任务同理得到college_math总分全局汇总在顶层任务集合gsm8k、tal、gaokao_bench_math_en、math23k_en、ape210k_en、agieval.* 三件套以及汇总后的 MATH 与 college_math上计算micro_average_accuracy按各任务样本数加权的总体准确率macro_average_accuracy各顶层任务准确率的简单算术平均与数据量无关。运行结束后save_dir默认results/模型名.prompt模板下会生成三类文件便于人工复核与二次分析task.prediction.jsonJSON Lines 格式每题包含question、answer、completion原始生成、clean_reference_ans、clean_prediction_ans清洗后答案、judge0/1 判定——Fresh-GaokaoMath-2023 建议人工检查提取答案就是指核对此文件task.metric.json单任务的task_name/test_size/accuracyall.metric.json全量汇总指标含 MATH、college_math 的subset_metric明细与 micro/macro 平均最终以json.dumps(..., indent4)打印到控制台。八、评测 Fresh-GaokaoMath-2023 子集README 允许更换data_file评测其他测试集仓库为 30 道 2023 新高考题提供了两组现成脚本vLLM 本地模型eval_vllm.freshgaokao.alpaca.4gpus.sh位置参数依次为模型路径与结果目录python -m eval_vllm.driver \ --data_file data/fresh_gaokao_math_2023.json \ --save_dir $SAVE_DIR \ --model_name_or_path $MODEL_PATH \ --batch_size 60 \ --tensor_parallel_size 4 \ --prompt_template alpacaOpenAI API 模型eval_openai.freshgaokao.alpaca_force_ans.shSAVE_DIRresults/fresh_gaokao_math_2023.$OPENAI_MODEL python -m eval_openai.driver \ --data_file data/fresh_gaokao_math_2023.json \ --save_dir $SAVE_DIR \ --openai_model $OPENAI_MODEL \ --num_threads 10 \ --prompt_template alpaca_force_ans \ --verbose该子集的题目为英文翻译后的 2023 年高考数学如集合运算M ∩ N、复数共轭、向量模平方差、二项式展开系数等可直接在 data/fresh_gaokao_math_2023.json 中查看原文答案形式既有纯数字-1、80也有 LaTeX 集合/根式表达式如\\( \\{x | -2 \\leq x 1\\} \\)正好覆盖了模糊判分中数值等价与字符串包含两条判定路径是检验评测链路是否工作正常的天然测试集。九、引用与使用注意MWPBench 对应论文为《MathScale: Scaling Instruction Tuning for Mathematical Reasoning》Tang, Zhang, Wan, Wei, arXiv:2403.02884引用信息如下article{tang2024mathscale, title{MathScale: Scaling Instruction Tuning for Mathematical Reasoning}, author{Tang, Zhengyang and Zhang, Xingxing and Wan, Benyou and Wei, Furu}, journal{arXiv preprint arXiv:2403.02884}, year{2024} }使用注意所有数据按原始许可证逐条发布仅限研究用途评测协议贪心解码、max_tokens2048、alpaca 系模板、模糊匹配判分在两个驱动程序中完全一致跨模型比较时应保持同一prompt_template与数据文件才符合统一协议的初衷复现旧版结果时需沿用vllm0.3.2、openai0.28.1的依赖版本二者均为旧版 API 风格--max_num_examples_per_task默认 2000即每个任务最多评测 2000 题做全量评测时请显式传-1。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考