
Créez des modèles distillés à partir de chaque modèle de langage masqué sur le hub Huggingface avec une seule commande bash.
Caractéristiques:
Tout d'abord, clonez le projet et installez les dépendances.
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtDans ce tutoriel, nous vous montrerons comment configurer une tâche de distillation à partir de la ligne de commande. Vous aurez besoin de deux choses:
bert-base-uncased .Nous utiliserons la section anglaise du Corpus Europarl. Il s'agit d'un corpus parallèle de très haute qualité du Parlement européen créé par des interprètes et des traducteurs professionnels. Il est également assez petit pour un corpus de langue de nos jours, seulement 114 Mo, mais pour notre tutoriel de distillation, c'est OK.
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz Les données sont désormais dézippées et stockées dans le fichier en.txt .
Maintenant, nous avons les données, nous pouvons commencer à nous entraîner. Le téléchargement du modèle enseignant se produira automatiquement, donc pas besoin de le faire manuellement. Si vous pensez que cela prend trop de temps et que vous voulez juste essayer la formation, par exemple pour avoir un sentiment de timings, vous pouvez ajouter --limit_train_batches N . Cela limite chaque époque aux N lots pendant l'entraînement.
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 Il y a quelques choses qui se produisent en arrière-plan une fois que vous avez exécuté cette commande. Tout d'abord, cette bibliothèque crée un étudiant et un modèle d'enseignant. L'enseignant est bert-base-uncased et l'élève utilisera la même architecture que l'enseignant par défaut, seul le nombre de têtes est plus petit: 6 au lieu de 12. Étant donné que nous nous entraînons sur un domaine spécifique (Europarl), cela devrait suffire. Bien sûr, vous pouvez mélanger et assortir des enseignants différents et plus grands avec des étudiants plus petits, mais les performances varieront beaucoup.
Deuxièmement, la bibliothèque HuggingFace télécharge le modèle des enseignants et le tokenizer. Troisièmement, l'ensemble de données est chargé à partir du disque et initialisé avec le tokenzer, notez que la tokenisation elle-même se produit plus tard par défaut. Enfin, la boucle de distillation commence.
Enfin, vous pouvez utiliser le modèle avec la bibliothèque HuggingFace! Tous les fichiers de l'étudiant (modèle Pytorch et tokenizer) sont enregistrés dans le dossier que nous avons défini précédemment: my_distilled_model/ . Vous pouvez importer le modèle à partir de ce dossier directement et tester la tâche de modélisation du langage masqué avec seulement 3 lignes:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )Bien qu'il s'agisse d'un exemple de détroit, cela suffit souvent pour créer votre propre modèle adapté au domaine. Dans ce cas, c'est
Vous pouvez également exécuter une évaluation intrinsèque en utilisant la pseudo-perplexité. Vous devez spécifier l'enseignant et le modèle distillé, mais si vous effectuez uniquement l'évaluation, vous pouvez donner le modèle cible pour les deux arguments.
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 Cette base de code est également utilisée pour notre article ECML-PKDD 2022, où nous combinons la distillation de connaissances des modèles de langage avec des contraintes d'équité. Les contraintes que nous avons testées dans le document sont la substitution de Straitforward des pronoms de genre, mais le code soutient toute substitution unique. Ceux-ci peuvent être ajoutés au processus de distillation en définissant les jetons que vous souhaitez égaliser. Par exemple, he et she ont des ID de jetons 2016 et 2002, nous pouvons donc définir une paire de substitution avec les deux jetons. Les probabilités sur les deux jetons sont égalisées.
Vous pouvez ajouter des jetons en modifiant universal-distillation/distillation.py autour de la ligne 90. N'oubliez pas d'inclure également les contraintes lors de la création du modèle BaseTransformer .
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))