DS-1000 论文的官方数据和代码发布:数据科学代码生成的自然可靠基准。您可以参考我们的项目页面以获取更多示例和基线。
新闻 (04/2024):DS-1000 现已简化并托管在 Huggingface 上。您也可以参考我们论文中描述的原始格式。
这是 DS-1000 数据集的重新格式化,以在不更改内容的情况下提高其可用性。该数据集托管在 Huggingface 和data/ds1000.jsonl.gz
中
有两种加载数据集的选项
# Option 1 load from huggingface
from datasets import load_dataset
ds1000 = list ( load_dataset ( "xlangai/DS-1000" )[ "test" ])
# Option 2 load from raw jsonl.gz
import gzip
ds1000 = [ json . loads ( l ) for l in gzip . open ( "data/ds1000.jsonl.gz" , "rt" ). readlines ()]
提供的test_ds1000.py
脚本在data/codex002-answers.jsonl
上评估 DS-1000
conda env create -f environment.yml
conda activate ds1000-3.10
# the test code also needs: pip install datasets tqdm
python test_ds1000.py
预期输出:
count mean
lib
Matplotlib 155 0.548
Numpy 220 0.432
Pandas 291 0.265
Pytorch 68 0.397
Scipy 106 0.349
Sklearn 115 0.435
Tensorflow 45 0.378
DS-1000 overall
mean 0.388
另请参阅结果文件夹中新模型的结果。
测试脚本执行生成的代码,因此强烈鼓励您自己的沙箱,但参考代码和提供的解决方案似乎可以安全运行。您的沙箱必须允许一些文件操作(例如在 matplotlib 中保存绘图)和操作系统操作(例如tensorflow、sklearn)
字段prompt
包含上下文中的问题,以及一条简单的指令,例如result = ... # put solution this variable
。这是模型一致性的标准提示。
字段code_context
定义了test_execution(solution: str)
和test_string(solution: str)
它将生成的代码作为参数并评估其正确性。 test_execution
工作原理是将提示中包含的示例输入替换为generate_test_case(test_case_id)
生成的输入,然后检查输出(由参考解决方案生成,也存在于code_context
中)。如果解决方案通过test_execution
和test_string
(如果存在),则通过。 code_context
中的执行上下文 ( exec_context
) 与prompt
提供的执行上下文相同。
code_context
中。code_context
定义了test_execution(solution: str)
和test_string(solution: str)
它将代码作为参数并评估其正确性environment.yml
)parser
模块并使用tokenize
简化了字符串测试metadata
中。要将 ds1000 转换为可编辑文件,请使用提供的edit_ds1000.py
脚本通过以下命令拆分问题列表:
# specify --edit_dir according to your needs
python edit_ds1000.py --to_edit --edit_dir data/ds1000_edit
分为以下结构:
data/ds1000_edit
├── 0 # problem id
├── prompt.txt
├── reference_code.txt
├── metadata.json
└── code_context.py
├── 1
├── ...
编辑后,使用以下命令将数据集重建为data/ds1000.jsonl
:
python edit_ds1000.py --to_jsonl --edit_dir data/ds1000_edit
一小部分执行是有状态的(tensorflow 和 matplotlib)。所以每个问题都应该在一个独立的进程中执行。顺序测试也会发生这种情况。
与大多数人工标记数据一样,预计会出现少量错误。此外,虽然我们消除了可以看到的歧义,但我们无法预测提示的所有可能的正确/错误解释。更多细节参见论文。
由于导入,与原始设置存在轻微不一致。例如import a; abc()
预计会失败,但如果在过程中的其他任何地方使用import ab
则不会失败。这只会影响除导入之外的少数正确解决方案。
如果您发现我们的工作有帮助,请引用
@article{Lai2022DS1000,
title={DS-1000: A Natural and Reliable Benchmark for Data Science Code Generation},
author={Yuhang Lai and Chengxi Li and Yiming Wang and Tianyi Zhang and Ruiqi Zhong and Luke Zettlemoyer and Scott Wen-tau Yih and Daniel Fried and Sida Wang and Tao Yu},
journal={ArXiv},
year={2022},
volume={abs/2211.11501}
}