شعار زيفيرنت

ضبط BERT لتصنيف التغريدات باستخدام HuggingFace

التاريخ:

By راجان شودري، QA Engineer في Mcafee


ضبط BERT لتصنيف التغريدات مع HuggingFace

تمثيلات التشفير ثنائي الاتجاه من المحولات (BERT) هي نموذج حديث يعتمد على المحولات التي طورتها Google. يمكن تدريبه مسبقًا وضبطه لاحقًا لمهمة محددة. سنرى ضبطًا دقيقًا في العمل في هذا المنشور.

سنقوم بضبط BERT في مهمة التصنيف. تتمثل المهمة في تصنيف المشاعر الخاصة بالتغريدات ذات الصلة بـ COVID.

نحن هنا نستخدم مكتبة HuggingFace لضبط النموذج. يجعل HuggingFace العملية برمتها سهلة من المعالجة المسبقة للنص إلى التدريب.

بيرت

 
تم تدريب BERT مسبقًا على مجموعة بيانات BooksCorpus و Wikipedia الإنجليزية. لقد حصلت على أحدث النتائج في إحدى عشرة مهمة لمعالجة اللغة الطبيعية.

تم تدريب BERT على مهمتين في وقت واحد

  • نمذجة اللغة المقنعة (MLM) - تم إخفاء 15٪ من الرموز المميزة وتم تدريبها على التنبؤ بالكلمة المقنعة
  • توقع الجملة التالية (NSP) - بالنظر إلى جملتين A و B ، توقع ما إذا كان B يتبع A

تم تصميم BERT للتدريب المسبق على التمثيلات ثنائية الاتجاه العميقة من نص غير مسمى عن طريق التكييف المشترك على كل من السياق الأيمن والأيسر في جميع الطبقات.

نتيجةً لذلك ، يمكن تحسين نموذج BERT المُدرَّب مسبقًا بطبقة إخراج إضافية واحدة فقط لإنشاء نماذج حديثة لمجموعة واسعة من المهام ، مثل الإجابة على الأسئلة والاستدلال اللغوي ، بدون بنية أساسية خاصة بالمهمة التعديلات.

بيانات

 
نحن نستخدم Coronavirus tweets tweets NLP - Text Classification data available on Kaggle.

تحتوي مجموعة البيانات على ملفين Corona_NLP_test.csv (40 ألف إدخال) و Corona_NLP_test.csv (4k إدخالات).

هذه هي المدخلات الخمسة الأولى لبيانات التدريب:


ضبط BERT لتصنيف التغريدات مع HuggingFace

كما ترى لدينا 5 ملامح في بياناتنا: UserName ، ScreenName Location ، TweetAt ، OriginalTweet ، المشاعر ، لكننا مهتمون فقط بـ 2 ie التغريدة الأصلية يحتوي على التغريدة الفعلية و عاطفة وهي تسميات تغريدتنا.

يتم تصنيف هذه التغريدات في 5 فئات - "محايد" ، "إيجابي" ، "سلبي للغاية" ، "سلبي" ، "إيجابي للغاية". ومن هنا جاء عدد التسميات هو 5.

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

 
سنستخدم مكتبة HuggingFace لهذا المشروع. نحتاج إلى تثبيت الوحدتين:

pip install transformerspip install datasets
  • المحولات: HuggingFace تنفيذ المحولات. يمكننا تنزيل مجموعة كبيرة من الموديلات المدربة مسبقًا
  • مجموعات البيانات: تحميل مجموعة البيانات وأيضًا يمكن تنزيل مجموعات البيانات المختلفة المتوفرة في HuggingFace hub
from datasets import load_dataset

نحن هنا نستخدم load_dataset من مكتبة مجموعات البيانات. load_dataset يمكن استخدامها لتنزيل مجموعات البيانات من HuggingFace hub أو يمكننا تحميل مجموعة البيانات المخصصة الخاصة بنا.

 
 

حددنا نوع البيانات كـ CSV ، وتمرير أسماء الملفات كقواميس إلى data_files. نقوم بتحميل ملفات القطار والاختبار الخاصة بنا في متغير مجموعة البيانات.

