Offizielle Daten- und Codeveröffentlichung für den Artikel DS-1000: A Natural and Reliable Benchmark for Data Science Code Generation . Weitere Beispiele und Grundlagen finden Sie auf unserer Projektseite.
Neuigkeiten (04/2024): DS-1000 wurde jetzt vereinfacht und auf Huggingface gehostet. Sie können sich auch auf das Originalformat beziehen, wie in unserem Dokument beschrieben.
Hierbei handelt es sich um eine Neuformatierung des DS-1000-Datensatzes, um seine Benutzerfreundlichkeit zu verbessern, ohne den Inhalt zu ändern. Der Datensatz wird auf Huggingface und in data/ds1000.jsonl.gz
gehostet
Es gibt zwei Möglichkeiten, den Datensatz zu laden
# 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 ()]
Das bereitgestellte Skript test_ds1000.py
wertet DS-1000 auf data/codex002-answers.jsonl
aus
conda env create -f environment.yml
conda activate ds1000-3.10
# the test code also needs: pip install datasets tqdm
python test_ds1000.py
Erwartete Ausgabe:
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
Siehe auch Ergebnisse zu neuen Modellen im Ergebnisordner.
Das Testskript führt generierten Code aus, daher wird die Verwendung einer eigenen Sandbox dringend empfohlen, die Ausführung des Referenzcodes und der bereitgestellten Lösungen scheint jedoch sicher zu sein. Ihre Sandbox muss einige Dateioperationen (z. B. Plot in Matplotlib speichern) und Betriebssystemoperationen (z. B. Tensorflow, Sklearn) zulassen.
Die prompt
enthält die Frage im Kontext sowie eine einfache Anweisung wie result = ... # put solution this variable
. Dies ist die Standardabfrage für das Modell aus Gründen der Konsistenz.
Das Feld code_context
definiert test_execution(solution: str)
und test_string(solution: str)
, die generierten Code als Argument nehmen und seine Korrektheit bewerten. test_execution
funktioniert, indem es die in der Eingabeaufforderung enthaltenen Beispieleingaben durch Eingaben ersetzt, die von generate_test_case(test_case_id)
generiert wurden, und dann die Ausgaben überprüft (generiert von der Referenzlösung, die auch in code_context
vorhanden ist). Die Lösung ist erfolgreich, wenn sie sowohl test_execution
als auch test_string
(sofern vorhanden) besteht. Der Ausführungskontext ( exec_context
) in code_context
ist identisch mit dem, der von der prompt
bereitgestellt wird.
code_context
zusammengeführt.code_context
definiert test_execution(solution: str)
und test_string(solution: str)
die Code als Argument nehmen und seine Richtigkeit bewertenenvironment.yml
) aktualisiert.parser
Modul entfernt und String-Tests mit tokenize
vereinfachtmetadata
. Um ds1000 in bearbeitbare Dateien zu konvertieren, verwenden Sie das bereitgestellte Skript edit_ds1000.py
um die Problemliste mit diesem Befehl aufzuteilen:
# specify --edit_dir according to your needs
python edit_ds1000.py --to_edit --edit_dir data/ds1000_edit
in die folgende Struktur:
data/ds1000_edit
├── 0 # problem id
├── prompt.txt
├── reference_code.txt
├── metadata.json
└── code_context.py
├── 1
├── ...
Erstellen Sie nach der Bearbeitung den Datensatz mit diesem Befehl in data/ds1000.jsonl
neu:
python edit_ds1000.py --to_jsonl --edit_dir data/ds1000_edit
Ein kleiner Prozentsatz der Ausführungen ist zustandsbehaftet (Tensorflow und Matplotlib). Daher sollte jedes Problem in einem unabhängigen Prozess ausgeführt werden. Dies geschieht auch beim sequentiellen Testen.
Wie bei den meisten vom Menschen beschrifteten Daten ist mit einer geringen Fehlerquote zu rechnen. Darüber hinaus beseitigen wir zwar sichtbare Mehrdeutigkeiten, können jedoch nicht alle möglichen richtigen/falschen Interpretationen der Eingabeaufforderung vorhersehen. Weitere Details finden Sie im Papier.
Aufgrund des Imports gibt es geringfügige Inkonsistenzen mit dem Originalsatz. import a; abc()
Es wird erwartet, dass import a; abc()
fehlschlägt, aber es schlägt nicht fehl, wenn import ab
an anderer Stelle im Prozess verwendet wird. Dies betrifft nur wenige Lösungen, die korrekt sind, mit Ausnahme von Importen.
Wenn Sie unsere Arbeit hilfreich finden, zitieren Sie bitte als
@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}
}