Transformers documentation
ByT5
Ce modèle a été publié dans HF papers le 2021-05-28 et contribué à Hugging Face Transformers le 2021-06-01.
ByT5
ByT5 est une version du modèle T5 qui ne nécessite pas de tokenizer et qui est conçue pour fonctionner directement sur des octets UTF-8 bruts. Cela signifie qu'elle peut traiter n'importe quelle langue, qu'elle est plus robuste face au bruit comme les fautes de frappe, et qu'elle est plus simple à utiliser car elle ne requiert pas de pipeline de prétraitement.
Vous pouvez trouver tous les points de contrôle originaux de ByT5 sous l'organisation Google.
Reportez-vous à la documentation T5 pour plus d'exemples sur l'application de ByT5 à différentes tâches linguistiques.
L'exemple ci-dessous montre comment générer du texte avec Pipeline, AutoModel et depuis la ligne de commande.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(
"google/byt5-small"
)
model = AutoModelForSeq2SeqLM.from_pretrained(
"google/byt5-small",
device_map="auto"
)
input_ids = tokenizer("summarize: Photosynthesis is the process by which plants, algae, and some bacteria convert light energy into chemical energy.", return_tensors="pt").to(model.device)
output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))Quantification
La quantification réduit la charge mémoire des grands modèles en représentant les poids avec une précision inférieure. Reportez-vous à l'aperçu de la Quantization pour plus d'informations sur les backends de quantification disponibles.
L'exemple ci-dessous utilise torchao pour quantiser uniquement les poids en int4.
# pip install torchao
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, TorchAoConfig
quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
model = AutoModelForSeq2SeqLM.from_pretrained(
"google/byt5-xl",
device_map="auto",
quantization_config=quantization_config
)
tokenizer = AutoTokenizer.from_pretrained("google/byt5-xl")
input_ids = tokenizer("translate English to French: The weather is nice today.", return_tensors="pt").to(model.device)
output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))Notes
Il est recommandé d'utiliser le tokenizer pour l'inférence et l'entraînement par lots.
L'exemple ci-dessous montre comment utiliser le modèle sans tokenizer.
import torch from transformers import AutoModelForSeq2SeqLM model = AutoModelForSeq2SeqLM.from_pretrained("google/byt5-small", device_map="auto") num_special_tokens = 3 input_ids = torch.tensor([list("Life is like a box of chocolates.".encode("utf-8"))]) + num_special_tokens labels = torch.tensor([list("La vie est comme une boîte de chocolat.".encode("utf-8"))]) + num_special_tokens loss = model(input_ids, labels=labels).loss loss.item()ByT5 utilise les valeurs de byte supérieures (258, 257, etc.) pour le masquage au lieu de jetons sentinelles comme
{extra_id_0}.# Example: character-level denoising with mask tokens input_ids = tokenizer("The dog chases a ball in the park.").input_ids masked_input = torch.tensor([input_ids[:8] + [258] + input_ids[14:21] + [257] + input_ids[28:]]) output = model.generate(masked_input, max_length=100)
ByT5Tokenizer
classe transformers.ByT5Tokenizer
< source >( eos_token = '</s>'unk_token = '<unk>'pad_token = '<pad>'extra_ids = 125additional_special_tokens = None**kwargs )
Paramètres
- eos_token (
str, facultatif, défaut :"</s>") — Le jeton de fin de séquence. Lors de la construction d'une séquence à l'aide de jetons spéciaux, ce n'est pas le jeton utilisé pour la fin de séquence. Le jeton utilisé est sep_token.Lors de la construction d'une séquence à l'aide de jetons spéciaux, ce n'est pas ce jeton qui est utilisé pour la fin de séquence. Le jeton utilisé est le
sep_token. - unk_token (
str, facultatif, par défaut"<unk>") — Le jeton inconnu. Un jeton qui n'est pas dans le vocabulaire ne peut pas être converti en identifiant et est remplacé par ce jeton. - pad_token (
str, facultatif, par défaut"<pad>") — Le jeton utilisé pour le bourrage, par exemple lors du regroupement de séquences de longueurs différentes. - extra_ids (
int, facultatif, par défaut 125) — Ajoute un nombre d’identifiants supplémentaires à la fin du vocabulaire, destinés à être utilisés comme sentinelles. Ces jetons sont accessibles sous la forme «id{%d}> » où « {%d} » est un nombre compris entre 0 et extra_ids-1. Les jetons supplémentaires sont indexés à partir de la fin du vocabulaire jusqu’au début (« » est le dernier jeton du vocabulaire, comme dans le prétraitement ByT5, voir ici »). - additional_special_tokens (
list[str], facultatif) — Jetons spéciaux supplémentaires utilisés par le tokeniseur.
Construisez un tokenizer ByT5. ByT5 utilise simplement l’encodage utf-8 des octets bruts.
Ce tokenizer hérite de PreTrainedTokenizer, qui contient la plupart des méthodes principales. Les utilisateurs doivent se référer à cette superclasse pour plus d'informations sur ces méthodes.
build_inputs_with_special_tokens
< source >( token_ids_0: listtoken_ids_1: list[int] | None = None ) → list[int]
Paramètres
- token_ids_0 (
list[int]) — Liste des ID auxquels les jetons spéciaux seront ajoutés. - token_ids_1 (
list[int], facultatif) — Deuxième liste d'identifiants facultative pour les paires de séquences.
Retourne
list[int]
Liste des identifiants d'entrée avec les jetons spéciaux appropriés.
Construire les entrées du modèle à partir d'une séquence ou d'une paire de séquences pour les tâches de classification de séquences en les concaténant et en ajoutant des jetons spéciaux. Une séquence a le format suivant :
- séquence unique :
X </s> - paire de séquences :
A </s> B </s>
Convertit une séquence de jetons (chaîne de caractères) en une seule chaîne.
create_token_type_ids_from_sequences
< source >( token_ids_0: listtoken_ids_1: list[int] | None = None ) → list[int]
Crée un masque à partir des deux séquences passées, à utiliser dans une tâche de classification de paires de séquences. ByT5 n’utilise pas d’identifiants de type de jeton, une liste de zéros est donc renvoyée.
get_special_tokens_mask
< source >( token_ids_0: listtoken_ids_1: list[int] | None = Nonealready_has_special_tokens: bool = False ) → list[int]
Paramètres
- token_ids_0 (
list[int]) — Liste d'identifiants. - token_ids_1 (
list[int], facultatif) — Deuxième liste d'identifiants facultative pour les paires de séquences. - already_has_special_tokens (
bool, facultatif, par défautFalse) — Indique si la liste de jetons est déjà formatée avec les jetons spéciaux du modèle.
Retourne
list[int]
Une liste d'entiers dans l'intervalle [0, 1] : 1 pour un jeton spécial, 0 pour un jeton de séquence.
Récupère les identifiants de séquences à partir d'une liste de jetons à laquelle aucun jeton spécial n'a été ajouté. Cette méthode est appelée lors de l'ajout de jetons spéciaux à l'aide de la méthode prepare_for_model du tokeniseur.