☰
快速认识MBPP:LLM代码生成必知基准数据集MBPP完全入门
2026/10/30 10:41:35 网站建设 项目流程
  • 数据集
  • 模型评测

【免费下载链接】mbpp

项目地址:https://ai.gitcode.com/hf_mirrors/google-research-datasets/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 格式存放:

版本traintestvalidationprompt合计特点
full(默认)3745009010974完整众包原始版本
sanitized120257437427人工二次校订的精简版

两个版本的差异值得重点理解:

  1. full 版本:任务描述(text字段)保留众包原始表述,部分描述可能不够严谨或存在歧义;
  2. sanitized 版本:抽取子集后由人工进行第二轮标注,重点改进了任务描述(prompt字段),并清理了测试相关字段,适合作为更公平的评测集;
  3. 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)
textfull编程任务的文字描述
promptsanitized经人工校订的任务描述
code两者该题的参考 Python 解答
test_list两者3 条assert断言,用于自动验证
challenge_test_listfull附加的高难度测试,进一步检验解答健壮性
test_setup_codefull运行测试所需的额外代码
test_importssanitized运行测试所需的 import 语句
source_filesanitized该样本在原始标注 notebook 中的来源

💡使用建议:正式评测建议以test_list为主;如果想区分"碰巧通过"和"真正健壮"的模型输出,可以再加上challenge_test_list做二次筛选。

✅ 如何用 MBPP 评测你的代码生成模型

一个典型的 MBPP 评测流程分为 4 步:

  1. 取题:从 test 划分中取出text(或prompt)作为输入;
  2. 生成:让模型输出 Python 函数(可结合 prompt 划分做 few-shot 提示);
  3. 验证:把生成的代码与test_list中的断言一起执行,全过即算通过;
  4. 汇总:统计通过率(业界常用 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

项目地址:https://ai.gitcode.com/hf_mirrors/google-research-datasets/mbpp
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询