مُلخّص
يشكّل الرصيد الضخم من أسئلة StackOverflow تحدّياً لوسم البيانات بسبب محدودية الأمثلة المُوسومة. نعالج هذه الفجوة باستخدام RoBERTa+MAML، وهي طريقة للتعرُّف على الكيانات المُسمّاة بعددٍ قليلٍ من الأمثلة تستفيد من التعلُّم الفوقي. قيّمنا نهجنا على مجموعة بيانات StackOverflow NER (تضمّ 27 نوعاً من الكيانات)، وحققنا تحسّناً بنحو 5\% في نقاط F1 مقارنةً بالنموذج الأساسي. علاوةً على ذلك، عزّزنا الأداء إضافياً عبر التعامل مع العبارات المتخصِّصة بالمجال.
مقدمة
يطرح تَنَامِي محتوى البرمجة على الإنترنت تحدّياتٍ في فهم واستخراج المعلومات المتعلِّقة بالبرمجيّات. يُعَدّ منتدى StackOverflow أكبر منتدى للبرمجة، إذ يضمّ أكثر من 15 مليون سؤال. ولتفهم هذا الكمّ الهائل بفاعلية، يلزم تحديد الكيانات المُسمّاة (NEs). غير أنّ التعلُّم الخاضع للإشراف الكامل للتعرُّف على الكيانات المُسمّاة (NER) يتطلّب بيانات موسومة واسعة النطاق، وهو ما يستنزف الموارد. استجابةً لذلك، نقترح التعلُّم بعددٍ قليلٍ من الأمثلة لتمكين التعرُّف الدقيق على الكيانات بأقلّ قدرٍ من بيانات الوسم. ويمكن تطبيق نهجنا في مهامّ البرمجيات مثل استرجاع المعلومات، والإجابة عن الأسئلة، وتلخيص المحتوى.
يشير mai2018fine إلى التعرُّف الدقيق على الكيانات المُسمّاة عبر تصنيفها إلى فئات أكثر تحديداً. وكثيراً ما تكون بُنى البيانات المُوسومة مُلتبِسة، ما يزيد صعوبة الوسم. ونظراً للتكلفة العالية للوسم اليدوي، يبدو التعلُّم بعددٍ قليلٍ من الأمثلة حلاً عملياً. عبر تدريب النماذج على أمثلة موسومة قليلة، نُحَقِّق تعرُّفاً دقيقاً وفعالاً للكيانات المُسمّاة. في هذه الورقة نُقدِّم دراسة حول التعلُّم بعددٍ قليلٍ من الأمثلة في مجال البرمجيات على مجموعة بيانات StackOverflow NER (codener). نقترح نموذجاً يستفيد من شبكة انتباه لاستخراج المعلومات من مقاطع الشيفرة والنص لتوليد نتائج أوليّة عند تحديد 27 نوعاً من الكيانات المتعلِّقة بالبرمجيات. تشمل مساهماتنا:
- نقترح إطاراً للتعرُّف على الكيانات المرتبطة بالبرمجيات بعددٍ قليلٍ من الأمثلة.
- نولّد النتائج الأوّلية على مجموعة بيانات StackOverflow NER.
الأعمال ذات الصلة
شهد مجال معرفة البرمجيات العديد من الدراسات؛ من أمثلتها: تحسين قياس جودة الأسئلة في StackOverflow (ravi)، واستخراج الأسئلة والأجوبة ذات الصلة في StackOverflow (shirani). ومع ذلك، تفتقر هذه الأعمال إلى توظيفٍ منهجيّ لتقنيات معالجة اللغات الطبيعية من أجل تحديد الكيانات المُسمّاة في سياق البرمجيات.
أُنجِزت أعمال كثيرة في التعرُّف على الكيانات المُسمّاة؛ إذ تناولت دراساتٌ مثل (Li19, li2023deception) قضايا استرجاع المعلومات وبناء الأنطولوجيا في نُطُق محدّدة. واقترح (qun) تعلّماً صفريّ اللقطة قابلَ النقل بين المجالات للتعرُّف على الكيانات. حديثاً، غدا التعلُّم العميق شائعاً في NER، ولا سيّما مع النماذج المُدرَّبة مُسبقاً مثل BERT (bert) وRoBERTa (roberta). على الرغم من ذلك، يظلّ التعرُّف على الكيانات مهمّةً تستغرق وقتاً وتحتاج خبراءَ مجال لوسم كمّيات ضخمة من البيانات. طُوِّرت عدّة منهجيات للتعرُّف الدقيق بعددٍ قليلٍ من الأمثلة، منها خطّ أنابيب fgner، وطرائق التوليد التبايني fewshotner، وطرائق التعلُّم التوليدي القائم على الرسوم البيانية (pmlr-v202-zeng23c, zeng23acm). ومع ذلك، لم يُعَالَج بعدُ بصورةٍ كافية التعرُّفُ الدقيق بعددٍ قليلٍ من الأمثلة في نطاق البرمجيات.
يُعَدّ عمل codener من أوائل الجهود في التعرُّف على الكيانات المُسمّاة في ميدان البرمجة الحاسوبية؛ إذ استهدف تمييز الكيانات المُسمّاة في StackOverflow، ودُرِّب النموذج على BERT مع دمج التضمينات السياقية وتضمينات المجال الخاصّة.
التعلُّم المُعتمِد على المُوجِّهات (Prompt-based):
يحوّل التعلُّم المُعتمِد على المُوجِّهات مهامّ معالجة اللغات الطبيعية التقليدية إلى مسائل تنبّؤ بملء مواضع مُقنَّعة. في مهامّ التعلُّم بعددٍ قليلٍ من الأمثلة، يضيف (fgner, fewshotner) قالباً مُوجِّهاً لاستخراج الكيان بعد الجملة الأصلية.
التعلُّم الفوقي (Meta-learning):
يُوصَف التعلُّم الفوقي بأنّه "تعلُّمُ كيفيّةِ التعلُّم". ولأنّ تدريب نموذجٍ دقيقٍ يستلزم عادةً بياناتٍ موسومة وفيرة، في حين تكون الوسوم في نطاق البرمجيات محدودة، يتيح التعلُّم الفوقي تهيئةً أفضل لمعاملات النموذج بحيث يتكيّف سريعاً مع مهمّاتٍ جديدة. طبّق (Decomposed) خوارزمية MAML وقدّم نموذج MAML-ProtoNet للتعلُّم بعددٍ قليلٍ من الأمثلة.
الطريقة
بحسب علمنا، لم تُجرَ دراساتٌ كافية لتطبيق التعلُّم بعددٍ قليلٍ من الأمثلة على مجموعة بيانات StackOverflow NER. قدّم مؤلّفو codener دراسةً إشرافيةً منهجية على هذه المجموعة، لكنّها تواجه قيوداً: أوّلاً، ضمن مهامّ المجال، يحتاج الوسم إلى خبراء ويستغرق وقتاً طويلاً. ثانياً، يستغرق تدريب BERT داخل النطاق أكثر من شهرٍ على 152 مليون جملة من StackOverflow. نستكشف هنا نموذجين للتعلُّم بعددٍ قليلٍ من الأمثلة: الأوّل هو الضبطُ الدقيق المُعتمِد على المُوجِّهات، والثاني يدمج التعلُّم الفوقي للتكيّف مع مهامّ المجال المتخصِّصة.
تصنيف الكيانات بعددٍ قليلٍ من الأمثلة
نُعرِّف في هذا القسم مشكلةَ تصنيف الكيانات بعددٍ قليلٍ من الأمثلة: تحديدَ نوع الكيان في جملة باستخدام عددٍ محدودٍ من عيّنات التدريب. المُدخلات هي تسلسل من رموز النص \(\textbf{x}=\{t_{1},t_{2},\ldots,\textbf{m},\ldots,t_{T}\}\)، حيث \(m = \{t_{i},\ldots,t_{j}\}\) هو تسلسل كيان مكوّن من \((j-i+1)\) رمزاً، و\(T\) هو الطول الكلّي للجملة. المخرجات هي تسمية نوع الكيان \(y \in Y\)، حيث \(Y\) هي مجموعة التسميات \(\{y_{1},\ldots,y_{n}\}\). في التعلُّم ب\(K\)-مثال، لدينا \(K\) عيّنات تدريبية لكل فئة.
الضبط الدقيق المُعتمِد على المُوجِّهات
اعتمدنا إطار العمل المقترَح من Huang بوصفه نموذجاً أساسياً (fewshotner). يوضّح الشكل المشار إليه الإطارَ العام للضبط الدقيق المُعتمِد على المُوجِّهات. في هذا الأسلوب، نُدخل الجملة مع قالبٍ يتضمّن موضعاً مُقنَّعاً \([MASK]\) لتمثيل التنبّؤ المطلوب. بعد المعالجة بواسطة مُشفِّر النموذج المُدرَّب مُسبقاً \(\theta_{0}\) (مثل RoBERTa)، نحصل على التمثيل السياقي \(h_{m}\) لرمز \([MASK]\). ثم يُنتج رأسُ النموذج توزيعَ احتمال على المفردات \(\mathcal{V}\). نستخدم Softmax لحساب احتمالات الكلمات، ثم مُلفِّظاً (verbalizer) لتحويل احتمالات الكلمات إلى احتمالات التسميات، ونعتمد تنافُر KL دالّةَ خسارة لتقليل الفارق بين التنبّؤات والهدف.
التعلُّم الفوقي المُستقلّ عن النموذج
لتحسين الأداء في المهامّ المتخصِّصة بالمجال، ندمج التعلُّم الفوقي المُستقلّ عن النموذج (finn2017model). الفكرة العامّة هي تدريب النموذج على مهامّ متعدّدة للحصول على تهيئةٍ أفضل للمعاملات، بما يُتيح له التعلُّم بسرعة على مهامّ جديدة. نُطبّق خوارزمية MAML عبر مرحلتين: التدريب الفوقي على \(\xi_{\text{train}}\) والاختبار الفوقي على \(\xi_{\text{test}}\)، مع إعداد \(K\)-shot-\(N\)-way.
مرحلة التدريب الفوقي
في هذه المرحلة، ندرّب النموذج على مجموعة بياناتٍ عامّة عبر N مهام. لكلّ مهمّة، نأخذ عيّنة \((D_{i}^{\text{sup}} , D_{i}^{\text{query}})\) من \(\xi_{\text{train}}\) ونُحدِّث المعاملات داخليّاً بحسب المعادلة (7). ثم نقيس الأداء على \(D_{i}^{\text{query}}\) ونجمع الخسائر عبر المهام لتحديث التهيئة العامّة كما في المعادلتين (8) و(9).
مرحلة الاختبار الفوقي
في هذه المرحلة، نستخدم المعاملات المُحدَّثة لتحسين النموذج على مجموعة تدريب StackOverflow ثم نُجري التنبّؤ على مجموعة الاختبار.
التجربة
مجموعة البيانات
نستخدم في هذه المهمّة مجموعة بيانات NER من StackOverflow (المعروفة باسم codener)، التي تضمّ أكثر من 1,237 موضوعاً من الأسئلة والأجوبة على مدى 10 سنوات و27 نوعاً من الكيانات. تشمل كيانات الشيفرة: الصنف، المتغيِّر، الشيفرة المُضمَّنة، الدالّة، المكتبة، القيمة، نوع البيانات، والوسم (HTML/XML). وتشمل كيانات اللغة الطبيعية: التطبيق، عنصر واجهة المستخدم، اللغة، بُنية البيانات، الخوارزمية، نوع الملف، اسم الملف، الإصدار، الجهاز، نظام التشغيل، موقع الويب، واسم المستخدم. ونخطّط أيضاً لاستخدام بيانات إضافية مأخوذة عشوائياً من مستودعات GitHub.
إعدادات التجربة
أخذ العيّنات لسيناريو قليلِ الأمثلة. نجري تجربة التعلُّم بخمسة أمثلة لكلّ فئة (5-shot) على مجموعة بيانات StackOverflow NER باختيار خمس عيّنات تدريبية عشوائياً في كلّ تجربة. كما أجرينا تجربةً موازيةً تعتمد خمسَ عيّنات مُنتقاة يدوياً لتحسين دقّة النموذج.
التدريب الفوقي التمهيدي. تحتوي مجموعة بيانات Few-NERD على 66 نوعاً دقيقاً من الكيانات. نجري مرحلة التدريب الفوقي التمهيدي عبر 40 مهمّة؛ في كلّ مهمّة نُنشئ إعداد 27-way، ثم نقسّمه إلى مجموعة دعم 5-shot ومجموعة استعلام 15-shot.
إعدادات المعاملات الفائقة. نعتمد نموذج RoBERTa-base المُدرَّب مُسبقاً. أقصى طولٍ للتسلسل 128؛ حجم الدفعة الداخلي للضبط الدقيق 8؛ حجم الدفعة الخارجي للتحديث الفوقي 32؛ عدد عصور الضبط الدقيق في التدريب الفوقي 1؛ عدد عصور الضبط في الاختبار الفوقي 10؛ الحدّ الأقصى لخطوات التعلُّم الفوقي 15؛ معدل التعلُّم للّفوقي \(5\text{e}{-3}\)؛ ومعدل التعلُّم للتحديث الداخلي \(1\text{e}{-2}\). تمّ التدريب على GPU في Google Colab.
مقاييس التقييم. استخدمنا مقاييس Micro-F1 وMacro-F1.
النتائج
طبّقنا نموذج RoBERTa ونموذج RoBERTa+MAML على مجموعة بيانات التعرُّف على الكيانات المُسمّاة من StackOverflow. في التدريب، اخترنا عشوائياً خمس عيّنات لكلّ فئة من مجموعة البيانات. كما يظهر في الجدول [citation-guide]، بلغت درجة Micro-F1 لنموذج RoBERTa 0.3091 ودرجة Macro-F1 0.2837.
وبالمنهجية نفسها، طبّقنا نموذج RoBERTa+MAML، فبلغت درجة Micro-F1 0.3578 ودرجة Macro-F1 0.3197، ما يدلّ على زيادةٍ ملحوظة بفضل التعلُّم الفوقي.
كما نرى في الشكلين ([fig:highperform], [fig:lowperform])، تحسّنت فئات بُنية البيانات، عنصر واجهة المستخدم، نظام التشغيل، اسم المستخدم ونوع البيانات باستخدام RoBERTa+MAML.
دراسة حالة لمجموعة تدريب من خمسة أمثلة
لاحظنا أنّ درجة F1 لعدة فئات مثل نظام التشغيل، والمكتبة، واسم الدالّة، وعنوان IP، ولوحة المفاتيح، واللغة، واسم المتغيِّر، والخوارزمية كانت أدنى من المتوقّع. ويصعب التعرُّف على هذه الفئات عند تطبيق NER بخمسة أمثلة. وبعد فحص مجموعة التدريب العشوائية، وجدنا فيها كياناتٍ مكرّرة وأخرى غير ممثِّلة على نحوٍ كافٍ.
ولتفادي التأثيرات السلبية، اخترنا يدوياً عيّناتٍ تدريبية ذات معنًى وتمثيلٍ أفضل. وطبّقنا النهج نفسه على نموذج RoBERTa+MAML. كما يوضّح الجدول، ارتفعت درجة Micro-F1 بنحو 3\% ودرجة Macro-F1 بنحو 2\%.
يوضح هذا المثال أنّ فئة "المحتوى" غامضةٌ ضمن بيانات التدريب بخمسة أمثلة ولا تتمتّع بتمثيلٍ كافٍ، لذا قرّرنا اختيار عيّنات بديلة يدوياً لتعظيم أداء النموذج. أظهرت النتائج تفوّق RoBERTa+MAML مع البيانات المُنتقاة يدوياً على البيانات العشوائية، وعليه سنعتمد هذه البيانات في أعمالنا المستقبلية.
دراسة حالة لاستخراج الأنماط المعتمِدة على المعرفة
لاحظنا وجود فئاتٍ يصعب التعرُّف عليها لكنّها تتّبع أنماطاً واضحة. مثلاً، تُصنَّف جميع امتدادات الملفات الشائعة ضمن فئة "نوع الملف". كما في الجدول [table:maual]، يمكن استخدام التعابير النمطية لاستخراج امتدادات مثل csv، وjpg، وdoc. ويشير الجدول [table:extraction] إلى تحسّن درجة F1 لفئة "نوع الملف" من 0.345 إلى 0.49، مع دقّة 0.716 واسترجاع 0.372. ويمكن تعميم استخراج الأنماط المعتمِد على المعرفة على فئاتٍ أخرى لتحسين الدقّة الإجمالية ودرجة F1.
الخلاصة والأعمال المستقبلية
ركّزنا في دراستنا على التعرُّف على الكيانات المُسمّاة ضمن مجال برمجة الحاسوب باستخدام نموذج RoBERTa+MAML في مهمة 5-shot على مجموعة بيانات StackOverflow NER، حيث حقّقنا تحسيناتٍ كبيرة مقارنةً بنموذج RoBERTa الأساسي. تُبيّن النتائج أنّ التعلُّم الفوقي أداةٌ قويّة لمهامّ التعرُّف المتخصِّصة والقليلة الأمثلة، وأنّ معالجة العبارات المتخصِّصة واستخراج الأنماط المعتمِدة على المعرفة يُعزّزان الدقّة. ونتوقّع أن تستفيد المهام المستقبلية في استخراج المعلومات المتعلّقة بالبرمجيات والإجابة عن الأسئلة من هذه التقنيات. ونعتزم مستقبلاً توسيع تنوّع البيانات واستكشاف تشكيلات مختلفة لمجموعات الدعم والاستعلام لتعزيز فاعلية التعلُّم الفوقي.