هذا هو الإخراج إذا قمنا بطباعة ملف dataset المتغير:

 

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

 
سنبقي الأمر بسيطًا ونقوم بخطوتين للمعالجة المسبقة فقط ، أي الترميز وتحويل الملصقات إلى أعداد صحيحة.

تعانق الوجه AutoTokenizerيعتني بجزء الترميز. يمكننا تنزيل الرمز المميز المطابق لنموذجنا ، وهو BERT في هذه الحالة.

 
 

يقوم رمز BERT تلقائيًا بتحويل الجمل إلى رموز وأرقام وأقنعة تنبيه بالشكل الذي يتوقعه نموذج BERT.

على سبيل المثال: هنا مثال للجملة التي يتم تمريرها من خلال الرمز المميز

>> tokenizer("Attention is all you need")output:
{ 'input_ids': [101, 1335, 5208, 2116, 1110, 1155, 1128, 1444, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]
}

الآن كجزء من خطوات المعالجة المسبقة ، سنقوم بتنفيذ خطوتين:

  • تحويل المشاعر إلى عدد صحيح
  • قم بترميز التغريدات

سنستخدم map وظيفة مجموعة البيانات التي تشبه تطبيق وظيفة إطار بيانات الباندا. تأخذ وظيفة كوسيطة وتنطبق على مجموعة البيانات بأكملها.

 
 

في الكود أعلاه ، حددنا طريقة لتحويل الملصقات إلى أعداد صحيحة ، كما قمنا بترميز التغريدات أيضًا بإسقاط الأعمدة غير المرغوب فيها.

الآن نحن جاهزون للجزء التدريبي.

قادة الإيمان

 
هناك طريقتان لتدريب البيانات ، إما أن نكتب حلقة التدريب الخاصة بنا أو يمكننا استخدام المدرب من مكتبة HuggingFace.

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

 
 

لنقم بتنزيل نموذج BERT الآن ، وهو أمر بسيط للغاية باستخدام ملف AutoModelForSequenceClassificatio فئة.

 
 

يتوقع نموذج التصنيف الذي تم تنزيله أيضًا وسيطة num_labels وهو عدد الفئات في بياناتنا. يتم إرفاق طبقة خطية في نهاية نموذج BERT لإعطاء مخرجات مساوية لعدد الفئات.

(classifier): Linear(in_features=768, out_features=5, bias=True)

تتم إضافة الطبقة الخطية أعلاه تلقائيًا كطبقة أخيرة. نظرًا لأن حجم مخرجات BERT هو 768 وتحتوي بياناتنا على 5 فئات ، لذا تمت إضافة طبقة خطية ذات ميزات in_features = 768 و out_features كـ 5.

قبل بدء التدريب ، سنقسم بيانات التدريب إلى مجموعات تدريب وتقييم. لدينا 40 كيلو في التدريب و 1 كيلو في مجموعة التقييم.

إذا كنا نستخدم مدرب HuggingFace ، فنحن بحاجة إلى استيراد الوحدة Trainer وتمرير النماذج ومجموعة البيانات والحجج التدريبية إليها.

 
 

هذا كل شيء ، نحن الآن جاهزون لبدء التدريب. نحن بحاجة للاتصال train سيبدأ أسلوب المدرب والتدريب

trainer.train()

سيستمر التدريب لمدة 3 فترات يمكن تعديلها من خلال الحجج التدريبية.

بمجرد الانتهاء من التدريب يمكننا الركض trainer.evalute() للتحقق من الدقة ، ولكن قبل ذلك ، نحتاج إلى استيراد المقاييس.

 
 

تقدم مكتبة مجموعات البيانات مجموعة واسعة من المقاييس. نحن نستخدم الدقة هنا. في بياناتنا ، حصلنا على دقة تبلغ 83٪ من خلال التدريب لمدة 3 فترات فقط.

يمكن زيادة الدقة عن طريق التدريب لبعض الوقت أو القيام ببعض المعالجة المسبقة للبيانات مثل إزالة الإشارات من التغريدات والفوضى غير المرغوب فيها ، ولكن هذا لبعض الوقت الآخر.

شكرا للقراءة.

 
 
راجان شودري هو مهندس ضمان الجودة في Mcafee ولديه خبرة تزيد عن سنتين.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة