DS-1000: A Natural and Reliable Benchmark for Data Science Code Generation 논문의 공식 데이터 및 코드 릴리스입니다. 더 많은 예시와 기준선을 보려면 프로젝트 페이지를 참조하세요.
뉴스(2024년 4월): 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에 플롯 저장) 및 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}
}