Publicación oficial de datos y códigos para el artículo DS-1000: un punto de referencia natural y confiable para la generación de códigos de ciencia de datos . Puede consultar la página de nuestro proyecto para obtener más ejemplos y líneas de base.
Noticias (04/2024): DS-1000 ahora se ha simplificado y alojado en huggingface. También puede consultar el formato original como se describe en nuestro artículo.
Este es un reformateo del conjunto de datos DS-1000 para mejorar su usabilidad sin cambiar el contenido. El conjunto de datos está alojado en huggingface y en data/ds1000.jsonl.gz
Hay dos opciones para cargar el conjunto de datos.
# 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 ()]
El script test_ds1000.py
proporcionado evalúa DS-1000 en 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
Vea también los resultados de nuevos modelos en la carpeta de resultados.
El script de prueba ejecuta el código generado, por lo que se recomienda encarecidamente tener su propia zona de pruebas, pero el código de referencia y las soluciones proporcionadas parecen seguras de ejecutar. Su entorno de pruebas debe permitir algunas operaciones de archivos (por ejemplo, guardar el gráfico en matplotlib) y operaciones del sistema operativo (por ejemplo, tensorflow, sklearn)
El prompt
de campo contiene la pregunta en contexto, junto con una instrucción simple como result = ... # put solution this variable
. Este es el mensaje estándar para la coherencia del modelo.
El campo code_context
define test_execution(solution: str)
y test_string(solution: str)
que toma el código generado como argumento y evalúa su corrección. test_execution
funciona reemplazando la entrada de ejemplo incluida en el mensaje con entradas generadas por generate_test_case(test_case_id)
y luego verifica las salidas (generadas por la solución de referencia, que también está presente en code_context
). La solución pasa si pasa tanto test_execution
como test_string
(si existe). El contexto de ejecución ( exec_context
) en code_context
es idéntico al proporcionado por el prompt
.
code_context
.code_context
define test_execution(solution: str)
y test_string(solution: str)
que toma el código como argumento y evalúa su correcciónenvironment.yml
)parser
obsoleto y se simplificaron las pruebas de cadenas usando tokenize
metadata
. Para convertir ds1000 en archivos editables, utilice el script edit_ds1000.py
proporcionado para dividir la lista de problemas con este comando:
# specify --edit_dir according to your needs
python edit_ds1000.py --to_edit --edit_dir data/ds1000_edit
en la siguiente estructura:
data/ds1000_edit
├── 0 # problem id
├── prompt.txt
├── reference_code.txt
├── metadata.json
└── code_context.py
├── 1
├── ...
Después de editar, reconstruya el conjunto de datos en data/ds1000.jsonl
con este comando:
python edit_ds1000.py --to_jsonl --edit_dir data/ds1000_edit
Un pequeño porcentaje de ejecuciones tienen estado (tensorflow y matplotlib). Por tanto, cada problema debe ejecutarse en un proceso independiente. Esto también sucede con las pruebas secuenciales.
Como ocurre con la mayoría de los datos etiquetados por humanos, es de esperar una pequeña cantidad de errores. Además, si bien eliminamos la ambigüedad que podemos ver, no podemos anticipar todas las posibles interpretaciones correctas/incorrectas del mensaje. Más detalles están en el documento.
Hay una pequeña inconsistencia con el conjunto original debido a la importación. Por ejemplo import a; abc()
Se espera que import a; abc()
falle, pero no falla si se utiliza import ab
en cualquier otro lugar del proceso. Esto solo afecta a algunas soluciones que son correctas, excepto las importaciones.
Si encuentra útil nuestro trabajo, cítelo 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}
}