MBPP的full与sanitized怎么选:两大代码生成基准版本深度对比
  • 数据集
  • 模型评测

【免费下载链接】mbpp

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

MBPP(Mostly Basic Python Problems)是评估 Python 代码生成能力的经典基准数据集,内置full与sanitized两个版本。本文带你快速看懂两者的差异,并给出明确的选型建议,帮你一步选对 MBPP 代码生成基准版本 🎯

一、MBPP 是什么?为什么它很受欢迎

MBPP 由 Google Research 于 2021 年随论文Program Synthesis with Large Language Models发布,包含约1000 道面向初学者的 Python 编程题,涵盖编程基础与标准库常用功能。每道题都包含三要素:

要素说明
任务描述自然语言描述要实现的函数行为
参考代码一个可用的 Python 解决方案
自动化测试3 条assert测试用例,可直接验证生成代码

数据集采用CC-BY-4.0许可证,体积小(下载不到 250KB)、门槛低,是入门代码生成评测的首选基准之一。完整的 Dataset Card 见 README.md。

二、full 与 sanitized 一眼看懂区别

两个版本各自都有train/test/validation/prompt四个 split,但样本量和字段明显不同(数据来自 README.md 的 dataset_info):

对比维度full(完整版)sanitized(精校版)
总样本数974427
train374120
test500257
validation9043
prompt(few-shot 用)107
是否默认配置✅ 默认(default: true)需显式指定
任务描述字段text(原始众包描述)prompt(二轮人工重写)
测试字段test_setup_code+challenge_test_listtest_imports(无挑战测试)
额外字段—source_file(可溯源)

一句话概括:sanitized 是 full 的子集——官方先完成了 full,再从中挑出一部分题目进行第二轮人工校验,重写了任务描述,目的是解决"部分题目描述不够清晰、不足以无歧义地解题"的问题(见 README.md 的 Known Limitations)。

三、字段细节对比:两个版本长什么样

full 版本的字段(见 README.md):

  • task_id/text/code/test_list:题目编号、任务描述、参考解、测试列表
  • test_setup_code:运行测试前需要的前置代码(如导入)
  • challenge_test_list:更棘手的附加测试,用于进一步探测解的健壮性

sanitized 版本的字段(见 README.md):

  • source_file/task_id/prompt/code/test_imports/test_list
  • 没有challenge_test_list,测试导入统一放在test_imports中

举个例子,full 中 task_id=1 的题目是"求给定代价矩阵中从 (0,0) 到 (m,n) 的最小代价路径",而 sanitized 中 task_id=2 的题目描述为"找出两个列表的公共元素"——后者这类描述更清晰、无歧义(示例数据见 README.md)。

四、获取与加载:两种上手方式

方式一:通过 Hugging Face Datasets 加载(推荐)

  • 加载 full:load_dataset("mbpp")—— full 是默认配置,不传配置名即可
  • 加载 sanitized:load_dataset("mbpp", "sanitized")

方式二:克隆本地仓库

git clone https://gitcode.com/hf_mirrors/google-research-datasets/mbpp

仓库内每个版本各 4 个 split 文件,例如 full/train-00000-of-00001.parquet、full/test-00000-of-00001.parquet、sanitized/test-00000-of-00001.parquet 与 sanitized/validation-00000-of-00001.parquet,按split-00000-of-00001.parquet的规则命名。

⚠️ 安全提示:官方明确建议在沙箱/安全环境中执行被测模型生成的 Python 代码,因为生成代码可能包含有害操作(见 README.md)。

五、选型指南:full 还是 sanitized?

你的场景建议选择理由
复现原论文 / 对标经典结果full原论文即基于 full,结果可直接对比
希望评测指标更有说服力sanitized描述经过人工重写,题目无歧义,分数更可信
样本越多越好full(974 条)是 sanitized 的 2 倍多
需要附加挑战测试full仅 full 带challenge_test_list
做 few-shot 提示实验看需求两者都有promptsplit(10 / 7 条)
需要数据溯源sanitized独有的source_file字段可定位来源

经验法则:日常快速实验、追求评测严谨性 → 选sanitized;做研究复现、样本量优先 → 选full。

六、常见问题(FAQ)

Q1:load_dataset("mbpp")默认加载的是哪个版本?A:full。它是数据集的默认配置(default: true)。

Q2:为什么 sanitized 样本只有 427 条?A:sanitized 不是重新出题,而是对 full 中一个子集做了第二轮人工校验与描述改写,因此只保留了能通过严格校验的题目。

Q3:两个版本能混用吗?A:不建议在同一次评测中混用。sanitized 是 full 的子集,混合会引入重复样本,影响结果可比性。

总结

  • full:974 题、默认配置、含挑战测试,适合复现论文与大规模评测;
  • sanitized:427 题、描述精校、可溯源,适合追求严谨可靠的日常评测;
  • 记住一句话:追求严谨选 sanitized,追求规模与复现选 full✅
  • 数据集
  • 模型评测

【免费下载链接】mbpp

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

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