Código para o papel "Bert-of-Thseus: comprimindo Bert pelo módulo progressivo substituindo".
Bert-of-Teseus é um novo Bert compactado, substituindo progressivamente os componentes do Bert original.

Se você usar este código em sua pesquisa, cite nosso artigo:
@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 "
}NOVO: Enviamos um script para fazer previsões nas tarefas de cola e nos preparar para o envio do tabela de classificação. Confira aqui!
Nosso código é construído no Huggingface/Transformers. Para usar nosso código, você deve clonar e instalar o huggingface/transformadores.
# 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 obter a descrição detalhada dos argumentos, consulte o código -fonte.
Fornecemos um modelo pré-terenciado de 6 camadas no MNLI como um modelo de uso geral, que pode ser transferido para outras tarefas de classificação de frases, superando o Distillbert (com a mesma estrutura de 6 camadas) em seis tarefas de cola (Dev Set).
| Método | 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 |
| Destillbert | 79.0 | 87.5 | 85.3 | 84.9 | 59.9 | 90.7 | 81.2 |
| Bert-de-teseu | 82.1 | 87.5 | 88.8 | 88.8 | 70.1 | 91.8 | 87.8 |
Você pode carregar facilmente nosso modelo de uso geral usando o 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" )Se você quiser contribuir e adicionar mais tarefas (apenas a cola está disponível neste momento), envie uma solicitação de tração e entre em contato comigo. Além disso, se você encontrar algum problema ou bug, relate com um problema. Obrigado!
Listamos algumas implementações de terceiros da comunidade aqui. Por favor, adicione sua implementação a esta lista:
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