GSM8K基准测试
Grade School Math 8K Benchmark
概述
GSM8K是OpenAI于2021年发布的数学推理基准数据集,包含8,500道小学水平的数学应用题。 旨在评估语言模型的数学推理能力,特别是多步骤问题求解能力。
核心特点:小学数学题、多步骤推理、需要计算能力、链式思维评估。
数据集结构
| 子集 | 题目数量 | 用途 |
|---|---|---|
| 训练集 | 7,473 | 训练/微调 |
| 测试集 | 1,319 | 评估 |
题目示例
问题: A robe takes 2 bolts of blue fiber and half that much white fiber. How many bolts in total does it take to make 2 robes? 解答: Blue fiber per robe: 2 bolts White fiber per robe: 2 / 2 = 1 bolt Total fiber per robe: 2 + 1 = 3 bolts Total fiber for 2 robes: 3 × 2 = 6 bolts 答案:6
每道题包含问题描述和逐步解答过程,最终答案是一个整数。
评估方式
直接回答
模型直接输出答案,计算准确率:
Accuracy = 正确答案数 / 总题数
链式思维(Chain-of-Thought)
鼓励模型输出推理步骤,提高解题正确率:
- 提供推理步骤的few-shot示例
- 引导模型逐步思考
- 显著提高复杂问题的正确率
模型表现
| 模型 | 准确率 | 发布时间 |
|---|---|---|
| Claude 3.5 Sonnet | 96.4% | 2024.06 |
| GPT-4o | 95.3% | 2024.05 |
| Gemini 1.5 Pro | 91.7% | 2024.02 |
| Claude 3 Opus | 95.0% | 2024.03 |
| GPT-4 | 92.0% | 2023.03 |
| Llama 3 70B | 93.0% | 2024.04 |
使用方法
from datasets import load_dataset
# 加载数据集
dataset = load_dataset("gsm8k", "main")
# 评估示例
for example in dataset["test"]:
question = example["question"]
answer = example["answer"]
# 提取最终答案(#### 后的数字)
final_answer = answer.split("#### ")[1]
# 使用模型生成答案
prediction = model.generate(question)
# 比较
if extract_number(prediction) == float(final_answer):
correct += 1难度分析
- 问题类型:算术运算、单位换算、比例问题等
- 平均步骤:约2-8步推理
- 数值范围:整数和小数运算
- 语言特点:自然语言描述,需要理解题意
相关基准
MATH
竞赛级数学题目,难度更高,涵盖代数、几何、概率等。
SVAMP
简单数学文字题,GSM8K的补充数据集。
ASDiv
多样化的数学问题数据集。
GSM8K-Hard
GSM8K的困难子集。
局限性
- 仅覆盖小学数学难度
- 答案都是整数
- 可能存在数据污染
- 不测试更高级的数学概念
参考资料
- Training Verifiers to Solve Math Word Problems (Cobbe et al., 2021)
- Chain-of-Thought Prompting Elicits Reasoning (Wei et al., 2022)
- GSM8K Dataset on Hugging Face
----