Dados oficiais e lançamento de código para o artigo DS-1000: um benchmark natural e confiável para geração de código de ciência de dados . Você pode consultar nossa página do projeto para mais exemplos e linhas de base.
Novidades (04/2024): DS-1000 agora foi simplificado e hospedado no huggingface. Você também pode consultar o formato original conforme descrito em nosso artigo.
Esta é uma reformatação do conjunto de dados DS-1000 para melhorar sua usabilidade sem alterar o conteúdo. O conjunto de dados está hospedado em huggingface e em data/ds1000.jsonl.gz
Existem duas opções para carregar o conjunto de dados
# 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 ()]
O script test_ds1000.py
fornecido avalia o DS-1000 em 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
Resultado esperado:
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
Veja também os resultados dos novos modelos na pasta de resultados.
O script de teste executa o código gerado, portanto, sua própria sandbox é fortemente recomendada, mas o código de referência e as soluções fornecidas parecem seguros para execução. Sua sandbox deve permitir algumas operações de arquivo (por exemplo, salvar gráfico no matplotlib) e operações de sistema operacional (por exemplo, tensorflow, sklearn)
O prompt
do campo contém a pergunta no contexto, junto com uma instrução simples como result = ... # put solution this variable
. Este é o prompt padrão do modelo para consistência.
O campo code_context
define test_execution(solution: str)
e test_string(solution: str)
que toma o código gerado como argumento e avalia sua correção. test_execution
funciona substituindo a entrada de exemplo incluída no prompt por entradas geradas por generate_test_case(test_case_id)
e depois verifica as saídas (geradas pela solução de referência, que também está presente em code_context
). A solução será aprovada se for aprovada em test_execution
e test_string
(se existir). O contexto de execução ( exec_context
) em code_context
é idêntico ao fornecido pelo prompt
.
code_context
.code_context
define test_execution(solution: str)
e test_string(solution: str)
que toma o código como argumento e avalia sua correçãoenvironment.yml
)parser
obsoleto removido e teste de string simplificado usando tokenize
metadata
. Para converter ds1000 em arquivos editáveis, use o script edit_ds1000.py
fornecido para dividir a lista de problemas com este comando:
# specify --edit_dir according to your needs
python edit_ds1000.py --to_edit --edit_dir data/ds1000_edit
na seguinte estrutura:
data/ds1000_edit
├── 0 # problem id
├── prompt.txt
├── reference_code.txt
├── metadata.json
└── code_context.py
├── 1
├── ...
Após a edição, reconstrua o conjunto de dados em data/ds1000.jsonl
com este comando:
python edit_ds1000.py --to_jsonl --edit_dir data/ds1000_edit
Uma pequena porcentagem de execuções tem estado (tensorflow e matplotlib). Portanto, cada problema deve ser executado em um processo independente. Isso também acontece para testes sequenciais.
Tal como acontece com a maioria dos dados rotulados por humanos, é esperada uma pequena quantidade de erros. Além disso, embora removamos a ambigüidade que podemos ver, não podemos antecipar todas as possíveis interpretações corretas/incorretas do prompt. Mais detalhes estão no jornal.
Há pequena inconsistência com o conjunto original devido à importação. Por exemplo, import a; abc()
Espera-se que import a; abc()
falhe, mas não falhará se import ab
for usado em qualquer outro lugar do processo. Isto afeta apenas algumas soluções corretas, exceto as importações.
Se você achar nosso trabalho útil, cite como
@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}
}