Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/main/transformers_doc/fr/quicktour.ipynb
Views: 2542
Visite rapide
Soyez opérationnel avec 🤗 Transformers ! Que vous soyez un développeur ou un utilisateur lambda, cette visite rapide vous aidera à démarrer et vous montrera comment utiliser le pipeline()
pour l'inférence, charger un modèle pré-entraîné et un préprocesseur avec une AutoClass, et entraîner rapidement un modèle avec PyTorch ou TensorFlow. Si vous êtes un débutant, nous vous recommandons de consulter nos tutoriels ou notre cours suivant pour des explications plus approfondies des concepts présentés ici.
Avant de commencer, assurez-vous que vous avez installé toutes les bibliothèques nécessaires :
Vous aurez aussi besoin d'installer votre bibliothèque d'apprentissage profond favorite :
Pipeline
Le pipeline()
est le moyen le plus simple d'utiliser un modèle pré-entraîné pour l'inférence. Vous pouvez utiliser le pipeline()
prêt à l'emploi pour de nombreuses tâches dans différentes modalités. Consultez le tableau ci-dessous pour connaître les tâches prises en charge :
Tâche | Description | Modalité | Identifiant du pipeline |
---|---|---|---|
Classification de texte | Attribue une catégorie à une séquence de texte donnée | Texte | pipeline(task="sentiment-analysis") |
Génération de texte | Génère du texte à partir d'une consigne donnée | Texte | pipeline(task="text-generation") |
Reconnaissance de token nommé | Attribue une catégorie à chaque token dans une séquence (personnes, organisation, localisation, etc.) | Texte | pipeline(task="ner") |
Question réponse | Extrait une réponse du texte en fonction du contexte et d'une question | Texte | pipeline(task="question-answering") |
Prédiction de token masqué | Prédit correctement le token masqué dans une séquence | Texte | pipeline(task="fill-mask") |
Génération de résumé | Génère un résumé d'une séquence de texte donnée ou d'un document | Texte | pipeline(task="summarization") |
Traduction | Traduit du texte d'un langage à un autre | Texte | pipeline(task="translation") |
Classification d'image | Attribue une catégorie à une image | Image | pipeline(task="image-classification") |
Segmentation d'image | Attribue une catégorie à chaque pixel d'une image (supporte la segmentation sémantique, panoptique et d'instance) | Image | pipeline(task="image-segmentation") |
Détection d'objects | Prédit les délimitations et catégories d'objects dans une image | Image | pipeline(task="object-detection") |
Classification d'audio | Attribue une catégorie à un fichier audio | Audio | pipeline(task="audio-classification") |
Reconnaissance automatique de la parole | Extrait le discours d'un fichier audio en texte | Audio | pipeline(task="automatic-speech-recognition") |
Question réponse visuels | Etant données une image et une question, répond correctement à une question sur l'image | Modalités multiples | pipeline(task="vqa") |
Commencez par créer une instance de pipeline()
et spécifiez la tâche pour laquelle vous souhaitez l'utiliser. Vous pouvez utiliser le pipeline()
pour n'importe laquelle des tâches mentionnées dans le tableau précédent. Pour obtenir une liste complète des tâches prises en charge, consultez la documentation de l'API pipeline. Dans ce guide, nous utiliserons le pipeline()
pour l'analyse des sentiments à titre d'exemple :
Le pipeline()
télécharge et stocke en cache un modèle pré-entraîné et un tokenizer par défaut pour l'analyse des sentiments. Vous pouvez maintenant utiliser le classifier
sur le texte de votre choix :
Si vous voulez classifier plus qu'un texte, donnez une liste de textes au pipeline()
pour obtenir une liste de dictionnaires en retour :
Le pipeline()
peut aussi itérer sur un jeu de données entier pour n'importe quelle tâche. Prenons par exemple la reconnaissance automatique de la parole :
Chargez un jeu de données audio (voir le 🤗 Datasets Quick Start pour plus de détails) sur lequel vous souhaitez itérer. Pour cet example, nous chargons le jeu de données MInDS-14 :
Vous devez vous assurer que le taux d'échantillonnage de l'ensemble de données correspond au taux d'échantillonnage sur lequel facebook/wav2vec2-base-960h
a été entraîné :
Les fichiers audio sont automatiquement chargés et rééchantillonnés lors de l'appel de la colonne "audio"
. Extrayez les tableaux de formes d'ondes brutes des quatre premiers échantillons et passez-les comme une liste au pipeline :
Pour les ensembles de données plus importants où les entrées sont volumineuses (comme dans les domaines de la parole ou de la vision), utilisez plutôt un générateur au lieu d'une liste pour charger toutes les entrées en mémoire. Pour plus d'informations, consultez la documentation de l'API pipeline.
Utiliser une autre modèle et tokenizer dans le pipeline
Le pipeline()
peut être utilisé avec n'importe quel modèle du Hub, ce qui permet d'adapter facilement le pipeline()
à d'autres cas d'utilisation. Par exemple, si vous souhaitez un modèle capable de traiter du texte français, utilisez les filtres du Hub pour trouver un modèle approprié. Le premier résultat renvoie un modèle BERT multilingue finetuné pour l'analyse des sentiments que vous pouvez utiliser pour le texte français :
Utilisez AutoModelForSequenceClassification
et AutoTokenizer
pour charger le modèle pré-entraîné et le tokenizer adapté (plus de détails sur une AutoClass
dans la section suivante) :
Utilisez TFAutoModelForSequenceClassification
et AutoTokenizer
pour charger le modèle pré-entraîné et le tokenizer adapté (plus de détails sur une TFAutoClass
dans la section suivante) :
Specifiez le modèle et le tokenizer dans le pipeline()
, et utilisez le classifier
sur le texte en français :
Si vous ne parvenez pas à trouver un modèle adapté à votre cas d'utilisation, vous devrez finetuner un modèle pré-entraîné sur vos données. Jetez un coup d'œil à notre tutoriel sur le finetuning pour apprendre comment faire. Enfin, après avoir finetuné votre modèle pré-entraîné, pensez à partager le modèle avec la communauté sur le Hub afin de démocratiser l'apprentissage automatique pour tous ! 🤗
AutoClass
Les classes AutoModelForSequenceClassification
et AutoTokenizer
fonctionnent ensemble pour créer un pipeline()
comme celui que vous avez utilisé ci-dessus. Une AutoClass est un raccourci qui récupère automatiquement l'architecture d'un modèle pré-entraîné à partir de son nom ou de son emplacement. Il vous suffit de sélectionner l'AutoClass
appropriée à votre tâche et la classe de prétraitement qui lui est associée.
Reprenons l'exemple de la section précédente et voyons comment vous pouvez utiliser l'AutoClass
pour reproduire les résultats du pipeline()
.
AutoTokenizer
Un tokenizer est chargé de prétraiter le texte pour en faire un tableau de chiffres qui servira d'entrée à un modèle. De nombreuses règles régissent le processus de tokenisation, notamment la manière de diviser un mot et le niveau auquel les mots doivent être divisés (pour en savoir plus sur la tokenisation, consultez le résumé). La chose la plus importante à retenir est que vous devez instancier un tokenizer avec le même nom de modèle pour vous assurer que vous utilisez les mêmes règles de tokenisation que celles avec lesquelles un modèle a été pré-entraîné.
Chargez un tokenizer avec AutoTokenizer
:
Passez votre texte au tokenizer :
Le tokenizer retourne un dictionnaire contenant :
input_ids: la représentation numérique des tokens.
attention_mask: indique quels tokens doivent faire l'objet d'une attention particulière (plus particulièrement les tokens de remplissage).
Un tokenizer peut également accepter une liste de textes, et remplir et tronquer le texte pour retourner un échantillon de longueur uniforme :
Consultez le tutoriel prétraitement pour plus de détails sur la tokenisation, et sur la manière d'utiliser un AutoImageProcessor
, un AutoFeatureExtractor
et un AutoProcessor
pour prétraiter les images, l'audio et les contenus multimodaux.
AutoModel
🤗 Transformers fournit un moyen simple et unifié de charger des instances pré-entraînées. Cela signifie que vous pouvez charger un AutoModel
comme vous chargeriez un AutoTokenizer
. La seule différence est de sélectionner l'AutoModel
approprié pour la tâche. Pour une classification de texte (ou de séquence de textes), vous devez charger AutoModelForSequenceClassification
:
Voir le résumé de la tâche pour vérifier si elle est prise en charge par une classe AutoModel
.
Maintenant, passez votre échantillon d'entrées prétraitées directement au modèle. Il vous suffit de décompresser le dictionnaire en ajoutant **
:
Le modèle produit les activations finales dans l'attribut logits
. Appliquez la fonction softmax aux logits
pour récupérer les probabilités :
🤗 Transformers fournit un moyen simple et unifié de charger des instances pré-entraînés. Cela signifie que vous pouvez charger un TFAutoModel
comme vous chargeriez un AutoTokenizer
. La seule différence est de sélectionner le TFAutoModel
approprié pour la tâche. Pour une classification de texte (ou de séquence de textes), vous devez charger TFAutoModelForSequenceClassification
:
Voir le résumé de la tâche pour vérifier si elle est prise en charge par une classe AutoModel
.
Passez maintenant votre échantillon d'entrées prétraitées directement au modèle en passant les clés du dictionnaire directement aux tensors :
Le modèle produit les activations finales dans l'attribut logits
. Appliquez la fonction softmax aux logits
pour récupérer les probabilités :
Tous les modèles 🤗 Transformers (PyTorch ou TensorFlow) produisent les tensors avant la fonction d'activation finale (comme softmax) car la fonction d'activation finale est souvent fusionnée avec le calcul de la perte. Les structures produites par le modèle sont des classes de données spéciales, de sorte que leurs attributs sont autocomplétés dans un environnement de développement. Les structures produites par le modèle se comportent comme un tuple ou un dictionnaire (vous pouvez les indexer avec un entier, une tranche ou une chaîne), auquel cas les attributs qui sont None sont ignorés.
Sauvegarder un modèle
Une fois que votre modèle est finetuné, vous pouvez le sauvegarder avec son tokenizer en utilisant PreTrainedModel.save_pretrained()
:
Lorsque vous voulez réutiliser le modèle, rechargez-le avec PreTrainedModel.from_pretrained()
:
Une fois que votre modèle est finetuné, vous pouvez le sauvegarder avec son tokenizer en utilisant TFPreTrainedModel.save_pretrained()
:
Lorsque vous voulez réutiliser le modèle, rechargez-le avec TFPreTrainedModel.from_pretrained()
:
Une fonctionnalité particulièrement cool 🤗 Transformers est la possibilité d'enregistrer un modèle et de le recharger en tant que modèle PyTorch ou TensorFlow. Le paramètre from_pt
ou from_tf
permet de convertir le modèle d'un framework à l'autre :
Constructions de modèles personnalisés
Vous pouvez modifier la configuration du modèle pour changer la façon dont un modèle est construit. La configuration spécifie les attributs d'un modèle, tels que le nombre de couches ou de têtes d'attention. Vous partez de zéro lorsque vous initialisez un modèle à partir d'une configuration personnalisée. Les attributs du modèle sont initialisés de manière aléatoire et vous devrez entraîner le modèle avant de pouvoir l'utiliser pour obtenir des résultats significatifs.
Commencez par importer AutoConfig
, puis chargez le modèle pré-entraîné que vous voulez modifier. Dans AutoConfig.from_pretrained()
, vous pouvez spécifier l'attribut que vous souhaitez modifier, tel que le nombre de têtes d'attention :
Créez un modèle personnalisé à partir de votre configuration avec AutoModel.from_config()
:
Créez un modèle personnalisé à partir de votre configuration avec TFAutoModel.from_config()
:
Consultez le guide Créer une architecture personnalisée pour plus d'informations sur la création de configurations personnalisées.
Trainer - une boucle d'entraînement optimisée par PyTorch
Tous les modèles sont des torch.nn.Module
standard, vous pouvez donc les utiliser dans n'importe quelle boucle d'entraînement typique. Bien que vous puissiez écrire votre propre boucle d'entraînement, 🤗 Transformers fournit une classe Trainer
pour PyTorch, qui contient la boucle d'entraînement de base et ajoute des fonctionnalités supplémentaires comme l'entraînement distribué, la précision mixte, et plus encore.
En fonction de votre tâche, vous passerez généralement les paramètres suivants à Trainer
:
Un
PreTrainedModel
ou untorch.nn.Module
:TrainingArguments
contient les hyperparamètres du modèle que vous pouvez changer comme le taux d'apprentissage, la taille due l'échantillon, et le nombre d'époques pour s'entraîner. Les valeurs par défaut sont utilisées si vous ne spécifiez pas d'hyperparamètres d'apprentissage :Une classe de prétraitement comme un tokenizer, un processeur d'images ou un extracteur de caractéristiques :
Chargez un jeu de données :
Créez une fonction qui transforme le texte du jeu de données en token :
Puis appliquez-la à l'intégralité du jeu de données avec
map
:Un
DataCollatorWithPadding
pour créer un échantillon d'exemples à partir de votre jeu de données :
Maintenant, rassemblez tous ces éléments dans un Trainer
:
Une fois que vous êtes prêt, appelez la fonction train()
pour commencer l'entraînement :
Pour les tâches - comme la traduction ou la génération de résumé - qui utilisent un modèle séquence à séquence, utilisez plutôt les classes Seq2SeqTrainer
et Seq2SeqTrainingArguments
.
Vous pouvez personnaliser le comportement de la boucle d'apprentissage en redéfinissant les méthodes à l'intérieur de Trainer
. Cela vous permet de personnaliser des caractéristiques telles que la fonction de perte, l'optimiseur et le planificateur. Consultez la documentation de Trainer
pour savoir quelles méthodes peuvent être redéfinies.
L'autre moyen de personnaliser la boucle d'apprentissage est d'utiliser les Callbacks. Vous pouvez utiliser les callbacks pour intégrer d'autres bibliothèques et inspecter la boucle d'apprentissage afin de suivre la progression ou d'arrêter l'apprentissage plus tôt. Les callbacks ne modifient rien dans la boucle d'apprentissage elle-même. Pour personnaliser quelque chose comme la fonction de perte, vous devez redéfinir le Trainer
à la place.
Entraînement avec TensorFlow
Tous les modèles sont des modèles standard tf.keras.Model
afin qu'ils puissent être entraînés avec TensorFlow avec l'API Keras. 🤗 Transformers fournit la fonction prepare_tf_dataset()
pour charger facilement votre jeu de données comme un tf.data.Dataset
afin que vous puissiez commencer l'entraînement immédiatement avec les fonctions compile
et fit
de Keras.
Vous commencez avec un modèle
TFPreTrainedModel
outf.keras.Model
:Une classe de prétraitement comme un tokenizer, un processeur d'images ou un extracteur de caractéristiques :
Créez une fonction qui transforme le texte du jeu de données en token :
Appliquez le tokenizer à l'ensemble du jeu de données avec
map
et passez ensuite le jeu de données et le tokenizer àprepare_tf_dataset()
. Vous pouvez également modifier la taille de l'échantillon et mélanger le jeu de données ici si vous le souhaitez :Une fois que vous êtes prêt, appelez les fonctions
compile
etfit
pour commencer l'entraînement :
Et après ?
Maintenant que vous avez terminé la visite rapide de 🤗 Transformers, consultez nos guides et apprenez à faire des choses plus spécifiques comme créer un modèle personnalisé, finetuner un modèle pour une tâche, et comment entraîner un modèle avec un script. Si vous souhaitez en savoir plus sur les concepts fondamentaux de 🤗 Transformers, jetez un œil à nos guides conceptuels !