ضبط التعليمات هو أسلوب للضبط الدقيق يمنح نماذج اللغة الكبيرة (LLMs) القدرة على اتباع التعليمات الطبيعية والمكتوبة من قبل الإنسان. ومع ذلك، بالنسبة لمهام البرمجة، يتم ضبط معظم النماذج إما على تعليمات مكتوبة بواسطة الإنسان (وهي مكلفة للغاية) أو تعليمات تم إنشاؤها بواسطة ماجستير إدارة الأعمال (LLM) الضخم والمملوك (والتي قد لا يكون مسموحًا بها). نقدم لك StarCoder2-15B-Instruct-v0.1، أول كود ذاتي المحاذاة بالكامل (LLM) تم تدريبه باستخدام خط أنابيب متساهل وشفاف تمامًا. يستخدم خط الأنابيب مفتوح المصدر الخاص بنا StarCoder2-15B لإنشاء الآلاف من أزواج التعليمات والاستجابة، والتي يتم استخدامها بعد ذلك لضبط StarCoder-15B نفسه دون أي تعليقات توضيحية بشرية أو بيانات مقطرة من LLMs ضخمة ومملوكة.

حقق StarCoder2-15B-Instruct درجة 72.6 HumanEval، متجاوزًا درجة 72.0 في CodeLlama-70B-Instruct! يُظهر المزيد من التقييم على LiveCodeBench أن النموذج المحاذي ذاتيًا أفضل من نفس النموذج الذي تم تدريبه على البيانات المقطرة من GPT-4، مما يعني ضمناً أن LLM يمكن أن يتعلم بشكل أكثر فعالية من البيانات داخل التوزيع الخاص به من التوزيع المتحول من مدرس LLM.

طريقة

طريقة

يتكون مسار توليد البيانات لدينا بشكل أساسي من ثلاث خطوات:

  1. استخرج وظائف أولية عالية الجودة ومتنوعة من The Stack v1، وهي مجموعة ضخمة من أكواد المصدر المرخصة بشكل مرخص.
  2. قم بإنشاء تعليمات برمجية متنوعة وواقعية تتضمن مفاهيم التعليمات البرمجية المختلفة الموجودة في الوظائف الأولية (على سبيل المثال، إلغاء تسلسل البيانات، وتسلسل القائمة، والتكرار).
  3. لكل تعليمات، قم بإنشاء استجابة عالية الجودة من خلال التحقق الذاتي الموجه بالتنفيذ.

وفي الأقسام التالية، سنستكشف كل جانب من هذه الجوانب بالتفصيل.

جمع مقتطفات التعليمات البرمجية الأولية

لفتح إمكانات متابعة التعليمات بشكل كامل لنموذج التعليمات البرمجية، يجب أن يتعرض لمجموعة متنوعة من التعليمات التي تشمل مجموعة واسعة من مبادئ وممارسات البرمجة. بدافع من OSS-Instruct، نقوم بتعزيز هذا التنوع بشكل أكبر من خلال استخراج مفاهيم التعليمات البرمجية من مقتطفات التعليمات البرمجية مفتوحة المصدر والتي تعد، على وجه التحديد، وظائف Python الأولية جيدة التكوين من The Stack V1.

بالنسبة لمجموعة البيانات الأولية الخاصة بنا، نستخرج بعناية جميع وظائف Python باستخدام سلاسل المستندات في The Stack V1، ونستنتج التبعيات المطلوبة باستخدام الاستيراد التلقائي، ونطبق قواعد التصفية التالية على جميع الوظائف:

  1. فحص النوع: نحن نطبق مدقق النوع الإرشادي Pyright لإزالة جميع الوظائف التي تنتج أخطاء ثابتة، مما يشير إلى عنصر ربما يكون غير صحيح.
  2. إزالة التلوث: نقوم باكتشاف وإزالة جميع العناصر المعيارية التي نقوم بتقييمها. نحن نستخدم مطابقة السلسلة تمامًا في كل من الحلول والمطالبات.
  3. تصفية جودة المستندات: نستخدم StarCoder2-15B كمحكم لإزالة الوظائف ذات التوثيق السيئ. نطالب النموذج الأساسي بـ 7 أمثلة قليلة، ونطلب منه الرد إما بـ “نعم” أو “لا” للاحتفاظ بالعنصر.
  4. شبه إلغاء البيانات المكررة: نحن نستخدم MinHash والتجزئة الحساسة للمنطقة المحلية مع عتبة تشابه Jaccard تبلغ 0.5 لتصفية وظائف البذور المكررة في مجموعة البيانات الخاصة بنا. هذه هي نفس العملية المطبقة على بيانات تدريب StarCoder.

