Código para el papel "Bert-of-esteus: comprimir Bert por el reemplazo del módulo progresivo".
Bert-of-esteus es un nuevo Bert comprimido al reemplazar progresivamente los componentes del Bert original.

Si usa este código en su investigación, cite nuestro documento:
@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 "
}NUEVO: Hemos subido un script para hacer predicciones sobre tareas de pegamento y prepararnos para el envío de la tabla de clasificación. ¡Mira aquí!
Nuestro código se basa en Huggingface/Transformers. Para usar nuestro código, debe clonar e instalar 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 Para la descripción detallada de los argumentos, consulte el código fuente.
Proporcionamos un modelo previo al estado de 6 capas en MNLI como un modelo de propósito general, que puede transferirse a otras tareas de clasificación de oraciones, superando a Distillbert (con la misma estructura de 6 capas) en seis tareas de pegamento (conjunto de desarrollo).
| Método | Mnli | MRPC | Qnli | QQP | RTE | SST-2 | STS-B |
|---|---|---|---|---|---|---|---|
| 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 de este | 82.1 | 87.5 | 88.8 | 88.8 | 70.1 | 91.8 | 87.8 |
Puede cargar fácilmente nuestro modelo de propósito general usando 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 desea contribuir y agregar más tareas (solo hay pegamento disponible en este momento), envíe una solicitud de extracción y contácteme. Además, si encuentra algún problema o error, informe con un problema. ¡Gracias!
Enumeramos algunas implementaciones de terceros de la comunidad aquí. Por favor, agregue su implementación a esta lista:
Tensorflow Implementation (tested on NER) : https://github.com/qiufengyuyi/bert-of-thesus-tfKeras Implementation (tested on text classification) : https://github.com/bojone/bert-of-thesusus