Zhengxuan Wu*، Atticus Geiger*، Josh Rozner ، Elisa Kreiss ، Hanson Lu ، Thomas Icard ، Christopher Potts ، Noah D. Goodman
إن تطبيق التقطير السببي المسبق الخاص بنا لنماذج اللغة. يدرب النهج المعياري للتقطير نموذج الطالب مقابل هدفين: هدف خاص بالمهمة (على سبيل المثال ، نمذجة اللغة) وهدف تقليد يشجع الحالات الخفية لنموذج الطالب على أن تكون مشابهة لنموذج المعلم الأكبر. في هذه الورقة ، نظهر أنه من المفيد زيادة التقطير بهدف ثالث يشجع الطالب على تقليد عملية الحساب السببي للمعلم من خلال التدريب على تدخل التبادل (IIT). نسمي طريقتنا هدف التدريب على تدخل تقطير التقطير (DIITO) .
نجد أن Diito مفيد في بيئة منخفضة الموارد. يؤدي Diito على التقطير القياسي (97 ٪) ولكن التدريب مع 97 ٪ أقل من البيانات.
نحن نتخبط قاعدة الشفرة الرئيسية لدينا من واجهة التقطير المعانقة.
✅ 12/02/2021 تم إصدار ورقتنا حول التدريب على التدخل في التبادل (IIT)! اقرأ هذا للحصول على تعريف أكثر رسمية للطريقة.
✅ 12/06/2021 أصدر قاعدة كود التقطير السببي مع preprint.
✅ 12/06/2021 نتائج التقييم التي تم إصدارها على Bert Tiny-Bert (3 طبقات) مع مجموعة بيانات Wiki-Text 103m.
✅ 01/14/2022 أصدر إصدار أحدث من Diito ، ونتائج تقييمها. يمكنك عرض preprint المحدثة المشتركة الخاصة بنا لمزيد من التفاصيل.
✅ 02/21/2022 أصدرت قاعدة الشفرة لـ DIITO-XXS التي تطبق DITTO على تقطير النماذج الخاصة بالمهمة في NLP مع التركيز على داعمة التقطير النموذجية في إعداد منخفض الموارد. تحقق من الريبو لمزيد من المعلومات!
⬜ تم إصدار نموذج Diito (6 طبقات) مدربة مع Wikipedia الإنجليزية + BookCorpus.
إذا واجهت أي مشكلات أو لديك اقتراحات ، فيرجى الاتصال بي إما صفحة القضايا أو في [email protected].
فيما يلي النتائج على مجموعات DEV من الغراء:
| نموذج | # من الرموز التدريبية | متوسط درجة | كولا | mnli | MRPC | qnli | QQP | RTE | SST-2 | STS-B |
|---|---|---|---|---|---|---|---|---|---|---|
| Distilbert (6 طبقات) Devlin et al. ، 2019 | 3.3b | 79.59 | 51.30 | 82.10 | 87.50 | 89.20 | 88.50 | 59.90 | 91.30 | 86.90 |
| Distilbert (6 طبقات) | 0.1B | 75.80 | 40.43 | 78.95 | 87.45 | 84.76 | 84.96 | 60.10 | 89.38 | 80.40 |
| ديتو (6 طبقات) | 0.1B | 77.14 | 45.17 | 79.68 | 88.18 | 85.83 | 85.31 | 60.94 | 90.32 | 81.69 |
| ديتو (6 طبقات) | 3.3b | (-) | (-) | (-) | (-) | (-) | (-) | (-) | (-) | (-) |
إذا كنت تستخدم هذا المستودع ، فيرجى الاستشهاد بالورقة التالية: ورقة للتدريب على التدخل ، والورق لطريقة التقطير الخاصة بنا.
@article{geiger-etal-2021-iit,
title={Inducing Causal Structure for Interpretable Neural Networks},
author={Geiger, Atticus and Wu, Zhengxuan and Lu, Hanson and Rozner, Josh and Kreiss, Elisa and Icard, Thomas and Goodman, Noah D. and Potts, Christopher},
year={2021},
eprint={2112.00826},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@article{wu-etal-2021-distill,
title={Causal Distillation for Language Models},
author={Wu, Zhengxuan and Geiger, Atticus and Rozner, Josh and Kreiss, Elisa and Lu, Hanson and Icard, Thomas and Potts, Christopher and Goodman, Noah D.},
year={2021},
eprint={2112.02505},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
باتباع واجهة التقطير المعانقة ، نحتاج إلى معالجة مجموعات البيانات المسبقة قبل أن نقوم بالتقطير. يمكنك الرجوع إلى الريبو الخاص بهم للحصول على التفاصيل. نحن نتكيف مع البرامج النصية المسبقة للمعالجة ، ونحدث مع بعض التحسينات. على سبيل المثال ، يمكننا الآن تحديد مجموعات البيانات من مركز البيانات من Huggingface مباشرة.
# preprocessing from disk
python script/binarized_data.py
--file_path ../../bert-mid-tuning/data-files/wikitext-15M
--split train
--field_name text
--max_parsing_example 1000
--tokenizer_type bert
--tokenizer_name bert-base-uncased
--dump_file ./data/binarized_text
# preprocessing from huggingface.
python scripts/binarized_data.py
--dataset_name bookcorpus
--split train
--field_name text
--tokenizer_type bert
--tokenizer_name bert-base-uncased
--dump_file bookcorpus-dataset/binarized_text
--cache_dir ./distill_cache/
python scripts/binarized_data.py
--dataset_name wikitext
--split train
--field_name text
--tokenizer_type bert
--tokenizer_name bert-base-uncased
--dump_file wikitext-dataset/binarized_text
--cache_dir ./distill_cache/
python scripts/binarized_data.py
--dataset_name wikitext+bookcorpus
--split train
--field_name text
--tokenizer_type bert
--tokenizer_name bert-base-uncased
--dump_file wikitext+bookcorpus-dataset/binarized_text
--cache_dir ./distill_cache/
# helper scripts to combine two binarized data files
python scripts/data_combinator.py
--file_path_left ./bookcorpus-dataset/binarized_text.train.bert-base-uncased.pickle
--file_path_right ./wikitext-dataset/binarized_text.train.bert-base-uncased.pickle
--split train
--tokenizer_name bert-base-uncased
--dump_file wikitext+bookcorpus-dataset/binarized_text
# multiprocessing preprocessor.
python scripts/binarized_data.py
--dataset_name bookcorpus
--split train
--field_name text
--tokenizer_type bert
--tokenizer_name bert-base-uncased
--dump_file bookcorpus-dataset/binarized_text
--cache_dir ./distill_cache/
--fast_process
--preprocessing_num_workers 48بعد إعداد مجموعات البيانات ، تحتاج إلى إنشاء تهم رمز أيضًا.
python scripts/token_counts.py
--data_file data/binarized_text.train.bert-base-uncased.pickle
--token_counts_dump data/binarized_text.train.token_counts.bert-base-uncased.pickle
--vocab_size 30522قبل التدريب ، نوصيك بتهيئة نموذج الطالب الخاص بك مع الأوزان المستخرجة من نموذج المعلم.
python scripts/extract_distilbert.py
--model_type bert
--model_name bert-base-uncased
--dump_checkpoint ./distillation_checkpoints/bert-base-uncased_num_layer_3.pth
--num_layers 3الآن ، إليك مثال على التقطير بهدف التقطير السببي أو بدون ،
CUDA_VISIBLE_DEVICES=0,1,2,3 python causal_train.py
--force
--n_gpu 4
--log_interval 10
--student_type distilbert
--student_config ./training_configs/distilbert-base-uncased-large.json
--student_pretrained_weights ./distillation_checkpoints/bert-base-uncased_num_layer_6.pth
--teacher_type bert
--teacher_name bert-base-uncased
--neuron_mapping ./training_configs/single_middle_layer_6.nm
--mlm --alpha_ce 0.25 --alpha_mlm 0.25 --alpha_cos 0.25 --alpha_clm 0.0 --alpha_causal_ce 0.25 --alpha_causal_cos 0.0
--interchange_prop 0.3 --interchange_max_token -1 --interchange_consecutive_only
--freeze_pos_embs
--dump_path ./results/
--data_file ./wikitext-dataset/binarized_text.train.bert-base-uncased.pickle
--token_counts ./wikitext-dataset/binarized_text.train.token_counts.bert-base-uncased.pickle
--seed 42
--n_epoch 3
--gradient_accumulation_steps 6
--batch_size 40 لاحظ أنه يمكنك ببساطة تشغيل هدف التقطير السببي الخاص بنا تشغيل/إيقاف تشغيل الوسيطات. على سبيل المثال ، نضيف مؤخرًا هذه الوسيطة --alpha_causal_cos لدعم الخسارة السببية على مصطلح فقدان جيب التمام. لاحظ أن حجم الدُفعة الفعال في إعدادنا يتم تعيينه على 240.
بعد أن تحصل على نماذج مقطرة ، تحتاج إلى ضبطها وتقييمها بمهام المصب. نحن نوفر لك جميع البرامج النصية التي تحتاج إلى تشغيلها.
CUDA_VISIBLE_DEVICES=0 python run_mlm.py
--model_name_or_path ./path_to_your_model/
--dataset_dir ../path_to_your_data/
--tokenizer_name bert-base-uncased
--do_eval
--output_dir /tmp/test-mlm
--cache_dir ./distill_cache/CUDA_VISIBLE_DEVICES=0,1,2,3 python run_glue.py
--model_name_or_path ./path_to_your_model/
--tokenizer_name bert-base-uncased
--task_name sst2
--do_train
--do_eval
--max_seq_length 128
--per_device_train_batch_size 32
--learning_rate 2e-5
--num_train_epochs 3
--output_dir ./results/
--save_total_limit 1
--cache_dir ./distill_cache/CUDA_VISIBLE_DEVICES=0,1,2,3 python run_ner.py
--model_name_or_path ./path_to_your_model/
--tokenizer_name bert-base-uncased
--dataset_name conll2003
--do_train
--do_eval
--output_dir ./ner_results/
--save_total_limit 1
--cache_dir ./distill_cache/CUDA_VISIBLE_DEVICES=0,1,2,3 python run_qa.py
--model_name_or_path ./path_to_your_model/
--tokenizer_name bert-base-uncased
--dataset_name squad
--do_train
--do_eval
--per_device_train_batch_size 12
--learning_rate 3e-5
--num_train_epochs 2
--max_seq_length 384
--doc_stride 128
--save_total_limit 1
--output_dir ./qa_results/