Publication officielle des données et du code pour l'article DS-1000 : une référence naturelle et fiable pour la génération de code de science des données . Vous pouvez vous référer à notre page de projet pour plus d'exemples et de références.
Actualité (04/2024) : DS-1000 a désormais été simplifié et hébergé sur huggingface. Vous pouvez également vous référer au format original tel que décrit dans notre article.
Il s'agit d'un reformatage de l'ensemble de données DS-1000 pour améliorer sa convivialité sans modifier le contenu. L'ensemble de données est hébergé sur huggingface et dans data/ds1000.jsonl.gz
Il existe deux options pour charger l'ensemble de données
# 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 ()]
Le script test_ds1000.py
fourni évalue DS-1000 sur 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
Résultat attendu :
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
Voir également les résultats sur les nouveaux modèles dans le dossier résultats.
Le script de test exécute le code généré, votre propre bac à sable est donc fortement encouragé, mais le code de référence et les solutions fournies semblent fonctionner en toute sécurité. Votre bac à sable doit autoriser certaines opérations sur les fichiers (par exemple, enregistrer le tracé dans matplotlib) et les opérations sur le système d'exploitation (par exemple, tensorflow, sklearn)
L' prompt
de champ contient la question dans son contexte, ainsi qu'une instruction simple comme result = ... # put solution this variable
. Il s'agit de l'invite standard du modèle pour des raisons de cohérence.
Le champ code_context
définit test_execution(solution: str)
et test_string(solution: str)
qui prend le code généré comme argument et évalue son exactitude. test_execution
fonctionne en remplaçant l'exemple d'entrée inclus dans l'invite par les entrées générées par generate_test_case(test_case_id)
, puis vérifie les sorties (générées par la solution de référence, qui est également présente dans code_context
). La solution réussit si elle réussit à la fois test_execution
et test_string
(si elle existe). Le contexte d'exécution ( exec_context
) dans code_context
est identique à celui fourni par l' prompt
.
code_context
.code_context
définit test_execution(solution: str)
et test_string(solution: str)
qui prend le code comme argument et évalue son exactitudeenvironment.yml
)parser
obsolète et test de chaîne simplifié à l'aide de tokenize
metadata
. Pour convertir ds1000 en fichiers modifiables, utilisez le script edit_ds1000.py
fourni pour diviser la liste des problèmes avec cette commande :
# specify --edit_dir according to your needs
python edit_ds1000.py --to_edit --edit_dir data/ds1000_edit
dans la structure suivante :
data/ds1000_edit
├── 0 # problem id
├── prompt.txt
├── reference_code.txt
├── metadata.json
└── code_context.py
├── 1
├── ...
Après l'édition, reconstruisez l'ensemble de données dans data/ds1000.jsonl
avec cette commande :
python edit_ds1000.py --to_jsonl --edit_dir data/ds1000_edit
Un petit pourcentage d'exécutions sont avec état (tensorflow et matplotlib). Chaque problème doit donc être exécuté dans un processus indépendant. Cela se produit également pour les tests séquentiels.
Comme pour la plupart des données étiquetées par l’homme, il faut s’attendre à un petit nombre d’erreurs. De plus, même si nous supprimons toute ambiguïté que nous pouvons voir, nous ne pouvons pas anticiper toutes les interprétations correctes/incorrectes possibles de l'invite. Plus de détails sont dans le journal.
Il y a une incohérence mineure avec l’ensemble original en raison de l’importation. Par exemple, import a; abc()
devrait échouer, mais il n'échouera pas si import ab
est utilisé ailleurs dans le processus. Cela n'affecte que quelques solutions correctes, à l'exception des importations.
Si vous trouvez notre travail utile, veuillez citer comme
@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}
}