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

Xinwei Chen

Kun Li

Jiangjian Guo

Tianyou Song

latex

مُلخّص

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

مقدمة

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

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

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

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

كما تم إجراء العديد من الأعمال في التعرّف على الكيانات المسماة، حيث درس (Li19, li2023deception) استرجاع المعلومات والأونتولوجيا في مجال محدد. يقترح (qun) تعلماً بدون أمثلة قابلاً للنقل بين المجالات للتعرّف على الكيانات المسماة في الوكلاء الموجهين للمهام. مؤخراً، أصبح التعلم العميق شائعاً في التعرّف على الكيانات المسماة، خاصة مع نماذج اللغة المدربة مسبقاً مثل BERT (bert) وRoBERTa (roberta). على الرغم من نماذج اللغة المدربة مسبقاً، يُعتبر التعرّف على الكيانات المسماة مهمة تستغرق وقتاً طويلاً وتتطلب جهداً كبيراً، حيث يتطلب خبراء المعرفة المجالية لتوسيم مجموعة كبيرة من تسميات المجال كمجموعة تدريب واختبار لجعل النموذج جيداً. تم إجراء العديد من الدراسات في التعرّف على الكيانات المسماة الدقيقة بعدد قليل من الأمثلة. طوّر (fgner) خط أنابيب تعلم فعال للتنبؤ بنوع الكيانات. طريقة أخرى هي استخدام مولد الحالات المتناقضة القائم على النوع لتوسيع مجموعة التدريب واستخدام تباين كولباك-لايبلر لحساب خسارة الحالات المولدة حديثاً (fewshotner). يستخدم (liu2023influence) خوارزمية اكتشاف تستفيد من صلة الأعمال المنشورة. يستخدم (pmlr-v202-zeng23c), (zeng23acm) تعلم الرسم البياني التوليدي لإيجاد صلة الكيان. ومع ذلك، حسب علمنا، لم يتم إجراء أي عمل على التعرّف على الكيانات المسماة الدقيقة بعدد قليل من الأمثلة في مجال البرمجيات.

هناك أيضاً مدونة للتعرّف على الكيانات المسماة الدقيقة لمجال البرمجة الحاسوبية (codener). الهدف من التعرّف على الكيانات المسماة في StackOverflow هو تحديد الكيانات الاسمية في مجال البرمجيات. تم تدريبهم في مجال Bert ودمجه مع التضمينات الكلمية السياقية والتضمينات المحددة للمجال.

تعلم الاستدعاء:

ينقل تعلم الاستدعاء المهام اللغوية الطبيعية التقليدية إلى مشاكل التنبؤ. يحتاج النموذج إلى التنبؤ بالمعلومات للفتحات غير المملوءة. لمهام كتابة الكيانات بعدد قليل من الأمثلة، يضيف (fgner), (fewshotner) قالب استدعاء يحتوي على الكيان المذكور بعد الجملة الأصلية.

التعلم البيني:

يوصف التعلم البيني بأنه "تعلم التعلم" بينما يتطلب تدريب نموذج جيد بيانات موسومة وفيرة، للمهمة في المجال، التوسيمات محدودة. يمكن أن يمكّن أسلوب التعلم البيني من تكييف النموذج أو تعميمه لمهام جديدة يواجهها أثناء التدريب. طبّق (Decomposed) التعلم البيني على التعرّف على الكيانات المسماة بعدد قليل من الأمثلة. قاموا بتهيئة نماذج اكتشاف الكيانات باستخدام التعلم البيني غير المتحيز للنموذج (MAML) واقترحوا MAML-ProtoNet لكتابة الكيانات بعدد قليل من الأمثلة، مما يسد الفجوات بين المجالات.

الطريقة

