
Crie modelos destilados a partir de todos os modelos de idiomas mascarados no hub Huggingface com apenas um comando bash.
Características:
Primeiro, clone o projeto e instale as dependências.
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtNeste tutorial, mostraremos como configurar uma tarefa de destilação na linha de comando. Você precisará de duas coisas:
bert-base-uncased .Usaremos a seção em inglês do Europarl Corpus. Este é um corpus paralelo de alta qualidade do Parlamento Europeu criado por intérpretes e tradutores profissionais. Atualmente, é muito pequeno para um corpus de idioma, apenas 114 MB, mas para o nosso tutorial de destilação, tudo bem.
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz Os dados agora estão descompactados e armazenados no arquivo en.txt .
Agora temos os dados, podemos começar a treinar. O download do modelo do professor acontecerá automaticamente, portanto, não há necessidade de fazer isso manualmente. Se você acha que isso leva muito tempo e só deseja experimentar o treinamento, por exemplo, para ter uma sensação de horários, você pode adicionar --limit_train_batches N . Isso limita cada época a N lotes durante o treinamento.
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txt Existem algumas coisas que acontecem em segundo plano depois de executar esse comando. Primeiro, esta biblioteca cria um estudante e um modelo de professor. O professor é bert-base-uncased e o aluno usará a mesma arquitetura que o professor por padrão, apenas o número de cabeças é menor: 6 em vez de 12. Como estamos treinando em um domínio específico (Europarl), isso deve ser suficiente. Obviamente, você pode misturar e combinar professores diferentes e maiores com alunos menores, mas o desempenho variará muito.
Segundo, a biblioteca Huggingface baixa o modelo do professor e o tokenizer. Terceiro, o conjunto de dados é carregado do disco e inicializado com o tokenizer, observe que a própria tokenização ocorre posteriormente por padrão. Finalmente, o loop de destilação começa.
Finalmente, você pode usar o modelo com a biblioteca Huggingface! Todos os arquivos do aluno (Modelo Pytorch e Tokenizer) são salvos na pasta que definimos anteriormente: my_distilled_model/ . Você pode importar o modelo diretamente desta pasta e testar a tarefa de modelagem de linguagem mascarada com apenas 3 linhas:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )Embora este tenha sido um exemplo estranho, isso geralmente é suficiente para criar seu próprio modelo adaptado ao domínio. Nesse caso, é
Você também pode executar uma avaliação intrínseca usando a pseudo-templexidade. Você precisa especificar o professor e o modelo destilado, mas se você executar apenas a avaliação, poderá fornecer o modelo de destino para ambos os argumentos.
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffled Essa base de código também é usada para o nosso artigo ECML-PKDD 2022, onde combinamos a destilação do conhecimento de modelos de linguagem com restrições de justiça. As restrições que testamos no artigo são uma substituição estrondosa dos pronomes de gênero, mas o código suporta qualquer substituição de toque único. Estes podem ser adicionados ao processo de destilação, definindo quais tokens que você deseja equalizar. Por exemplo, he e she têm token IDs 2016 e 2002, para que possamos definir um par de substituição com os dois tokens. As probabilidades em relação aos dois tokens são equalizadas.
Você pode adicionar tokens modificando universal-distillation/distillation.py em torno da linha 90. Não se esqueça de incluir também as restrições ao criar o modelo BaseTransformer .
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))