تقوم النماذج العملاقة ذاتية الانحدار (Autoregressive) مثل GPT-4 وClaude بإنتاج الكود رمزاً تلو الآخر، حيث تتقدم من اليسار إلى اليمين عبر الملف. وهي تتعامل جيداً مع المقاطع القصيرة، لكنها تتعثر عندما يريد المطور تعديل سطر مدفون في أعماق قاعدة كود ضخمة؛ إذ يتعين على النموذج إعادة تقييم كل رمز يليه، ويصبح الحفاظ على اتساق الملف بأكمله كابوساً.
تبدأ نماذج الانتشار (Diffusion models) من سحابة من الرموز العشوائية وتقوم بإزالة الضجيج منها بشكل تكراري حتى يظهر برنامج متماسك. ولأن عملية التنقيح تشمل التسلسل بأكمله في وقت واحد، يمكن للنموذج إدراج أو حذف أو إعادة كتابة أي جزء من الكود دون الحاجة لإعادة حساب الجزء المتبقي.
لماذا يواجه النموذج الحالي صعوبة في هندسة البرمجيات
تفرض عملية الانحدار الذاتي على النموذج التعامل مع الكود كتدفق خطي، مما يعني أنه:
- ينظر إلى الوراء فقط. فهو لا يرى الرموز المستقبلية أبداً، لذا لا يمكنه توقع كيفية تأثير التغيير على الأسطر اللاحقة.
- يعيد حساب النص اللاحق. يؤدي تعديل واحد إلى سلسلة من التوقعات الجديدة، مما يزيد من زمن الاستجابة (latency) عند إعادة هيكلة الكود (refactoring) أو إصلاح الأخطاء.
- تتراكم الأخطاء بعيدة المدى. حيث تتفاقم عدم التطابقات المبكرة لتترك الملف النهائي معطلاً من الناحية النحوية (syntactically) أو غير متسق منطقياً.
عندما تحتاج إلى ملء الفراغات (infill) — مثل إدراج جسم دالة في منتصف ملف أو تحديث توقيع API — فإن الطبيعة التسلسلية للنماذج ذاتية الانحدار تبدو ثقيلة وعرضة للأخطاء.
البديل المعتمد على الانتشار: التنقيح التكراري، وليس التنبؤ خطوة بخطوة
نحن نتعامل مع ملف الكود كإشارة مشوشة. وتتم عملية التوليد عبر عدة جولات:
- البدء بضجيج خالص. نقوم بتغذية النموذج بتسلسل من الرموز العشوائية، والتي غالباً ما يتم تمثيلها بواسطة عنصر نائب (placeholder) خاص.
- إزالة الضجيج التدريجية. في كل خطوة، يتنبأ النموذج بنسخة أنظف قليلاً، مما يدفع الرموز نحو كود منطقي.
- الوصول إلى برنامج مكتمل. بعد عدد محدد من الخطوات، يختفي الضجيج، تاركاً مقطعاً برمجياً مكتملاً.
ولأن كل خطوة تعيد النظر في التسلسل بأكمله، يمكن للنموذج تعديل أي رمز في أي مرحلة. تتيح له هذه الرؤية الشاملة إضافة استيراد (import) مفقود، أو إعادة تسمية متغير، أو إعادة تنسيق إزاحة (re-indent) كتلة برمجية دون إعادة توليد كل ما يليها.
هندسة نموذج انتشار يركز على الكود
إن نقل تقنية الانتشار من الصور إلى النصوص ليس مهمة بسيطة (plug-and-play). هناك ثلاثة تحولات تقنية مهمة.
1. الانتشار المنفصل (Discrete diffusion)
تقبل بكسلات الصور ضجيجاً كسرياً، لكن رمز الكود هو فئة محددة (categorical) — فهو إما كلمة مفتاحية معينة، أو معرف (identifier)، أو رمز. لذلك، نستخدم سلسلة ماركوف (Markov chain) تستبدل الرموز بشكل متكرر بعنصر نائب محايد (غالباً [MASK]) حتى يصبح التسلسل عشوائياً فعلياً. وتتعلم العملية العكسية كيفية استعادة الرموز الأصلية خطوة بخطوة.
2. الوعي الهيكلي (Structural awareness)
تفرض لغات البرمجة قواعد نحوية صارمة: تحدد الإزاحة (indentation) النطاق (scope) في Python، وتحدد الأقواس {} الكتل في اللغات الشبيهة بـ C، ويجب الإعلان عن المتغيرات قبل استخدامها. نموذج الانتشار الذي يعامل الكود كنص عادي سينتج مخرجات غير صالحة نحويًا. ولمنع ذلك، يضيف الباحثون أقنعة انتباه مدركة للنحو (syntax-aware attention masks) تحد من كيفية ارتباط الرموز ببعضها البعض، مما يجبر النموذج على احترام التسلسل الهرمي، والتداخل (nesting)، والقيود الخاصة بكل لغة.
3. التنقيح الهرمي (Hierarchical refinement)
ترسم خطوات الانتشار المبكرة الهيكل العام — مثل توقيعات الدوال، وتعاريف الفئات (classes)، وتنظيم الوحدات (modules). وتقوم الخطوات اللاحقة بصقل التفاصيل الدقيقة مثل علامات الترقيم، والمساحات البيضاء، واتفاقيات التسمية. تحاكي هذه الاستراتيجية (من الهيكل العام إلى التفاصيل الدقيقة) كيفية قيام البشر بوضع مخطط للبرنامج قبل صقل تفاصيله الداخلية، وهي توجه العمليات الحسابية إلى حيث تبرز أهميتها في كل مرحلة.
مقارنة بين النماذج ذاتية الانحدار ونماذج الانتشار
| الجانب | ذاتية الانحدار (Autoregressive) | الانتشار (Diffusion) |
|---|---|---|
| تدفق التوليد | تسلسلي، من اليسار إلى اليمين | متوازٍ، إزالة ضجيج تكرارية |
| الاتساق الشامل | عرضة للانحراف عبر المسارات الطويلة | رؤية شاملة عبر جميع الرموز |
| حالات الاستخدام النموذجية | الدردشة، الشرح، المقاطع السريعة | إعادة الهيكلة، إصلاح الأخطاء، توليد الكود واسع النطاق |
يوضح الجدول سبب تم
- خطوط أنابيب هجينة. قد تسمح الأنظمة المستقبلية لنموذج ذاتي الانحدار بصياغة مسودة أولية سريعة، ثم تسليمها إلى نموذج انتشار لصقلها.
- أدوات الأقنعة الهيكلية. يواصل الباحثون تحسين أقنعة الانتباه المدركة للقواعد النحوية لمساعدة نماذج الانتشار على الالتزام بالقيود الخاصة باللغة.
الخلاصة
تقلب نماذج الانتشار الموازين في عملية توليد الكود: فبدلاً من التقدم رمزاً تلو الآخر، تقوم بنحت برنامج كامل من خلال عملية إزالة الضجيج التكرارية. يعالج هذا النهج نقطة الضعف الجوهرية في الأنظمة ذاتية الانحدار، وهي الحفاظ على الاتساق الشامل في قواعد برمجية ضخمة وقابلة للتعديل. ورغم أنها أبطأ وتتطلب موارد حوسبة أكبر، إلا أن نماذج الانتشار توفر أداة قوية لإعادة هيكلة الكود، وإصلاح الأخطاء، وأي سيناريو تفوق فيه جودة المخرجات وصحتها النحوية أهمية السرعة المجردة. ويبدو أن المسار الأكثر واعداً للمضي قدماً هو سير عمل هجين يجمع بين قوة الصياغة السريعة للنماذج ذاتية الانحدار وقدرة الصقل الشاملة لنماذج الانتشار.