حسب أفضل معرفتنا، لم يتم إجراء أي بحث حول تصنيف الكيانات بالطريقة قليلة الأمثلة على مجموعة بيانات StackOverflowNER. قام تبسم بدراسة الطريقة الإشرافية على هذه المجموعة (codener). ومع ذلك، هناك عدة قيود. أولاً، بالنسبة للمهام داخل النطاق، فهي تتطلب جهداً كبيراً وتستغرق وقتاً طويلاً، حيث نحتاج عادة إلى خبراء في المجال للقيام بالتوثيق. ثانياً، يستغرق الأمر أكثر من 1 شهر لتدريب 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}\}\)، مما يشير إلى n فئات. التعلم ب \(K\)-مثال يعني أن هناك \(K\) أمثلة تدريبية لكل فئة. يمكننا تمثيل مجموعة البيانات التدريبية كما في المعادلة [eqn1]، حيث \(\textbf{m}\) هو \([MASK]\).

الضبط الدقيق بناءً على الأوامر

اخترنا الطريقة التي اقترحها هوانغ كنموذج أساسي (fewshotner). يوضح إطار العمل للضبط الدقيق بناءً على الأوامر في الشكل المحذوف. يقوم التعلم الخاضع للإشراف على تدريب نموذج باستخدام مدخلات معينة \(x\) للتنبؤ بالمخرجات \(y\) كـ \(P(y|x)\). بالنسبة لتعلم الأوامر، نحتاج إلى قالب يحتوي على معلومات غير مكتملة. نستخدم عادة رمز \([MASK]\) لتمثيل الفتحة غير المملوءة. على سبيل المثال، يمكن أن يكون قالباً صالحاً كما في المعادلة [eqn2],

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

نحتاج إلى اختيار الكلمة التي يمكن أن تحل محل رمز \([MASK]\). من خلال أخذ التمثيل السياقي \(h_{m}\)، يمكن لرأس نموذج اللغة المقنع الحصول على توزيع الاحتمال على المفردات بأكملها \(\mathcal{V}\). يمكننا استخدام وظيفة Softmax لتطبيع توزيع الكلمات. يمكننا الحصول على احتمال كلمة معينة بإعطاء التمثيل السياقي \(h_m\) لرمز \([MASK]\) كما هو موضح في المعادلة [eqn4],

حيث \(E \in \mathbb{R}^{\left| V \right| \times h}\) هي مصفوفة التضمين؛ \(\sigma(\cdot)\) هي وظيفة التنشيط؛ \(W_{1} \in \mathbb{R}^{h \times h}\) و \(b_{1} \in \mathbb{R}^{h}\) من نموذج اللغة المقنع المدرب مسبقاً.

بعد الحصول على احتمال كل كلمة w في المفردات \(\mathcal{V}\). نستخدم معياراً لغوياً لتعيين التنبؤ على المفردات إلى التنبؤ على العلامات. يمكننا حساب احتمال كل علامة بناءً على احتمال كل كلمة في المفردات كما هو موضح في المعادلة [eqn5],

نستخدم التباين KL كدالة خسارة لدينا. الهدف من التدريب هو تقليل خسارة التباين KL كما هو موضح في [eqn6],

حيث \(Y^{pre}\) هو التوزيع على العلامات، و \(Y^{target}\) هو ترميز ساخن للعلامة المستهدفة.

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

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

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

في مرحلة التدريب الأولى، يتم تدريب النموذج على مجموعة البيانات العامة. يتم تحديد النموذج على N مهام. لكل مهمة، نقوم بأخذ عينة \((D_{i}^{sup} , D_{i}^{query})\) من \(\xi_{train}\) ونؤدي تحديثاً داخلياً كما هو موضح في المعادلة [eqn7],

\[\label{eqn7} \phi_{i} \leftarrow \theta - \alpha \nabla_{\theta} \mathcal{L}(\theta, D_{i}^{sup})\]

حيث \(\alpha\) هو معدل التعلم للتحديث الداخلي

لتحسين سرعة الحوسبة، نستخدم تحديث التدرج الواحد. ثم نقيم \(\phi_{i}\) على \(D_{i}^{query}\) وننفذ التحديث الأولي بتجميع الخسائر في جميع المهام كما هو موضح في المعادلة [eqn8],

