DS-1000 論文的官方數據和程式碼發布:數據科學程式碼產生的自然可靠基準。您可以參考我們的專案頁面以取得更多範例和基準。
新聞 (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
腳本在data/codex002-answers.jsonl
上評估 DS-1000
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
(如果存在),則透過。 code_context
中的執行上下文 ( exec_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 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}
}