MMLU-Pro-NoMath
MMLU-Pro-NoMath 和 MMLU-Pro-NoMath-Sml 是 MMLU-Pro 的子集,其中移除了需要多步计算的问题(占原始测试集的 43%)。我们使用 claude-3.5-sonnet 作为分类器。为了加快 logprobs 评估速度并降低 OOM 的可能性,问题被限制在长度上限内。速度很快!使用 Eleuther harness 评估 gemma-2-9b,NoMath 花了 20 分钟,NoMath-Sml 花了 7 分钟。
目录
- 为什么这样做?
- NoMath 子集详情
- logprobs 评估意味着什么?
- 数学与 CoT 有何问题?
- 使用 Eleuther LM-Eval 运行
- 通过 VLLM 使用 TIGER-AI-Lab/MMLU-Pro 运行
- 通过 llama.cpp 使用 TIGER-AI-Lab/MMLU-Pro 运行
- 使用 chigkim/Ollama-MMLU-Pro 运行
- 参考文献
🤔 为什么这样做?
简而言之,因为我们想要一个快速运行的 MMLU-Pro 子集,它对 logprobs 评估友好,并且主要评估知识和推理能力。人们可以直接运行 MMLU-Pro,排除那些数学成分很重的类别,但是 A. 除了历史之外,所有类别都有一定量的数学,B. 那些数学成分重的类别中也有很多我们想要评估的非数学问题!
MMLU-Pro 的开发旨在解决老化的(以 LLM 时间尺度衡量)MMLU 基准测试的一些缺点。它增加了 10 个多项选择选项,而非 MMLU 的 4 个,这将随机基线从 0.25 降低到 0.1,从而增加了有效评分范围。它还提高了难度,增加了急需的上限,以使测试具有前瞻性。
在 MMLU-Pro 的 12032 个题目中,有 5122 个(43%)是需要多步计算才能解决的应用数学问题。这个更大的多步数学部分是 MMLU-Pro 比原始 MMLU 难度增加的主要来源。
原始 MMLU 有用且被广泛使用的原因之一是它主要测试多领域知识和推理能力。它包含少量的数学部分,但其设计目的是无需思维链(CoT)生成式评估即可回答。我们创建了 MMLU-Pro 的一个子集,以实现两全其美:更高的上限、更侧重知识和推理,以及对对数概率评估友好。
🔍 NoMath 子集详情
我们通过向 Claude-3.5-sonnet 呈现每个测试项,并询问它该问题是否需要多步计算来解决,从而识别出包含数学部分的问题。选项有“Y”、“N”和“S”,其中“S”表示通常无需多步即可在头脑中解决的简单数学内容。在我们的子集中,我们允许“Y”和“S”分类,因为我们的目标是尽可能多地包含应用和知识推理问题,同时过滤掉依赖 CoT 和复杂计算的问题。
我们还创建了一个小版本的子集,其中每个项目的类别分布是平衡的。
另一个优化是,我们限制了问题的长度。大约 1.5% 的问题长度在 1400 - 4700 字符之间。通过移除此范围内的异常值,我们将问题长度保持在更一致的范围内,从而使并行 logprobs 评估更快,并降低 OOM 的可能性。
创建 MMLU-Pro 的一个既定目的是增加原始 MMLU 的上限,原始 MMLU 开始在能力范围的顶部饱和。与完整的 MMLU-Pro 集相比,模型在这些 NoMath 子集上的得分通常更高,但我们仍然保留了 MMLU-Pro 相对于 MMLU 的大部分难度优势。当前顶级的开源模型 (Qwen-2-72B) 在原始 MMLU 上得分为 82.3,在 MMLU-Pro 上得分为 64.4,在 MMLU-Pro-NoMath 上得分为 68.1。一个关键的区别在于,在 NoMath 子集中,**所有**的上限都是知识/推理,不受数学能力限制。
🧮 logprobs 评估意味着什么?
Logprobs 评估是指一种评估语言模型多项选择测试的方法。它不是让模型通过生成文本推理来给出答案,而是利用输出标记的概率来确定模型的答案。其工作原理如下:
对于每个答案选项,模型计算在给定问题和上下文的情况下生成该选项的对数概率。对数概率通常通过对答案选项中每个标记的对数概率求和来计算。选择对数概率最高的答案选项作为模型的预测。然后将此预测与正确答案进行比较,以确定模型是否答对了问题。
Logprobs 评估的主要优势:
- 速度:它通常比生成式方法快 5-10 倍,因为它不需要模型生成完整的文本响应。
- 一致性:它对实验设置的变化(例如提示或采样方法的差异)不那么敏感。
- 简单性:它不依赖于能够解析生成的答案,这有时可能含糊不清或格式不正确。
然而,在某些测试(如 MMLU-Pro!)中,logprobs 评估可能导致分数低于使用 CoT 提示的生成式方法,因为它不允许模型“展示其工作”或逐步推导问题。
❓ 数学与 CoT 有何问题?
- 数学是知识/推理评估的门槛。如果模型无法准确解决数学运算,即使它理解了知识部分,也会答错问题。
- 它混淆了结果。如果我们将数学能力、知识和推理能力一起测试——某些类别包含大量的每种类型——就很难解释模型为何得分如此。它得分低是因为数学能力弱、知识储备少,还是两者兼而有之?我们已经有专门评估数学能力的基准测试,因此 MMLU 无需再承担此任务。
- MMLU-Pro 中的数学问题是为生成式 CoT 评估而设计的,这使得它对 logprobs 评估的可访问性降低。
- logprobs 评估的结果通常明显差于生成式 CoT 评估,因此结果的可比性不高。
我们可以运行 MMLU-Pro,排除那些数学含量高的类别,但是大多数数学含量高的类别都有重要的非数学(知识或推理)成分,如果我们排除它们,就会失去这些成分。相反,我们将每个项目分类为需要多步数学运算或不需要,并移除数学问题。这样,我们就能保留每个类别的所有基于知识和推理的问题。
🏃 使用 Eleuther LM-Eval 运行
(5-shot logprobs 评估——与 Open LLM 排行榜配置相同)
git clone https://github.com/sam-paech/lm-evaluation-harness.git -b mmlu-pro-irt
cd lm-evaluation-harness
pip install -e .
pip install git+https://github.com/huggingface/transformers.git
huggingface-cli login --token <mytoken>
export HF_HUB_ENABLE_HF_TRANSFER=1
lm_eval --model hf \
--model_args pretrained=google/gemma-2-9b-it,device_map=auto,max_length=4096,dtype=bfloat16 \
--tasks mmlu-pro-nomath,mmlu-pro-nomath-sml --device auto --batch_size auto
MMLU-Pro-NoMath -- gemma-2-9b-it
- 运行时长:0:20:27
- 准确率:0.5343
- acc_stderr:0.0060
MMLU-Pro-NoMath-Sml -- gemma-2-9b-it
- 运行时长:0:06:50
- 准确率:0.5301
- acc_stderr:0.0097
🚀 通过 VLLM 使用 TIGER-AI-Lab/MMLU-Pro 运行
(5-shot 生成式评估与 CoT)
git clone https://github.com/EQ-Bench/MMLU-Pro.git
cd MMLU-Pro
pip install -r requirements.txt
pip install git+https://github.com/huggingface/transformers.git
pip install git+https://github.com/vllm-project/vllm.git
# for gemma-2 compatibility:
# export VLLM_ATTENTION_BACKEND=FLASHINFER
# Note: You might also have to add ", enforce_eager=True" to the `llm = LLM(...)` line in evaluate_from_local.py if you are short on vram.
python evaluate_from_local.py --save_dir eval_results --model "google/gemma-2-9b-it" --gpu_util 0.94 --dataset sam-paech/mmlu-pro-nomath-sml
- 模型:google/gemma-2-9b-it
- 运行时长:0:35:15
- 准确率:0.5908
🦙 通过 llama.cpp 使用 TIGER-AI-Lab/MMLU-Pro 运行
(5-shot 生成式评估与 CoT)
screen
cd ~
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make LLAMA_CUDA=1
llama.cpp/llama-server -m gemma-2-9b-it-Q8_0.gguf --ctx-size 4096 --n-gpu-layers 200 --chat-template gemma2
[ctrl-a then d] to detach screen session
cd ~
git clone https://github.com/EQ-Bench/MMLU-Pro.git
cd MMLU-Pro
pip install -r requirements.txt
python evaluate_from_llama.cpp.py --dataset sam-paech/mmlu-pro-nomath-sml
- 模型:bartowski/gemma-2-9b-it-GGUF
- 运行时长:1:06:43
- 准确率:0.5646
🐳 使用 chigkim/Ollama-MMLU-Pro 运行
(5-shot 生成式评估与 CoT)
git clone https://github.com/EQ-Bench/Ollama-MMLU-Pro.git
[see the notebook for example]
- 模型:google/gemma-2-9b-it
- 运行时
- 准确率