ينتج عن خط التصفية هذا مجموعة بيانات مكونة من 250 ألف وظيفة Python تمت تصفيتها من وظائف 5M باستخدام سلاسل المستندات. هذه العملية مستوحاة بشكل كبير من خط أنابيب جمع البيانات المستخدم في MultiPL-T.

تعليمات OSS الذاتية

بعد جمع الوظائف الأولية، نستخدم Self-OSS-Instruct لإنشاء تعليمات متنوعة. بالتفصيل، نحن نستخدم التعلم في السياق للسماح لـ StarCoder2-15B الأساسي بالتوليد الذاتي للتعليمات من مقتطفات التعليمات البرمجية الأولية المحددة. تستخدم هذه العملية 16 نموذجًا قصيرًا تم تصميمه بعناية، كل منها بتنسيق (مقتطف ، مفاهيم ، تعليمات). تنقسم عملية توليد التعليمات إلى خطوتين:

  1. استخراج المفاهيم: بالنسبة لكل وظيفة أولية، يُطلب من StarCoder2-15B إنتاج قائمة بمفاهيم التعليمات البرمجية الموجودة داخل الوظيفة. تشير مفاهيم الكود إلى المبادئ والتقنيات الأساسية المستخدمة في البرمجة، مثل مطابقة النمط و تحويل نوع البيانات، والتي تعتبر ضرورية للمطورين لإتقانها.
  2. توليد التعليمات: يُطلب بعد ذلك من StarCoder2-15B إنشاء مهمة ترميز ذاتية تتضمن مفاهيم التعليمات البرمجية المحددة.

وفي النهاية، يتم إنشاء 238 كيلو تعليمات من هذه العملية.

الاستجابة التحقق من الصحة الذاتي

بالنظر إلى التعليمات التي تم إنشاؤها من Self-OSS-Instruct، فإن خطوتنا التالية هي مطابقة كل تعليمات باستجابة عالية الجودة. تعتمد الممارسات السابقة عادة على استخلاص الاستجابات من نماذج المعلمين الأقوى، مثل GPT-4، والتي نأمل أن تظهر جودة أعلى. ومع ذلك، فإن استخلاص نماذج الملكية يؤدي إلى ترخيص غير متساهل، وقد لا يكون نموذج المعلم الأقوى متاحًا دائمًا. والأهم من ذلك، أن نماذج المعلمين يمكن أن تكون خاطئة أيضًا، ويمكن أن تكون فجوة التوزيع بين المعلم والطالب ضارة.

نقترح محاذاة StarCoder2-15B ذاتيًا من خلال توجيه النموذج بشكل صريح لإنشاء اختبارات للتحقق الذاتي بعد أن ينتج استجابة مشذرة باللغة الطبيعية. تشبه هذه العملية كيفية اختبار المطورين لتطبيقات التعليمات البرمجية الخاصة بهم. على وجه التحديد، لكل تعليمات، يقوم StarCoder2-15B بإنشاء 10 عينات من التنسيق (استجابة NL، الاختبار) ونقوم بتصفية تلك التي تم تزويرها من خلال تنفيذ الاختبار ضمن بيئة الحماية. نقوم بعد ذلك باختيار استجابة تمرير واحدة بشكل عشوائي لكل تعليمات لمجموعة بيانات SFT النهائية. في المجمل، قمنا بإنشاء 2.4 مليون (10 × 238 كيلو) استجابات لتعليمات 238 كيلو بدرجة حرارة 0.7، حيث اجتاز 500 كيلو اختبار التنفيذ. بعد إلغاء البيانات المكررة، يتبقى لدينا 50 ألف تعليمات، كل منها مقترنة باستجابة تمرير عشوائية، والتي نستخدمها أخيرًا كمجموعة بيانات SFT الخاصة بنا.

