T5 (Text-to-Text Transfer Transformer)
Fonctions :
-
T5Tokenizer()
T5Tokenizer est un tokenizer spécialisé pour le modèle T5 (Text-to-Text Transfer Transformer) développé par Google. T5 est un modèle pré-entraîné qui transforme tous les problèmes de NLP en une tâche de type "texte-à-texte". Par exemple, au lieu de traiter une tâche de traduction comme une tâche distincte, T5 la traite comme une tâche où il prend un texte source et génère un texte traduit en réponse. T5Tokenizer est utilisé pour convertir du texte brut en tokens (unité de traitement par le modèle) et vice versa, en préparation pour une entrée dans un modèle T5. Le tokenizer T5 prend en charge la tokenisation des textes, en les découpant en sous-parties et en les convertissant en indices qui peuvent être traités par le modèle. Il offre également une fonction de décodage pour reconvertir les indices en texte.
Importation :
from transformers import T5Tokenizer
Attributs :
Paramètre Type Valeur par défaut Description add_prefix_space bool False Si True, un espace sera ajouté avant le premier token. Utile pour certaines langues où les espaces sont significatifs, comme l'anglais. pad_token str '' Le token de remplissage utilisé pour compléter les séquences plus courtes que la longueur maximale spécifiée. eos_token str '' Le token de fin de séquence qui marque la fin du texte généré. unk_token str '' Le token utilisé pour les mots inconnus ou hors vocabulaire. bos_token str ' 'Le token de début de séquence utilisé pour marquer le début d'un texte généré. Exemple de code :
from transformers import T5Tokenizer # Charger le tokenizer T5 pré-entraîné tokenizer = T5Tokenizer.from_pretrained('t5-small') # Exemple de texte text = "Translate English to French: How are you?" # Tokeniser le texte encoded_input = tokenizer(text, return_tensors='pt') # Afficher les tokens encodés print(f"Encoded Input: {encoded_input}") # Décoder les tokens en texte decoded_text = tokenizer.decode(encoded_input['input_ids'][0], skip_special_tokens=True) print(f"Decoded Text: {decoded_text}")
Explication du code :
-
Chargement du tokenizer :
-
T5Tokenizer.from_pretrained('t5-small')
charge un tokenizer pré-entraîné pour le modèle T5. Le modèle't5-small'
est une version allégée du modèle T5, mais vous pouvez également utiliser des variantes plus grandes comme't5-base'
ou't5-large'
selon vos besoins.
-
-
Tokenisation du texte :
-
tokenizer(text, return_tensors='pt')
prend un texte brut en entrée et le transforme en tokens compatibles avec PyTorch (pt
). Les tokens sont représentés par leurs indices dans le vocabulaire du modèle T5. Le résultat est un dictionnaire avec des clés comme'input_ids'
qui contiennent les indices des tokens etattention_mask
qui aide à indiquer quels tokens sont effectivement des tokens valides (pas de padding).
-
-
Affichage des tokens encodés :
-
print(f"Encoded Input: {encoded_input}")
affiche le dictionnaire contenant les indices des tokens. Ce sont les valeurs numériques que le modèle T5 utilise pour traiter les entrées.
-
-
Décodage des tokens :
-
tokenizer.decode(encoded_input['input_ids'][0], skip_special_tokens=True)
prend les indices des tokens dans'input_ids'
et les reconvertit en texte.skip_special_tokens=True
permet de ne pas inclure les tokens spéciaux comme<pad>
,<eos>
, etc., dans la sortie texte.
-
-
Affichage du texte décodé :
-
print(f"Decoded Text: {decoded_text}")
affiche le texte reconstruit à partir des tokens, montrant que la tokenisation et le décodage ont correctement transformé le texte en indices et inversement.
-
Remarques supplémentaires :
-
Prétraitement pour T5 : Comme pour d'autres modèles de type transformer,
T5Tokenizer
s'occupe du prétraitement du texte en termes de tokenisation, conversion en indices, ajout de tokens spéciaux comme<bos>
(début de séquence) et<eos>
(fin de séquence), ainsi que le remplissage (padding
) et le masquage (attention_mask
) des séquences. -
Applications : Le modèle T5 et son tokenizer sont particulièrement adaptés pour les tâches de traduction, de résumé, de réponse à des questions et d'autres tâches NLP où l'entrée et la sortie sont toutes deux sous forme de texte.
-
-
T5ForConditionalGeneration()
T5ForConditionalGeneration est une classe de la bibliothèque transformers qui encapsule le modèle T5 (Text-to-Text Transfer Transformer) pour des tâches de génération conditionnelle de texte. Contrairement aux modèles classiques où l'entrée et la sortie sont spécifiques à une tâche, T5 transforme toutes les tâches NLP en un problème de type "texte-à-texte". Par exemple, pour la traduction, l'entrée pourrait être "Translate English to French: How are you?", et la sortie serait le texte traduit en français. Le modèle T5 est entraîné sur une grande variété de tâches de traitement du langage, comme la traduction, le résumé, et la question-réponse. La classe T5ForConditionalGeneration prend en entrée un texte source et génère un texte cible en réponse à la condition spécifiée dans l'entrée. Elle est donc utilisée pour des tâches où la sortie dépend d'un contexte donné.
Importation :
from transformers import T5ForConditionalGeneration
Attributs :
Paramètre Type Valeur par défaut Description config PretrainedConfig None La configuration du modèle T5 qui contient les paramètres utilisés pour l'architecture, comme le nombre de couches, la taille des embeddings, etc. decoder_start_token_id int None Le token de début de décodage. Par défaut, le modèle utilise la valeur de `bos_token_id` dans la configuration. max_length int None La longueur maximale de la séquence générée. Si elle est définie, la génération s'arrêtera lorsque cette longueur sera atteinte. num_beams int 1 Le nombre de faisceaux utilisés pour la recherche de faisceaux lors de la génération. Un nombre plus élevé peut améliorer la qualité du texte généré. temperature float 1.0 Le facteur de température utilisé pour contrôler la diversité des échantillons générés. Une valeur plus basse donne des échantillons plus conservateurs. Exemple de code :
from transformers import T5Tokenizer, T5ForConditionalGeneration # Charger le tokenizer et le modèle T5 pré-entraîné tokenizer = T5Tokenizer.from_pretrained('t5-small') model = T5ForConditionalGeneration.from_pretrained('t5-small') # Exemple de texte source text = "Translate English to French: How are you?" # Tokeniser le texte inputs = tokenizer(text, return_tensors='pt') # Générer la sortie (texte traduit) outputs = model.generate(inputs['input_ids'], max_length=40, num_beams=4, temperature=1.0) # Décoder les tokens générés en texte translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) # Afficher le texte traduit print(f"Translated Text: {translated_text}")
Explication du code :
-
Chargement du tokenizer et du modèle :
-
T5Tokenizer.from_pretrained('t5-small')
charge un tokenizer pré-entraîné spécifique au modèle T5. Le modèle't5-small'
est une version légère de T5, mais vous pouvez choisir d'autres versions comme't5-base'
ou't5-large'
. -
T5ForConditionalGeneration.from_pretrained('t5-small')
charge le modèle T5 pré-entraîné pour la génération de texte conditionnelle. Ce modèle est adapté pour des tâches comme la traduction, le résumé, la réponse à des questions, etc.
-
-
Tokenisation du texte :
-
tokenizer(text, return_tensors='pt')
prend le texte brut en entrée et le convertit en indices de tokens compatibles avec PyTorch (pt
). Cette étape est nécessaire pour fournir des données d'entrée sous forme que le modèle peut comprendre.
-
-
Génération de texte :
-
model.generate(inputs['input_ids'], max_length=40, num_beams=4, temperature=1.0)
génère du texte en réponse à l'entrée. La fonctiongenerate()
prend en entrée les indices des tokens et génère une sortie basée sur ces entrées.-
max_length=40
spécifie que la longueur maximale de la sortie sera de 40 tokens. -
num_beams=4
indique que la recherche de faisceaux utilise 4 faisceaux pour explorer plusieurs possibilités de génération et améliorer la qualité du texte. -
temperature=1.0
contrôle la diversité de la génération : une valeur de 1.0 est équilibrée, tandis que des valeurs plus basses rendent le texte plus conservateur.
-
-
-
Décodage des tokens générés :
-
tokenizer.decode(outputs[0], skip_special_tokens=True)
reconvertit les indices générés en texte lisible.skip_special_tokens=True
signifie que les tokens spéciaux, comme<eos>
ou<pad>
, ne seront pas inclus dans le texte généré.
-
-
Affichage du texte généré :
-
print(f"Translated Text: {translated_text}")
affiche le texte généré, qui est ici la traduction du texte source. Le texte généré devrait être une version traduite du texte d'entrée en fonction du modèle et de la tâche spécifiée.
-
Remarques supplémentaires :
-
Applications :
T5ForConditionalGeneration
est utilisé pour une variété de tâches de génération conditionnelle de texte, notamment la traduction automatique, le résumé de texte, la génération de texte à partir d'un prompt, etc. Le modèle T5 est particulièrement flexible car il peut être fine-tuné sur n'importe quelle tâche NLP où les entrées et les sorties sont des textes. -
Personnalisation de la génération : La génération peut être personnalisée via des paramètres comme
max_length
,num_beams
,temperature
, et bien d'autres. L'ajustement de ces paramètres permet de contrôler la longueur, la diversité et la qualité des textes générés. -
Recherche de faisceaux : La recherche de faisceaux (
num_beams
) est une technique de recherche qui explore plusieurs alternatives pour générer la meilleure sortie possible. Cela peut améliorer la qualité de la génération au prix d'une computation supplémentaire.
-
-
T5Config()
T5Config est une classe de la bibliothèque transformers qui contient la configuration nécessaire pour initialiser un modèle T5 (Text-to-Text Transfer Transformer). Elle définit les hyperparamètres et les paramètres du modèle tels que la taille des embeddings, le nombre de couches, le type de normalisation, etc. Cette configuration est utilisée lors du chargement ou de la création d'un modèle T5, et elle peut être modifiée pour personnaliser le modèle avant de l'entraîner ou de l'utiliser pour des tâches spécifiques. La classe T5Config est généralement utilisée pour créer une configuration de modèle à partir de zéro ou pour ajuster certains paramètres d'un modèle préexistant avant de l'utiliser pour une tâche spécifique, comme la traduction ou le résumé.
Importation :
from transformers import T5Config
Attributs :
Paramètre Type Valeur par défaut Description d_model int 512 La dimension des embeddings d'entrée et de sortie dans le modèle T5. num_layers int 12 Le nombre de couches d'encodeur et de décodeur dans le modèle T5. num_heads int 12 Le nombre de têtes dans chaque couche de l'encodeur et du décodeur. vocab_size int 32000 La taille du vocabulaire utilisé par le modèle T5. Le vocabulaire est utilisé pour tokeniser le texte. max_position_embeddings int 512 La longueur maximale des séquences d'entrée que le modèle peut traiter. dropout_rate float 0.1 Le taux de dropout appliqué au modèle pour régulariser l'entraînement. activation_function str 'gelu' La fonction d'activation utilisée dans le modèle. Les options sont 'relu', 'gelu', etc. layer_norm_epsilon float 1e-6 Le petit epsilon ajouté aux valeurs de normalisation de couche pour éviter la division par zéro. use_cache bool True Indique si les informations de cache doivent être utilisées lors de l'inférence pour améliorer la vitesse. Exemple de code :
from transformers import T5Config, T5ForConditionalGeneration # Créer une configuration personnalisée pour un modèle T5 config = T5Config( vocab_size=32000, d_model=512, num_layers=6, num_heads=8, max_position_embeddings=512, dropout_rate=0.1, activation_function='gelu' ) # Créer un modèle T5 avec la configuration spécifiée model = T5ForConditionalGeneration(config) # Afficher les paramètres du modèle print(model.config)
Explication du code :
-
Création de la configuration :
-
T5Config()
permet de créer une instance de configuration pour le modèle T5. Dans cet exemple, nous spécifions plusieurs hyperparamètres du modèle, tels quevocab_size
,d_model
,num_layers
,num_heads
, etc.-
vocab_size=32000
définit la taille du vocabulaire, qui est le nombre de tokens que le modèle peut comprendre et générer. -
d_model=512
détermine la dimension des embeddings (représentation vectorielle) utilisés dans le modèle. -
num_layers=6
spécifie que le modèle aura 6 couches dans l'encodeur et le décodeur. -
num_heads=8
définit le nombre de têtes dans les mécanismes de multi-head attention. -
dropout_rate=0.1
est utilisé pour éviter le surapprentissage en appliquant un taux de dropout de 10% pendant l'entraînement. -
activation_function='gelu'
indique que la fonction d'activation utilisée dans le modèle est GELU (Gaussian Error Linear Unit).
-
-
-
Création du modèle avec la configuration :
-
T5ForConditionalGeneration(config)
crée un modèle T5 en utilisant la configuration personnalisée définie dans la première étape. Ce modèle est adapté pour des tâches de génération conditionnelle de texte, telles que la traduction ou le résumé.
-
-
Affichage des paramètres du modèle :
-
print(model.config)
affiche la configuration utilisée pour initialiser le modèle. Cela permet de vérifier les paramètres définis pour le modèle T5 et de s'assurer qu'ils correspondent à ce que vous avez spécifié dansT5Config
.
-
Remarques supplémentaires :
-
Modularité : Utiliser
T5Config
permet de personnaliser le modèle T5 avant de l'utiliser ou de l'entraîner. Cela peut être utile si vous voulez adapter le modèle à des ressources spécifiques, comme une plus grande capacité de traitement ou des séquences plus longues. -
Optimisation : Lors de l'ajustement de la configuration, des paramètres comme
num_layers
,num_heads
, etd_model
peuvent influencer la performance et la capacité du modèle. Cependant, il faut aussi prendre en compte la puissance de calcul disponible, car augmenter ces valeurs augmente également la charge computationnelle. -
Utilisation dans des scénarios de fine-tuning :
T5Config
est particulièrement utile lorsque vous voulez fine-tuner un modèle T5 préexistant avec des paramètres spécifiques adaptés à vos données et à votre tâche.
-
-
T5Model
T5Model est une classe de la bibliothèque transformers qui implémente le modèle T5 (Text-to-Text Transfer Transformer) dans sa version de base, sans couche de génération. Il est utilisé pour des tâches de transformation de texte, où le modèle prend un texte en entrée et génère un texte en sortie, mais sans spécifier de tâche conditionnelle spécifique comme dans T5ForConditionalGeneration. Ce modèle peut être utilisé pour des tâches comme l'encodage de texte, ou comme modèle de base pour des tâches de fine-tuning. Contrairement à T5ForConditionalGeneration (qui inclut un module de génération de texte), T5Model fournit uniquement l'encodeur et le décodeur du modèle sans la partie génération, ce qui peut être utile pour des tâches de représentation du texte ou d'extraction de caractéristiques.
Importation :
from transformers import T5Model
Attributs :
Paramètre Type Valeur par défaut Description d_model int 512 La dimension des embeddings d'entrée et de sortie dans le modèle T5. num_layers int 12 Le nombre de couches dans l'encodeur et le décodeur du modèle T5. num_heads int 12 Le nombre de têtes dans les couches de multi-head attention. vocab_size int 32000 La taille du vocabulaire utilisé par le modèle T5. max_position_embeddings int 512 La longueur maximale des séquences d'entrée que le modèle peut traiter. dropout_rate float 0.1 Le taux de dropout appliqué au modèle pour éviter le surapprentissage. activation_function str 'gelu' La fonction d'activation utilisée dans le modèle T5. Les options possibles sont 'relu', 'gelu', etc. layer_norm_epsilon float 1e-6 Le petit epsilon ajouté aux valeurs de normalisation de couche pour éviter la division par zéro. use_cache bool True Indique si les informations de cache doivent être utilisées lors de l'inférence pour accélérer le processus. Exemple de code :
from transformers import T5Model, T5Tokenizer # Charger un modèle T5 préentraîné model = T5Model.from_pretrained("t5-small") # Initialiser un tokenizer pour transformer le texte en tokens tokenizer = T5Tokenizer.from_pretrained("t5-small") # Exemple de texte text = "Translate English to French: How are you?" # Tokeniser le texte d'entrée inputs = tokenizer(text, return_tensors="pt") # Obtenir les embeddings du texte via le modèle outputs = model(**inputs) # Afficher les embeddings (représentations) du texte print(outputs.last_hidden_state)
Explication du code :
-
Chargement du modèle et du tokenizer :
-
Nous utilisons
T5Model.from_pretrained("t5-small")
pour charger un modèle T5 préentraîné (ici, la versiont5-small
, mais cela peut être remplacé par d'autres variantes commet5-base
out5-large
). -
De même,
T5Tokenizer.from_pretrained("t5-small")
charge le tokenizer correspondant pour transformer le texte en tokens que le modèle peut comprendre.
-
-
Préparation du texte d'entrée :
-
Le texte d'exemple ("Translate English to French: How are you?") est tokenisé en utilisant le tokenizer. La méthode
tokenizer(text, return_tensors="pt")
convertit le texte en une représentation sous forme de tenseur PyTorch, adaptée pour l'entrée du modèle.
-
-
Passage des tokens dans le modèle :
-
model(**inputs)
applique le modèle T5 aux tokens d'entrée. CommeT5Model
n'est pas destiné à la génération de texte mais plutôt à l'extraction de représentations (embeddings), il retourne un objet avec plusieurs attributs, dontlast_hidden_state
, qui contient les embeddings des tokens en sortie du modèle.
-
-
Affichage des résultats :
-
outputs.last_hidden_state
affiche les embeddings (représentations vectorielles) du texte d'entrée, c'est-à-dire la sortie de l'encodeur du modèle T5 pour chaque token du texte.
-
Remarques supplémentaires :
-
Utilisation dans des tâches de transformation de texte :
T5Model
est utilisé principalement pour des tâches où l'on a besoin des représentations des textes, comme pour l'extraction d'information ou l'analyse sémantique. Si vous avez besoin de générer du texte, vous devrez utiliserT5ForConditionalGeneration
. -
Fine-tuning : Vous pouvez également fine-tuner le modèle sur vos propres données pour des tâches spécifiques, comme la classification de texte, la traduction ou le résumé, en ajoutant une couche de classification ou un module de génération.
-
Applications :
T5Model
est un bon choix lorsque vous travaillez sur des tâches d'encodage de texte, de représentation sémantique ou d'implémentation d'un modèle de base à fine-tuner pour des tâches spécifiques.
-
-
T5PreTrainedModel()
T5PreTrainedModel est la classe de base pour les modèles préentraînés dans la bibliothèque transformers pour le modèle T5. Elle fournit des méthodes et des attributs communs pour tous les modèles T5 préentraînés. Cela inclut des méthodes pour charger et sauvegarder les poids du modèle, appliquer des transformations sur les données d'entrée et d'autres fonctionnalités qui facilitent l'utilisation de modèles préentraînés. Tous les modèles T5, y compris T5Model, T5ForSequenceClassification, T5ForConditionalGeneration, etc., héritent de cette classe. Cela permet de centraliser les fonctionnalités de base qui sont partagées par tous les modèles basés sur T5. En d'autres termes, T5PreTrainedModel est une classe abstraite qui définit les méthodes principales et l'interface de travail avec les modèles T5 préentraînés.
Importation :
from transformers import T5PreTrainedModel
Attributs :
Paramètre Type Valeur par défaut Description config_class Type La classe de configuration associée au modèle (par exemple, T5Config). Elle permet d'accéder aux hyperparamètres du modèle et de les configurer. pretrained_model_archive_map dict {} Un dictionnaire qui contient les cartes d'URL pour les modèles préentraînés, permettant de charger un modèle depuis une URL spécifique. config obj La configuration spécifique à ce modèle, comprenant les paramètres comme la taille du vocabulaire, les dimensions des couches, le nombre de têtes d'attention, etc. base_model_prefix str "transformer" Le préfixe du modèle utilisé dans les noms des variables et des poids du modèle (par défaut "transformer"). use_cache bool True Indique si le modèle doit utiliser un cache pour accélérer l'inférence, notamment pour des tâches d'autoregression (génération de texte). forward fonction La méthode forward définie pour chaque sous-classe (comme `T5ForConditionalGeneration`) qui spécifie la façon dont le modèle prend en entrée les données et produit une sortie. Exemple de code :
from transformers import T5PreTrainedModel, T5Tokenizer # Charger un modèle préentraîné model = T5PreTrainedModel.from_pretrained("t5-small") # Charger le tokenizer correspondant tokenizer = T5Tokenizer.from_pretrained("t5-small") # Exemple de texte à transformer text = "Translate English to French: How are you?" # Tokeniser le texte inputs = tokenizer(text, return_tensors="pt") # Passer les données dans le modèle pour obtenir des sorties outputs = model(**inputs) # Afficher les représentations (embeddings) du texte print(outputs.last_hidden_state)
Explication du code :
-
Chargement du modèle préentraîné :
-
Le modèle préentraîné est chargé avec
T5PreTrainedModel.from_pretrained("t5-small")
. Ce modèle est une version réduite de T5, mais il peut être remplacé par une autre version commet5-base
out5-large
.
-
-
Chargement du tokenizer :
-
Le tokenizer est chargé avec
T5Tokenizer.from_pretrained("t5-small")
. Le tokenizer est utilisé pour transformer le texte en une séquence de tokens que le modèle peut traiter.
-
-
Préparation des données d'entrée :
-
Le texte à transformer (dans cet exemple, une phrase de traduction) est tokenisé avec
tokenizer(text, return_tensors="pt")
. Cette étape convertit le texte en une forme compatible avec le modèle (tenseurs PyTorch).
-
-
Passage des données dans le modèle :
-
Les données tokenisées sont passées au modèle avec
model(**inputs)
. Cette fonction appelle la méthodeforward
du modèle pour effectuer la tâche de transformation de texte.
-
-
Sortie du modèle :
-
outputs.last_hidden_state
contient les représentations internes du modèle, qui sont des vecteurs d'embedding pour chaque token du texte d'entrée.
-
Remarques supplémentaires :
-
Héritage et spécialisation :
T5PreTrainedModel
est une classe de base pour tous les modèles T5 préentraînés. Les classes commeT5ForConditionalGeneration
,T5ForSequenceClassification
, etc., héritent de cette classe et ajoutent des fonctionnalités spécifiques comme la génération de texte ou la classification. -
Fine-tuning : Pour des tâches spécifiques comme la traduction ou la classification, vous pouvez fine-tuner un modèle préentraîné à l'aide de ces classes spécialisées tout en bénéficiant des méthodes de base définies dans
T5PreTrainedModel
. -
Flexibilité :
T5PreTrainedModel
offre une grande flexibilité en termes d'intégration avec des tâches diverses, en permettant de modifier ou d'étendre le modèle de base pour répondre à des besoins spécifiques tout en maintenant les fonctionnalités communes à tous les modèles T5.
-