📚 参考文献
感谢 MMLU-Pro 测试集提供了该子集的原始问题来源。
https://github.com/TIGER-AI-Lab/MMLU-Pro
@misc{wang2024mmlupro,
title={MMLU-Pro: A More Robust and Challenging Multi-Task Language Understanding Benchmark},
author={Yubo Wang and Xueguang Ma and Ge Zhang and Yuansheng Ni and Abhranil Chandra and Shiguang Guo and Weiming Ren and Aaran Arulraj and Xuan He and Ziyan Jiang and Tianle Li and Max Ku and Kai Wang and Alex Zhuang and Rongqi Fan and Xiang Yue and Wenhu Chen},
year={2024},
eprint={2406.01574},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
以及 MMLU-Pro 大量借鉴的原始 MMLU:
https://github.com/hendrycks/test
@article{hendryckstest2021,
title={Measuring Massive Multitask Language Understanding},
author={Dan Hendrycks and Collin Burns and Steven Basart and Andy Zou and Mantas Mazeika and Dawn Song and Jacob Steinhardt},
journal={Proceedings of the International Conference on Learning Representations (ICLR)},
year={2021}
}
@article{hendrycks2021ethics,
title={Aligning AI With Shared Human Values},
author={Dan Hendrycks and Collin Burns and Steven Basart and Andrew Critch and Jerry Li and Dawn Song and Jacob Steinhardt},
journal={Proceedings of the International Conference on Learning Representations (ICLR)},
year={2021}
}