تقييم

في معيار EvalPlus الشهير والصارم، يبرز StarCoder2-15B-Instruct باعتباره LLM الأفضل أداءً على نطاقه، متفوقًا على Grok-1 Command-R+ وDBRX الأكبر بكثير، بينما يتطابق بشكل وثيق مع Snowflake Arctic 480B وMixtral-8x22B-Instruct. على حد علمنا، StarCoder2-15B-Instruct هو أول كود LLM مع مسار شفاف ومتساهل بالكامل يصل إلى 70+ درجة HumanEval. إنه يتفوق بشكل كبير على OctoCoder، وهو الكود المتساهل السابق LLM مع خط أنابيب شفاف.

حتى بالمقارنة مع برامج LLM القوية ذات التراخيص المقيدة، تظل StarCoder2-15B-Instruct قادرة على المنافسة، متجاوزة Gemini Pro وMistral Large وقابلة للمقارنة مع CodeLlama-70B-Instruct. بالإضافة إلى ذلك، فإن StarCoder2-15B-Instruct، الذي تم تدريبه بشكل كامل على البيانات المولدة ذاتيًا، ينافس بشكل وثيق OpenCodeInterpreter-SC2-15B، الذي يقوم بضبط StarCoder2-15B على البيانات المقطرة من GPT-3.5/4.

تقييم إيفال بلس

إلى جانب EvalPlus، قمنا أيضًا بتقييم أحدث النماذج مفتوحة المصدر بأحجام مماثلة أو أصغر على LiveCodeBench، والتي تتضمن مشكلات الترميز الجديدة التي تم إنشاؤها بعد 2023-09-01، بالإضافة إلى DS-1000 الذي يستهدف برامج علوم البيانات. على LiveCodeBench، يحقق StarCoder2-15B-Instruct أفضل النتائج بين النماذج التي تم تقييمها ويتفوق باستمرار على OpenCodeInterpreter-SC2-15B الذي يستخلص بيانات GPT-4. في DS-1000، لا يزال StarCoder2-15B-Instruct قادرًا على المنافسة على الرغم من تدريبه على مشاكل علوم البيانات المحدودة للغاية.

تقييم LCB وDS1000

خاتمة

يعرض StarCoder2-15B-Instruct-v0.1 لأول مرة أنه يمكننا إنشاء نماذج تعليمات برمجية قوية مضبوطة للتعليمات دون الاعتماد على نماذج مدرسية أقوى مثل GPT-4. يوضح هذا النموذج أن المحاذاة الذاتية، حيث يستخدم النموذج المحتوى الذي تم إنشاؤه للتعلم، تكون فعالة أيضًا للتعليمات البرمجية. إنه شفاف تمامًا ويسمح بالتقطير، مما يميزه عن النماذج الأخرى الأكبر حجمًا ولكن غير الشفافة مثل Snowflake-Arctic، وGrok-1، وMixtral-8x22B، وDBRX، وCommandR+. لقد جعلنا مجموعات البيانات الخاصة بنا وخط الأنابيب بأكمله، بما في ذلك تنظيم البيانات والتدريب، مفتوحة المصدر بالكامل. نأمل أن يكون هذا العمل الأساسي مصدر إلهام لمزيد من البحث والتطوير المستقبلي في هذا المجال.

موارد

الاقتباس

@article{wei2024selfcodealign,
  title={SelfCodeAlign: Self-Alignment for Code Generation}, 
  author={Yuxiang Wei and Federico Cassano and Jiawei Liu and Yifeng Ding and Naman Jain and Zachary Mueller and Harm de Vries and Leandro von Werra and Arjun Guha and Lingming Zhang},
  year={2024},
  journal={arXiv preprint arXiv:2410.24198}
}

شاركها.
اترك تعليقاً