شوكة من https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/language-modeling في 2021.05.17.
الضبط الدقيق (أو التدريب من البداية) لنماذج المكتبة لنمذجة اللغة على مجموعة بيانات نصية لـ GPT وGPT-2 وALBERT وBERT وDistilBERT وRoBERTa وXLNet... يتم تدريب GPT وGPT-2 أو ضبطهما باستخدام فقدان نمذجة اللغة السببية (CLM) بينما يتم تدريب أو ضبط ALBERT وBERT وDistilBERT وRoBERTa باستخدام فقدان نمذجة اللغة المقنعة (MLM). يستخدم XLNet نمذجة لغة التقليب (PLM)، ويمكنك العثور على مزيد من المعلومات حول الاختلافات بين تلك الأهداف في ملخص النموذج الخاص بنا.
هناك مجموعتان من البرامج النصية المقدمة. المجموعة الأولى تستفيد من Trainer API. تستخدم المجموعة الثانية التي تحتوي على no_trainer
في اللاحقة حلقة تدريب مخصصة وتستفيد من ? تسريع المكتبة . كلتا المجموعتين تستخدمان ؟ مكتبة مجموعات البيانات. يمكنك تخصيصها بسهولة حسب احتياجاتك إذا كنت بحاجة إلى معالجة إضافية لمجموعات البيانات الخاصة بك.
ملاحظة: لا يزال البرنامج النصي القديم run_language_modeling.py
متاحًا هنا.
سيتم تشغيل الأمثلة التالية على مجموعات البيانات المستضافة على مركزنا أو مع ملفاتك النصية الخاصة للتدريب والتحقق من الصحة. نعطي أمثلة على حد سواء أدناه.
المثال التالي يضبط GPT-2 على WikiText-2. نحن نستخدم WikiText-2 الخام (لم يتم استبدال أي رموز مميزة قبل الترميز). الخسارة هنا هي خسارة النمذجة اللغوية السببية.
python run_clm.py
--model_name_or_path gpt2
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-clm
يستغرق هذا حوالي نصف ساعة للتدريب على وحدة معالجة الرسومات K80 واحدة وحوالي دقيقة واحدة لتشغيل التقييم. تصل درجة الحيرة إلى 20 درجة بمجرد ضبطها على مجموعة البيانات.
لتشغيل ملفات التدريب والتحقق الخاصة بك، استخدم الأمر التالي:
python run_clm.py
--model_name_or_path gpt2
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-clm
يستخدم هذا جهاز HuggingFace Trainer
المدمج للتدريب. إذا كنت تريد استخدام حلقة تدريب مخصصة، فيمكنك استخدام البرنامج النصي run_clm_no_trainer.py
أو تعديله. ألق نظرة على البرنامج النصي للحصول على قائمة بالوسائط المدعومة. يظهر مثال أدناه:
python run_clm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path gpt2
--output_dir /tmp/test-clm
المثال التالي يضبط RoBERTa على WikiText-2. هنا أيضًا، نحن نستخدم WikiText-2 الخام. تختلف الخسارة لأن BERT/RoBERTa لديهما آلية ثنائية الاتجاه؛ ولذلك فإننا نستخدم نفس الخسارة التي تم استخدامها أثناء التدريب المسبق: نمذجة اللغة المقنعة.
وفقًا لورقة RoBERTa، نستخدم الإخفاء الديناميكي بدلاً من الإخفاء الثابت. وبالتالي، قد يتقارب النموذج بشكل أبطأ قليلاً (يستغرق الإفراط في الملاءمة المزيد من العصور).
python run_mlm.py
--model_name_or_path roberta-base
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-mlm
لتشغيل ملفات التدريب والتحقق الخاصة بك، استخدم الأمر التالي:
python run_mlm.py
--model_name_or_path roberta-base
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-mlm
إذا تم تنظيم مجموعة البيانات الخاصة بك مع عينة واحدة في كل سطر، فيمكنك استخدام علامة --line_by_line
(وإلا فإن البرنامج النصي يتسلسل جميع النصوص ثم يقسمها إلى كتل بنفس الطول).
يستخدم هذا جهاز HuggingFace Trainer
المدمج للتدريب. إذا كنت تريد استخدام حلقة تدريب مخصصة، فيمكنك استخدام البرنامج النصي run_mlm_no_trainer.py
أو تعديله. ألق نظرة على البرنامج النصي للحصول على قائمة بالوسائط المدعومة. يظهر مثال أدناه:
python run_mlm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path roberta-base
--output_dir /tmp/test-mlm
ملاحظة: في مادة TPU، يجب عليك استخدام العلامة --pad_to_max_length
جنبًا إلى جنب مع علامة --line_by_line
للتأكد من أن جميع دفعاتك لها نفس الطول.
تم نقل هذا الجزء إلى examples/research_projects/mlm_wwm
.
يستخدم XLNet هدفًا تدريبيًا مختلفًا، وهو نمذجة لغة التقليب. إنها طريقة انحدار ذاتي لتعلم السياقات ثنائية الاتجاه من خلال تعظيم الاحتمالية المتوقعة على جميع التباديل لترتيب عوامل تسلسل الإدخال.
نستخدم علامة --plm_probability
لتحديد نسبة طول نطاق الرموز المميزة المقنعة إلى طول السياق المحيط لنمذجة لغة التقليب.
يمكن أيضًا استخدام علامة --max_span_length
لتحديد طول نطاق الرموز المميزة المقنعة المستخدمة في نمذجة لغة التقليب.
إليك كيفية ضبط XLNet على wikitext-2:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-plm
لضبطه في ملف التدريب والتحقق الخاص بك، قم بتشغيل:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-plm
إذا تم تنظيم مجموعة البيانات الخاصة بك مع عينة واحدة في كل سطر، فيمكنك استخدام علامة --line_by_line
(وإلا فإن البرنامج النصي يتسلسل جميع النصوص ثم يقسمها إلى كتل بنفس الطول).
ملاحظة: في مادة TPU، يجب عليك استخدام العلامة --pad_to_max_length
جنبًا إلى جنب مع علامة --line_by_line
للتأكد من أن جميع دفعاتك لها نفس الطول.