لايتكس
مُلخّص
يشكّل مخزون StackOverflow الضخم من الأسئلة تحدياً للتوسيم نظراً لمحدودية الأمثلة الموسومة. نعالج هذه الفجوة باستخدام RoBERTa+MAML، وهي طريقة للتعرّف على الكيانات الاسمية بعدد قليل من الأمثلة تستفيد من التعلم البيني. تم تقييم نهجنا على مجموعة بيانات StackOverflow NER (27 نوعاً من الكيانات)، وحققنا تحسناً بنحو 5\% في نقاط F1 مقارنة بالنموذج الأساسي. علاوةً على ذلك، عزّزنا الأداء بشكل إضافي عبر معالجة العبارات المتخصصة بالمجال.
مقدمة
يطرح تنامى محتوى البرمجة على الإنترنت تحديات في فهم واستخراج المعلومات المتعلقة بالبرمجيات. منتدى StackOverflow، كأكبر منتدى للبرمجة، يضم أكثر من 15 مليون سؤال. لفهم هذا الكم الهائل بفعالية، يتطلب الأمر تحديد الكيانات المسماة (NEs). ومع ذلك، يحتاج التعلم الخاضع للإشراف الكامل للتعرّف على الكيانات المسماة (NER) بيانات موسومة واسعة النطاق، وهو ما يتطلب موارد عالية. استجابةً لذلك، نقترح التعلم بعدد قليل من الأمثلة لتمكين التعرّف الدقيق على الكيانات مع أقل قدر من بيانات التوسيم. يمكن أن يُطبق نهجنا في المهام المتعلقة بالبرمجيات مثل استرجاع المعلومات، والإجابة على الأسئلة، وتلخيص المقالات.
يشير mai2018fine إلى التعرّف الدقيق على الكيانات المسماة عبر تصنيفها إلى فئات أكثر تحديداً. وفي بعض الأحيان تكون بنية البيانات الموسومة غير مباشرة، مما يزيد من صعوبة التوسيم. نظراً للتكلفة العالية للتوسيم اليدوي، يبدو التعلم بعدد قليل من الأمثلة حلاً عملياً. عبر تدريب النماذج على أمثلة موسومة قليلة، نحقق تعرفاً دقيقاً وفعالاً للكيانات المسماة. في هذه الورقة نقدم دراسة حول التعلم بعدد قليل من الأمثلة في مجال البرمجيات على مجموعة بيانات StackOverflow NER (codener). اقترحنا نموذجاً يستفيد من شبكة انتباه لاستخراج المعلومات من شظايا الكود والنص لتوليد نتائج أولية عند تحديد 20 نوعاً من الكيانات المتعلقة بالبرمجيات. تشمل مساهماتنا:
- نقترح وحدة لشرح تسمية الكيانات المتعلقة بالبرمجيات باستخدام عدد قليل من الأمثلة
- نولد النتائج الأولى على مجموعة بيانات StackOverflow NER
الأعمال ذات الصلة
شهدت قاعدة المعرفة البرمجية العديد من الدراسات. من الأمثلة: تحسين قياس جودة السؤال في StackOverflow (ravi)، واستخراج الأسئلة والأجوبة ذات الصلة في StackOverflow (shirani). مع ذلك، تفتقر هذه الأبحاث إلى استخدام تقنيات معالجة اللغة الطبيعية لتحديد الكيانات المسماة في سياق البرمجيات.
أُجريت أعمال كثيرة في التعرّف على الكيانات المسماة، حيث عالج (Li19, li2023deception) قضايا استرجاع المعلومات والأونتولوجيا في نطاقات محددة. واقترح (qun) تعلماً بدون أمثلة قابل للنقل بين المجالات للتعرّف على الكيانات. مؤخراً، أصبح التعلم العميق شائعاً في NER، خاصة مع نماذج مدربة مسبقاً مثل BERT (bert) وRoBERTa (roberta). على الرغم من ذلك، يظل التعرّف على الكيانات مهمة تستغرق وقتاً طويلاً وتتطلب خبراء مجال لتوسيم بيانات ضخمة. طُوّرت عدة منهجيات للتعرّف الدقيق بعدد قليل من الأمثلة، منها خط أنابيب fgner وطرق التوليد التناقضي fewshotner وطرق التعلّم بياني التوليد (pmlr-v202-zeng23c, zeng23acm). ومع ذلك، لم يتم حتى الآن العمل على التعرّف على الكيانات المسماة الدقيقة بعدد قليل من الأمثلة في مجال البرمجيات.
هناك أيضاً عمل codener للتعرّف على الكيانات المسماة في مجال البرمجة الحاسوبية. يهدف هذا العمل إلى تمييز الكيانات المسماة في StackOverflow، وقد درّبوا نموذجهم على BERT مع دمج التضمينات السياقية وتضمينات المجال الخاصة.
تعلم الاستدعاء:
يحول تعلم الاستدعاء المهام التقليدية في معالجة اللغة الطبيعية إلى مشكلات تنبؤية للفتحات غير المملوءة. في مهام التعرّف بعدد قليل من الأمثلة، يضيف (fgner, fewshotner) قالباً لاستدعاء الكيان بعد الجملة الأصلية.
التعلم البيني:
يوصف التعلم البيني بأنه "تعلم التعلم". ونظراً لأن تدريب نموذج دقيق يتطلب عادةً بيانات موسومة وفيرة، بينما تكون التوسيمات في نطاق البرمجيات محدودة، يتيح التعلم البيني تهيئة أفضل للنموذج ليتكيف سريعاً مع مهمات جديدة. طبق (Decomposed) خوارزمية MAML وقدم نموذج MAML-ProtoNet للتعرّف بعدد قليل من الأمثلة.
الطريقة
بحسب علمنا، لم تُجرَ دراسات كافية لتطبيق التعلم بعدد قليل من الأمثلة على مجموعة بيانات StackOverflowNER. أجرت مجموعة 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 لحساب احتمالات الكلمات، ثم معيار لغوي لتحويل احتمالات الكلمات إلى احتمالات التسميات، ونعتمد التباين 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}}\) ونحدث المعاملات داخلياً بحسب المعادلة [eqn7]. ثم نقيس الأداء على \(D_{i}^{\text{query}}\) ونجمع الخسائر عبر المهام لتحديث التهيئة العامة كما في المعادلتين [eqn8] و[eqn9].
مرحلة الاختبار البيني
في هذه المرحلة، نستخدم المعاملات المحدثة لتحسين النموذج على مجموعة تدريب StackOverflow ثم نجري التنبؤ على مجموعة الاختبار.
التجربة
مجموعة البيانات
في هذه المهمة، نستخدم مجموعة بيانات NER من StackOverflow (المعروفة باسم codener)، التي تضم أكثر من 1,237 موضوعاً من الأسئلة والأجوبة على مدى 10 سنوات و27 نوعاً من الكيانات. تشمل كيانات الكود: الفئة، المتغير، الكود ضمن السطر، الوظيفة، المكتبة، القيمة، نوع البيانات، والعلامة (HTML/XML). وتشمل كيانات اللغة الطبيعية: التطبيق، عنصر واجهة المستخدم، اللغة، هيكل البيانات، الخوارزمية، نوع الملف، اسم الملف، الإصدار، الجهاز، نظام التشغيل، الموقع الإلكتروني، واسم المستخدم. نخطط أيضاً لاستخدام بيانات إضافية مأخوذة عشوائياً من مستودعات GitHub.
إعدادات التجربة
أخذ عينات لقليل اللقطات. نجري تجربة التعلم بخمس حالات (5-shot) على مجموعة بيانات StackOverflow NER باختيار خمس عينات تدريبية عشوائياً في كل تجربة. أجرينا كذلك تجربة اختيار خمس حالات يدوياً لتحسين دقة النموذج.
عينات التدريب الأساسي. تحتوي مجموعة بيانات Few-NERD على 66 نوعاً دقيقاً من الكيانات. نقوم بمرحلة التدريب الأساسي عبر 40 مهمة، حيث نأخذ لكل مهمة عينة عشوائية من إعداد 20-حالة-27-طريقة، ثم نقسمها إلى مجموعة دعم 5-حالة-27-طريقة واستفسار 15-حالة-27-طريقة.
إعدادات المعاملات الفائقة. نعتمد نموذج 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.
دراسة حالة لمجموعة تدريب من 5 لقطات
لاحظنا أن درجة 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 الأساسي. بَيّنت النتائج أن التعلم البيني أداة قوية لمهام التعرف المتخصصة والقليلة العينات، وأن معالجة العبارات المتخصصة واستخراج الأنماط المعتمدة على المعرفة يعززان الدقة. نتوقع استفادة المهام المستقبلية في استخراج المعلومات المتعلّقة بالبرمجيات والإجابة على الأسئلة من هذه التقنيات. نسعى مستقبلاً إلى توسيع تنوع البيانات واستكشاف تشكيلات مختلفة لمجموعات الدعم والاستفسار لتعزيز فعالية التعلم البيني.