البيانات الرسمية وإصدار التعليمات البرمجية للورقة 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
المقدم بتقييم 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 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}
}