การเผยแพร่ข้อมูลและโค้ดอย่างเป็นทางการสำหรับรายงาน DS-1000: เกณฑ์มาตรฐานที่เป็นธรรมชาติและเชื่อถือได้สำหรับการสร้างโค้ดวิทยาศาสตร์ข้อมูล คุณสามารถดูหน้าโครงการของเราเพื่อดูตัวอย่างและแนวทางพื้นฐานเพิ่มเติม
ข่าว (04/2024): ขณะนี้ DS-1000 ได้รับการปรับให้เรียบง่ายขึ้นและโฮสต์ไว้บนฮักกิ้งเฟซ คุณยังสามารถอ้างอิงถึงรูปแบบต้นฉบับตามที่อธิบายไว้ในรายงานของเรา
นี่คือการฟอร์แมตชุดข้อมูล 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
ที่ให้มาประเมิน DS-1000 บน 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
ผลลัพธ์ที่คาดหวัง:
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
(ถ้ามี) บริบทการดำเนินการ ( exec_context
) ใน code_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}
}