تُثبت هذه الورقة أن تضمينات CodeBERT المجمدة تعكس بشكل منهجي إشارات التشابه لأزواج الطفرات المتباعدة سلوكيًا، حيث تصنفها بشكل خاطئ على أنها أكثر تشابهًا من الكود المتكافئ فعليًا، مما يكشف أن مثل هذه التضمينات تعكس التقارب السطحي بدلاً من التكافؤ السلوكي وتستلزم ضبطًا دقيقًا تباينيًا أو تحققًا قائمًا على التنفيذ لضمان موثوقية تحليل الكود.
المؤلفون الأصليون:Keletso J. Letsholo, Nourchene Elleuch Ben Ayed, Achraf Ghorbel, Muath Alrammal
في المشهد الواسع للبرمجيات الحديثة، غالبًا ما تُعامل البرامج كما لو كانت تتحدث لغة يمكن للحواسيب فهمها ومقارنتها فورًا. ولتفسير هذا التعقيد، طور الباحثون أدوات تترجم أسطر الكود إلى نقاط رياضية في فضاء عالي الأبعاد. تخيل هذه النقاط كأماكن على خريطة؛ إذا كان برنامجان متشابهين فيما يقومان به، فينبغي أن تكون نقاطهما قريبة من بعضهما البعض. هذه الطريقة، المعروفة باسم "التضمين" (embedding)، أصبحت وسيلة قياسية للبحث عن الكود، وإيجاد البرامج المكررة، أو التنبؤ بالأخطاء دون تشغيل البرمجيات. وتعتمد الأدوات الأكثر شيوعًا لهذه المهمة على نماذج مدربة على كميات هائلة من النصوص والأكواد، حيث تتعلم التعرف على الأنماط في كيفية ترتيب الكلمات والرموز. وكان الافتراض السائد هو أنه إذا بدا برنامجان متشابهين جدًا في الظاهر —أي يشتركان في نفس الكلمات والبنية— فلا بد أنهما يقومان بنفس الشيء. هذا الاعتقاد يدعم العديد من الأنظمة الآلية التي تساعد المطورين في إدارة أكوادهم، لكنه يرتكز على حدس هش: وهو أن التشابه البصري يعني دائمًا التشابه الوظيفي.
لقد وضع فريق من الباحثين هذا الحدس تحت الاختبار من خلال تجربة صارمة، طرحوا فيها سؤالًا بسيطًا ولكنه خطير: ماذا يحدث عندما يبدو برنامجان متطابقين تقريبًا ولكن يقومان بعكس بعضهما تمامًا؟ لقد أنشأوا بيئة محكومة باستخدام آلاف المشكلات البرمجية الواقعية. ومن مجموعة تضم 800 تحدٍ متميز، جمعوا أزواجًا من الأكواد التي عُرف أنها صحيحة ومتكافئة وظيفيًا، مما يعني أنها تحل المشكلة بنفس الطريقة. ثم أنشأوا مجموعة ثانية من الأزواج عبر أخذ برنامج صحيح وإجراء تغيير واحد طفيف عليه —مثل قلب شرط من "نعم" إلى "لا"، أو استبدال علامة "أكبر من" بعلامة "أصغر من"، أو عكس ترتيب قائمة. كانت هذه التغييرات صغيرة بما يكفي لتبدو الأكواد متشابهة جدًا، لكنها كانت شديدة بما يكفي لجعل البرنامج يفشل في كل حالة اختبار يتم تشغيله ضدها. ثم قام الباحثون بتغذية كلا المجموعتين من الأزواج في أدوات مقارنة الكود القياسية لمعرفة ما إذا كانت الأدوات تستطيع التمييز بين البرنامج الصحيح ونظيره المعكوس والمكسور.
ولم تكن النتائج مجرد فشل في التمييز، بل كانت انقلابًا تامًا للواقع. فعندما قارنت الأدوات البرامج المكسورة والمعكوسة بنسخها الأصلية، صنفوها على أنها أكثر تشابهًا مما صنف بها برنامجين صحيحين مختلفين تمامًا كُتبا بشكل مستقل. في الواقع، كانت الأدوات مخطئة في أكثر من تسعة من كل عشر مقارنات. إن الدرجة الرياضية التي كان من المفترض أن تقيس مدى تطابق البرنامجين كانت في الواقع تقيس مدى تشابه مظهرهما. ولأن البرامج المكسورة تشاركت في كل كلمة وسطر تقريبًا مع النسخة الأصلية، رأت الأدوات أنها مطابقات مثالية، متجاهلة تمامًا حقيقة أن سلوكهما كان متضادًا تمامًا. حدثت هذه الظاهرة باستمرار عبر أنواع مختلفة من تغييرات الكود وإصدارات مختلفة من أدوات المقارنة، مما يشير إلى أن المشكلة ليست خللًا بسيطًا، بل هي عيب جوهري في كيفية تفسير هذه النماذج للكود عندما لا يتم تدريبها خصيصًا للبحث عن الاختلافات السلوكية.
ثم بحث الباحثون فيما إذا كان يمكن إصلاح هذا الخطأ من خلال تعديلات بسيطة ومنخفضة التكلفة لا تتطلب إعادة تدريب النماذج الضخمة. جربوا حيلًا رياضية مصممة لتوزيع نقاط الكود بشكل أكثر توازنًا في فضاؤها، آملين أن يجعل ذلك الاختلافات أكثر وضوحًا. كما جربوا دمج مقارنة الكود مع تحليل بنيوي يحصي عدد الأسطر المختلفة في شجرة الكود. ولم تنجح أي من هذه الطرق. بل في الواقع، جعل إضافة التحليل البنيوي المشكلة أسوأ؛ لأن البرامج المكسورة كانت متطابقة بنيويًا تقريبًا مع الأصول —حيث تختلف بسطر واحد فقط— لذا أعطى أداة التحليل البنيوي درجة تشابه عالية، مما عزز الخطأ بدلًا من تصحيحه. كانت الأدوات مركزة جدًا على المظهر السطحي للكود لدرجة أنها لم تستطع رؤية الانقلاب الوظيفي، حتى عندما حاول الباحثون صراحةً إجبارها على النظر بعمق أكبر.
تكشف هذه الدراسة عن نقطة عمياء حرجة في التكنولوجيا التي تدعم البحث عن الكود الحديث وكشف التكرار. هذه الأدوات ممتازة في العثور على الكود الذي يبدو متشابهًا، لكنها مضللة بشكل خطير عندما يُطلب منها الحكم على ما إذا كان قطعتان من الكود تقومان بنفس الشيء، خاصة عندما تكون إحداهما نسخة مكسورة وبسيطة من الأخرى. وجد الباحثون أنه بالنسبة لهذا النوع المحدد من الأخطاء، فإن النهج القياسي باستخدام النماذج الجاهزة والمسبقة التدريب ليس مجرد نهج غير دقيق، بل هو معكوس. وللتمييز بشكل موثوق بين دالة صحيحة ونقيضها السلوكي، لا يمكن للمطورين الاعتماد على درجات التشابه هذه وحدها. بدلاً من ذلك، يجب عليهم إما إعادة تدريب النماذج بأمثلة محددة لهذه الأخطاء، أو —وهو الأكثر موثوقية— تشغيل الكود فعليًا لمعرفة ما يفعله. وتخلص الدراسة إلى أنه ما لم تُجرَ هذه التغييرات، ستستمر الأنظمة التي تعتمد على درجات التشابه هذه في الخلط بين برنامج مكسور ومطابقة مثالية، مما قد يخفي أخطاء برمجية حرجة في وضح النهار.
ملخص تقني: التقارب الزائف في تضمينات الكود المجمدة
بيان المشكلة تعتمد مسارات البحث عن الكود، وكشف النسخ المتطابقة (clone detection)، والتنبؤ بالعيوب بشكل متكرر على تشابه جيب التمام (cosine similarity) فوق التضمينات المجمدة (frozen embeddings) من النماذج سابقة التدريب مثل CodeBERT، كبديل خفيف الوزن للتماثل السلوكي. والحدس السائد هو أن قطع الكود ذات الدلالات المتقاربة ستعطي درجات تشابه عالية. ومع ذلك، لم يتم التحقق من هذا الحدس بصرامة في السيناريوهات "الحساسة للقطبية" (polarity-sensitive) حيث تحسب قطعتان من الكود نتائج متضادة (على سبيل المثال، دالة تعيد القيمة القصوى لعددين مقابل دالة تعيد القيمة الدنيا).
تبحث هذه الورقة فيما إذا كانت تضمينات الكود المجمدة يمكنها التمييز بين الأزواج المتكافئة سلوكياً (حلول مكتوبة بشكل مستقل لنفس المشكلة) وأزواج الطفرات المتباعدة سلوكياً (طفرات أحادية الموقع تؤدي إلى عكس مخرجات البرنامج). يفترض المؤلفون أنه نظرًا لأن أزواج الطفرات قريبة لغوياً وهيكلياً من أصولها، بينما الأزواج المتكافئة متنوعة أسلوبياً، فإن نماذج التضمين المدربة على نمذجة لغة القناع (Masked Language Modeling) - دون إشارات تمييز القطبية - قد تفشل في الفصل بين هذه الفئات. وتحديداً، يختبرون ما إذا كانت إشارة التشابه تفشل فحسب (ضجيج عشوائي) أم أنها تنعكس (أي ترتيب الطفرات المتباعدة كأكثر تشابهاً من الأزواج المتكافئة).
المنهجية تنشئ الدراسة معياراً مضبوطاً مستمداً بالكامل من Project CodeNet Python800 لإزالة الارتباكات الناتجة عن اختلاف النطاق (domain-shift).
بناء مجموعة البيانات:
المصدر: 800 مسألة، لكل منها 300 عملية تقديم مقبولة في Python من 300 مستخدم.
الأزواج المتكافئة: 800 زوج من الحلول المكتوبة بشكل مستقل والمتحقق منها عبر التنفيذ (732 تم التحقق منها بواسطة Oracle، و67 تم التحقق من اتفاقها).
أزواج الطفرات: 1,833 زوجاً تم إنشاؤها عبر تحويلات أحادية الموقع في شجرة الإعراب المجردة (AST). يتم الاحتفاظ بالطفرات فقط إذا كانت "مقتولة" (أي تختلف مخرجاتها عن الأصل في كل مدخلات الـ Oracle القابلة للاستخدام).
فئات الطفرات:
COD (حذف/إدراج عامل شرطي): عكس الشروط (مثلاً، من if x إلى if not x).
ROR (استبدال عامل علاقة): استبدال العوامل بعكسها المنطقي (مثلاً، من < إلى >=).
AI (انعكاس خوارزمي): عكس العمليات الأساسية (مثلاً، تبديل min/max، أو عكس اتجاه الترتيب).
مجموعة التحليل: 2,617 زوجاً عبر 784 مسألة حيث توجد أزواج متكافئة وطفرات معاً.
التحقق: حقق التحقق من الموثوقية بين المقيمين (IRR) بواسطة اثنين من الباحثين (PhD) معامل كوهين كابا (κ) بقيمة 0.925.
التصميم التجريبي:
النماذج: ثلاثة مشفرات مجمدة: CodeBERT، وGraphCodeBERT، وUniXcoder.
الإعدادات: ثمانية إعدادات إجمالية، تشمل طبقات CodeBERT (6، 9، 12) مع استخدام كل من [CLS] وتجميع المتوسط (mean pooling).
المقاييس:
AUC-ROC: احتمالية أن يسجل الزوج المتكافئ درجة أعلى من زوج الطفرات. (الصدفة = 0.5؛ أقل من 0.5 يشير إلى انعكاس منهجي).
معدل التشابه العالي الزائف (FHSR): نسبة أزواج الطفرات التي تسجل أعلى من المئين 75 لتوزيع الأزواج المتكافئة.
تباعد جينسن-شانون (JSD): يقيس مقدار الفصل بين التوزيعات.
تصحيحات خالية من التدريب: تدرس الدراسة ما إذا كانت تصحيحات التماثل (Isotropy corrections) مثل (Whitening، أو All-but-the-top) أو مشفر مدرب تباينياً ومجمد (CodeSage) يمكن أن تصلح هذا الفشل.
النموذج الهجين (RQ3): نموذج هجين خالٍ من التدريب يجمع بين تشابه جيب التمام ومسافة تحرير AST المعيارية (باستخدام APTED) لاختبار ما إذا كانت الإشارات الهيكلية يمكن أن تصحح خطأ القطبية.
النتائج الرئيسية
الانعكاس المنهجي (RQ1): عبر جميع إعدادات التضمين الثمانية، تفشل النماذج في التمييز. الـ AUC أقل بكثير من مستوى الصدفة 0.5، حيث يتراوح بين 0.017 (UniXcoder) و 0.090 (CodeBERT CLS, Layer 12). يشير هذا إلى أنه في حوالي 9 من كل 10 مقارنات، يتم تسجيل زوج طفرات متباين سلوكياً كأكثر تشابهاً مع أصله من زوج حلول صحيحة مكتوبة بشكل مستقل.
الـ FHSR مرتفع باستمرار (من 0.870 إلى 0.978)، مما يعني أن جميع أزواج الطفرات تقريباً تتجاوز العتبة المستخدمة لتحديد الكود "المتشابه بما يكفي".
يستمر الفشل حتى عند التحكم في تداخل الرموز (Token overlap) (المجموعات الفرعية المتطابقة لا تزال تظهر AUC < 0.5) وضمن مقارنات المرساة المشتركة (shared-anchor comparisons).
الاتساق عبر الفئات (RQ2): الانعكاس موحد عبر أنواع الطفرات. تُظهر فئات COD وROR وAI معدلات ارتباك متماثلة إحصائياً (FHSR ≈ 0.87 لجميع الفئات). وبينما يساهم تداخل الرموز في الارتباك، إلا أنه لا يفسره بالكامل؛ إذ أن هندسة التضمين نفسها هي التي تقود هذا التقارب.
فشل التصحيحات الخالية من التدريب (RQ1 & RQ3):
تصحيحات التماثل (Isotropy Corrections): تطبيق تحويلات Whitening أو "All-but-the-top" على التضمينات أدى إلى تفاقم عدم القدرة على التمييز (انخفض الـ AUC إلى ما يقرب من 0.004–0.024)، حيث أدى إزالة المكون غير المتماثل إلى كشف التقارب السطحي.
المشفر التبايني: أظهر مشفر مدرب تباينياً ومجمد (CodeSage) انعكاساً للتشابه أيضاً (AUC = 0.016)، مما يشير إلى أن أهداف التباين القياسية بدون أزواج سالبة محددة للقطبية غير كافية.
النموذج الهجين: دمج تشابه جيب التمام مع مسافة تحرير AST (RQ3) عمّق الفشل. نظرًا لأن الطفرات أحادية الموقع تكون متطابقة هيكلياً تقريباً مع أصولها (مسافة AST ≈ 0)، فإن المصطلح الهيكلي يمنحها تشابهاً عالياً، مما يعزز التصنيف الخاطئ. حقق أفضل نموذج هجين AUC قدره 0.002، ووصل الـ FHSR إلى 1.000.
الأهمية والادعاءات تدعي الورقة أن الفشل ليس عيباً متأصلاً في قدرة CodeBERT على أداء مهامه الأصلية (البحث عن الكود، كشف النسخ المتطابقة من النوع 1 و2)، بل هو نتيجة لتطبيق تشابه التضمينات المجمدة على قرارات التكافؤ الحساسة للقطبية.
التقارب السطحي مقابل التكافؤ السلوكي: يعكس التشابه العالي في جيب التمام في هذا السياق التقارب السطحي (التطابق اللغوي والهيكلي) بدلاً من الاتفاق السلوكي.
محدودية الاستدلالات (Heuristics): توضح الدراسة أن الإصلاحات الخالية من التدريب - سواء كانت هندسية (تصحيحات التماثل) أو هيكلية (مسافة AST) - لا يمكنها إصلاح هذا الانعكاس المحدد. في الواقع، يعمل التشابه الهيكلي كعامل مربك يعزز الخطأ لأن الطفرات هي "توائم هيكلية" لأصولها.
الآثار العملية: يجب على الممارسين الذين يعتمدون على تضمينات CodeBERT المجمدة في البحث عن الكود، أو فحص النسخ المتطابقة، أو التنبؤ بالعيوب التي تتضمن كوداً ذا منطق معكوس، عدم الوثوق بدرجات التشابه العالية كدليل على التكافؤ الوظيفي. تخلص الورقة إلى أن الضبط الدقيق التبايني (Contrastive Fine-tuning) (مع أزياء سالبة محددة للقطبية) أو التحقق القائم على التنفيذ هما المسلكان الضروريان لحل هذا الغموض، حيث لا توجد إشارة متاحة حالياً خالية من التدريب يمكنها التمييز بين هذه الأزواج.
نطاق النتائج محصور في لغة Python ونماذج التضمين المختبرة. ويشير المؤلفون إلى أنه بينما تم إثبات هذا الانعكاس في هذا المعيار الضبط، فإن قابلية التطبيق على كود الإنتاج أو لغات أخرى تظل سؤالاً تجريبياً مفتوحاً.