التعرّف على الكيانات المسماة بقليل من الأمثلة في StackOverflow

Xinwei Chen

Kun Li

Jiangjian Guo

Tianyou Song

لايتكس

الملخص

يشكّل المخزون الضخم من الأسئلة في StackOverflow تحدياً لتوسيم البيانات نظراً لمحدودية الأمثلة الموسومة. نعالج هذه الفجوة باستخدام RoBERTa+MAML، وهي طريقة للتعرّف على الكيانات المسماة بقليل من الأمثلة تستفيد من التعلم البيني. تم تقييم نهجنا على مجموعة بيانات StackOverflow NER (27 نوعاً من الكيانات)، وحققنا تحسناً بنحو 5% في معيار F1 مقارنة بالنموذج الأساسي. علاوة على ذلك، عززنا الأداء أكثر عبر معالجة المصطلحات المتخصصة بالمجال.

مقدمة

يطرح تنامى محتوى البرمجة على الإنترنت تحديات في فهم واستخراج المعلومات المتعلقة بالبرمجيات. منتدى StackOverflow، كأكبر منتدى للبرمجة، يضم أكثر من 15 مليون سؤال. لفهم هذا الكم الهائل بفعالية، نحتاج إلى تحديد الكيانات المسماة (NEs). ومع ذلك، يتطلب التعلم المشرف لهدف التعرف على الكيانات المسماة (NER) بيانات موسومة واسعة النطاق، مما يستلزم موارد ضخمة. استجابة لذلك، نقترح التعلم بقليل من الأمثلة لتمكين التعرف الدقيق على الكيانات بأقل قدر من بيانات التوسيم. يمكن تطبيق نهجنا في مهام متعلقة بالبرمجيات مثل استرجاع المعلومات، والإجابة على الأسئلة، وتلخيص المقالات.

يشير mai2018fine إلى التعرّف الدقيق على الكيانات المسماة عبر تصنيفها إلى فئات أكثر تحديداً. وفي بعض الأحيان تكون بنية البيانات الموسومة غير مباشرة، مما يزيد من صعوبة التوسيم. نظراً لارتفاع تكلفة التوسيم اليدوي، يبدو التعلم بقليل من الأمثلة حلاً عملياً. عبر تدريب النماذج على أمثلة موسومة قليلة، نحقق تعرّفاً دقيقاً وفعالاً للكيانات المسماة. في هذه الورقة نقدم دراسة حول التعلم بقليل من الأمثلة في مجال البرمجيات على مجموعة بيانات StackOverflow NER (codener). اقترحنا نموذجاً يستفيد من شبكة انتباه لاستخراج المعلومات من شظايا الكود والنص لتوليد نتائج أولية عند تصنيف 20 نوعاً من الكيانات المتعلقة بالبرمجيات. تشمل مساهماتنا:

الأعمال ذات الصلة

شهد مجال المعرفة البرمجية العديد من الدراسات، من بينها تحسين قياس جودة السؤال في StackOverflow (ravi) واستخراج الأسئلة والأجوبة ذات الصلة في نفس المنتدى (shirani). مع ذلك، تفتقر هذه الأبحاث إلى استخدام تقنيات معالجة اللغة الطبيعية لتحديد الكيانات المسماة في سياق البرمجيات.

أُجريت أعمال عديدة في التعرّف على الكيانات المسماة، حيث عالج (Li19, li2023deception) قضايا استرجاع المعلومات والأونتولوجيا في نطاقات محددة. واقترح (qun) تعلماً بلا أمثلة قابل للنقل بين المجالات للتعرّف على الكيانات. مؤخراً، أصبح التعلم العميق شائعاً في NER، خاصة مع نماذج مدرّبة مسبقاً مثل BERT و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},...,\textbf{m},...,t_{T}\}\)، حيث \(m = \{t_{i},...,t_{j}\}\) هو تسلسل كيان مكون من \((j-i+1)\) رمزاً، وT هو طول الجملة. المخرج هو تسمية نوع الكيان \(y \in Y\)، حيث \(Y\) هي مجموعة التسميات \(\{y_{1},...,y_{n}\}\). في إعداد \(K\)-shot، تكون هناك \(K\) عينات تدريبية لكل فئة.

الضبط الدقيق المعتمد على الأوامر

اعتمدنا إطار العمل المقترح من Huang كنموذج أساسي (fewshotner). يوضّح الشكل العام للضبط الدقيق المعتمد على الأوامر النقاط الأساسية. في هذا الأسلوب نُدخل الجملة مع قالب يتضمن فتحة \([MASK]\) لتمثيل التنبؤ المطلوب. بعد المعالجة بواسطة المشفر المدرب مسبقاً \(\theta_{0}\) (مثل RoBERTa)، نحصل على التمثيل السياقي \(h_{m}\) لرمز \([MASK]\). ثم يقدم رأس النموذج توزيع احتمال عبر المفردات \(\mathcal{V}\)، ونستخدم Softmax لحساب احتمالات الكلمات، وبعدها دالة لغوية لتحويل احتمالات الكلمات إلى احتمالات التسميات، ونعتمد دالة خسارة KL لتقليل الفارق بين التنبؤات والهدف.

التعلّم البيني المستقل عن النموذج

لتحسين الأداء في المهام المتخصصة بالمجال، ندمج التعلّم البيني المستقل عن النموذج (finn2017model). الفكرة العامة هي تدريب النموذج على مهام متعددة للحصول على تهيئة أولية أفضل للمعاملات، ما يتيح له التعلم بسرعة على مهام جديدة. نطبق خوارزمية MAML عبر مرحلتين: التدريب البيني على \(\xi_{train}\) والاختبار البيني على \(\xi_{test}\)، مع إعداد \(K\)-shot-\(N\)-way.

مرحلة التدريب الأولى

في هذه المرحلة ندرب النموذج على مجموعة البيانات العامة عبر N مهام. لكل مهمة نأخذ عينة \((D_{i}^{sup},D_{i}^{query})\) من \(\xi_{train}\) ونحدّث المعاملات داخلياً وفق المعادلة [eqn7]. ثم نقيس الأداء على \(D_{i}^{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؛ معدل التعلم للتعلم الأساسي 5e-3؛ معدل التعلم للتحديث الداخلي 1e-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 الأساسي. بيّنت النتائج أن التعلّم البيني أداة قوية لمهام التعرّف المتخصصة والقليلة العينات، وأن معالجة المصطلحات المتخصصة واستخراج الأنماط المعتمدة على المعرفة يعززان الدقة. نتوقع استفادة المهام المستقبلية في استخراج المعلومات المتعلقة بالبرمجيات والإجابة على الأسئلة من هذه التقنيات. نسعى مستقبلاً إلى توسيع تنوع البيانات واستكشاف تشكيلات مختلفة لمجموعات الدعم والاستفسار لتعزيز فعالية التعلّم البيني.