إصلاح-الكسر-إصلاح: التعلم غير المشرف لإصلاح البرامج

نعتبر مهام الإصلاح: مع وجود مقيم (مثل المترجم) يقيّم جودة المدخل، الهدف هو تدريب إصلاح يقوم بتحويل مثال سيء (مثل الكود الذي يحتوي على أخطاء نحوية) إلى مثال جيد (مثل الكود الخالي من الأخطاء النحوية). ومع ذلك، فإن الأعمال الحالية تنشئ بيانات التدريب التي تتكون من أزواج (سيء، جيد) عن طريق تشويه الأمثلة الجيدة باستخدام تقنيات تقريبية (مثل حذف الرموز). ومع ذلك، فإن الإصلاحات التي تم تدريبها على هذه البيانات المولدة بشكل صناعي لا تتنبأ بشكل جيد بالتوزيع الحقيقي للأدخال السيئة. لسد هذا الفجوة، نقترح نهجًا جديدًا للتدريب يُعرف باسم "كسره وإصلاحه" (BIFI)، والذي يعتمد على فكرتين رئيسيتين: (i) نستخدم المقيم لفحص خرج الإصلاح على الأدخال السيئة الحقيقية وإضافة الأخرج الجيدة (المصححة) إلى بيانات التدريب، و(ii) نتدرب على كاسر لإنتاج كود سيء واقعي من كود جيد. بناءً على هاتين الفكرتين، نقوم بتحديث الكاسر والإصلاح بشكل متكرر بينما نستخدمهما معًا لإنتاج المزيد من البيانات المتزامنة. قمنا بتقييم BIFI على مجموعتي بيانات لإصلاح الكود: GitHub-Python، وهي مجموعة بيانات جديدة نقدمها حيث الهدف هو إصلاح كود Python الذي يحتوي على أخطاء في شجرة التحليل النحوي؛ وDeepFix، حيث الهدف هو إصلاح كود C الذي يحتوي على أخطاء في المترجم. حقق BIFI أفضل النتائج بالمقارنة مع الأساليب الموجودة، حيث بلغت دقة الإصلاح 90.5٪ في GitHub-Python (+28.5٪) و71.7٪ في DeepFix (+5.6٪). ومن الجدير بالذكر أن BIFI لا يتطلب أي بيانات مشمولة بالتصنيف؛ نأمل أن يكون نقطة انطلاق قوية للتعلم غير المنظور لمجموعة متنوعة من مهام الإصلاح.