\[\label{eqn8} \sum_{T_{i}} \mathcal{L}_{T_{i}}(\phi_{i}, D_{i}^{query})\]

ونحدث معاملات النموذج \(\nabla_{\theta}\) كما يلي في المعادلة [eqn9],

\[\label{eqn9} \theta \leftarrow \theta - \beta \nabla_{\theta} \sum_{T_{i}} \mathcal{L}_{T_{i}}(\phi_{i}, D_{i}^{query})\]

حيث \(\beta\) هو معدل التعلم للتعلم الأولي.

الاختبار الفوقي

في الاختبار الفوقي، نستخدم معاملات محدثة لتحسين النموذج على مجموعة بيانات تدريب StackOverflow وإجراء التنبؤ على مجموعة البيانات الاختبارية.

التجربة

مجموعة البيانات

في هذه المهمة، سنستخدم مجموعة بيانات (NER) من (StackOverflow) (codener)، والتي تحتوي على أكثر من 1,237 موضوعاً من الأسئلة والأجوبة من أرشيف (StackOverflow) لمدة 10 سنوات مع 27 نوعاً من الكيانات. نحن معطون كيانات الكود وكيانات اللغة الطبيعية. تشمل كيانات الكود الفئة، المتغير، الكود داخل السطر، الوظيفة، المكتبة، القيمة، نوع البيانات، وعلامة (HTML XML). تشمل كيانات اللغة الطبيعية التطبيق، عنصر واجهة المستخدم، اللغة، هيكل البيانات، الخوارزمية، نوع الملف، اسم الملف، الإصدار، الجهاز، نظام التشغيل، الموقع الإلكتروني، واسم المستخدم. نخطط أيضاً لاستخدام بيانات إضافية من (Github) التي تم أخذ عينات عشوائية من المستودعات من (GitHub). يتم عرض مثال على مجموعة البيانات وتسميات الكيانات في الجدول [table:dataexp].

إعدادات التجربة

أخذ العينات لعدد قليل من الحالات. نقوم بإجراء التعلم ب 5-حالات على مجموعة بيانات StackOverflow NER من خلال أخذ عينات من 5 حالات لمجموعة التدريب في كل تشغيل للتجربة. كما أجرينا تجربة حيث قمنا باختيار 5 حالات يدوياً على مجموعة التدريب بأكملها لجعل تنبؤ النموذج أكثر دقة.

أخذ العينات للتدريب الأساسي. تحتوي مجموعة بيانات Few-NERD على 66 نوعاً دقيقاً من الكيانات في المجال العام. نقوم بمرحلة التدريب الأساسي في 40 مهمة. لكل مهمة، نقوم بأخذ عينات عشوائية من مجموعة بيانات 20-حالة-27-طريقة من Few-NERD. ثم نقسمها إلى مجموعة دعم 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. بالنسبة لمجموعة التدريب، قمنا باختيار خمس عينات عشوائياً لكل فئة من مجموعة بيانات التعرّف على الكيانات المسماة لـ StackOverflow كبيانات إدخال. كما هو موضح في الجدول [citation-guide]، فإن درجة Micro-F1 للنموذج الأساسي RoBERTa هي 0.3091 ودرجة Macro-F1 هي 0.2837.

كما قمنا بتطبيق نفس الطريقة لنموذجنا RoBERTa+MAML. درجة Micro-F1 للنموذج الأساسي RoBERTa+MAML هي 0.3578 ودرجة Macro-F1 هي 0.3197. لاحظنا زيادة كبيرة في درجة Micro-F1 باستخدام النموذج مع التعلم الفوقي.

كما يمكننا أن نرى في الشكل ([fig:highperform], [fig:lowperform])، فإن هيكل البيانات، عنصر واجهة المستخدم، نظام التشغيل، اسم المستخدم، وأنواع البيانات هي فئات يمكن لـ RoBERTa+MAML التعرّف عليها بشكل أفضل.

