- 数据集
- 模型评测
【免费下载链接】mbpp
MBPP(Mostly Basic Python Problems,大多数基础 Python 问题)是 Google Research 发布的LLM 代码生成基准数据集,包含约 1000 道面向入门级开发者的 Python 编程题。每道题由「任务描述 + 参考代码 + 3 个自动化测试用例」组成,是目前评测大语言模型(LLM)写代码能力最常用的基准之一。本文将带你快速认识 MBPP 数据集:它的版本结构、数据字段、加载方法和常见使用注意事项。
🧩 MBPP 是什么?一个代码生成评测基准
MBPP 最早出自 Google Research 团队 2021 年的论文Program Synthesis with Large Language Models(Austin et al., 2021),用于回答一个关键问题:
大语言模型到底能不能写出"能跑通"的 Python 代码?
它的设计思路很清晰:
- 题目简单:由 Google 内部众包创建,覆盖编程基础语法、标准库使用等,入门级程序员即可完成;
- 自动可验证:每道题自带
assert断言测试,代码生成后直接运行断言即可判定对错,无需人工评判; - 规模适中:约 1000 道题,评测一轮成本低,结果却具有广泛可比性,因此被大量研究和开源模型引用。
可以说,MBPP 是 LLM 代码生成领域"事实上的标准考场"。数据集完整说明见 README.md。
📊 MBPP 数据集结构解析:full 与 sanitized 两大版本
仓库提供两个配置版本(config),各含 4 个数据划分(split),数据以 Parquet 格式存放:
| 版本 | train | test | validation | prompt | 合计 | 特点 |
|---|---|---|---|---|---|---|
| full(默认) | 374 | 500 | 90 | 10 | 974 | 完整众包原始版本 |
| sanitized | 120 | 257 | 43 | 7 | 427 | 人工二次校订的精简版 |
两个版本的差异值得重点理解:
- full 版本:任务描述(
text字段)保留众包原始表述,部分描述可能不够严谨或存在歧义; - sanitized 版本:抽取子集后由人工进行第二轮标注,重点改进了任务描述(
prompt字段),并清理了测试相关字段,适合作为更公平的评测集; - prompt 划分:专门用于 few-shot(少样本提示)示例,不用于训练,这一点在复现论文时经常被忽略。
对应数据文件如下,可按 split 直接查看:
- full 版本:full/train-00000-of-00001.parquet、full/test-00000-of-00001.parquet、full/validation-00000-of-00001.parquet、full/prompt-00000-of-00001.parquet
- sanitized 版本:sanitized/train-00000-of-00001.parquet、sanitized/test-00000-of-00001.parquet、sanitized/validation-00000-of-00001.parquet、sanitized/prompt-00000-of-00001.parquet
🚀 3 步快速上手:加载 MBPP 数据集
使用 Hugging Facedatasets库加载 MBPP 只需几行代码:
from datasets import load_dataset # 步骤1:加载默认 full 版本 dataset_full = load_dataset("mbpp") # 步骤2:如需校订版,指定 sanitized 配置 dataset_sanitized = load_dataset("mbpp", "sanitized") # 步骤3:查看一条样本 print(dataset_sanitized["prompt"][0]["prompt"])一条 sanitized 样本长这样(节选自官方示例):
{ 'task_id': 2, 'prompt': 'Write a function to find the shared elements from the given two lists.', 'code': 'def similar_elements(test_tup1, test_tup2):\n res = tuple(set(test_tup1) & set(test_tup2))\n return (res) ', 'test_list': [ 'assert set(similar_elements((3, 4, 5, 6),(5, 7, 4, 10))) == set((4, 5))', '...' ] }如果你更习惯克隆仓库离线使用 Parquet 文件:
git clone https://gitcode.com/hf_mirrors/google-research-datasets/mbpp🧾 MBPP 数据字段详解:读懂每条样本
两个版本的字段定义如下:
| 字段 | 所属版本 | 含义 |
|---|---|---|
task_id | 两者 | 题目唯一编号(int32) |
text | full | 编程任务的文字描述 |
prompt | sanitized | 经人工校订的任务描述 |
code | 两者 | 该题的参考 Python 解答 |
test_list | 两者 | 3 条assert断言,用于自动验证 |
challenge_test_list | full | 附加的高难度测试,进一步检验解答健壮性 |
test_setup_code | full | 运行测试所需的额外代码 |
test_imports | sanitized | 运行测试所需的 import 语句 |
source_file | sanitized | 该样本在原始标注 notebook 中的来源 |
💡使用建议:正式评测建议以test_list为主;如果想区分"碰巧通过"和"真正健壮"的模型输出,可以再加上challenge_test_list做二次筛选。
✅ 如何用 MBPP 评测你的代码生成模型
一个典型的 MBPP 评测流程分为 4 步:
- 取题:从 test 划分中取出
text(或prompt)作为输入; - 生成:让模型输出 Python 函数(可结合 prompt 划分做 few-shot 提示);
- 验证:把生成的代码与
test_list中的断言一起执行,全过即算通过; - 汇总:统计通过率(业界常用 pass@k 指标),跨模型横向对比。
⚠️两条重要安全与公平性提示:
- 务必在沙箱/受限环境中执行生成的代码——模型输出可能包含危险操作,切勿在生产环境直接运行;
- full 版本部分题目描述可能信息不足或表述模糊,若发现"代码写对了但描述无法理解",说明该题属于这类情况,此时可改用 sanitized 版本以获得更干净的评测信号。
📌 常见问题(FAQ)
Q1:MBPP 适合训练代码模型吗?MBPP 的定位是评测基准。train 划分(full 版 374 条)体量较小,通常用于 few-shot 示例或辅助研究,而非作为主要训练语料。
Q2:full 和 sanitized 我该选哪个?做论文复现或追求与原文可比性,用默认full版;追求题目描述清晰、评测更公平,用sanitized版。
Q3:MBPP 可以免费商用吗?可以。数据集采用CC-BY-4.0许可,标注方式为众包 + 专家校订,英文单一语言,总数据量不足 1000 条(full 版 974 条),属于轻量级基准,下载和存储成本都很低。
🎯 写在最后
MBPP 以"小体量、可自动验证、描述清晰"三个特点,成为LLM 代码生成评测事实标准:974 道入门级 Python 题、每题 3 个断言测试,让任何模型都能在几分钟内完成一轮公平评测。无论你是想验证自家模型的代码能力,还是复现经典论文,从load_dataset("mbpp")开始,就是最短路径。
📚 参考:Austin, J. et al.Program Synthesis with Large Language Models. arXiv:2108.07732, 2021. 数据集完整文档见 README.md。
- 数据集
- 模型评测
【免费下载链接】mbpp
相关推荐
AIResource/aicode代码生成评估:HumanEval与MBPP基准测试全指南
AIResource/aicode代码生成评估:HumanEval与MBPP基准测试全指南 你是否还在为选择合适的代码生成模型而烦恼?面对市场上层出不穷的AI编
文档知识库人工智能idiomatic.js代码生成器:基于规范模板快速生成标准代码
idiomatic.js代码生成器:基于规范模板快速生成标准代码 想要写出风格一致、可读性强的JavaScript代码吗?idiomatic.js项目为你提供了
SQLite数据库开发入门:使用sqlc工具快速生成Go代码
SQLite数据库开发入门:使用sqlc工具快速生成Go代码 前言 在Go语言开发中,与SQLite数据库交互是一个常见需求。传统方式需要手动编写大量重复的SQ
开发工具代码生成数据库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考