Fork de https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/langage-modeling au 2021.05.17.
Affiner (ou entraîner à partir de zéro) les modèles de bibliothèque pour la modélisation du langage sur un ensemble de données texte pour GPT, GPT-2, ALBERT, BERT, DistilBERT, RoBERTa, XLNet... GPT et GPT-2 sont entraînés ou affinés à l'aide une perte de modélisation de langage causale (CLM) tandis qu'ALBERT, BERT, DistilBERT et RoBERTa sont formés ou affinés à l'aide d'une perte de modélisation de langage masqué (MLM). XLNet utilise la modélisation du langage de permutation (PLM), vous pouvez trouver plus d'informations sur les différences entre ces objectifs dans notre résumé du modèle.
Deux ensembles de scripts sont fournis. Le premier ensemble exploite l’API Trainer. Le deuxième ensemble avec no_trainer
dans le suffixe utilise une boucle de formation personnalisée et exploite le ? Accélérer la bibliothèque . Les deux ensembles utilisent le ? Bibliothèque de jeux de données. Vous pouvez facilement les personnaliser selon vos besoins si vous avez besoin d'un traitement supplémentaire sur vos ensembles de données.
Remarque : L'ancien script run_language_modeling.py
est toujours disponible ici.
Les exemples suivants s'exécuteront sur des ensembles de données hébergés sur notre hub ou avec vos propres fichiers texte à des fins de formation et de validation. Nous donnons des exemples des deux ci-dessous.
L'exemple suivant affine GPT-2 sur WikiText-2. Nous utilisons le WikiText-2 brut (aucun jeton n'a été remplacé avant la tokenisation). La perte ici est celle de la modélisation causale du langage.
python run_clm.py
--model_name_or_path gpt2
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-clm
Cela prend environ une demi-heure pour s'entraîner sur un seul GPU K80 et environ une minute pour l'exécution de l'évaluation. Il atteint un score d’environ 20 de perplexité une fois affiné sur l’ensemble de données.
Pour exécuter sur vos propres fichiers de formation et de validation, utilisez la commande suivante :
python run_clm.py
--model_name_or_path gpt2
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-clm
Cela utilise le HuggingFace Trainer
intégré pour la formation. Si vous souhaitez utiliser une boucle de formation personnalisée, vous pouvez utiliser ou adapter le script run_clm_no_trainer.py
. Jetez un œil au script pour une liste des arguments pris en charge. Un exemple est présenté ci-dessous :
python run_clm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path gpt2
--output_dir /tmp/test-clm
L'exemple suivant affine RoBERTa sur WikiText-2. Ici aussi, nous utilisons le WikiText-2 brut. La perte est différente car BERT/RoBERTa a un mécanisme bidirectionnel ; nous utilisons donc la même perte qui a été utilisée lors de leur pré-formation : la modélisation du langage masqué.
Conformément à l'article RoBERTa, nous utilisons un masquage dynamique plutôt qu'un masquage statique. Le modèle peut donc converger légèrement plus lentement (le surajustement prend plus d’époques).
python run_mlm.py
--model_name_or_path roberta-base
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-mlm
Pour exécuter sur vos propres fichiers de formation et de validation, utilisez la commande suivante :
python run_mlm.py
--model_name_or_path roberta-base
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-mlm
Si votre ensemble de données est organisé avec un échantillon par ligne, vous pouvez utiliser l'indicateur --line_by_line
(sinon le script concatène tous les textes puis les divise en blocs de même longueur).
Cela utilise le HuggingFace Trainer
intégré pour la formation. Si vous souhaitez utiliser une boucle de formation personnalisée, vous pouvez utiliser ou adapter le script run_mlm_no_trainer.py
. Jetez un œil au script pour une liste des arguments pris en charge. Un exemple est présenté ci-dessous :
python run_mlm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path roberta-base
--output_dir /tmp/test-mlm
Remarque : Sur TPU, vous devez utiliser l'indicateur --pad_to_max_length
en conjonction avec l'indicateur --line_by_line
pour vous assurer que tous vos lots ont la même longueur.
Cette partie a été déplacée vers examples/research_projects/mlm_wwm
.
XLNet utilise un objectif de formation différent, à savoir la modélisation du langage de permutation. Il s'agit d'une méthode autorégressive pour apprendre des contextes bidirectionnels en maximisant la vraisemblance attendue sur toutes les permutations de l'ordre de factorisation de la séquence d'entrée.
Nous utilisons l'indicateur --plm_probability
pour définir le rapport entre la longueur d'une étendue de jetons masqués et la longueur du contexte environnant pour la modélisation du langage de permutation.
L'indicateur --max_span_length
peut également être utilisé pour limiter la longueur d'une étendue de jetons masqués utilisés pour la modélisation du langage de permutation.
Voici comment affiner XLNet sur wikitext-2 :
python run_plm.py
--model_name_or_path=xlnet-base-cased
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-plm
Pour l'affiner sur votre propre fichier de formation et de validation, exécutez :
python run_plm.py
--model_name_or_path=xlnet-base-cased
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-plm
Si votre ensemble de données est organisé avec un échantillon par ligne, vous pouvez utiliser l'indicateur --line_by_line
(sinon le script concatène tous les textes puis les divise en blocs de même longueur).
Remarque : Sur TPU, vous devez utiliser l'indicateur --pad_to_max_length
en conjonction avec l'indicateur --line_by_line
pour vous assurer que tous vos lots ont la même longueur.