Code für Papier "Bert-of-theseus: Komprimieren von Bert durch progressives Modul ersetzen".
Bert-of-theseus ist eine neue komprimierte Bert, indem er die Komponenten der ursprünglichen Bert schrittweise ersetzt.

Wenn Sie diesen Code in Ihrer Forschung verwenden, zitieren Sie bitte unser Papier:
@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 "
}NEU: Wir haben ein Skript hochgeladen, um Vorhersagen über Kleberaufgaben zu machen und sich auf die Einreichung von Ranglisten vorzubereiten. Schau dir hier an!
Unser Code basiert auf dem Umarmungen/Transformatoren. Um unseren Code zu verwenden, müssen Sie Huggingface/Transformers klonen und installieren.
# 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 Die detaillierte Beschreibung der Argumente finden Sie im Quellcode.
Wir bieten ein 6-layeres Modell auf MNLI als allgemeines Modell, das auf andere Satzklassifizierungsaufgaben übertragen und Distillbert (mit derselben 6-Schicht-Struktur) bei sechs Kleberaufgaben (Dev-Set) übertroffen wird.
| Verfahren | Mnli | MRPC | Qnli | QQP | Rte | SST-2 | STS-B |
|---|---|---|---|---|---|---|---|
| Bert-Base | 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-of-theseus | 82.1 | 87,5 | 88,8 | 88,8 | 70.1 | 91.8 | 87,8 |
Sie können unser allgemeines Modell mit Huggingface/Transformers problemlos laden.
from transformers import AutoTokenizer , AutoModel
tokenizer = AutoTokenizer . from_pretrained ( "canwenxu/BERT-of-Theseus-MNLI" )
model = AutoModel . from_pretrained ( "canwenxu/BERT-of-Theseus-MNLI" )Wenn Sie mehr Aufgaben leisten und dazu hinzufügen möchten (derzeit ist nur Kleber verfügbar), senden Sie bitte eine Pull -Anfrage und kontaktieren Sie mich. Wenn Sie ein Problem oder Fehler finden, melden Sie sich bitte mit einem Problem. Danke!
Wir listen hier einige Implementierungen von Drittanbietern aus der Community auf. Bitte fügen Sie Ihre Implementierung dieser Liste hinzu:
Tensorflow Implementation (tested on NER) : https://github.com/qiufengyuyi/bert-of-theseus-tfKeras Implementation (tested on text classification) : https://github.com/bojone/bert-of-theseus