دراسة حالة لمجموعة تدريب من 5 لقطات

نلاحظ أن درجة F1 للعديد من الفئات (مثل نظام التشغيل، فئة المكتبة، اسم الوظيفة، IP لوحة المفاتيح، اللغة، اسم المتغير، والخوارزمية) أقل من المعتاد. هذه الفئات يصعب التعرّف عليها في تعلم التعرّف على الكيانات المسماة المحددة بـ 5 لقطات. بعد استكشاف مجموعة التدريب العشوائية الخاصة بنا، وجدنا أن مجموعة التدريب تحتوي على العديد من الكيانات المكررة وبعض الكيانات غير الواضحة.

لتجنب التأثير السلبي لمجموعة التدريب من 5 لقطات، نختار يدوياً بيانات التدريب ذات المعنى والتمثيلية. نجعل كل بيانات التدريب فريدة وتمثيلية.

نطبق أيضاً نفس الطريقة لنموذجنا RoBERTa+MAML. كما هو موضح في الجدول، تحسنت درجة Micro-F1 بحوالي 3% وتحسنت درجة Macro-F1 بحوالي 2%.

هذا مثال يوضح أن "المحتوى" غير واضح، والذي لا يحتوي على العمومية في بيانات التدريب من 5 لقطات. وبالتالي، نختار يدوياً بيانات التدريب البديلة من أجل تعظيم أداء النموذج. وفقاً للنتيجة، يتفوق نموذج RoBERTa+MAML مع بيانات التدريب المختارة يدوياً على بيانات التدريب العشوائية. وبالتالي، نعتمد بيانات التدريب المختارة يدوياً للأعمال المستقبلية.

دراسة حالة لاستخراج الأنماط المعتمدة على المعرفة

نلاحظ أن بعض الفئات يصعب التعرّف عليها ولكنها تحتوي على أنماط. على سبيل المثال، معظم أنواع الملفات موجودة ضمن مجموعات أنواع الملفات الشائعة. كما هو موضح في الجدول [table:maual]، يمكننا أداء استخراج الأنماط المعتمدة على المعرفة لاستخراج فئات معينة. على سبيل المثال، نستخدم التعبيرات النظامية لاستخراج امتدادات أسماء الملفات الشائعة، مثل csv، jpg، و doc. كما هو موضح في الجدول [table:extraction]، تم تحسين درجة F1 لفئة نوع الملف من 0.345 إلى 0.49. درجات الدقة والاسترجاع تصل إلى 0.716 و 0.372. يمكننا أيضاً تطبيق استخراج الأنماط المعتمدة على المعرفة على العديد من الفئات الأخرى، مما سيحسن بشكل كبير دقة التنبؤ الشاملة ودرجة F1.

الخلاصة والأعمال المستقبلية

في دراستنا، ركزنا على التعرّف على الكيانات المسماة المحددة بمجال في مجال برمجة الحاسوب. من خلال استخدام RoBERTa + MAML على مجموعة بيانات التعرّف على الكيانات المسماة StackOverflow لـ 5-shot، لاحظنا تحسينات كبيرة مقارنة بنموذج RoBERTa الأساسي. يأتي التعلم البيني كأداة قوية لمهام التعرّف على الكيانات المسماة المحددة بمجال وقليلة الأمثلة. بالإضافة إلى ذلك، ساهمت معالجة العبارات المحددة بالمجال واستخراج الأنماط المعتمدة على المعرفة في تحسين الدقة. نتوقع أن يستفيد التعلم البيني، ومعالجة العبارات المحددة بالمجال، والأنماط المعتمدة على المعرفة من المهام المستقبلية لاستخراج المعلومات المتعلقة بالبرمجيات والإجابة على الأسئلة. لتحسين منهجيتنا، نهدف إلى توسيع تنوع مجموعة بياناتنا واستكشاف مجموعات دعم العينات ومجموعات الاستعلام الإضافية، مما يعزز تأثير التعلم البيني.