論文「 DS-1000: データ サイエンス コード生成のための自然で信頼性の高いベンチマーク」の公式データとコード リリース。その他の例やベースラインについては、プロジェクト ページを参照してください。
ニュース (2024/04): DS-1000 は簡素化され、huggingface でホストされるようになりました。論文で説明されている元の形式を参照することもできます。
これは、内容を変更せずに使いやすさを向上させるために DS-1000 データセットを再フォーマットしたものです。データセットは、huggingface とdata/ds1000.jsonl.gz
でホストされています。
データセットをロードするには 2 つのオプションがあります
# 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 でのプロットの保存など) と OS 操作 (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}
}