Code pour papier "bert-of-thèse: comprimer Bert par le remplacement du module progressif".
Bert-of-Thisheus est un nouveau Bert comprimé en remplaçant progressivement les composants du Bert d'origine.

Si vous utilisez ce code dans votre recherche, veuillez citer notre article:
@inproceedings { xu-etal-2020-bert ,
title = " {BERT}-of-Theseus: Compressing {BERT} by Progressive Module Replacing " ,
author = " Xu, Canwen and
Zhou, Wangchunshu and
Ge, Tao and
Wei, Furu and
Zhou, Ming " ,
booktitle = " Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) " ,
month = nov,
year = " 2020 " ,
address = " Online " ,
publisher = " Association for Computational Linguistics " ,
url = " https://www.aclweb.org/anthology/2020.emnlp-main.633 " ,
pages = " 7859--7869 "
}NOUVEAU: Nous avons téléchargé un script pour faire des prédictions sur les tâches de colle et la préparation de la soumission de classement. Découvrez ici!
Notre code est construit sur HuggingFace / Transformers. Pour utiliser notre code, vous devez cloner et installer HuggingFace / Transformers.
# For compression with a replacement scheduler
export GLUE_DIR=/path/to/glue_data
export TASK_NAME=MRPC
python ./run_glue.py
--model_name_or_path /path/to/saved_predecessor
--task_name $TASK_NAME
--do_train
--do_eval
--do_lower_case
--data_dir " $GLUE_DIR / $TASK_NAME "
--max_seq_length 128
--per_gpu_train_batch_size 32
--per_gpu_eval_batch_size 32
--learning_rate 2e-5
--save_steps 50
--num_train_epochs 15
--output_dir /path/to/save_successor/
--evaluate_during_training
--replacing_rate 0.3
--scheduler_type linear
--scheduler_linear_k 0.0006 # For compression with a constant replacing rate
export GLUE_DIR=/path/to/glue_data
export TASK_NAME=MRPC
python ./run_glue.py
--model_name_or_path /path/to/saved_predecessor
--task_name $TASK_NAME
--do_train
--do_eval
--do_lower_case
--data_dir " $GLUE_DIR / $TASK_NAME "
--max_seq_length 128
--per_gpu_train_batch_size 32
--per_gpu_eval_batch_size 32
--learning_rate 2e-5
--save_steps 50
--num_train_epochs 15
--output_dir /path/to/save_successor/
--evaluate_during_training
--replacing_rate 0.5
--steps_for_replacing 2500 Pour la description détaillée des arguments, veuillez vous référer au code source.
Nous fournissons un modèle prétrainé à 6 couches sur MNLI en tant que modèle à usage général, qui peut transférer à d'autres tâches de classification des phrases, surpassant Distillbert (avec la même structure à 6 couches) sur six tâches de colle (Dev set).
| Méthode | MNLI | MRPC | QNLI | QQP | Rte | SST-2 | STS-B |
|---|---|---|---|---|---|---|---|
| Bascule | 83.5 | 89.5 | 91.2 | 89.8 | 71.1 | 91.5 | 88.9 |
| Distillbert | 79.0 | 87.5 | 85.3 | 84.9 | 59.9 | 90.7 | 81.2 |
| Bert-de-thisus | 82.1 | 87.5 | 88.8 | 88.8 | 70.1 | 91.8 | 87.8 |
Vous pouvez facilement charger notre modèle à usage général à l'aide de HuggingFace / Transformers.
from transformers import AutoTokenizer , AutoModel
tokenizer = AutoTokenizer . from_pretrained ( "canwenxu/BERT-of-Theseus-MNLI" )
model = AutoModel . from_pretrained ( "canwenxu/BERT-of-Theseus-MNLI" )Si vous souhaitez contribuer et ajouter plus de tâches (seule de la colle est disponible en ce moment), veuillez soumettre une demande de traction et me contacter. De plus, si vous trouvez un problème ou un bug, veuillez vous présenter avec un problème. Merci!
Nous énumérons quelques implémentations tierces de la communauté ici. Veuillez ajouter votre implémentation à cette liste:
Tensorflow Implementation (tested on NER) : https://github.com/qiufengyuyi/bert-of-theus-tfKeras Implementation (tested on text classification) : https://github.com/bojone/bert-of-theus