يوفر هذا المستودع الرمز لورقة Neurips 2023 (المسار الرئيسي) بعنوان لا تتوقف عن التدريب؟ اجعل المتعلم القوي القائم على القائمة على الموجهين ، مما يجعل تكامل مساهمات الكود لدينا في مشاريع أخرى يمكن الوصول إليها.

يمكنك إعادة إنتاج تجارب ورقتنا ألا تتوقف عن التدريب؟ اجعل المتعلم القوي القائم على القائمة على الفعل.
خلاصة
نماذج اللغة (LMS) المدربة على كميات هائلة من البيانات غير المسموح بها قد تقدمت إلى حد كبير في مجال معالجة اللغة الطبيعية (NLP). في هذه الدراسة ، نعيد زيارة الفكرة المقبولة على نطاق واسع في NLP والتي تستمر تدريب LMS على النصوص المتعلقة بالمهمة على تحسين أداء التثبيت (FT) في مهام المصب. من خلال التجارب على ثماني مهام للالتحام الواحد وثماني مهام من الجملة في كل من الإعدادات شبه الخاضعة للإشراف والخضع للإشراف بالكامل ، نجد أن التدريب التقليدي المتواصل لا يوفر فوائد باستمرار ويمكن أن يكون ضارًا بمهام القمامة على الجملة أو عند استخدام FT المستندة إلى FT. لمعالجة هذه المشكلات ، نقترح استمرار التدريب المستمر القائم على التدريب (PCP) ، والذي يجمع بين فكرة ضبط التعليمات مع استمرار التدريب التقليدي. يهدف نهجنا إلى تحسين أداء FT المستندة إلى المقدمة من خلال تقديم النصوص المتعلقة بالمهمة والقوالب السريعة إلى LMS من خلال أهداف التدريب غير الخاضعة للإشراف قبل ضبط المهمة المستهدفة. توضح تقييماتنا التجريبية على 21 معايير أن PCP يحسن باستمرار أداء مقاربات FT القائمة على أحدث طراز (تصل إلى 20.1 ٪ مطلقة) في كل من الإعدادات شبه الخاضعة للإشراف والخطر بالكامل ، حتى مع مئات الأمثلة غير المسبقة فقط. بالإضافة إلى ذلك ، يتفوق FT المستندة إلى PCP على الأداء المناهج شبه الخاضعة للإشراف على PCP مع بساطة أكبر ، مما يلغي الحاجة إلى عملية تكرارية وزيادة بيانات إضافية. يستكشف تحليلنا الإضافي الحد الأدنى للأداء من PCP ويكشف أن مزايا PCP تستمر عبر أحجام مختلفة من النماذج ومجموعات البيانات.
لتشغيل الضبط الدقيق المستند إلى المقدمة أو CLS ، تحتاج إلى تثبيت الحزم التالية.
لتثبيت الحزم المطلوبة لنهج خط الأساس لدينا (النهج شبه الخاضعة للإشراف) ، يمكنك تشغيل الأمر التالي.
pip install -r requirements.txtلتجاربنا ، نستخدم مجموعتين من مجموعات البيانات.
SST-2 ، SST-5 ، mr ، cr ، mpqa ، subj ، trec ، CoLA ) ومهام زوج الجملة ( MRPC ، QQP ، STS-B ، MNLI ، MNLI-mm ، SNLI ، QNLI ، RTE ). توجد مجموعات البيانات هذه في مجلد data/k-shot . نحن نستخدم نفس انقسامات البيانات مثل LM-BFF. لتنفيذ عملية ضبط المقدمة مع مجموعات البيانات هذه ، قم بتعيين TASK_TYPE على أنها glue و TASK_NAME كاسم لمجموعة البيانات. قمنا بتعيين MAX_LENGTH كـ 128 لمهام الجملة الفردية و 256 لمهام زوج الجملة. data/glue_pretrain ملفات TXT المعالجة مسبقًا للتدريب المسبق للمواعيد و JSON لإنشاء ملصقات زائفة في التدريب المستمر المستمر على المستمرة.ag_news ، amazon_review ، yahoo_answers ، yelp_review ، aclImdb . تتوفر مجموعات البيانات هذه في مجلد data . لتشغيل عملية التكييف المستندة إلى الموجهين مع مجموعات البيانات هذه ، يرجى تعيين TASK_TYPE كـ ssl و TASK_NAME كاسم لمجموعة البيانات. قمنا بتعيين MAX_LENGTH كـ 256 لجميع مجموعات البيانات هذه. يحتوي المجلد data/${TASK_NAME}/labeled_idx على مؤشرات الأمثلة المسمى المحددة لخمسة بذور مختلفة. نحن هنا نقدم رمز الضبط الدقيق القائم على المطالبة. قم بتنفيذ الأمر التالي لضبط النموذج باستخدام CHECKPOINT النماذج التي تم تدريبها مسبقًا ، مثل roberta-large أو نقطة تفتيش PCP. قم بإعداد MODEL_TYPE prompting أو dart ، حيث يمثل prompting صياغة صعبة القائمة على الموجهين ، dart إلى صقل ناعم. لكل مجموعة بيانات في المجموعة الأولى ، نستخدم 16 مثالًا لكل فصل. على سبيل المثال ، لتنفيذ الضبط الدقيق (SOFT) على مجموعة بيانات SST-2 ، قم بتشغيل الأمر أدناه.
TASK_NAME=SST-2
TASK_TYPE=glue
MODEL_TYPE=dart
CHECKPOINT=roberta-large
MAX_LENGTH=128
for lr in 1e-5 2e-5 5e-5 ; do
for seed in 13 21 42 87 100 ; do
CUDA_VISIBLE_DEVICES=0 python run_prompt_ft.py
--task_type ${TASK_TYPE}
--model_type ${MODEL_TYPE}
--downstream_task_name ${TASK_NAME}
--train_file data/k-shot/ ${TASK_NAME} /16- ${seed}
--validation_file data/k-shot/ ${TASK_NAME} /16- ${seed}
--test_file data/k-shot/ ${TASK_NAME} /16- ${seed}
--model_name_or_path ${CHECKPOINT}
--do_train
--do_eval
--do_predict
--per_device_train_batch_size 8
--per_device_eval_batch_size 8
--max_seq_length ${MAX_LENGTH}
--save_strategy steps
--evaluation_strategy steps
--max_steps 1000
--eval_steps 100
--save_steps 100
--learning_rate ${lr}
--weight_decay 0.01
--warmup_ratio 0.06
--load_best_model_at_end
--save_total_limit 1
--output_dir saved_ ${TASK_TYPE} / ${MODEL_TYPE} _ ${TASK_NAME} _ ${seed} _ ${lr} ;
done ;
done يمكنك استخدام الوسيطة --run_pseduo_label True وتعيين الوسيطة --test_file data/glue_pretrain/${TASK_NAME} لإنشاء ملصقات زائفة لبيانات التدريب. هذا ضروري لأننا بحاجة إلى استخدام مجموعة القطار ومجموعة DEV لمزيد من التدريب المسبق ، بدلاً من مجموعة الاختبار الأصلية. ارجع إلى مجلد sh_examples لعرض بعض الأمثلة. سيتم حفظ الملصقات الزائفة التي تم إنشاؤها في predict_results_train.json و predict_results_dev.json داخل مجلد --output_dir . للحصول على تفاصيل حول كيفية استخدام الملصقات الزائفة التي تم إنشاؤها من أجل التدريب المستمر المستمر (PCP) ، يرجى الرجوع إلى 4. استمرار التدريب المستمر المستمر (PCP).
لكل مجموعة بيانات في المجموعة الثانية ، قم بتعيين عدد الملصقات LABEL_SIZE لتحديد إجمالي المبلغ للأمثلة المسمى. على سبيل المثال ، لتنفيذ الضبط الدقيق المستند إلى المقدمة (HARD) على مجموعة بيانات aclImdb ، قم بتشغيل الأمر أدناه.
TASK_NAME=aclImdb
TASK_TYPE=ssl
MODEL_TYPE=prompting
CHECKPOINT=roberta-large
NUMBER_LABELS=20
MAX_LENGTH=256
for lr in 1e-5 2e-5 5e-5 ; do
for seed in 1 2 3 4 5 ; do
CUDA_VISIBLE_DEVICES=0 python run_prompt_ft.py
--task_type ${TASK_TYPE}
--model_type ${MODEL_TYPE}
--downstream_task_name ${TASK_NAME}
--seed ${seed}
--num_labelled_data ${NUMBER_LABELS}
--train_file data/ ${TASK_NAME}
--validation_file data/ ${TASK_NAME}
--test_file data/ ${TASK_NAME}
--model_name_or_path ${CHECKPOINT}
--do_train
--do_eval
--do_predict
--per_device_train_batch_size 8
--per_device_eval_batch_size 16
--max_seq_length ${MAX_LENGTH}
--save_strategy steps
--evaluation_strategy steps
--max_steps 1000
--eval_steps 100
--save_steps 100
--learning_rate ${lr}
--weight_decay 0.01
--warmup_ratio 0.06
--load_best_model_at_end
--save_total_limit 1
--output_dir saved_ ${TASK_TYPE} / ${MODEL_TYPE} _ ${TASK_NAME} _ ${seed} _ ${lr} _ ${NUMBER_LABELS} ;
done ;
done بعد الحصول على ملصقات Pseudo لبيانات التدريب لمهمة معينة ، يمكنك تنفيذ الأمر التالي لأداء التدريب المستمر المستمر المستمر (PCP). استخدم الوسيطة- --use_fixed_dart للتدريب المسبق المستند إلى الموجهين ؛ خلاف ذلك ، سيتم استخدام استمرار التدريب المستمر القائم على المطالبة. في التدريب المستمر القائم على المطالبة الصعبة ، نستخدم القوالب المكتوبة على الإنسان والكلمات المسمى على أنها مطالبات. من أجل استمرار التدريب المستمر المستمر على المطالبة ، نستخدم نفس القوالب لمهام الجملة الفردية ومهام زوج الجملة ، على التوالي. لمزيد من التفاصيل حول الاختلافات بين التدريب المسبق الناعم والقائم على المطالبة الصلبة ، يرجى الرجوع إلى الورقة. على سبيل المثال ، لتنفيذ التدريب المستمر المستمر المستمر (Soft) على مهام الجملة الفردية ، قم بتشغيل الأمر أدناه.
MODEL_TYPE=dart
for TASK_NAME in subj sst-5 trec CoLA mr SST-2 cr mpqa ; do
python src/convert_to_pretrain_pcp.py
--use_fixed_dart
--task_name ${TASK_NAME}
--train_file output_path/predict_results_train.json
--dev_file output_path/predict_results_dev.json
--output_path data/glue_pretrain/ ${TASK_NAME} _ ${MODEL_TYPE} ;
doneبمجرد الحصول على بيانات ما قبل التدريب ، يمكنك تنفيذ الأمر التالي لأداء التدريب المستمر المستمر على أساس المطالبة. على سبيل المثال ، لتنفيذ التدريب المستمر المستمر القائم على الطالبة باستخدام قوالب ناعمة وصعبة في مهام الجملة الفردية ، قم بتشغيل الأمر أدناه.
for MODEL_TYPE in prompting dart ; do
for TASK_NAME in subj sst-5 trec CoLA mr SST-2 cr mpqa ; do
python run_mlm.py
--model_name_or_path roberta-large
--train_file data/glue_pretrain/ ${TASK_NAME} _ ${MODEL_TYPE} /train.txt
--validation_file data/glue_pretrain/ ${TASK_NAME} _ ${MODEL_TYPE} /dev.txt
--line_by_line
--per_device_train_batch_size 16
--per_device_eval_batch_size 16
--gradient_accumulation_steps 8
--learning_rate 1e-04
--optim adamw_torch
--weight_decay 0.01
--adam_beta1 0.9
--adam_beta2 0.98
--adam_epsilon 1e-06
--do_train
--do_eval
--save_steps 500
--evaluation_strategy steps
--eval_steps 500
--num_train_epochs 100
--warmup_ratio 0.06
--mlm_probability 0.15
--always_mask_label_token False
--fp16
--output_dir saved_checkpoint/ ${TASK_NAME} _ ${MODEL_TYPE}
--load_best_model_at_end ;
done ;
done تذكر ضبط --per_device_train_batch_size بناءً على ذاكرة GPU المتاحة. عندما يكون عدد أمثلة التدريب صغيرًا ، فكر في استخدام معدل تعليمي أقل. بعد الحصول على النموذج الذي تم تدريبه مسبقًا ، قم بتعيين CHECKPOINT في 3. صقله المستند إلى السلاح --output_dir المستخدم في هذه الخطوة. يتيح لك ذلك إجراء عملية ضبط نهائية قائمة على المهمة ذات الاهتمام باستخدام نقطة تفتيش PCP الخاصة بنا ، والتي تتفوق عادةً على نقطة تفتيش التدريب التقليدية المستمرة [4] ، خاصة بالنسبة لمهام زوج الجملة.
يتضمن مستودعنا أيضًا تنفيذ الضبط التقليدي القائم على CLS ، والذي يمكن تنفيذه باستخدام الأمر أدناه.
TASK_TYPE=glue
MAX_LENGTH=128
CHECKPOINT=roberta-large
for TASK_NAME in subj sst-5 trec CoLA mr SST-2 cr mpqa ; do
for lr in 1e-5 2e-5 5e-5 ; do
for seed in 13 21 42 87 100 ; do
CUDA_VISIBLE_DEVICES=0 python run_cls_ft.py
--task_type ${TASK_TYPE}
--task_name ${TASK_NAME}
--train_file data/k-shot/ ${TASK_NAME} /16- ${seed}
--validation_file data/k-shot/ ${TASK_NAME} /16- ${seed}
--test_file data/k-shot/ ${TASK_NAME} /16- ${seed}
--model_name_or_path ${CHECKPOINT}
--do_train
--do_eval
--do_predict
--per_device_train_batch_size 8
--per_device_eval_batch_size 8
--max_seq_length ${MAX_LENGTH}
--save_strategy steps
--evaluation_strategy steps
--max_steps 1000
--eval_steps 100
--save_steps 100
--learning_rate ${lr}
--weight_decay 0.01
--warmup_ratio 0.06
--load_best_model_at_end
--save_total_limit 1
--output_dir saved_ ${TASK_TYPE} _cls/ ${TASK_NAME} _ ${seed} _ ${lr} ;
done ;
done ;
done بالإضافة إلى ذلك ، فإننا ندعم أربعة أساليب متدربة ذاتية ، بما في ذلك adamatch و flexmatch و fixmatch و dash . لتشغيل التدريب الذاتي ، قم بتنفيذ الأمر الوارد أدناه.
TASK_NAME=aclImdb
LABEL_SIZE=20
CHECKPOINT=roberta-large
for ALGORITHM in adamatch flexmatch fixmatch dash ; do
for lr in 1e-5 2e-5 5e-5 ; do
for seed in 1 2 3 4 5 ; do
CUDA_VISIBLE_DEVICES=0 python run_st.py
--seed ${seed}
--num_labels ${LABEL_SIZE}
--dataset ${TASK_NAME}
--batch_size 8
--eval_batch_size 8
--num_train_iter 25600
--num_eval_iter 2560
--epoch 10
--lr ${lr}
--use_pretrain True
--pretrain_path ${CHECKPOINT}
--net roberta_for_prompting_classification
--c config_roberta/ ${ALGORITHM} / ${ALGORITHM} _ ${TASK_NAME} _ ${LABEL_SIZE} _0.yaml
--save_dir saved_st
--save_name output_path
--load_path saved_st/output_path/latest_model.pth ;
done ;
done ;
done إذا كان لديك أي أسئلة بخصوص الكود أو الورقة ، فلا تتردد في الوصول إلى Zhengxiang في [email protected] . إذا واجهت أي صعوبات أثناء استخدام الرمز أو تحتاج إلى الإبلاغ عن خطأ ، فلا تتردد في فتح مشكلة. نطلب منك أن تقدم معلومات مفصلة حول المشكلة لمساعدتنا في تقديم دعم فعال.
@inproceedings{shi2023dont,
title={Don't Stop Pretraining? Make Prompt-based Fine-tuning Powerful Learner},
author={Shi, Zhengxiang and Lipani, Aldo},
booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
year={2023},
url={https://openreview.net/forum?id=s7xWeJQACI}
}
هذا المستودع مبني على المستودعات التالية: