Benchmark · coding
DS-1000
DS-1000 是一个包含 1000 个真实数据科学编程问题的基准,问题采集自 Stack Overflow,涵盖七个 Python 库(NumPy、Pandas、SciPy、scikit-learn、PyTorch、TensorFlow、Matplotlib);它衡量模型能否生成正确解决每个问题的代码,以 pass@1 执行准确率报告。
了解更多
- 示例
- 一个代表性题目是关于如何用某个特定库完成某项操作的自然语言问题——例如筛选或重塑 Pandas DataFrame、对 NumPy 数组做运算,或绘制 Matplotlib 图——并配有一段模型必须补全的起始代码上下文(提供 Completion 与 Insertion 两种格式)。
- 评分方式
- 指标是 pass@1 执行准确率。每个生成的解会在隐藏的测试用例上运行,只有当它通过所有测试并且满足 surface-form 约束(用 regex 检查是否使用了所需 API、是否未用被禁止的捷径)时才算解决。得分是 1000 个问题中被解决的比例。
- 验证方式
- 接受完全自动:补全后的程序在沙箱中执行,其输出针对测试用例进行功能正确性检查,并结合 surface-form 约束。这种多准则检查旨在将误接受率和误拒绝率保持在较低水平,且问题相对其 Stack Overflow 原题做了扰动以减少记忆效应。
- 为何重要
- 它反映的是真实、日常的数据科学编程需求,而非合成谜题,覆盖七个广泛使用的库,其可靠的基于执行的评分使其成为在实际 DS 工作上评估代码生成模型的通用标尺。
示例解析
任务
问题:给定一个带数值列 'value' 的 Pandas DataFrame df,生成一个只包含 'value' 大于该列均值的行的 DataFrame。
<code>
import pandas as pd
df = pd.DataFrame({'value': [1, 5, 3, 9, 2]})
</code>
BEGIN SOLUTION —— 将答案赋给
result。(示意用途,非官方原题原文。)解答
result = df[df['value'] > df['value'].mean()]
解析
布尔掩码保留 'value' 超过 df['value'].mean() 的行;测评框架运行补全后的脚本,并将 result 与期望的 DataFrame 比较(例如使用 pandas 的测试工具),而 surface-form 约束确认这是真正的 Pandas 解法。按执行结果判定通过/不通过。
该 benchmark 暂无已验证的得分。