كيفية تدريب نموذج بيرت من الصفر
قابل ابن عم بيرت الإيطالي ، فيليبيرتو.
By جيمس بريجز، عالم البيانات
بيرت، ولكن في إيطاليا — الصورة من قبل المؤلف
لقد ركزت العديد من مقالاتي على BERT - النموذج الذي جاء وهيمن على عالم معالجة اللغة الطبيعية (NLP) وشكل عصرًا جديدًا لنماذج اللغة.
بالنسبة لأولئك منكم الذين ربما لم يستخدموا نماذج المحولات (على سبيل المثال ما هو BERT) من قبل، تبدو العملية كما يلي:
pip install transformers
- تهيئة نموذج المحولات المدربة مسبقًا -
from_pretrained
. - اختباره على بعض البيانات.
- ربما قم بضبط النموذج (قم بتدريبه أكثر).
الآن، هذا نهج رائع، ولكن إذا فعلنا ذلك فقط، فإننا نفتقر إلى الفهم الكامن وراء إنشاء نماذج المحولات الخاصة بنا.
وإذا لم نتمكن من إنشاء نماذج المحولات الخاصة بنا - فيجب أن نعتمد على وجود نموذج مدرب مسبقًا يناسب مشكلتنا، فهذا ليس هو الحال دائمًا:
بعض التعليقات تسأل عن نماذج BERT غير الإنجليزية
لذلك، في هذه المقالة، سوف نستكشف الخطوات التي يجب علينا اتخاذها لبناء نموذج المحول الخاص بنا - وتحديدًا نسخة مطورة أخرى من BERT، تسمى RoBERTa.
لمحة عامة
هناك بضع خطوات لهذه العملية، لذا قبل أن نتعمق فيها، دعونا أولاً نلخص ما يتعين علينا القيام به. في المجموع، هناك أربعة أجزاء رئيسية:
- الحصول على البيانات
- بناء رمز مميز
- إنشاء خط أنابيب الإدخال
- تدريب النموذج
بمجرد الانتهاء من العمل على كل قسم من هذه الأقسام، سنأخذ الرمز المميز والنموذج الذي أنشأناه - ونحفظهما معًا حتى نتمكن بعد ذلك من استخدامهما بنفس الطريقة التي نستخدمها عادةً مع from_pretrained
.
الحصول على البيانات
كما هو الحال مع أي مشروع للتعلم الآلي، نحتاج إلى البيانات. فيما يتعلق بالبيانات اللازمة لتدريب نموذج المحولات، فنحن حقًا مدللون للاختيار - يمكننا استخدام أي بيانات نصية تقريبًا.
مقطع فيديو تفصيلي لتنزيل مجموعة بيانات OSCAR باستخدام مكتبة مجموعات بيانات HuggingFace
وإذا كان هناك شيء واحد متوفر لدينا بكثرة على الإنترنت، فهو البيانات النصية غير المنظمة.
واحدة من أكبر مجموعات البيانات في مجال النص المستخرج من الإنترنت هي مجموعة بيانات OSCAR.
تضم مجموعة بيانات OSCAR عددًا كبيرًا من اللغات المختلفة - وواحدة من أوضح حالات الاستخدام للتدريب من الصفر هي أن نتمكن من تطبيق BERT على بعض اللغات الأقل استخدامًا، مثل Telugu أو Navajo.
لسوء الحظ، اللغة الوحيدة التي يمكنني التحدث بها بأي درجة من الكفاءة هي اللغة الإنجليزية - لكن صديقتي إيطالية، ولذا ستقوم - لورا، بتقييم نتائج نموذج BERT الناطق باللغة الإيطالية - FiliBERTO.
لذا، لتنزيل الجزء الإيطالي من مجموعة بيانات OSCAR، سنستخدم HuggingFace's datasets
المكتبة - والتي يمكننا التثبيت بها pip install datasets
. ثم نقوم بتنزيل OSCAR_IT باستخدام:
دعونا نلقي نظرة على dataset
موضوع.
رائع، فلنقم الآن بتخزين بياناتنا بتنسيق يمكننا استخدامه عند إنشاء رمزنا المميز. نحن بحاجة إلى إنشاء مجموعة من الملفات النصية العادية التي تحتوي فقط على text
ميزة من مجموعة البيانات لدينا، وسوف نقوم بتقسيم كل منها عينة باستخدام السطر الجديد n
.
في موقعنا data/text/oscar_it
الدليل سوف نجد :
الدليل الذي يحتوي على ملفات OSCAR ذات النص العادي
بناء رمز مميز
التالي هو الرمز المميز! عند استخدام المحولات، نقوم عادةً بتحميل رمز مميز، جنبًا إلى جنب مع نموذج المحول الخاص به - يعد رمز الرمز المميز مكونًا رئيسيًا في العملية.
مقطع فيديو تفصيلي لإنشاء أداة الرموز المميزة الخاصة بنا
عند إنشاء أداة الرمز المميزة الخاصة بنا، سنقوم بتزويدها بجميع بيانات OSCAR الخاصة بنا، وتحديد حجم المفردات لدينا (عدد الرموز المميزة في أداة الرمز المميزة)، وأي رموز مميزة خاصة.
الآن، تبدو رموز RoBERTa المميزة كما يلي:
لذلك، نحن نتأكد من إدراجها ضمن special_tokens
معلمة الرمز المميز الخاص بنا train
طريقة الاتصال.
أصبح رمزنا المميز جاهزًا الآن، ويمكننا حفظه في ملف لاستخدامه لاحقًا:
الآن لدينا ملفان يحددان ملفنا الجديد فيليبيرتو رمز مميز:
- merges.txt - ينفذ التعيين الأولي للنص إلى الرموز المميزة
- vocab.json - يقوم بتعيين الرموز المميزة لمعرفات الرمز المميز
ومع ذلك، يمكننا الانتقال إلى تهيئة أداة الرمز المميزة الخاصة بنا حتى نتمكن من استخدامها كما نستخدم أي أداة أخرى from_pretrained
رمز مميز.
تهيئة الرمز المميز
نقوم أولاً بتهيئة أداة الرمز المميز باستخدام الملفين اللذين أنشأناهما من قبل — باستخدام ملف بسيط from_pretrained
:
الآن أصبح برنامج الرمز المميز الخاص بنا جاهزًا، ويمكننا محاولة تشفير بعض النصوص باستخدامه. عند التشفير نستخدم نفس الطريقتين اللتين نستخدمهما عادة، encode
و encode_batch
.
من كائن الترميزات tokens
سوف نقوم باستخراج input_ids
و attention_mask
الموترات للاستخدام مع FiliBERTo.
إنشاء خط أنابيب الإدخال
يعد مسار المدخلات لعملية التدريب لدينا هو الجزء الأكثر تعقيدًا من العملية برمتها. وهو يتألف من أخذ بياناتنا التدريبية الأولية لـ OSCAR، وتحويلها، وتحميلها إلى ملف DataLoader
جاهز للتدريب.
فيديو تفصيلي لخط أنابيب إدخال الامتيازات والرهونات البحرية
تجهيز البيانات
سنبدأ بعينة واحدة ونعمل من خلال منطق الإعداد.
أولاً، نحتاج إلى فتح ملفنا - نفس الملفات التي حفظناها بها .رسالة قصيرة الملفات في وقت سابق. قمنا بتقسيم كل منها بناءً على أحرف السطر الجديد n
كما يشير هذا إلى العينات الفردية.
ثم نقوم بتشفير بياناتنا باستخدام tokenizer
- التأكد من تضمين المعلمات الرئيسية مثل max_length
, padding
و truncation
.
والآن يمكننا الانتقال إلى إنشاء الموترات الخاصة بنا - سنقوم بتدريب نموذجنا من خلال نمذجة اللغة المقنعة (MLM). لذلك، نحن بحاجة إلى ثلاثة الموترات:
- المدخلات - ملكنا token_ids مع إخفاء ~15% من الرموز باستخدام رمز القناع
<mask>
. - قناع_الاهتمام - موتر 1الصورة و 0s، لتحديد موضع الرموز المميزة/رموز الحشو "الحقيقية" - المستخدمة في حسابات الانتباه.
- التسميات - ملكنا token_ids مع لا قناع.
إذا لم تكن على دراية بالامتيازات والرهون البحرية، فقد شرحت ذلك هنا.
الأهداف و attention_mask
و labels
يتم استخراج الموترات ببساطة من موقعنا batch
. input_ids
تتطلب الموترات مزيدًا من الاهتمام، ومع ذلك، بالنسبة لهذا الموتر، نقوم بإخفاء 15% تقريبًا من الرموز المميزة - ونخصص لها معرف الرمز المميز 3
.
في الإخراج النهائي، يمكننا أن نرى جزءا من المشفرة input_ids
الموتر. معرف الرمز المميز الأول هو 1
- لل [CLS]
رمز مميز. منقط حول الموتر لدينا عدة 3
معرفات الرموز المميزة - هذه هي معرفاتنا المضافة حديثًا [MASK]
الرموز.
بناء محمل البيانات
بعد ذلك، نحدد لدينا Dataset
فئة - والتي نستخدمها لتهيئة الموترات الثلاثة المشفرة لدينا باسم PyTorch torch.utils.data.Dataset
شاء.
أخيرًا ، لدينا dataset
يتم تحميله في PyTorch DataLoader
الكائن - الذي نستخدمه لتحميل بياناتنا في نموذجنا أثناء التدريب.
تدريب النموذج
نحن بحاجة إلى شيئين للتدريب، لدينا DataLoader
ونموذج. ال DataLoader
لدينا - ولكن لا يوجد نموذج.
تهيئة النموذج
للتدريب نحتاج إلى خام (غير مدرب مسبقًا) BERTLMHeadModel
. لإنشاء ذلك، نحتاج أولاً إلى إنشاء كائن تكوين RoBERTa لوصف المعلمات التي نرغب في تهيئة FiliBERTo بها.
بعد ذلك، نقوم باستيراد وتهيئة نموذج RoBERTa الخاص بنا باستخدام رأس نمذجة اللغة (LM).
إعداد التدريب
قبل الانتقال إلى حلقة التدريب الخاصة بنا، نحتاج إلى إعداد بعض الأشياء. أولاً، قمنا بإعداد استخدام GPU/CPU. ثم نقوم بتنشيط وضع التدريب الخاص بنموذجنا، وأخيرًا، نقوم بتهيئة مُحسِّننا.
قادة الإيمان
وأخيرا – وقت التدريب! نحن نتدرب تمامًا كما نفعل عادةً عند التدريب عبر PyTorch.
إذا توجهنا إلى Tensorboard فسنجد خسارتنا بمرور الوقت - يبدو الأمر واعدًا.
الخسارة / الوقت - تم دمج جلسات تدريبية متعددة معًا في هذا المخطط
الاختبار الحقيقي
والآن حان وقت الاختبار الحقيقي. أنشأنا خط أنابيب الامتيازات والرهونات البحرية – وطلبنا من لورا تقييم النتائج. يمكنكم مشاهدة المراجعة بالفيديو عند الساعة 22:44 هنا:
نقوم أولا بتهيئة أ pipeline
الكائن باستخدام 'fill-mask'
دعوى. ثم ابدأ باختبار نموذجنا كالتالي:
"تشاو تأتي فا؟" هو الجواب الصحيح! هذا هو المستوى المتقدم الذي وصلت إليه لغتي الإيطالية - لذا، دعنا نسلمه إلى لورا.
نبدأ مع "buongiorno، تعال فا؟" - أو "يوم جيد كيف حالك؟":
الجواب الأول، "buongiorno، chi va؟" يعني "يوم جيد، من هناك؟" - على سبيل المثال لا معنى له. لكن إجابتنا الثانية هي الصحيحة!
التالي، عبارة أصعب قليلا، "تشاو، حمامة ci incontriamo oggi pomeriggio؟" - أو "مرحبا، أين سنلتقي بعد ظهر هذا اليوم؟":
ونعود ببعض النتائج الإيجابية:
✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"
وأخيرًا، جملة أخرى أصعب، "لماذا يجب أن يكون النجاح سريعًا في يوم آخر؟" - أو "ماذا كان سيحدث لو اخترنا يومًا آخر؟":
نعيد بعض الإجابات الجيدة هنا أيضًا:
✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"
بشكل عام، يبدو أن نموذجنا اجتاز اختبارات Laura - ولدينا الآن نموذج كفؤ باللغة الإيطالية يسمى FiliBERTo!
هذا كل ما في هذه الإرشادات التفصيلية لتدريب نموذج BERT من الصفر!
لقد غطينا الكثير من الأمور، بدءًا من الحصول على بياناتنا وتنسيقها - وصولاً إلى استخدام نمذجة اللغة لتدريب نموذج BERT الأولي الخاص بنا.
آمل أن يحظى هذا المقال بإعجابكم! إذا كان لديك أي أسئلة، اسمحوا لي أن أعرف عبر تويتر أو في التعليقات أدناه. إذا كنت تريد المزيد من المحتوى مثل هذا، فأنا أقوم بالنشر يوتيوب أيضا.
شكرا للقراءة!
70٪ خصم! معالجة اللغات الطبيعية: البرمجة اللغوية العصبية مع المحولات في بيثون
نماذج المحولات هي المعيار الفعلي في البرمجة اللغوية العصبية الحديثة. لقد أثبتوا أنهم الأكثر تعبيرا …
* جميع الصور من قبل المؤلف ما لم ينص على خلاف ذلك
السيرة الذاتية: جيمس بريجز هو عالم بيانات متخصص في معالجة اللغة الطبيعية ويعمل في القطاع المالي ، ومقره لندن ، المملكة المتحدة. وهو أيضًا مرشد مستقل وكاتب ومنشئ محتوى. يمكنك الوصول إلى المؤلف عبر البريد الإلكتروني (jamescalam94@gmail.com).
أصلي. تم إعادة النشر بإذن.
هذا الموضوع ذو علاقة بـ:
المصدر: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html
- "
- &
- الكل
- تحليلات
- حول
- البند
- مقالات
- السيارات
- نساعدك في بناء
- ابني
- دعوة
- تعليقات
- عنصر
- محتوى
- خلق
- الخالق
- البيانات
- علم البيانات
- عالم البيانات
- يوم
- التعلم العميق
- مدير المدارس
- البريد الإلكتروني
- مهندس
- المهندسين
- انجليزي
- الميزات
- أخيرا
- تمويل
- الاسم الأول
- شكل
- مستقل
- بالإضافة إلى
- خير
- وحدات معالجة الرسومات
- عظيم
- رئيس
- هنا
- كيفية
- كيفية
- HTTPS
- ضخم
- صورة
- Internet
- IT
- إيطاليا
- القفل
- لغة
- اللغات
- تعلم
- تعلم
- المكتبة
- تحميل
- لندن
- آلة التعلم
- القيام ب
- برنامج Maps
- قناع
- ML
- نموذج
- تصميم
- خطوة
- اللغة الطبيعية
- معالجة اللغات الطبيعية
- البرمجة اللغوية العصبية
- online
- جاكيت
- المصدر المفتوح
- أخرى
- نص عادي
- لاعب
- وفرة
- تنفيذ المشاريع
- pytorch
- الخام
- النتائج
- مراجعة
- علوم
- العلماء
- طقم
- المقاس
- So
- انقسم
- بداية
- متجر
- قصص
- تجربه بالعربي
- الاختبار
- اختبارات
- الوقت
- رمز
- الرموز
- تيشرت
- قادة الإيمان
- تحويل
- Uk
- UN
- us
- استخدم حالات
- فيديو
- شاهد
- من الذى
- نوافذ
- في غضون
- للعمل
- العالم
- كاتب
- X
- موقع YouTube