الإنجليزية |中文
أصبح التدريب المسبق جزءًا أساسيًا من مهام البرمجة اللغوية العصبية. UER-py (تمثيلات التشفير العالمية) عبارة عن مجموعة أدوات للتدريب المسبق على مجموعة المجال العام وضبط المهام النهائية. يحافظ UER-py على نمطية النموذج ويدعم قابلية التوسع في البحث. فهو يسهل استخدام نماذج ما قبل التدريب الموجودة، ويوفر واجهات للمستخدمين لمزيد من التوسع. باستخدام UER-py، قمنا ببناء حديقة حيوانات نموذجية تحتوي على نماذج مدربة مسبقًا لخصائص مختلفة. راجع مشروع UER-py Wiki للحصول على التوثيق الكامل .
لقد قمنا بفتح مصدر TencentPretrain، وهو إصدار جديد مُعاد تصنيعه من UER-py. يدعم TencentPretrain النماذج متعددة الوسائط ويتيح تدريب النماذج الكبيرة. إذا كنت مهتمًا بنماذج نصية متوسطة الحجم (بأحجام معلمات أقل من مليار)، نوصي بمواصلة استخدام مشروع UER-py.
UER-py لديه الميزات التالية:
يستخدم هذا القسم عدة أمثلة شائعة الاستخدام لتوضيح كيفية استخدام UER-py. تتم مناقشة المزيد من التفاصيل في قسم التعليمات. نستخدم أولاً BERT (نموذج ما قبل التدريب النصي) في مجموعة بيانات تصنيف مشاعر مراجعة الكتب. نحن نقوم بتدريب النموذج مسبقًا على مجموعة مراجعة الكتب ثم نقوم بضبطه على مجموعة بيانات تصنيف مشاعر مراجعة الكتب. هناك ثلاثة ملفات إدخال: مجموعة مراجعة الكتب، ومجموعة بيانات تصنيف مشاعر مراجعة الكتب، والمفردات. تم ترميز جميع الملفات بترميز UTF-8 وتم تضمينها في هذا المشروع.
تنسيق مجموعة BERT هو كما يلي (جملة واحدة في كل سطر ويتم تحديد المستندات بأسطر فارغة):
doc1-sent1
doc1-sent2
doc1-sent3
doc2-sent1
doc3-sent1
doc3-sent2
يتم الحصول على مجموعة مراجعة الكتب من مجموعة بيانات تصنيف مراجعة الكتب. نقوم بإزالة التصنيفات وتقسيم المراجعة إلى جزأين من المنتصف لإنشاء مستند يتكون من جملتين (راجع book_review_bert.txt في مجلد المجموعة ).
تنسيق مجموعة بيانات التصنيف هو كما يلي:
label text_a
1 instance1
0 instance2
1 instance3
يتم فصل التسمية والمثيل بواسطة t . الصف الأول عبارة عن قائمة بأسماء الأعمدة. يجب أن يكون معرف التسمية عددًا صحيحًا بين (بما في ذلك) 0 وn-1 لتصنيف n-way.
نحن نستخدم ملف المفردات الصينية الخاص بـ Googlemodels /google_zh_vocab.txt ، والذي يحتوي على 21128 حرفًا صينيًا.
نقوم أولاً بالمعالجة المسبقة لمراجعة الكتاب. في مرحلة ما قبل المعالجة، يجب معالجة المجموعة بالتنسيق المطلوب بواسطة نموذج التدريب المسبق المحدد ( --data_processor ):
python3 preprocess.py --corpus_path corpora/book_review_bert.txt --vocab_path models/google_zh_vocab.txt
--dataset_path dataset.pt --processes_num 8 --data_processor bert
لاحظ أن ستة>=1.12.0 مطلوب.
تستغرق المعالجة المسبقة وقتًا طويلاً. يمكن أن يؤدي استخدام عمليات متعددة إلى تسريع سرعة المعالجة المسبقة إلى حد كبير ( --processes_num ). يتم استخدام رمز BERT بشكل افتراضي ( --tokenizer bert ). بعد المعالجة المسبقة، يتم تحويل النص الخام إلى dataset.pt ، وهو مدخل pretrain.py . ثم نقوم بتنزيل نموذج BERT الصيني المدرّب مسبقًا من Google google_zh_model.bin (بتنسيق UER والنموذج الأصلي من هنا)، ووضعه في مجلد النماذج . نقوم بتحميل نموذج BERT الصيني المدرب مسبقًا ونقوم بتدريبه مسبقًا على مجموعة مراجعة الكتب. يتكون نموذج ما قبل التدريب عادةً من طبقات التضمين والتشفير والطبقات المستهدفة. لبناء نموذج ما قبل التدريب، يجب علينا تقديم المعلومات ذات الصلة. يحدد ملف التكوين ( --config_path ) الوحدات النمطية والمعلمات الفائقة المستخدمة في نماذج ما قبل التدريب. يمكن العثور على مزيد من التفاصيل في models/bert/base_config.json . لنفترض أن لدينا جهاز يحتوي على 8 وحدات معالجة رسوميات:
python3 pretrain.py --dataset_path dataset.pt --vocab_path models/google_zh_vocab.txt
--pretrained_model_path models/google_zh_model.bin
--config_path models/bert/base_config.json
--output_model_path models/book_review_model.bin
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7
--total_steps 5000 --save_checkpoint_steps 1000 --batch_size 32
mv models/book_review_model.bin-5000 models/book_review_model.bin
لاحظ أن النموذج الذي تم تدريبه بواسطة pretrain.py ملتصق باللاحقة التي تسجل خطوة التدريب ( --total_steps ). يمكننا إزالة اللاحقة لسهولة الاستخدام.
ثم نقوم بضبط النموذج المُدرب مسبقًا على مجموعة بيانات التصنيف النهائية. نحن نستخدم طبقات التضمين والتشفير من book_review_model.bin ، وهو ناتج pretrain.py :
python3 finetune/run_classifier.py --pretrained_model_path models/book_review_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--train_path datasets/book_review/train.tsv
--dev_path datasets/book_review/dev.tsv
--test_path datasets/book_review/test.tsv
--epochs_num 3 --batch_size 32
المسار الافتراضي لنموذج المصنف المضبوط هو models/finetuned_model.bin . من الملاحظ أن حجم الدفعة الفعلي للتدريب المسبق هو --batch_size times --world_size ؛ حجم الدفعة الفعلي للمهمة النهائية (مثل التصنيف) هو --batch_size . ثم نقوم بالاستدلال باستخدام النموذج الدقيق.
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--test_path datasets/book_review/test_nolabel.tsv
--prediction_path datasets/book_review/prediction.tsv
--labels_num 2
--test_path يحدد مسار الملف المتوقع. يجب أن يحتوي الملف على عمود text_a. --prediction_path يحدد مسار الملف مع نتائج التنبؤ. نحتاج إلى تحديد عدد التصنيفات بشكل صريح بواسطة --labels_num . مجموعة البيانات المذكورة أعلاه عبارة عن مجموعة بيانات تصنيف ثنائية الاتجاه.
يوفر المحتوى أعلاه طرقًا أساسية لاستخدام UER-py للمعالجة المسبقة والتدريب المسبق والضبط الدقيق والاستدلال. يمكن العثور على المزيد من حالات الاستخدام كاملة ➡️ Quickstart ⬅️ . تحتوي البداية السريعة الكاملة على حالات استخدام وفيرة، تغطي معظم سيناريوهات التطبيق ذات الصلة بالتدريب المسبق. من المستحسن أن يقوم المستخدمون بقراءة البداية السريعة الكاملة لاستخدام المشروع بشكل معقول.
يوفر هذا القسم روابط لمجموعة من ➡️ بيانات ما قبل التدريب ⬅️ . يمكن لـ UER تحميل بيانات ما قبل التدريب مباشرة.
يوفر هذا القسم روابط لمجموعة من ➡️ مجموعات البيانات النهائية ⬅️ . يمكن لـ UER تحميل مجموعات البيانات هذه مباشرة.
بمساعدة UER، قمنا بتدريب نماذج ذات خصائص مختلفة مسبقًا (على سبيل المثال النماذج المستندة إلى مجموعات ومشفرات وأهداف مختلفة). يمكن العثور على المقدمة التفصيلية للنماذج المدربة مسبقًا وروابط تنزيلها في ➡️modelzoo⬅️ . يمكن تحميل جميع النماذج المدربة مسبقًا بواسطة UER مباشرة.
يتم تنظيم UER-py على النحو التالي:
UER-py/
|--uer/
| |--embeddings/ # contains modules of embedding component
| |--encoders/ # contains modules of encoder component such as RNN, CNN, Transformer
| |--decoders/ # contains modules of decoder component
| |--targets/ # contains modules of target component such as language modeling, masked language modeling
| |--layers/ # contains frequently-used NN layers
| |--models/ # contains model.py, which combines modules of different components
| |--utils/ # contains frequently-used utilities
| |--model_builder.py
| |--model_loader.py
| |--model_saver.py
| |--opts.py
| |--trainer.py
|
|--corpora/ # contains pre-training data
|--datasets/ # contains downstream tasks
|--models/ # contains pre-trained models, vocabularies, and configuration files
|--scripts/ # contains useful scripts for pre-training models
|--finetune/ # contains fine-tuning scripts for downstream tasks
|--inference/ # contains inference scripts for downstream tasks
|
|--preprocess.py
|--pretrain.py
|--README.md
|--README_ZH.md
|--requirements.txt
|--LICENSE
يتم تنظيم الكود بناءً على المكونات (مثل التضمينات وأجهزة التشفير). يمكن للمستخدمين استخدامه وتوسيع نطاقه بجهود قليلة.
يمكن العثور على أمثلة شاملة لاستخدام UER في ➡️ التعليمات ⬅️، والتي تساعد المستخدمين على التنفيذ السريع لنماذج التدريب المسبق مثل BERT وGPT-2 وELMo وT5 وضبط النماذج المدربة مسبقًا على مجموعة من المهام النهائية.
تم استخدام UER-py في الحلول الفائزة للعديد من مسابقات البرمجة اللغوية العصبية. في هذا القسم، نقدم بعض الأمثلة على استخدام UER-py لتحقيق نتائج SOTA في مسابقات البرمجة اللغوية العصبية، مثل CLUE. راجع ➡️ حلول المنافسة ⬅️ للحصول على معلومات أكثر تفصيلاً.
@article{zhao2019uer,
title={UER: An Open-Source Toolkit for Pre-training Models},
author={Zhao, Zhe and Chen, Hui and Zhang, Jinbin and Zhao, Xin and Liu, Tao and Lu, Wei and Chen, Xi and Deng, Haotang and Ju, Qi and Du, Xiaoyong},
journal={EMNLP-IJCNLP 2019},
pages={241},
year={2019}
}
للتواصل المتعلق بهذا المشروع، يرجى الاتصال بـ Zhe Zhao ([email protected]; [email protected]) أو Yudong Li ([email protected]) أو Cheng Hou ([email protected]) أو وينهانج شي ([email protected]).
تم توجيه هذا العمل من قبل مرشدي مؤسستي Qi Ju و Xuefeng Yang و Haotang Deng وموجهي المدرسة Tao Liu و Xiayong Du .
لقد حصلنا أيضًا على الكثير من المساعدة من Weijie Liu وLusheng Zhang وJianwei Cui وXiayu Li وWeiquan Mao وXin Zhao وHui Chen وJinbin Zhang وZhiruo Wang وPeng Zhou وHaixiao Liu وWeijian Wu.