Path: blob/main/transformers_doc/ar/language_modeling.ipynb
4522 views
نمذجة اللغة السببية (Causal language modeling)
هناك نوعان من نمذجة اللغة، السببية والمقنعة. يوضح هذا الدليل نمذجة اللغة السببية. تُستخدم نماذج اللغة السببية غالبًا لتوليد النص. يمكنك استخدام هذه النماذج للتطبيقات الإبداعية مثل اختيار مغامرة النص الخاصة بك أو مساعد ترميز ذكي مثل Copilot أو CodeParrot.
تتنبأ نمذجة اللغة السببية بالرمز التالي في تسلسل من الرموز، ولا يمكن للنموذج سوى الاهتمام بالرموز على اليسار. هذا يعني أن النموذج لا يمكنه رؤية الرموز المستقبلية. GPT-2 هو مثال على نموذج اللغة السببية.
سيوضح لك هذا الدليل كيفية:
ضبط دقيق DistilRoBERTa على مجموعة فرعية r/askscience من مجموعة بيانات ELI5.
استخدام النموذج المدرب الخاص بك للاستنتاج.
لرؤية جميع العمارات ونقاط التحقق المتوافقة مع هذه المهمة، نوصي بالتحقق من task-page
قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية:
نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عند المطالبة، أدخل رمزك لتسجيل الدخول:
تحميل مجموعة بيانات ELI5
ابدأ بتحميل أول 5000 مثال من ELI5-Category مجموعة البيانات مع مكتبة 🤗 Datasets. سيعطيك هذا فرصة للتجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة.
قم بتقسيم مجموعة بيانات train
إلى مجموعتي تدريب واختبار باستخدام الخاصية train_test_split
:
ثم ألق نظرة على مثال:
على الرغم من أن هذا قد يبدو معقدًا، إلا أنك مهتم حقًا بحقل text
. ما هو رائع حول مهام نمذجة اللغة أنت لا تحتاج إلى تسميات (تُعرف أيضًا باسم المهمة غير الخاضعة للإشراف) لأن الكلمة التالية تعمل كتسمية.
معالجة مسبقة (Preprocess)
الخطوة التالية هي تحميل مجزء النص DistilGPT2 لمعالجة حقل text
الفرعي:
ستلاحظ من المثال أعلاه، الحقل text
هو في الواقع متداخل داخل answers
. هذا يعني أنك ستحتاج إلى استخراج حقل text
الفرعي من بنيته المتداخلة باستخدام الدالة flatten
:
كل حقل فرعي هو الآن عموداً منفصلاً مسبوقاً بـ answers
، وحقل text
هو قائمة الآن. بدلاً من ذلك من تجزائة نص كل جملة بشكل منفصل، قم بتحويل القائمة إلى سلسلة حتى تتمكن من تجزئة نصها بشكل مجمّع.
هنا أول دالة معالجة مسبقة لدمج قائمة السلاسل لكل مثال ومجزىء النتيجة:
لتطبيق دالة المعالجة المسبقة هذه على مجموعة البيانات بأكملها، استخدم الدالة 🤗 Datasets map
. يمكنك تسريع هذه العملية map
عن طريق تعيين batched=True
لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد، وزيادة عدد العمليات مع num_proc
. احذف أي أعمدة لا تحتاجها:
تحتوي هذه المجموعة من البيانات على تسلسلات الرموز، ولكن بعضها أطول من الطول الأقصى للمدخلات للنموذج.
يمكنك الآن استخدام دالة ما قبل المعالجة ثانية لـ:
تجميع كل التسلسلات.
تقسيم التسلسلات المجمّعة إلى أجزاء أقصر محددة، بحجم
block_size
، والتي يجب أن تكون أقصر من الطول الأقصى للمدخلات ومناسبة لذاكرة GPU.
طبق دالة group_texts
على كامل المجموعة من البيانات:
الآن قم بإنشاء دفعة من الأمثلة باستخدام DataCollatorForLanguageModeling
. من الأفضل أن تقوم بـ الحشو الديناميكي للجمل إلى الطول الأطول في الدفعة أثناء التجميع، بدلاً من حشو كامل المجموعة من البيانات إلى الطول الأقصى.
استخدم رمز نهاية التسلسل كرمز للحشو، وحدد mlm_probability
لحجب الرموز بشكل عشوائي عند كل تكرار للبيانات:
استخدم رمز نهاية التسلسل كرمز للحشو، وحدد mlm_probability
لحجب الرموز بشكل عشوائي عند كل تكرار للبيانات:
التدريب (Train)
إذا لم تكن على دراية بتدريب نموذج باستخدام Trainer
, اطلع على البرنامج التعليمي الأساسي!
أنت جاهز الآن لبدء تدريب نموذجك! قم بتحميل DistilGPT2 باستخدام AutoModelForCausalLM
:
في هذه المرحلة، تبقى ثلاث خطوات فقط:
حدد معلمات التدريب الخاصة بك في
TrainingArguments
. المعامل الوحيد المطلوب هوoutput_dir
الذي يحدد أين سيتم حفظ نموذجك. ستقوم بدفع هذا النموذج إلى Hub بتحديدpush_to_hub=True
(يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك).قم بتمرير معاملات التدريب إلى
Trainer
إلى جانب النموذج، والمجموعات من البيانات، ومجمّع البيانات.قم باستدعاء
train()
لتدريب نموذجك.
بمجرد اكتمال التدريب، استخدم طريقة evaluate()
لتقييم نموذجك والحصول على احتمالية الارتباك:
ثم شارك نموذجك على Hub باستخدام طريقة push_to_hub()
حتى يتمكن الجميع من استخدام نموذجك:
إذا لم تكن على دراية بتدريب نموذج باستخدام Keras، اطلع على البرنامج التعليمي الأساسي!
ثم يمكنك تحميل DistilGPT2 باستخدام TFAutoModelForCausalLM
:
حول مجموعات بياناتك إلى تنسيق tf.data.Dataset
باستخدام prepare_tf_dataset()
:
قم بتهيئة النموذج للتدريب باستخدام compile
. لاحظ أن جميع نماذج Transformers لديها دالة خسارة ذات صلة بالمهمة الافتراضية، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك:
يمكن القيام بذلك عن طريق تحديد مكان دفع نموذجك ومجمّع البيانات في PushToHubCallback
:
أخيراً، أنت جاهز لبدء تدريب نموذجك! قم باستدعاء fit
مع مجموعات بيانات التدريب والتحقق من الصحة، وعدد العصور، والتعليقات الخاصة بك لتدريب النموذج:
بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه!
للحصول على مثال أكثر تعمقًا حول كيفية تدريب نموذج للنمذجة اللغوية السببية، اطلع على الدفتر المقابل دفتر PyTorch أو دفتر TensorFlow.
الاستدلال (Inference)
رائع، الآن بعد أن قمت بتدريب نموذج، يمكنك استخدامه للاستدلال!
قم بابتكار سؤال تود توليد نص منه:
أبسط طريقة لتجربة نموذجك المدرب للاستدلال هي استخدامه في pipeline()
. قم بتنفيذ pipeline
لتوليد النص مع نموذجك، ومرر نصك إليه:
قسم النص وإرجع input_ids
كتنسورات PyTorch:
استخدم طريقة generate()
لتوليد النص. للمزيد من التفاصيل حول استراتيجيات توليد النص المختلفة والبارامترات للتحكم في التوليد، راجع صفحة استراتيجيات توليد النص.
فك ترميز الرموز المولدة مرة أخرى إلى نص:
قم بتقسيم النص وإرجاع input_ids
كـ TensorFlow tensors:
استخدم طريقة ~transformers.generation_tf_utils.TFGenerationMixin.generate
لإنشاء الملخص. للمزيد من التفاصيل حول استراتيجيات توليد النص المختلفة والبارامترات للتحكم في التوليد، راجع صفحة استراتيجيات توليد النص.
فك ترميز الرموز المولدة مرة أخرى إلى نص: