Le tutoriel a été donné le 2 juin à NAACL 2019 à Minneapolis, MN, USA par Sebastian Ruder, Matthew Peters, Swabha Swayamdipta et Thomas Wolf.
Voici la page Web des tutoriels NAACL pour plus d'informations.
Les diapositives du tutoriel peuvent être trouvées ici: https://tinyurl.com/naacltransfer.
Un cahier Google Colab avec tout le code du tutoriel peut être trouvé ici: https://tinyurl.com/naacltransfercolab.
Le référentiel actuel est également accessible avec l'URL courte suivante: https://tinyurl.com/naacltransfercode
Le paradigme classique supervisé d'apprentissage automatique est basé sur l'apprentissage isolément un modèle prédictif unique pour une tâche à l'aide d'un seul ensemble de données. Cette approche nécessite un grand nombre d'exemples de formation et fonctionne mieux pour les tâches bien définies et étroites. L'apprentissage du transfert fait référence à un ensemble de méthodes qui étendent cette approche en tirant parti des données à partir de domaines ou tâches supplémentaires pour former un modèle avec de meilleures propriétés de généralisation.
Au cours des deux dernières années, le domaine du traitement du langage naturel (PNL) a été témoin de l'émergence de plusieurs méthodes et architectures d'apprentissage du transfert, ce qui s'est considérablement amélioré sur l'état de l'art sur un large éventail de tâches PNL.
Ces améliorations ainsi que la grande disponibilité et la facilité d'intégration de ces méthodes rappellent les facteurs qui ont conduit au succès des incorporations de mots pré-étirées et de l'imaget pré-entraînement dans la vision par ordinateur, et indiqueront que ces méthodes deviendront probablement un outil commun dans le paysage PNL ainsi qu'une direction de recherche importante.
Nous présenterons un aperçu des méthodes d'apprentissage du transfert modernes dans la PNL, comment les modèles sont pré-formés, quelles informations les représentations qu'ils apprennent capturent et examinent des exemples et des études de cas sur la façon dont ces modèles peuvent être intégrés et adaptés dans les tâches NLP en aval.
Cette base de code essaie de présenter de la manière la plus simple et la plus compacte quelques-unes des principales techniques d'apprentissage du transfert, qui ont émergé au cours des dernières années. Le code de ce référentiel n'essaie pas d'être à la pointe de la technologie. Cependant, des efforts ont été faits pour atteindre des performances raisonnables et avec certaines modifications pour être compétitives à l'état actuel de l'art.
Un effort particulier a été fait pour
Actuellement, la base de code comprend:
pretraining_model.py : un modèle de transformateur avec une architecture de type GPT-2 comme modèle de base pré-entraîné;pretraining_train.py : un script de pré-formation pour former ce modèle avec un objectif de modélisation de la langue sur une sélection de grands ensembles de données (WikiteXt-103, SimpleBooks-92) en utilisant une formation distribuée si disponible;finetuning_model.py : plusieurs architectures basées sur le modèle de transformateur pour le réglage fin (avec une tête de classification sur le dessus, avec des adaptateurs);finetuning_train.py : un script de réglage fin pour affiner ces architectures sur une tâche de classification (IMDB). Pour utiliser cette base de code, clonez simplement le référentiel GitHub et installez les exigences comme ceci:
git clone https://github.com/huggingface/naacl_transfer_learning_tutorial
cd naacl_transfer_learning_tutorial
pip install -r requirements.txt Pour pré-entraîner le transformateur, exécutez le script pretraining_train.py comme ceci:
python ./pretraining_train.pyou en utilisant une formation distribuée comme celle-ci (pour un serveur de 8 GPU):
python -m torch.distributed.launch --nproc_per_node 8 ./pretraining_train.pyLe script de pré-formation sera:
wikitext-103 pour la pré-formation (par défaut),./runs ,La pré-entraînement à une perplexité de validation de ~ 29 sur Wikitext-103 prendra environ 15h sur 8 GPU V100 (peut être arrêté plus tôt). Si vous êtes intéressé par SOTA, il y a quelques raisons pour lesquelles la perplexité de la validation est un peu plus élevée que la perplexité de transformateur-xl équivalente (environ 24). La raison principale est l'utilisation d'un vocabulaire ouvert (sous-mots pour Bert Tokenizer) au lieu d'un vocabulaire fermé (voir cet article de blog de Sebastian Mielke pour une explication)
Diverses options de pré-formation sont disponibles, vous pouvez les énumérer avec:
python ./pretraining_train.py --help Pour affiner le transformateur pré-formé, exécutez le script finetuning_train.py comme ceci:
python ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER peut être par exemple ./runs/May17_17-47-12_my_big_server
ou en utilisant une formation distribuée comme celle-ci (pour un serveur de 8 GPU):
python -m torch.distributed.launch --nproc_per_node 8 ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDERDiverses options de réglage fin sont disponibles, vous pouvez les énumérer avec:
python ./finetuning_train.py --help