Официальные данные и выпуск кода для статьи DS-1000: A Natural and Reliable Benchmark for Data Science Code Generation . Вы можете обратиться к нашей странице проекта для получения дополнительных примеров и базовых показателей.
Новости (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
оценивает DS-1000 в data/codex002-answers.jsonl
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
(если существует). Контекст выполнения ( exec_context
) в code_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 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}
}