Transformers documentation
Utilitaires pour la génération
Utilitaires pour la génération
Cette page répertorie toutes les fonctions utilitaires utilisées par generate().
Générer des sorties
La sortie de generate() est une instance d'une sous-classe de ModelOutput. Cette sortie est une structure de données contenant toutes les informations renvoyées par generate(), mais qui peut également être utilisée comme un tuple ou un dictionnaire.
Voici un exemple :
from transformers import GPT2Tokenizer, GPT2LMHeadModel
tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
model = GPT2LMHeadModel.from_pretrained("openai-community/gpt2")
inputs = tokenizer("Hello, my dog is cute and ", return_tensors="pt")
generation_output = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)L'objet generation_output est un GenerateDecoderOnlyOutput, comme nous pouvons le voir dans la documentation de cette classe ci-dessous, ce qui signifie qu'il possède les attributs suivants :
sequences: les séquences de jetons généréesscores(facultatif) : les scores de prédiction de la tête de modélisation du langage, pour chaque étape de générationhidden_states(facultatif) : les états cachés du modèle, pour chaque étape de générationattentions(facultatif) : les poids d'attention du modèle, pour chaque étape de génération
Ici, nous avons les scores car nous avons transmis output_scores=True, mais nous n’avons pas hidden_states et attentions car nous n’avons pas transmis output_hidden_states=True ou output_attentions=True.
Vous pouvez accéder à chaque attribut comme vous le feriez habituellement, et si cet attribut n’a pas été renvoyé par le modèle, vous obtiendrez None. Ici, par exemple, generation_output.scores contient tous les scores de prédiction générés par la tête de modélisation du langage, et generation_output.attentions est None.
Lorsque l’objet generation_output est utilisé comme un tuple, il ne conserve que les attributs dont la valeur n’est pas None.
Ici, par exemple, il comporte deux éléments, loss puis logits, donc
generation_output[:2]renverra par exemple le tuple (generation_output.sequences, generation_output.scores).
Lorsque l’objet generation_output est utilisé comme un dictionnaire, il ne conserve que les attributs dont la valeur n’est pas None. Ici, par exemple, il possède deux clés, à savoir sequences et scores.
Nous documentons ici tous les types de sortie.
classe transformers.generation.GenerateDecoderOnlyOutput
< source >( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Paramètres
- sequences (
torch.LongTensorde forme(batch_size, sequence_length)) — Les séquences générées. La deuxième dimension (sequence_length) est soit égale àmax_length, soit plus courte si tous les lots se sont terminés prématurément en raison deeos_token_id. - scores (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_scores=True) — Scores de prédiction traités de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax) à chaque étape de génération. Tuple detorch.Tensoravec au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size, config.vocab_size). - logits (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_logits=True) — Scores de prédiction non traités de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax) à chaque étape de génération. Tuple detorch.Tensoravec au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size, config.vocab_size). - attentions (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size, num_heads, generated_length, sequence_length). - hidden_states (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size, generated_length, hidden_size). - past_key_values (
Cache, facultatif, renvoyé lorsqueuse_cache=True) — Renvoie le cache du modèle, utilisé pour accélérer le décodage. Le format du cache varie selon les modèles, consultez la documentation du modèle. En général, il s’agit d’une instance de Cache.
Sorties des modèles de génération uniquement décodeur, lors de l'utilisation de méthodes non faisceau.
classe transformers.generation.GenerateEncoderDecoderOutput
< source >( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneencoder_attentions: tuple[torch.Tensor] | None = Noneencoder_hidden_states: tuple[torch.Tensor] | None = Nonedecoder_attentions: tuple[tuple[torch.Tensor]] | None = Nonecross_attentions: tuple[tuple[torch.Tensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Paramètres
- sequences (
torch.LongTensorde forme(batch_size*num_return_sequences, sequence_length)) — Les séquences générées. La deuxième dimension (sequence_length) est soit égale àmax_length, soit plus courte si tous les lots se sont terminés prématurément en raison deeos_token_id. - scores (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_scores=True) — Scores de prédiction traités de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax) à chaque étape de génération. Tuple detorch.Tensoravec au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size, config.vocab_size). - logits (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_logits=True) — Scores de prédiction non traités de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax) à chaque étape de génération. Tuple detorch.Tensoravec au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size, config.vocab_size). - encoder_attentions (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet detorch.Tensor(un par couche du décodeur) de forme(batch_size, num_heads, sequence_length, sequence_length). - encoder_hidden_states (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_hidden_states=True) — Tuplet detorch.Tensor(un pour la sortie des embeddings + un pour la sortie de chaque couche) de forme(batch_size, sequence_length, hidden_size). - decoder_attentions (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size, num_heads, generated_length, sequence_length). - cross_attentions (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size, num_heads, generated_length, sequence_length). - decoder_hidden_states (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size, generated_length, hidden_size). - past_key_values (
Cache, facultatif, renvoyé lorsqueuse_cache=True) — Renvoie le cache du modèle, utilisé pour accélérer le décodage. Le format du cache varie selon les modèles, consultez la documentation du modèle. En général, il s’agit d’une instance de Cache.
Sorties des modèles de génération encodeur-décodeur lors de l'utilisation de méthodes non basées sur le faisceau.
classe transformers.generation.GenerateBeamDecoderOnlyOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.Tensor] = Nonescores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Paramètres
- sequences (
torch.LongTensorde forme(batch_size*num_return_sequences, sequence_length)) — Les séquences générées. La deuxième dimension (sequence_length) est soit égale àmax_length, soit plus courte si tous les lots se sont terminés prématurément en raison deeos_token_id. - sequences_scores (
torch.Tensorde forme(batch_size*num_return_sequences), facultatif, renvoyé lorsqueoutput_scores=True) — Scores finaux des faisceaux dessequencesgénérées. - scores (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_scores=True) — Scores de transition des faisceaux pour chaque jeton du vocabulaire à chaque étape de génération. Les scores de transition des faisceaux sont constitués des logarithmes des probabilités des jetons conditionnés sur le log softmax des jetons précédemment générés dans ce faisceau. Tuplet detorch.Tensorcontenant au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size*num_beams, config.vocab_size). - logits (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_logits=True) — Scores de prédiction non traités de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax) à chaque étape de génération. Tuple detorch.Tensoravec au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor, facultatif, renvoyé lorsqueoutput_scores=True) — Indices des faisceaux des identifiants de jetons générés à chaque étape de génération.torch.LongTensorde forme(batch_size*num_return_sequences, sequence_length). - attentions (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size*num_beams, num_heads, generated_length, sequence_length). - hidden_states (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size*num_beams*num_return_sequences, generated_length, hidden_size). - past_key_values (
Cache, facultatif, renvoyé lorsqueuse_cache=True) — Renvoie le cache du modèle, utilisé pour accélérer le décodage. Le format du cache varie selon les modèles, consultez la documentation du modèle. En général, il s’agit d’une instance de Cache.
Sorties des modèles de génération uniquement décodeur, lors de l'utilisation de méthodes de faisceau.
classe transformers.generation.GenerateBeamEncoderDecoderOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.Tensor] = Nonescores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneencoder_attentions: tuple[torch.Tensor] | None = Noneencoder_hidden_states: tuple[torch.Tensor] | None = Nonedecoder_attentions: tuple[tuple[torch.Tensor]] | None = Nonecross_attentions: tuple[tuple[torch.Tensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Paramètres
- sequences (
torch.LongTensorde forme(batch_size*num_return_sequences, sequence_length)) — Les séquences générées. La deuxième dimension (sequence_length) est soit égale àmax_length, soit plus courte si tous les lots se sont terminés prématurément en raison deeos_token_id. - sequences_scores (
torch.Tensorde forme(batch_size*num_return_sequences), facultatif, renvoyé lorsqueoutput_scores=True) — Scores finaux des faisceaux dessequencesgénérées. - scores (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_scores=True) — Scores de transition des faisceaux pour chaque jeton du vocabulaire à chaque étape de génération. Les scores de transition des faisceaux sont constitués des logarithmes des probabilités des jetons conditionnés sur le log softmax des jetons précédemment générés dans ce faisceau. Tuplet detorch.Tensorcontenant au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size*num_beams, config.vocab_size). - logits (
tuple(torch.Tensor)facultatif, renvoyé lorsqueoutput_logits=True) — Scores de prédiction non traités de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax) à chaque étape de génération. Tuple detorch.Tensoravec au plusmax_new_tokenséléments (un élément pour chaque jeton généré), chaque tenseur ayant la forme(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor, facultatif, renvoyé lorsqueoutput_scores=True) — Indices des faisceaux des identifiants de jetons générés à chaque étape de génération.torch.LongTensorde forme(batch_size*num_return_sequences, sequence_length). - encoder_attentions (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet detorch.Tensor(un par couche du décodeur) de forme(batch_size, num_heads, sequence_length, sequence_length). - encoder_hidden_states (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_hidden_states=True) — Tuplet detorch.Tensor(un pour la sortie des embeddings + un pour la sortie de chaque couche) de forme(batch_size*num_beams*num_return_sequences, sequence_length, hidden_size). - decoder_attentions (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length). - cross_attentions (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size, num_heads, generated_length, sequence_length). - decoder_hidden_states (
tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsqueoutput_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) detorch.Tensorde forme(batch_size*num_beams*num_return_sequences, generated_length, hidden_size). - past_key_values (
Cache, facultatif, renvoyé lorsqueuse_cache=True) — Renvoie le cache du modèle, utilisé pour accélérer le décodage. Le format du cache varie selon les modèles, consultez la documentation du modèle. En général, il s’agit d’une instance de Cache.
Sorties des modèles de génération encodeur-décodeur, lors de l'utilisation de méthodes de faisceau.
LogitsProcessor
Un LogitsProcessor peut être utilisé pour modifier les scores de prédiction de la tête d'un modèle de langage lors de la génération.
classe transformers.AlternatingCodebooksLogitsProcessor
< source >( input_start_len: intsemantic_vocab_size: intcodebook_size: int )
LogitsProcessor imposant une génération alternée entre les deux codebooks de Bark.
Ce processeur de logits est exclusivement compatible avec le sous-modèle fin de Bark. Consultez la documentation du modèle pour des exemples.
classe transformers.ClassifierFreeGuidanceLogitsProcessor
< source >( guidance_scale )
Paramètres
- guidance_scale (float) —
L'échelle de guidage pour le guidage sans classifieur (CFG). Le CFG est activé en définissant
guidance_scale > 1. Une échelle de guidage plus élevée encourage le modèle à générer des échantillons plus étroitement liés au prompt d'entrée, généralement au détriment de la qualité.
LogitsProcessor pour le classifier free guidance (CFG). Les scores sont répartis sur la dimension du lot, où la première moitié correspond aux logits conditionnels (prédits à partir du prompt d’entrée) et la seconde moitié correspond aux logits non conditionnels (prédits à partir d’un prompt vide ou « null »). Le processeur calcule une moyenne pondérée entre les logits conditionnels et non conditionnels, paramétrée par guidance_scale.
Voir l'article pour plus d'informations.
Ce processeur de logits est exclusivement compatible avec MusicGen
Exemples :
>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> inputs = processor(
... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.EncoderNoRepeatNGramLogitsProcessor
< source >( encoder_ngram_size: intencoder_input_ids: LongTensor )
LogitsProcessor qui fonctionne de manière similaire à NoRepeatNGramLogitsProcessor, mais appliqué exclusivement pour empêcher la répétition des n-grammes présents dans le prompt.
Il a été conçu pour favoriser la conversationnalité d'un modèle de langage, en empêchant la génération de n-grammes présents dans les tours de conversation précédents.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("Alice: I love cats. What do you love?\nBob:", return_tensors="pt")
>>> # With greedy decoding, we see Bob repeating Alice's opinion. If Bob was a chatbot, it would be a poor one.
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: I love cats. What do you
>>> # With this logits processor, we can prevent Bob from repeating Alice's opinion.
>>> outputs = model.generate(**inputs, encoder_no_repeat_ngram_size=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: My cats are very cute.__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.EncoderRepetitionPenaltyLogitsProcessor
< source >( penalty: floatencoder_input_ids: LongTensor )
Paramètres
- penalty (
float) — Le paramètre de pénalité de répétition. 1.0 signifie aucune pénalité. Au-dessus de 1.0, les jetons du prompt sont récompensés. Entre 0.0 et 1.0, les jetons du prompt sont pénalisés. - encoder_input_ids (
torch.LongTensor) — Les encoder_input_ids qui doivent être répétés au sein des identifiants du décodeur.
LogitsProcessor qui fonctionne de manière similaire à RepetitionPenaltyLogitsProcessor, mais avec une pénalité inverse appliquée aux jetons présents dans le prompt. Autrement dit, une pénalité supérieure à 1,0 augmente les probabilités de sélectionner des jetons qui étaient présents dans le prompt.
Il a été conçu pour éviter les hallucinations dans les tâches ancrées dans l'entrée, comme la résumation. Bien qu'initialement destiné aux modèles encodeur-décodeur, il peut également être utilisé avec des modèles à décodeur uniquement, comme les LLM.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer(["Alice and Bob. The third member's name was"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was not mentioned.
>>> # With the `encoder_repetition_penalty` argument we can trigger this logits processor in `generate`, which can
>>> # promote the use of prompt tokens ("Bob" in this example)
>>> gen_out = model.generate(**inputs, encoder_repetition_penalty=1.2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was Bob. The third member's name was Bob.__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.EpsilonLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Paramètres
- epsilon (
float) — Si défini à une valeur > 0, seuls les jetons ayant des probabilités supérieures ou égales àepsilonsont conservés pour la génération. - filter_value (
float, facultatif, valeur par défaut : -inf) — Toutes les valeurs filtrées seront définies sur cette valeur flottante. - min_tokens_to_keep (
int, facultatif, valeur par défaut 1) — Nombre minimal de jetons qui ne peuvent pas être filtrés.
LogitsProcessor qui effectue un échantillonnage par epsilon, c'est-à-dire qui restreint les choix aux jetons dont prob >= epsilon. Si aucun jeton ne satisfait cette contrainte, il prend les min_tokens_to_keep jetons les plus probables. Voir Truncation Sampling as Language Model Desmoothing pour plus d'informations.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With epsilon sampling, the output gets restricted to high-probability tokens. Note that this is similar to
>>> # Top P sampling, which restricts tokens based on their cumulative probability.
>>> # Pro tip: The paper recommends using `epsilon_cutoff` values between 3e-4 and 9e-4
>>> outputs = model.generate(**inputs, do_sample=True, epsilon_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.EtaLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1device: str = 'cpu' )
Paramètres
- epsilon (
float) — Valeur flottante comprise dans l'intervalle (0, 1). Hyperparamètre utilisé pour calculer la valeur de seuil dynamique,eta. Les valeurs suggérées par l'article vont de 3e-4 à 4e-3 en fonction de la taille du modèle. - filter_value (
float, facultatif, valeur par défaut : -inf) — Toutes les valeurs inférieures à la valeur de seuil dynamique,eta, sont définies sur cette valeur flottante. Ce paramètre est utile lorsque les logits doivent être modifiés pour les jetons ayant une probabilité très faible et qui doivent être exclus entièrement de la génération. - min_tokens_to_keep (
int, facultatif, valeur par défaut 1) — Spécifie le nombre minimal de jetons qui doivent être conservés pour la génération, indépendamment de leurs probabilités. Par exemple, simin_tokens_to_keepest défini à 1, au moins un jeton sera toujours conservé pour la génération, même si tous les jetons ont des probabilités inférieures au seuileta. - device (
str, facultatif, par défaut"cpu") — L'appareil sur lequel allouer les tenseurs.
LogitsProcessor qui effectue un échantillonnage par eta, une technique permettant de filtrer les jetons dont les probabilités sont inférieures à une valeur de seuil dynamique, eta, calculée à partir d’une combinaison de l’hyperparamètre epsilon et de l’entropie des probabilités des jetons, c’est-à-dire eta := min(epsilon, sqrt(epsilon * e^-entropy(probabilities))). Si aucun jeton ne satisfait cette contrainte, il conserve les min_tokens_to_keep jetons les plus probables. Cette méthode corrige le problème de la faible qualité des longs échantillons de texte générés par des modèles de langage neuronaux, ce qui conduit à un texte plus cohérent et plus fluide. Consultez Truncation Sampling as Language Model Desmoothing pour plus d’informations. Remarque : do_sample doit être défini sur True pour que ce LogitsProcessor fonctionne.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With eta sampling, the output gets restricted to high-probability tokens. You can see it as a dynamic form of
>>> # epsilon sampling that adapts its cutoff probability based on the entropy (high entropy = lower cutoff).
>>> # Pro tip: The paper recommends using `eta_cutoff` values between 3e-4 to 4e-3
>>> outputs = model.generate(**inputs, do_sample=True, eta_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.ExponentialDecayLengthPenalty
< source >( exponential_decay_length_penalty: tupleeos_token_id: typing.Union[int, list[int], torch.Tensor]input_ids_seq_length: int )
Paramètres
- exponential_decay_length_penalty (
tuple(int, float)) — Ce tuple doit être composé de :(start_index, decay_factor)oùstart_indexindique le point de départ de la pénalité etdecay_factorreprésente le facteur de décroissance exponentielle - eos_token_id (
Union[int, list[int], torch.Tensor]) — L’identifiant (ou les identifiants) du jeton end-of-sequence. - input_ids_seq_length (
int) — La longueur de la séquence d'entrée.
LogitsProcessor qui augmente de manière exponentielle le score du eos_token_id une fois que start_index a été atteint. Cela permet de générer des séquences plus courtes sans coupure brutale, en laissant le eos_token être prédit à une position pertinente.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> text = "Just wanted to let you know, I"
>>> inputs = tokenizer(text, return_tensors="pt")
>>> # Let's consider that we want short sentences, so we limit `max_length=30`. However, we observe that the answer
>>> # tends to end abruptly.
>>> set_seed(1)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.9, max_length=30, pad_token_id=50256)
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010. Although
>>> # To promote the appearance of the EOS token at the right time, we add the `exponential_decay_length_penalty =
>>> # (start_index, decay_factor)`. Instead of cutting at max_tokens, the output comes to an end before and usually
>>> # with more meaning. What happens is that starting from `start_index` the EOS token score will be increased
>>> # by `decay_factor` exponentially. However, if you set a high decay factor, you may also end up with abruptly
>>> # ending sequences.
>>> set_seed(1)
>>> outputs = model.generate(
... **inputs,
... do_sample=True,
... temperature=0.9,
... max_length=30,
... pad_token_id=50256,
... exponential_decay_length_penalty=(15, 1.6),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network
which<|endoftext|>
>>> # With a small decay factor, you will have a higher chance of getting a meaningful sequence.
>>> set_seed(1)
>>> outputs = model.generate(
... **inputs,
... do_sample=True,
... temperature=0.9,
... max_length=30,
... pad_token_id=50256,
... exponential_decay_length_penalty=(15, 1.01),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010.<|endoftext|>__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.ForcedBOSTokenLogitsProcessor
< source >( bos_token_id: int )
LogitsProcessor qui impose le jeton spécifié comme premier jeton généré. Utilisé avec les modèles encodeur-décodeur.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small")
>>> tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small")
>>> inputs = tokenizer("Translate from English to German: I love cats.", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad> Ich liebe Kitty.</s>
>>> # We can use `forced_bos_token_id` to force the start of generation with an encoder-decoder model
>>> # (including forcing it to end straight away with an EOS token)
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_bos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad></s>__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.ForcedEOSTokenLogitsProcessor
< source >( max_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
LogitsProcessor qui impose le jeton spécifié comme dernier jeton généré lorsque max_length est atteint.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8
>>> # `forced_eos_token_id` ensures the generation ends with a EOS token
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_eos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7,<|endoftext|>__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
LogitsProcessor qui supprime toutes les valeurs nan et inf afin d’éviter l’échec de la méthode de génération. Notez que l’utilisation du processeur de logits ne doit être faite que si nécessaire, car elle peut ralentir la méthode de génération.
Ce processeur de logits n’a pas d’exemple de generate, car il ne devrait pas exister de combinaison correcte de drapeaux justifiant son utilisation.
__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
LogitsProcessor pour normaliser les scores à l’aide du log-softmax. Il est important de normaliser les scores lors de la recherche par faisceau, après l’application des processeurs ou des transformateurs de logits, car l’algorithme de recherche utilisé dans cette bibliothèque ne le fait pas (il ne le fait que précédemment, mais une renormalisation peut être nécessaire), alors qu’il suppose toujours que les scores sont normalisés lors de la comparaison des hypothèses.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> import torch
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")
>>> # By default, the scores are not normalized -- the sum of their exponentials is NOT a normalized probability
>>> # distribution, summing to 1
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
False
>>> # Normalizing them may have a positive impact on beam methods, or when using the scores on your application
>>> outputs = model.generate(**inputs, renormalize_logits=True, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
True__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
Classe de base abstraite pour tous les processeurs de logits applicables lors de la génération.
__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
Cette classe peut être utilisée pour créer une liste de LogitsProcessor afin de traiter ensuite un tenseur d'entrée scores.
Cette classe hérite de list et ajoute une méthode call spécifique pour appliquer chaque LogitsProcessor aux
entrées.
__call__
< source >( input_ids: LongTensorscores: Tensor**kwargs ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée. - kwargs (
dict[str, Any], facultatif) — Kwargs supplémentaires spécifiques à un processeur de logits.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.MinLengthLogitsProcessor
< source >( min_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
Paramètres
- min_length (
int) — La longueur minimale en dessous de laquelle le score deeos_token_idest défini sur-float("Inf"). - eos_token_id (
Union[int, list[int], torch.Tensor]) — L’identifiant (ou les identifiants) du jeton end-of-sequence. - device (
str, facultatif, par défaut"cpu") — L'appareil sur lequel allouer les tenseurs.
LogitsProcessor qui impose une longueur minimale en fixant la probabilité de EOS à 0. Notez que, pour les modèles uniquement décodeurs comme la plupart des LLM, la longueur inclut le prompt.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("A number:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting `min_length` to a value smaller than the uncontrolled output length has no impact
>>> gen_out = model.generate(**inputs, min_length=3)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting a larger `min_length` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_length=10)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand, nine hundred and ninety-four__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.MinNewTokensLengthLogitsProcessor
< source >( prompt_length_to_skip: intmin_new_tokens: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
Paramètres
- prompt_length_to_skip (
int) — La longueur des jetons d’entrée. Argument non valide lors de l’utilisation avecgenerate, car la longueur d’entrée est attribuée automatiquement. - min_new_tokens (
int) — La longueur minimale des nouveaux jetons en dessous de laquelle le score deeos_token_idest défini sur-float("Inf"). - eos_token_id (
Union[int, list[int], torch.Tensor]) — L’identifiant (ou les identifiants) du jeton end-of-sequence. - device (
str, facultatif, par défaut"cpu") — L'appareil sur lequel allouer les tenseurs.
LogitsProcessor qui impose une longueur minimale de nouveaux jetons en fixant la probabilité du jeton EOS (End-Of-Sequence) à 0. Contrairement à MinLengthLogitsProcessor, ce processeur ignore le prompt.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer(["A number:"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting `min_new_tokens` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_new_tokens=2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.MinPLogitsWarper
< source >( min_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Paramètres
- min_p (
float) — Probabilité minimale du jeton, qui sera mise à l'échelle par la probabilité du jeton le plus probable. Elle doit être une valeur comprise entre 0 et 1. Les valeurs typiques se situent dans la plage 0,01-0,2, avec une sélectivité comparable à celle obtenue en réglanttop_pdans la plage 0,99-0,8 (utilisez l'inverse des valeurs habituelles detop_p). - filter_value (
float, facultatif, valeur par défaut : -inf) — Toutes les valeurs filtrées seront définies sur cette valeur flottante. - min_tokens_to_keep (
int, facultatif, valeur par défaut 1) — Nombre minimal de jetons qui ne peuvent pas être filtrés.
LogitsProcessor qui applique min-p, c’est-à-dire qui conserve tous les jetons dont la probabilité dépasse une probabilité minimale, mise à l’échelle par la probabilité du jeton le plus probable. En conséquence, le filtre devient plus agressif en présence de jetons à forte probabilité, ce qui est le signe d’une sortie confiante dont nous ne devrions pas nous écarter.
Souvent utilisé en combinaison avec TemperatureLogitsWarper. Utilisé comme alternative à TopPLogitsWarper et TopKLogitsWarper.
Créé par @menhguin et @kalomaze (identifiants GitHub). Code adapté de cette PR externe
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With `min_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `min_p` in the 0.01-0.2 range.
>>> outputs = model.generate(**inputs, do_sample=True, min_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9classe transformers.NoBadWordsLogitsProcessor
< source >( bad_words_ids: listeos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None )
LogitsProcessor qui impose que les séquences spécifiées ne soient jamais sélectionnées.
Afin d’obtenir les identifiants de jetons des mots qui ne doivent pas apparaître dans le texte généré, assurez-vous de définir
add_prefix_space=Truelors de l’initialisation du tokeniseur, et utiliseztokenizer(bad_words, add_special_tokens=False).input_ids. L’argumentadd_prefix_spacen’est pris en charge que par certains tokeniseurs lents, car les comportements de préfixation des tokeniseurs rapides proviennent depre tokenizers. En savoir plus ici.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["In a word, the cake is a"], return_tensors="pt")
>>> output_ids = model.generate(inputs["input_ids"], max_new_tokens=5, pad_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a mess.
>>> # Now let's take the bad words out. Please note that the tokenizer is initialized differently
>>> tokenizer_with_prefix_space = AutoTokenizer.from_pretrained("openai-community/gpt2", add_prefix_space=True)
>>> def get_tokens_as_list(word_list):
... "Converts a sequence of words into a list of tokens"
... tokens_list = []
... for word in word_list:
... tokenized_word = tokenizer_with_prefix_space([word], add_special_tokens=False).input_ids[0]
... tokens_list.append(tokenized_word)
... return tokens_list
>>> bad_words_ids = get_tokens_as_list(word_list=["mess"])
>>> output_ids = model.generate(
... inputs["input_ids"], max_new_tokens=5, bad_words_ids=bad_words_ids, pad_token_id=tokenizer.eos_token_id
... )
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a surprise.__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.NoRepeatNGramLogitsProcessor
< source >( ngram_size: int )
Les n-grammes sont des groupes de « n » mots, caractères ou jetons consécutifs extraits d'une séquence de texte. Pour la phrase « She runs fast », les bigrammes (n=2) seraient (« she », « runs ») et (« runs », « fast »). En génération de texte, éviter les répétitions de séquences de mots permet d'obtenir une sortie plus diversifiée. Ce LogitsProcessor impose l'absence de répétition des n-grammes en fixant les scores des jetons interdits à l'infini négatif, ce qui élimine ces jetons de la prise en compte lors du traitement ultérieur des scores. Notez que, pour les modèles uniquement décodeurs comme la plupart des LLM, le prompt est également pris en compte pour obtenir les n-grammes. Fairseq.
Utilisez les pénalités n-grammes avec prudence. Par exemple, pénaliser les 2-grammes (bigrammes) dans un article sur la ville de New York peut entraîner des résultats indésirables où le nom de la ville n’apparaît qu’une seule fois dans tout le texte. Référence
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["Today I"], return_tensors="pt")
>>> output = model.generate(**inputs)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I'm not sure if I'm going to be able to do it.
>>> # Now let's add ngram size using `no_repeat_ngram_size`. This stops the repetitions ("I'm") in the output.
>>> output = model.generate(**inputs, no_repeat_ngram_size=2)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I'm not sure if I can get a better understanding of the nature of this issue__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.PrefixConstrainedLogitsProcessor
< source >( prefix_allowed_tokens_fn: Callablenum_beams: int )
Paramètres
- prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]]) — Cette fonction contraint la recherche par faisceau aux jetons autorisés uniquement à chaque étape. Cette fonction prend 2 argumentsinputs_idset l’identifiant du lotbatch_id. Elle doit retourner une liste des jetons autorisés pour l’étape de génération suivante, conditionnée par les jetons précédemment générésinputs_idset l’identifiant du lotbatch_id.
LogitsProcessor qui impose une génération contrainte et qui est utile pour la génération contrainte conditionnée par un préfixe. Voir Autoregressive Entity Retrieval pour plus d’informations.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("Alice and Bob", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=5)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob are friends
>>> # We can constrain it with `prefix_allowed_tokens_fn` to force a certain behavior based on a prefix.
>>> # For instance, we can force an entire entity to be generated when its beginning is detected.
>>> entity = tokenizer(" Bob Marley", return_tensors="pt").input_ids[0] # 3 tokens
>>> def prefix_allowed_tokens_fn(batch_id, input_ids):
... '''
... Attempts to generate 'Bob Marley' when 'Bob' is detected.
... In this case, `batch_id` is not used, but you can set rules for each batch member.
... '''
... if input_ids[-1] == entity[0]:
... return [entity[1].item()]
... elif input_ids[-2] == entity[0] and input_ids[-1] == entity[1]:
... return [entity[2].item()]
... return list(range(tokenizer.vocab_size)) # If no match, allow all tokens
>>> outputs = model.generate(**inputs, max_new_tokens=5, prefix_allowed_tokens_fn=prefix_allowed_tokens_fn)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob Marley__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.RepetitionPenaltyLogitsProcessor
< source >( penalty: floatprompt_ignore_length: typing.Union[int, torch.Tensor, NoneType] = None )
Paramètres
- penalty (
float) — Le paramètre de pénalité de répétition. 1.0 signifie qu’aucune pénalité n’est appliquée. Une valeur supérieure à 1.0 pénalise les jetons générés précédemment. Une valeur comprise entre 0.0 et 1.0 récompense les jetons générés précédemment. - prompt_ignore_length (
intoutorch.LongTensor, facultatif) — Nombre de jetons initiaux à ignorer, éventuellement spécifié pour chaque élément du lot.
LogitsProcessor qui empêche la répétition des jetons précédents à l’aide d’une pénalité. Cette pénalité est appliquée au plus une fois par jeton. Notez que, pour les modèles uniquement décodeurs comme la plupart des LLM, les jetons considérés incluent par défaut le prompt.
Dans l'article original, les auteurs suggèrent d'utiliser une pénalité d'environ 1,2 pour obtenir un bon équilibre entre une génération fidèle et l'absence de répétition. Pour pénaliser et réduire la répétition, utilisez des valeurs de penalty supérieures à 1,0, où une valeur plus élevée pénalise plus fortement. Pour récompenser et encourager la répétition, utilisez des valeurs de penalty comprises entre 0,0 et 1,0, où une valeur plus basse récompense plus fortement.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, RepetitionPenaltyLogitsProcessor
>>> # Initializing the model and tokenizer for it
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["I'm not going to"], return_tensors="pt")
>>> # This shows a normal generate without any specific parameters
>>> summary_ids = model.generate(**inputs)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to be able to do that
>>> # This generates a penalty for repeated tokens
>>> penalized_ids = model.generate(**inputs, repetition_penalty=1.1)
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'll just have to go out and play
>>> # We can also exclude the input prompt by creating an instance of this class
>>> # with a `prompt_ignore_length` and passing it as a custom logit processor
>>> rep_pen_processor = RepetitionPenaltyLogitsProcessor(
... penalty=1.1,
... prompt_ignore_length=inputs["input_ids"].shape[-1]
... )
>>> penalized_ids = model.generate(**inputs, logits_processor=[rep_pen_processor])
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to have to go through a lot of things, and__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.SequenceBiasLogitsProcessor
< source >( sequence_bias: list )
Paramètres
- sequence_bias (
list[list[Union[list[int], float]]]) — Liste de listes qui associe une séquence de jetons à son terme de biais (par ex.[[[10, 45], -2.0], [[64], -7.5]]). Les biais positifs augmentent les probabilités que la séquence soit sélectionnée, tandis que les biais négatifs font l’inverse. Si une séquence a une longueur de 1, son biais sera toujours appliqué. Sinon, le biais ne sera appliqué que si la séquence en question est sur le point d’être complétée (à l’étape de sélection des jetons, après l’application de ce processeur).
LogitsProcessor qui applique un biais additif sur les séquences. Le biais est appliqué au dernier jeton d’une séquence lorsque le jeton généré suivant peut la compléter. Par conséquent, pour tirer le meilleur parti du biaisage des séquences comportant plus d’un jeton, envisagez d’utiliser des méthodes de faisceau (pour contourner élégamment les séquences partiellement complétées ayant un biais négatif) et d’appliquer le biais à leurs préfixes (pour garantir que le biais est appliqué plus tôt).
Au niveau des jetons, biaiser un mot est différent de biaiser un mot précédé d'une espace. Si vous souhaitez biaiser « foo » au milieu d'une phrase, vous devrez probablement ajouter un espace préfixe et biaiser « foo » à la place. Consultez la section sur le tokeniseur de notre cours de NLP pour comprendre pourquoi : https://huggingface.co/learn/nlp-course/chapter2/4?fw=pt
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> inputs = tokenizer(["The full name of Donald is Donald"], return_tensors="pt")
>>> summary_ids = model.generate(inputs["input_ids"], max_new_tokens=4, do_sample=False)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.
>>> def get_tokens(word):
... return tokenizer([word], add_special_tokens=False).input_ids[0]
>>> # IMPORTANT: Remember our tip about adding spaces before words to bias them correctly.
>>> sequence_bias = [[get_tokens("Trump"), -10.0],] # will fail to apply bias
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.
>>> sequence_bias = [[get_tokens(" Trump"), -10.0],] # will work
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Harper. He
>>> # We can also add a positive bias to nudge the model towards specific tokens or continuations. This technique
>>> # is also more effective when paired up with beam search.
>>> sequence_bias = [[get_tokens(" Donald Duck"), 10.0],]
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, num_beams=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald Duck. He is__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.SuppressTokensAtBeginLogitsProcessor
< source >( begin_suppress_tokensbegin_indexdevice: str = 'cpu' )
SuppressTokensAtBeginLogitsProcessor supprime une liste de tokens dès que la fonction generate commence à générer, en utilisant les tokens begin_index. Cela doit garantir que les tokens définis par begin_suppress_tokens ne sont pas générés au début. Créé à l’origine pour Whisper.
Exemples :
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")
>>> # Whisper has `begin_suppress_tokens` set by default (= `[220, 50256]`). 50256 is the EOS token, so this means
>>> # it can't generate and EOS token in the first iteration, but it can in the others.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[0][0, 50256])
tensor(-inf)
>>> print(outputs.scores[-1][0, 50256]) # in other places we can see some probability mass for EOS
tensor(29.9010)
>>> # If we disable `begin_suppress_tokens`, we can generate EOS in the first iteration.
>>> outputs = model.generate(
... **inputs, return_dict_in_generate=True, output_scores=True, begin_suppress_tokens=None
... )
>>> print(outputs.scores[0][0, 50256])
tensor(11.2027)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
Ce processeur peut être utilisé pour supprimer une liste de jetons. Le processeur définit leurs probabilités logarithmiques à -inf afin qu'ils ne soient pas générés. Créé à l'origine pour Whisper.
Exemples :
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")
>>> # Whisper has a long list of suppressed tokens. For instance, in this case, the token 1 is suppressed by default.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[1][0, 1]) # 1 (and not 0) is the first freely generated token
tensor(-inf)
>>> # If we disable `suppress_tokens`, we can generate it.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True, suppress_tokens=None)
>>> print(outputs.scores[1][0, 1])
tensor(6.0678)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.SynthIDTextWatermarkLogitsProcessor
< source >( ngram_len: intkeys: listsampling_table_size: intsampling_table_seed: intcontext_history_size: intdevice: deviceskip_first_ngram_calls: bool = Falsedebug_mode: bool = False )
Paramètres
- ngram_len (
int) — Longueur du n-gramme. - keys (
list[int]) — Une séquence de clés de filigrane, une pour chaque profondeur. - sampling_table_size (
int) — Taille du tableau d'échantillonnage. - sampling_table_seed (
int) — Graine aléatoire pour générer le tableau d'échantillonnage. - context_history_size (
int) — Taille du tenseur utilisé pour suivre les contextes déjà vus. - device (
torch.device) — Appareil à utiliser. - skip_first_ngram_calls (
bool, facultatif, valeur par défautFalse) — Indique s'il faut ignorer les premiers appels ngram. - debug_mode (
bool, facultatif, par défautFalse) — Les logits sont modifiés pour devenir uniformes avant que la modification de filigrane ne soit appliquée. Cela sert à tester l’implémentation.
Processeur de logits qui implémente des techniques de filigrane pour les modèles de génération de texte. Cette classe facilite l'application du filigrane de texte SynthID, une méthode permettant d'insérer des signaux imperceptibles dans le texte généré afin d'aider à la détection du contenu synthétique. Elle fonctionne en manipulant subtilement les probabilités de sélection des jetons lors de la génération de texte, de manière à ce que le signal puisse être fiablement récupéré ultérieurement pour vérification.
Fonctionnalités clés :
Gestion de l'état : Maintient un état interne pour suivre les séquences de jetons et générer dynamiquement les clés de filigrane.
Génération de clés : Calcule des hachages basés sur les séquences de jetons et les paramètres de filigrane pour créer des clés uniques pour chaque position.
Échantillonnage de valeurs G : Utilise une table d'échantillonnage précalculée pour échantillonner les valeurs de filigrane (valeurs g) en fonction des clés générées.
Ajustement des scores : Applique les valeurs g calculées pour modifier les probabilités des jetons lors de la génération, intégrant ainsi le filigrane.
Gestion de la répétition du contexte : intègre une logique pour éviter d’appliquer un filigrane aux jetons dans les contextes répétés, préservant ainsi la naturalité.
Masquage des jetons EOS : prend en charge le masquage des jetons de fin de phrase afin d'empêcher leur inclusion dans les calculs de filigrane.
Fonctions utilitaires : Fournit des fonctions pour calculer directement les valeurs g, vérifier la répétition du contexte, créer des masques de jetons EOS et estimer les valeurs g moyennes attendues.
Pour plus de détails à ce sujet, consultez l’article à l’adresse suivante : https://www.nature.com/articles/s41586-024-08025-4.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')
>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
... keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
... ngram_len=5,
... )
>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
... **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.TemperatureLogitsWarper
< source >( temperature: float )
LogitsProcessor pour la température (mise à l’échelle exponentielle de la distribution de probabilité des sorties), ce qui signifie concrètement qu’il peut contrôler l’aléatoire des jetons prédits. Souvent utilisé en combinaison avec TopPLogitsWarper et TopKLogitsWarper.
Assurez-vous que
do_sample=Trueest inclus dans les arguments degenerate, sinon la valeur de la température n’aura aucun effet.
Exemples :
>>> import torch
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(0) # for reproducibility
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> model.config.pad_token_id = model.config.eos_token_id
>>> inputs = tokenizer(["Hugging Face Company is"], return_tensors="pt")
>>> # With temperature=1.0, the default, we consistently get random outputs due to random sampling.
>>> generate_kwargs = {"max_new_tokens": 10, "do_sample": True, "temperature": 1.0, "num_return_sequences": 2}
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is one of these companies that is going to take a',
"Hugging Face Company is a brand created by Brian A. O'Neil"]
>>> # However, with temperature close to 0, it approximates greedy decoding strategies (invariant)
>>> generate_kwargs["temperature"] = 0.0001
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is a company that has been around for over 20 years',
'Hugging Face Company is a company that has been around for over 20 years']__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.TopHLogitsWarper
< source >( top_h: floatfilter_value: float = -inf )
LogitsProcessor qui implémente l’échantillonnage Top-H, une méthode de décodage qui sélectionne de manière adaptative un sous-ensemble de jetons à forte probabilité en fonction des contraintes d’entropie et de probabilité cumulative.
Cette méthode détermine dynamiquement le nombre de tokens à conserver en analysant la différence d'entropie de la distribution sélectionnée, équilibrant ainsi l'exploration et l'exploitation. Elle garantit que le texte généré conserve à la fois sa diversité et sa cohérence.
Référence : Pour plus de détails, voir Top-H Decoding: Adapting the Creativity and Coherence with Bounded Entropy in Text Generation (NeurIPS 2025) : https://arxiv.org/abs/2509.02510
Exemple :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> outputs = model.generate(**inputs, do_sample=True, top_h=0.4)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Identifiants des jetons d'entrée. - scores (
torch.Tensorde forme(batch_size, vocab_size)) — Logits bruts issus du modèle.
Retourne
torch.Tensor de forme (batch_size, vocab_size)
Logits traités où les jetons invalides sont masqués avec -inf.
Filtre les logits à l'aide de l'échantillonnage Top-H.
classe transformers.TopKLogitsWarper
< source >( top_k: intfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Paramètres
- top_k (
int) — Le nombre de jetons du vocabulaire ayant la plus haute probabilité à conserver pour le filtrage top-k. - filter_value (
float, facultatif, valeur par défaut : -inf) — Toutes les valeurs filtrées seront définies sur cette valeur flottante. - min_tokens_to_keep (
int, facultatif, valeur par défaut 1) — Nombre minimal de jetons qui ne peuvent pas être filtrés.
LogitsProcessor qui effectue un top-k, c’est-à-dire qui restreint la sélection aux k éléments ayant la plus haute probabilité. Souvent utilisé en combinaison avec TemperatureLogitsWarper et TopPLogitsWarper.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: A, B, C, D", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E — S — O, P — R
>>> # With `top_k` sampling, the output gets restricted the k most likely tokens.
>>> # Pro tip: In practice, LLMs use `top_k` in the 5-50 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_k=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E, F, G, H, I__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.TopPLogitsWarper
< source >( top_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Paramètres
- top_p (
float) — Si défini à une valeur inférieure à 1, seul l'ensemble minimal de jetons les plus probables dont les probabilités cumulées atteignenttop_pou plus est conservé pour la génération. - filter_value (
float, facultatif, valeur par défaut : -inf) — Toutes les valeurs filtrées seront définies sur cette valeur flottante. - min_tokens_to_keep (
int, facultatif, valeur par défaut 1) — Nombre minimal de jetons qui ne peuvent pas être filtrés.
LogitsProcessor qui effectue un top-p, c’est-à-dire qui restreint aux jetons dont la somme des probabilités est inférieure ou égale à prob_cut_off. Souvent utilisé en combinaison avec TemperatureLogitsWarper et TopKLogitsWarper.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With `top_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `top_p` in the 0.9-0.95 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.TypicalLogitsWarper
< source >( mass: float = 0.9filter_value: float = -infmin_tokens_to_keep: int = 1 )
Paramètres
- mass (
float, facultatif, valeur par défaut 0.9) — Valeur de typical_p comprise entre 0 et 1, valeur par défaut 0.9. - filter_value (
float, facultatif, valeur par défaut : -inf) — Toutes les valeurs filtrées seront définies sur cette valeur flottante. - min_tokens_to_keep (
int, facultatif, valeur par défaut 1) — Nombre minimal de jetons qui ne peuvent pas être filtrés.
LogitsProcessor qui effectue un décodage typique. Inspiré de la façon dont les humains utilisent le langage, il privilégie les jetons dont la log-probabilité est proche de l’entropie de la distribution de probabilité des jetons. Cela signifie que les jetons les plus probables peuvent être écartés au cours du processus.
Voir Décodage typique pour la génération de langage naturel pour plus d’informations.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("1, 2, 3", return_tensors="pt")
>>> # We can see that greedy decoding produces a sequence of numbers
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
>>> # For this particular seed, we can see that sampling produces nearly the same low-information (= low entropy)
>>> # sequence
>>> set_seed(18)
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9 and 10
>>> # With `typical_p` set, the most obvious sequence is no longer produced, which may be good for your problem
>>> set_seed(18)
>>> outputs = model.generate(
... **inputs, do_sample=True, typical_p=0.1, return_dict_in_generate=True, output_scores=True
... )
>>> print(tokenizer.batch_decode(outputs.sequences, skip_special_tokens=True)[0])
1, 2, 3 and 5
>>> # We can see that the token corresponding to "4" (token 934) in the second position, the most likely token
>>> # as seen with greedy decoding, was entirely blocked out
>>> print(outputs.scores[1][0, 934])
tensor(-inf)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.UnbatchedClassifierFreeGuidanceLogitsProcessor
< source >( guidance_scale: floatmodelunconditional_ids: typing.Optional[torch.LongTensor] = Noneunconditional_attention_mask: typing.Optional[torch.LongTensor] = Noneuse_cache: bool = True )
Paramètres
- guidance_scale (
float) — L’échelle de guidage pour le guidage sans classifieur (CFG). Le CFG est activé en définissantguidance_scale != 1. Une échelle de guidage plus élevée encourage le modèle à générer des échantillons plus étroitement liés au prompt d’entrée, généralement au détriment de la qualité. Une valeur inférieure à 1 a l’effet inverse, tout en faisant agir le prompt négatif fourni avec negative_prompt_ids (le cas échéant) comme un prompt positif. - model (
PreTrainedModel) — Le modèle qui calcule les scores inconditionnels. Il est censé être identique à celui qui calcule les scores conditionnels. Les deux modèles doivent utiliser le même tokenizer. - unconditional_ids (
torch.LongTensorde forme(batch_size, sequence_length), facultatif) — Indices des jetons de la séquence d’entrée dans le vocabulaire pour la branche non conditionnelle. Si non défini, la valeur par défaut est le dernier jeton du prompt. - unconditional_attention_mask (
torch.LongTensorde forme(batch_size, sequence_length), facultatif) — Masque d'attention pour unconditional_ids. - use_cache (
bool, facultatif, par défautTrue) — Indique s'il faut mettre en cache les clés/valeurs pendant le passage avant du prompt négatif.
Processeur de logits pour le Classifier-Free Guidance (CFG). Le processeur calcule une moyenne pondérée des scores issus des logits conditionnels et non conditionnels (ou négatifs) du prompt, paramétrée par guidance_scale. Les scores non conditionnels sont calculés en interne en interrogeant model avec la branche unconditional_ids.
Voir l'article pour plus d'informations.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Today, a dragon flew over Paris, France,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=1.5)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 50 people and injuring more than 100'
>>> # with a negative prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=2, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 130 people. French media reported that'
>>> # with a positive prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=0, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
"Today, a dragon flew over Paris, France, and I'm very happy to be here. I"classe transformers.WhisperTimeStampLogitsProcessor
< source >( generate_config: GenerationConfigbegin_index: int_detect_timestamp_from_logprob: bool | None = None )
Paramètres
- generate_config (
GenerateConfig) — La configuration de génération utilisée pour générer la sortie. Les paramètres suivants sont requis : eos_token_id (int, facultatif, par défaut 50257) : L'identifiant du jeton de fin de séquence. no_timestamps_token_id (int, facultatif, par défaut 50363) : L'identifiant du jeton"<|notimestamps|>". max_initial_timestamp_index (int, facultatif, par défaut 1) : Utilisé pour définir la valeur maximale du timestamp initial. Cela sert à empêcher le modèle de prédire des timestamps situés trop loin dans le futur. - begin_index (
int) — Index du premier jeton généré par le modèle. - _detect_timestamp_from_logprob (
bool, facultatif) — Indique si les horodatages peuvent être prédits à partir des logprobs sur l'ensemble des horodatages.
LogitsProcessor qui modifie les logits pour la génération des horodatages dans la transcription. Lorsque les jetons d’entrée atteignent un seuil spécifique, le processeur définit les scores à moins l’infini. Le processeur s’assure que les jetons d’horodatage apparaissent par paires, en masquant les logits qui rompraient ce schéma d’appariement. Cela est fait pour maintenir la cohérence et la structure des horodatages générés. Il garantit également que lorsque la probabilité prédite d’échantillonner l’un des jetons d’horodatage est supérieure à celle de tout jeton non-horodaté individuel, les logits non-horodatés correspondants sont définis à moins l’infini. Cela est fait pour assurer la génération d’horodatages au détriment d’autres jetons potentiels.
Voir l'article pour plus d'informations.
Exemples :
>>> import torch
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration, GenerationConfig
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[3]["audio"]["array"], return_tensors="pt")
>>> input_features = inputs.input_features
>>> #Displaying timestamps
>>> generated_ids = model.generate(inputs=input_features, return_timestamps=True)
>>> transcription = processor.batch_decode(generated_ids, decode_with_timestamps=True)[0]
>>> print("Transcription:", transcription)
Transcription: <|startoftranscript|><|0.00|> He has grave doubts whether Sir Frederick Layton's work is really Greek after all, and can<|6.44|><|6.44|> discover in it but little of rocky Ithaca.<|9.44|><|endoftext|>
>>> #No timestamps & change EOS:
>>> #This allows the user to select a specific token to terminate the sequence on, in this case it's the word "can"(460)
>>> model.generation_config.eos_token_id = 460
>>> generated_ids = model.generate(inputs=input_features,return_timestamps=False)
>>> transcription = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print("Transcription:", transcription)
Transcription: He has grave doubts whether Sir Frederick Layton's work is really Greek after all and can__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
classe transformers.WatermarkLogitsProcessor
< source >( vocab_sizedevicegreenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
Paramètres
- vocab_size (
int) — vocab_size du tokenizer du modèle. Utilisé pour calculer le ratio de jetons « verts ». - device (
str) — L'appareil sur lequel le modèle est alloué. - greenlist_ratio (
float, optionnel, optionnel, valeur par défaut 0.25) — Le ratio de jetons « verts » utilisés par rapport à la taille du vocabulaire. Valeur par défaut : 0.25. - bias (
float, optionnel, optionnel, valeur par défaut 2.0) — Le biais ajouté aux logits des jetons « verts » sélectionnés. Pensez à réduire lebiassi la qualité de la génération de texte se dégrade. Les valeurs recommandées se situent dans l’intervalle [0,5, 2,0]. Valeur par défaut : 2,0. - hashing_key (
int, optionnel, optionnel, valeur par défaut 15485863) — Clé utilisée pour le hachage. Si vous déployez ce filigrane, nous vous conseillons d’utiliser une autre clé privée. Valeur par défaut : 15485863 (le millionième nombre premier). - seeding_scheme (
str, facultatif, facultatif, défaut :"lefthash") — Le schéma d'ensemencement utilisé pour la sélection des jetons « verts ». Valeurs acceptées :- « lefthash » (par défaut) : la sélection des jetons « green » dépend du dernier jeton (algorithme 2 de l'article)
- “selfhash” : la sélection des jetons “green” dépend du jeton courant lui-même (algorithme 3 de l’article) L’inconvénient de ce schéma est qu’il prend en compte tous les jetons suivants possibles et peut être plus lent que “lefthash”. La longueur du contexte des jetons précédents à utiliser pour l’initialisation. Une longueur de contexte plus élevée rend le marquage plus robuste.
- context_width (
int, facultatif, valeur par défaut 1) — Le nombre de jetons précédents à utiliser lors de la définition de la graine.
Processeur de logits pour le marquage filigrane du texte généré. Le processeur modifie les scores de sortie du modèle en ajoutant un petit biais à un ensemble aléatoire de jetons « verts » avant de générer le jeton suivant. Le processus de sélection des jetons « verts » dépend du seeding_scheme utilisé. Le code est basé sur le dépôt original.
Le texte généré par ce LogitsProcessor peut être détecté à l'aide de WatermarkDetector. Consultez call() pour plus de détails,
Voir l'article pour plus d'informations.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkingConfig
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Alice and Bob are"], return_tensors="pt")
>>> # normal generation
>>> out = model.generate(inputs["input_ids"], max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both in the same room.\n\n"I\'m not sure if you\'re'
>>> # watermarked generation
>>> watermarking_config = WatermarkingConfig(bias=2.5, context_width=2, seeding_scheme="selfhash")
>>> out = model.generate(inputs["input_ids"], watermarking_config=watermarking_config, max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both still alive and well and the story is pretty much a one-hour adventure'
>>> # to detect watermarked text use the WatermarkDetector class
>>> from transformers import WatermarkDetector
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config= watermarking_config)
>>> detection_preds = detector(out)
>>> detection_preds
array([ True])__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d’entrée dans le vocabulaire. Que sont les identifiants d’entrée ? - scores (
torch.Tensorde forme(batch_size, config.vocab_size)) — Scores de prédiction d'une tête de modélisation de langage. Il peut s'agir de logits pour chaque élément du vocabulaire lorsque la recherche par faisceau (beam search) n'est pas utilisée, ou de log softmax pour chaque jeton du vocabulaire lorsque la recherche par faisceau est utilisée.
Retourne
torch.Tensor de forme (batch_size, config.vocab_size)
Les scores de prédiction traités.
StoppingCriteria
Un StoppingCriteria peut être utilisé pour modifier le moment où la génération s'arrête (autre que le jeton EOS). Veuillez noter que cela est exclusivement disponible dans nos implémentations PyTorch.
Classe de base abstraite pour tous les critères d'arrêt applicables pendant la génération.
Si votre critère d’arrêt dépend de l’entrée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d'entrée dans le vocabulaire.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- scores (
tuple(torch.Tensor)) — Scores de prédiction d’une tête de modélisation de langage, sous forme de tuple contenant un tenseur par étape de génération, chacun de forme(batch_size, config.vocab_size). Il peut s’agir des scores pour chaque jeton du vocabulaire avant SoftMax ou des scores pour chaque jeton du vocabulaire après SoftMax. Si ce critère d’arrêt dépend de l’entréescores, assurez-vous de passerreturn_dict_in_generate=True, output_scores=Trueàgenerate, sinonNoneest passé. - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires spécifiques aux critères d'arrêt.
Retourne
torch.BoolTensor. (torch.BoolTensor de forme (batch_size, 1))
True indique que nous arrêtons la génération pour une ligne particulière.
False indique que nous devons continuer.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d'entrée dans le vocabulaire.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- scores (
tuple(torch.Tensor)) — Scores de prédiction d’une tête de modélisation de langage, sous forme de tuple contenant un tenseur par étape de génération, chacun de forme(batch_size, config.vocab_size). Il peut s’agir des scores pour chaque jeton du vocabulaire avant SoftMax ou des scores pour chaque jeton du vocabulaire après SoftMax. Si ce critère d’arrêt dépend de l’entréescores, assurez-vous de passerreturn_dict_in_generate=True, output_scores=Trueàgenerate, sinonNoneest passé. - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires spécifiques aux critères d'arrêt.
Retourne
torch.BoolTensor. (torch.BoolTensor de forme (batch_size, 1))
True indique que nous arrêtons la génération pour une ligne particulière.
False indique que nous devons continuer.
classe transformers.MaxLengthCriteria
< source >( max_length: intmax_position_embeddings: int | None = None )
Cette classe peut être utilisée pour arrêter la génération dès que le nombre total de jetons générés dépasse max_length. Gardez à l’esprit que, pour les transformers de type décodeur uniquement, cela inclut les jetons de l’invite initiale.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d'entrée dans le vocabulaire.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- scores (
tuple(torch.Tensor)) — Scores de prédiction d’une tête de modélisation de langage, sous forme de tuple contenant un tenseur par étape de génération, chacun de forme(batch_size, config.vocab_size). Il peut s’agir des scores pour chaque jeton du vocabulaire avant SoftMax ou des scores pour chaque jeton du vocabulaire après SoftMax. Si ce critère d’arrêt dépend de l’entréescores, assurez-vous de passerreturn_dict_in_generate=True, output_scores=Trueàgenerate, sinonNoneest passé. - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires spécifiques aux critères d'arrêt.
Retourne
torch.BoolTensor. (torch.BoolTensor de forme (batch_size, 1))
True indique que nous arrêtons la génération pour une ligne particulière.
False indique que nous devons continuer.
classe transformers.MaxTimeCriteria
< source >( max_time: floatinitial_timestamp: float | None = None )
Cette classe peut être utilisée pour arrêter la génération dès que la durée totale de la génération dépasse un certain seuil de temps. Par défaut, le comptage du temps commence lors de l’initialisation de cette fonction. Vous pouvez modifier ce comportement en passant un initial_timestamp.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d'entrée dans le vocabulaire.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- scores (
tuple(torch.Tensor)) — Scores de prédiction d’une tête de modélisation de langage, sous forme de tuple contenant un tenseur par étape de génération, chacun de forme(batch_size, config.vocab_size). Il peut s’agir des scores pour chaque jeton du vocabulaire avant SoftMax ou des scores pour chaque jeton du vocabulaire après SoftMax. Si ce critère d’arrêt dépend de l’entréescores, assurez-vous de passerreturn_dict_in_generate=True, output_scores=Trueàgenerate, sinonNoneest passé. - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires spécifiques aux critères d'arrêt.
Retourne
torch.BoolTensor. (torch.BoolTensor de forme (batch_size, 1))
True indique que nous arrêtons la génération pour une ligne particulière.
False indique que nous devons continuer.
classe transformers.StopStringCriteria
< source >( tokenizer: PreTrainedTokenizerBasestop_strings: str | list[str] )
Paramètres
- tokenizer (
PreTrainedTokenizer) — Le tokenizer associé au modèle (nécessaire pour extraire le vocabulaire et tokeniser les séquences de terminaison) - stop_strings (
Union[str, list[str]]) — Une liste de chaînes de caractères qui doivent mettre fin à la génération. Si une chaîne est transmise, elle sera traitée comme une liste contenant un seul élément.
Cette classe peut être utilisée pour arrêter la génération dès que des séquences de caractères spécifiques sont générées. Elle prétraite les chaînes de caractères avec le vocabulaire du tokenizer pour trouver les positions où les jetons peuvent valablement compléter les chaînes d’arrêt.
La génération est arrêtée dès qu'un jeton est généré qui complète l'une des chaînes d'arrêt. Nous voulons détecter tout cas où la chaîne d'arrêt serait présente dans la sortie décodée, ce qui signifie que nous devons également capturer les cas avec des « débordements » sur une ou les deux extrémités. Pour rendre cela plus concret, pour la chaîne d'arrêt « stop », l'une des séquences de jetons suivantes déclencherait la correspondance :
- [“st”, “op”]
- [“stop”]
- [“st”, “opera”]
- [“sto”, “pper”]
- [“las”, “topper”]
- [“s”, “to”, “pped”]
Notez qu'une correspondance ne sera déclenchée que si la chaîne d'arrêt se trouve à la fin de la séquence générée. En d'autres termes, ces séquences ne déclencheront pas de correspondance :
- [“stop”, “at”]
- [“st”, “op”, “at”]
- [“st”, “opera”, “tion”]
La raison pour laquelle il n’y a pas de correspondance est que la chaîne d’arrêt ne chevauche pas le jeton final. Si vous pouvez supprimer un ou plusieurs jetons de la fin de la séquence sans détruire la chaîne d’arrêt, alors ce critère ne correspondra pas à cette chaîne d’arrêt. C’est voulu ; car cette vérification est exécutée après la génération de chaque jeton, nous ne pouvons pas manquer une chaîne d’arrêt valide si elle est générée, mais nous ne voulons pas arrêter la génération simplement parce que la chaîne d’arrêt existe quelque part dans les input_ids passés.
Comment la correspondance est-elle réellement effectuée ? Nous le faisons d’une manière assez déroutante, car nous voulons que l’ensemble du processus de correspondance soit compilable avec Torch ou XLA, ce qui signifie que nous ne pouvons pas utiliser les méthodes de chaînes de caractères standard. Cependant, il est possible, avec un peu de travail, d’effectuer la correspondance de chaînes de caractères avec des opérations de tenseurs pures. Nous commencerons par décrire l’algorithme que nous utilisons avec des opérations de chaînes de caractères standard, puis nous expliquerons à la fin comment cela est converti en opérations de tenseurs pures.
La clé de l'algorithme repose sur une observation : comme la chaîne d'arrêt doit chevaucher la fin de la séquence de jetons, nous pouvons commencer par la fin de la séquence et travailler à rebours. Plus précisément, nous vérifions qu'il existe un chevauchement entre le début du dernier jeton et la fin de stop_string, ou, pour le dire autrement, stop_string[-i:] == token[:i] pour un certain i > 0. Si vous examinez les exemples positifs ci-dessus, vous verrez que le dernier jeton dans chacun d'entre eux satisfait cette propriété :
- [“st”, “op”] (le chevauchement est “op”, longueur du chevauchement == 2)
- [“stop”] (le chevauchement est “stop”, longueur du chevauchement == 4)
- [“st”, “opera”] (la superposition est “op”, longueur de superposition == 2)
- [“sto”, “pper”] (la superposition est “p”, longueur de superposition == 1)
- [“las”, “topper”] (le chevauchement est “top”, longueur du chevauchement == 3)
- [“s”, “to”, “pped”] (chevauchement « p », longueur du chevauchement == 1)
Il est impossible de construire une séquence correspondante qui ne possède pas cette propriété (n’hésitez pas à le vérifier vous-même). Toutefois, bien que ce chevauchement entre le début du jeton final et la fin de la chaîne d’arrêt soit nécessaire pour une correspondance, il n’est pas suffisant. Il faut également vérifier que le reste de la séquence de jetons est cohérent avec la chaîne d’arrêt.
Comment faire ? Prenons [“s”, “to”, “pped”] comme exemple. Nous savons que le jeton final, “pped”, présente un chevauchement de 1 avec la chaîne d’arrêt, “stop”. Nous revenons alors au jeton précédent, “to”. Comme nous avons déjà fait correspondre 1 caractère de la chaîne d’arrêt, le reste à vérifier est “sto”. Nous vérifions que le jeton suivant “to” correspond à la fin du reste, ce qui est le cas. Nous avons maintenant fait correspondre 3 caractères de la chaîne d’arrêt, et le reste à faire correspondre est “s”. Nous revenons encore au jeton précédent, qui est également “s”. C’est une correspondance, et nous avons donc fait correspondre l’intégralité de la chaîne d’arrêt.
Comment cela fonctionne-t-il lorsque les jetons débordent du début de la chaîne d’arrêt ? Prenons l’exemple de [“las”, “topper”]. Le dernier jeton, “topper”, présente un chevauchement de 3 avec la chaîne d’arrêt, “stop”. Par conséquent, la partie restante de la chaîne d’arrêt à faire correspondre est “s”. On revient au jeton précédent, “las”. Comme la partie restante à faire correspondre est simplement “s”, de longueur 1, on ne considère que le dernier caractère du jeton, soit “s”. Cela correspond à la chaîne d’arrêt, et la chaîne entière est donc reconnue.
Comment calculer ces correspondances avec des opérations sur les tenseurs ? Simplement : nous précalculons efficacement les informations nécessaires pour tous les jetons ! Pour chaque jeton, nous calculons :
- Sa superposition avec la fin de la chaîne d'arrêt, le cas échéant
- Les positions dans la chaîne d'arrêt où le jeton correspond, y compris les correspondances qui débordent du début.
- La longueur totale du jeton
Par exemple, pour le jeton « pped », nous calculerions un chevauchement de fin de 1, aucune position de correspondance interne, et une longueur de 4. Pour le jeton « to », nous calculerions aucun chevauchement de fin, une seule position de correspondance interne de 1 (en comptant à partir de la fin), et une longueur de 2. Pour le jeton « s », nous calculerions aucun chevauchement de fin, une seule position de correspondance interne de 3 (encore une fois en comptant à partir de la fin) et une longueur de 1.
Tant que nous disposons de ces informations, nous pouvons exécuter l'algorithme ci-dessus sans aucune opération de comparaison de chaînes. Nous effectuons simplement les étapes suivantes :
- Vérifier si le jeton final présente une superposition de fin avec la chaîne de début
- Continuez en arrière, en gardant la trace de la partie de la chaîne d’arrêt déjà correspondante
- À chaque point, vérifiez si le jeton suivant a la position actuelle comme l'une de ses positions valides
- Continuez jusqu'à ce qu'une correspondance échoue ou que la chaîne d'arrêt complète soit entièrement correspondante
Encore une fois, prenons [“s”, “to”, “pped”] comme exemple. « pped » présente un chevauchement de fin de 1, nous pouvons donc commencer une correspondance. Nous avons déjà fait correspondre 1 caractère, nous vérifions donc que le jeton suivant, « to », a 1 comme position valide (encore une fois, en comptant à partir de la fin). C’est le cas, nous ajoutons donc la longueur de « to » à notre suivi de position. Nous avons maintenant fait correspondre 3 caractères, nous vérifions donc que le jeton suivant, « s », a 3 comme position valide. C’est le cas, nous ajoutons donc sa longueur au suivi de position. Le suivi de position est maintenant 4, ce qui est la longueur de la chaîne d’arrêt. Nous avons fait correspondre la chaîne d’arrêt entière.
Dans le second cas, [“las”, “topper”], “topper” présente une superposition de fin de 3, nous pouvons donc commencer une correspondance. Nous avons déjà fait correspondre 3 caractères, nous vérifions donc que le jeton suivant “las” a 3 comme position valide. C’est le cas, car nous autorisons les jetons à correspondre à des positions qui débordent du début de la chaîne d’arrêt. Nous ajoutons sa longueur au suivi de position. Le suivi de position est maintenant 6, ce qui est supérieur à la longueur de la chaîne d’arrêt ! Ne paniquez pas, cependant - cela compte également comme une correspondance de la chaîne d’arrêt. Nous avons fait correspondre l’intégralité de la chaîne d’arrêt.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2")
>>> inputs = tokenizer("The biggest states in the USA by land area:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas
- California
>>> # Passing one or more stop strings will halt generation after those strings are emitted
>>> # Note that generating with stop strings requires you to pass the tokenizer too
>>> gen_out = model.generate(**inputs, stop_strings=["Texas"], tokenizer=tokenizer)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d'entrée dans le vocabulaire.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- scores (
tuple(torch.Tensor)) — Scores de prédiction d’une tête de modélisation de langage, sous forme de tuple contenant un tenseur par étape de génération, chacun de forme(batch_size, config.vocab_size). Il peut s’agir des scores pour chaque jeton du vocabulaire avant SoftMax ou des scores pour chaque jeton du vocabulaire après SoftMax. Si ce critère d’arrêt dépend de l’entréescores, assurez-vous de passerreturn_dict_in_generate=True, output_scores=Trueàgenerate, sinonNoneest passé. - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires spécifiques aux critères d'arrêt.
Retourne
torch.BoolTensor. (torch.BoolTensor de forme (batch_size, 1))
True indique que nous arrêtons la génération pour une ligne particulière.
False indique que nous devons continuer.
classe transformers.EosTokenCriteria
< source >( eos_token_id: typing.Union[int, list[int], torch.Tensor] )
Cette classe peut être utilisée pour arrêter la génération dès que le jeton « fin de séquence » est généré.
Par défaut, elle utilise model.generation_config.eos_token_id.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | Nonenew_token_length: int = 1**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Paramètres
- input_ids (
torch.LongTensorde forme(batch_size, sequence_length)) — Indices des jetons de la séquence d'entrée dans le vocabulaire.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- scores (
tuple(torch.Tensor)) — Scores de prédiction d’une tête de modélisation de langage, sous forme de tuple contenant un tenseur par étape de génération, chacun de forme(batch_size, config.vocab_size). Il peut s’agir des scores de chaque jeton du vocabulaire avant SoftMax ou après SoftMax. Si ce critère d’arrêt dépend de l’entréescores, assurez-vous de passerreturn_dict_in_generate=True, output_scores=Trueàgenerate, sinonNoneest transmis. - new_token_length (
int, facultatif, par défaut1) — Le nombre de jetons qui seront vérifiés par rapport aux critères. Lesnew_token_lengthderniers jetons de chaque élément du lot seront vérifiés. - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires spécifiques aux critères d'arrêt.
Retourne
torch.BoolTensor. (torch.BoolTensor de forme (batch_size, 1))
True indique que nous arrêtons la génération pour une ligne particulière.
False indique que nous devons continuer.
Streamers
classe transformers.TextStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = False**decode_kwargs: Any )
Paramètres
- tokenizer (
AutoTokenizer) — Le tokenizer utilisé pour décoder les jetons. - skip_prompt (
bool, facultatif, par défautFalse) — Indique s'il faut ignorer le prompt transmis à.generate(). Utile, par exemple, pour les chatbots. - decode_kwargs (
dict, facultatif) — Arguments supplémentaires à passer à la méthodedecodedu tokenizer.
Simple flux de texte qui affiche les jetons sur la sortie standard dès que des mots entiers sont formés.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> streamer = TextStreamer(tok)
>>> # Despite returning the usual output, the streamer will also print the generated text to stdout.
>>> _ = model.generate(**inputs, streamer=streamer, max_new_tokens=20)
An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,Vide le cache restant et affiche un retour à la ligne sur la sortie standard.
Affiche le nouveau texte sur la sortie standard. Si le flux est en cours de terminaison, affiche également un retour à la ligne.
Reçoit des jetons, les décode et les affiche sur la sortie standard dès qu'ils forment des mots entiers.
classe transformers.TextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
Paramètres
- tokenizer (
AutoTokenizer) — Le tokenizer utilisé pour décoder les jetons. - skip_prompt (
bool, facultatif, par défautFalse) — Indique s'il faut ignorer le prompt transmis à.generate(). Utile, par exemple, pour les chatbots. - timeout (
float, facultatif) — Délai d’attente pour la file de texte. SiNone, la file bloquera indéfiniment. Utile pour gérer les exceptions dans.generate(), lorsqu’il est appelé dans un thread séparé. - decode_kwargs (
dict, facultatif) — Arguments supplémentaires à passer à la méthodedecodedu tokenizer.
Streamer qui stocke le texte prêt à l’impression dans une file d’attente, à utiliser par une application en aval comme un itérateur. Cela est utile pour les applications qui tirent parti de l’accès au texte généré de manière non bloquante (par exemple dans une démo interactive Gradio).
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
>>> from threading import Thread
>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> streamer = TextIteratorStreamer(tok)
>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
>>> thread = Thread(target=model.generate, kwargs=generation_kwargs)
>>> thread.start()
>>> generated_text = ""
>>> for new_text in streamer:
... generated_text += new_text
>>> generated_text
'An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,'Mettez le nouveau texte dans la file d’attente. Si le flux est en cours de terminaison, mettez également un signal d’arrêt dans la file d’attente.
classe transformers.AsyncTextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
Paramètres
- tokenizer (
AutoTokenizer) — Le tokenizer utilisé pour décoder les jetons. - skip_prompt (
bool, facultatif, par défautFalse) — Indique s'il faut ignorer le prompt transmis à.generate(). Utile, par exemple, pour les chatbots. - timeout (
float, facultatif) — Délai d’attente pour la file de texte. SiNone, la file bloquera indéfiniment. Utile pour gérer les exceptions dans.generate(), lorsqu’il est appelé dans un thread séparé. - decode_kwargs (
dict, facultatif) — Arguments supplémentaires à passer à la méthodedecodedu tokenizer.
Lève
TimeoutError
TimeoutError— Si le temps de génération des jetons dépasse la valeur de délai d’attente.
Streamer qui stocke le texte prêt à l’impression dans une file d’attente, à utiliser par une application en aval comme itérateur asynchrone. Cela est utile pour les applications qui tirent parti de l’accès asynchrone au texte généré (par exemple dans une démo interactive Gradio).
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, AsyncTextIteratorStreamer
>>> from threading import Thread
>>> import asyncio
>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> async def main():
... # Important: AsyncTextIteratorStreamer must be initialized inside a coroutine!
... streamer = AsyncTextIteratorStreamer(tok)
... generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
... thread = Thread(target=model.generate, kwargs=generation_kwargs)
... thread.start()
... generated_text = ""
... async for new_text in streamer:
... generated_text += new_text
>>> print(generated_text)
>>> asyncio.run(main())
An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,Mettez le nouveau texte dans la file d’attente. Si le flux est en cours de terminaison, mettez également un signal d’arrêt dans la file d’attente.
classe transformers.TextDiffusionStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsesleep_time: float | None = None**decode_kwargs: Any )
Paramètres
- tokenizer (
AutoTokenizer) — Le tokenizer utilisé pour décoder les jetons. - skip_prompt (
bool, facultatif, par défautFalse) — Indique s'il faut ignorer le prompt transmis à.generate(). Utile, par exemple, pour les chatbots. - sleep_time (
float, facultatif) — Durée de pause entre les brouillons de diffusion, ce qui peut être utile pour visualiser les intermédiaires. - decode_kwargs (
dict, facultatif) — Arguments supplémentaires à passer à la méthodedecodedu tokenizer.
Streamer qui affiche les sorties de diffusion de texte. Les étapes intermédiaires de diffusion (brouillons) sont temporaires et remplacées par les brouillons suivants, puis supprimées lorsque le texte confirmé est affiché.
Si vous travaillez dans un environnement tel que tmux, le texte de brouillon peut ne pas parvenir à s’écraser lui-même.
Exemples :
>>> from transformers import DiffusionGemmaForBlockDiffusion, AutoProcessor, TextDiffusionStreamer
>>> model = DiffusionGemmaForBlockDiffusion.from_pretrained(
... "google/diffusiongemma-26B-A4B-it", device_map="auto",
... )
>>> processor = AutoProcessor.from_pretrained("google/diffusiongemma-26B-A4B-it")
>>> chat = [{"role": "user", "content": "Why is the sky blue?"},]
>>> input_ids = processor.apply_chat_template(
... chat, tokenize=True, return_tensors="pt", add_generation_prompt=True
... )
>>> streamer = TextDiffusionStreamer(tokenizer=processor.tokenizer)
>>> model.generate(input_ids.to(model.device), max_new_tokens=512, streamer=streamer)Vide le cache restant et affiche un retour à la ligne.
Reçoit les jetons confirmés, efface le brouillon et les imprime de manière permanente.
Reçoit la séquence complète des jetons de brouillon, les décode et les affiche en jaune. Écrase le brouillon précédent.
Caches
Base, classe abstraite pour le cache d'une couche unique.
Retourne la longueur de séquence maximale que la couche peut contenir. Une valeur de -1 signifie qu'il n'y a pas de maximum, ou que le maximum est indéfini, par exemple pour une couche d'attention dynamique qui croît indéfiniment ou une couche d'attention linéaire qui n'a pas de dimension de longueur de séquence.
Réinitialise les valeurs du cache tout en conservant les objets
Réordonne le cache de cette couche pour la recherche par faisceau.
Une couche de cache qui croît dynamiquement à mesure que de nouveaux jetons sont générés. C'est le comportement par défaut pour les modèles génératifs.
Elle stocke les états clé et valeur sous forme de tenseurs de forme [batch_size, num_heads, seq_len, head_dim].
update
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.
Supprimez les jetons tokens_to_remove de la couche de cache actuelle.
Répétez le cache repeats fois dans la dimension du lot.
Conservez uniquement les indices dans la dimension du lot de la cache.
classe transformers.StaticLayer
< source >( max_cache_len: int**kwargs )
Une couche de cache statique qui stocke les états des clés et des valeurs sous forme de tenseurs statiques de forme [batch_size, num_heads, max_cache_len, head_dim].
Elle alloue paresseusement ses tenseurs de support complets, puis les modifie en place. Conçue pour la prise en charge de torch.compile.
update
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.
Initialisation paresseuse des tenseurs de clés et de valeurs. Cela permet d’obtenir toutes les propriétés (dtype, device, num_heads en cas de TP, etc.) directement à l’exécution, ce qui est extrêmement pratique car cela évite de déplacer les devices, les dtypes, etc. plus tard pour chaque update (ce qui pourrait également casser les adresses dynamo statiques).
Si ce comportement est indésirable, il est possible d’appeler early_initialization(...) directement sur le Cache, ce qui invoquera cette fonction à l’avance (c’est par exemple requis pour torch.export). C’est également nécessaire lorsque le prefill lui-même se retrouve dans une région compilée (par exemple avec un prefill par morceaux).
classe transformers.StaticSlidingWindowLayer
< source >( max_cache_len: intsliding_window: int**kwargs )
Une couche de cache statique qui stocke les états des clés et des valeurs sous forme de tenseurs statiques de forme [batch_size, num_heads, min(max_cache_len, sliding_window), head_dim]. Elle alloue paresseusement ses tenseurs de support complets, puis les modifie en place. Conçue pour la prise en charge de torch.compile.
update
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.
Initialisation paresseuse des tenseurs de clés et de valeurs. Cela permet d’obtenir toutes les propriétés (dtype, device, num_heads en cas de TP, etc.) directement à l’exécution, ce qui est extrêmement pratique car cela évite de déplacer les devices, les dtypes, etc. plus tard pour chaque update (ce qui pourrait également casser les adresses dynamo statiques).
Si ce comportement est indésirable, il est possible d’appeler early_initialization(...) directement sur le Cache, ce qui invoquera cette fonction à l’avance (c’est par exemple requis pour torch.export). C’est également nécessaire lorsque le prefill lui-même se retrouve dans une région compilée (par exemple avec un prefill par morceaux).
classe transformers.QuantoQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
update
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.
classe transformers.HQQQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
update
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.
Une couche quantifiée qui stocke les états de clé et de valeur en virgule flottante 8 bits. L'échelle par tenseur est figée après la première update, de sorte que les nouveaux états sont ajoutés tels quels : pas de cache résiduel, pas de re-quantification.
Une variante à granularité plus fine relève ici plutôt que sous QuantizedLayer, car le regroupement le long de la dimension des têtes conserve les états concaténables et ne transforme l'échelle stockée qu'en tenseur.
update
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.
classe transformers.Cache
< source >( layers: list[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin | transformers.cache_utils.DummyLayer] | None = Nonelayer_class_to_replicate: type[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin] | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = True )
Paramètres
- layers (
Optional, facultatif) — Une liste deCacheLayerMixinouLinearAttentionCacheLayerMixinprécréés. Si omis (None),layer_class_to_replicatesera utilisé. - layer_class_to_replicate (
type[CacheLayerMixin | LinearAttentionCacheLayerMixin], facultatif) — Utilisé uniquement silayersest omis (None), auquel cas il servira de classe de base pour chaque couche, et les couches seront ajoutées de manière paresseuse dès queupdateest appelé avec unlayer_idxsupérieur à la liste actuelle des couches. - offloading (
bool, facultatif, par défautFalse) — Indique s'il faut effectuer le déchargement des couches vers lecpuafin d'économiser la mémoire GPU. - offload_only_non_sliding (
bool, facultatif, valeur par défautTrue) — SioffloadingestTrue, ce paramètre détermine si seules les couches non glissantes seront déchargées (car les couches glissantes sont généralement de petite taille, il n'est donc pas nécessaire de les décharger, et les ignorer est plus rapide).
Un Cache est essentiellement une liste d'objets CacheLayerMixin, un par couche du modèle. Il sert de conteneur pour le Cache de chaque couche.
update
< source >( key_states: Tensorvalue_states: Tensorlayer_idx: int*args**kwargs )
Met à jour le cache avec les nouvelles key_states et value_states pour la couche layer_idx.
early_initialization
< source >( batch_size: intnum_heads: int | list[int]head_dim: int | list[int]dtype: dtypedevice: device )
Initialiser toutes les couches à l’avance (sinon, elles sont initialisées paresseusement lors du premier appel à update).
Cela est utile pour nos recettes export, car export a besoin de tout à l’avance.
Retourne la longueur de la séquence du cache pour la couche donnée.
Retourne un tuple (kv_length, kv_offset) correspondant à la longueur et au décalage qui seront retournés pour la couche donnée à layer_idx.
Les masques sont ensuite préparés en fonction des longueurs (kv_length, kv_offset) et des motifs donnés pour chaque couche.
Retourne la longueur maximale du cache. Si layer_idx n'est pas fourni (par défaut), cela retourne la valeur maximale
sur l'ensemble des couches. Sinon, retourne la valeur maximale prise en charge pour la couche donnée.
Une valeur de -1 signifie qu'il n'y a pas de maximum, ou que le maximum est indéfini, par exemple pour les couches d'attention dynamique qui peuvent croître indéfiniment,
ou pour les couches d'attention linéaire qui ne possèdent pas de dimension de longueur de séquence.
Réinitialiser récursivement les tenseurs de toutes les couches
Réorganiser le cache pour la recherche par faisceau
Supprime les jetons tokens_to_remove du Cache actuel. Pour les couches qui n’ont pas besoin de conserver tous les états passés en mémoire, telles que les couches à fenêtre glissante ou les couches d’attention linéaire, cela restreint également la taille des états mis en cache à leur taille de travail minimale. Cela signifie que crop(0) ne sera pas nécessairement toujours une opération nulle, car il peut toujours supprimer des états inutiles (c’est-à-dire des états non nécessaires pour le prochain forward) du Cache.
Répéter et entrelacer le cache
Sélectionner des indices depuis le cache
classe transformers.DynamicCache
< source >( ddp_cache_data: collections.abc.Iterable[tuple[typing.Optional[torch.Tensor], ...]] | None = Noneconfig: transformers.configuration_utils.PreTrainedConfig | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = False )
Paramètres
- ddp_cache_data (
Iterable[tuple[torch.Tensor, torch.Tensor]], facultatif) — Il a été ajouté à l’origine pour assurer la compatibilité avectorch.distributed(DDP). En résumé, il s’agit demap(gather_map, zip(*caches)), c’est-à-dire que chaque élément de l’itérable contient les états clé et valeur d’une couche, agrégés sur les répliques par torch.distributed (shape=[global batch size, num_heads, seq_len, head_dim]). Remarque : il doit également être le 1er argument pour fonctionner correctement - config (
PreTrainedConfig, facultatif) — La configuration du modèle pour lequel ce Cache sera utilisé. Si elle est fournie, elle servira à vérifier la présence d’une structure de couches glissantes ou hybrides, réduisant ainsi considérablement l’exigence mémoire des tenseurs mis en cache à[batch_size, num_heads, min(seq_len, sliding_window), head_dim]. - offloading (
bool, facultatif, par défautFalse) — Indique s'il faut effectuer le déchargement des couches vers lecpuafin d'économiser la mémoire GPU. - offload_only_non_sliding (
bool, facultatif, valeur par défautFalse) — SioffloadingestTrue, ce paramètre détermine si seules les couches non glissantes seront déchargées (car les couches glissantes sont généralement de petite taille, il n'est donc pas nécessaire de les décharger, et les ignorer est plus rapide).
Un cache qui croît dynamiquement à mesure que de nouveaux jetons sont générés. C'est le comportement par défaut pour les modèles génératifs.
Il stocke les états clé et valeur sous forme d'une liste de CacheLayer, un par couche. La forme attendue pour chaque tenseur
dans les CacheLayer est [batch_size, num_heads, seq_len, head_dim].
Si une configuration est transmise, il vérifie en outre la présence d'une structure de cache glissante ou hybride, réduisant ainsi considérablement
l'exigence mémoire des tenseurs mis en cache à [batch_size, num_heads, min(seq_len, sliding_window), head_dim].
Voir Cache pour les détails sur les méthodes communes implémentées par toutes les classes de cache.
Exemple :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, DynamicCache
>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
>>> inputs = tokenizer(text="My name is Qwen2", return_tensors="pt")
>>> # Prepare a cache class and pass it to model's forward
>>> past_key_values = DynamicCache(config=model.config)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generationclasse transformers.StaticCache
< source >( config: PreTrainedConfigmax_cache_len: intoffloading: bool = Falseoffload_only_non_sliding: bool = True**kwargs )
Paramètres
- config (
PreTrainedConfig) — La configuration du modèle pour lequel ce Cache sera utilisé. Elle servira à vérifier la structure des couches glissantes ou hybrides et à initialiser chaque couche en conséquence. - max_cache_len (
int) — Nombre maximal de jetons que ce Cache doit contenir. - offloading (
bool, facultatif, par défautFalse) — Indique s'il faut effectuer le déchargement des couches vers lecpuafin d'économiser la mémoire GPU. - offload_only_non_sliding (
bool, facultatif, valeur par défautTrue) — SioffloadingestTrue, ce paramètre détermine si seules les couches non glissantes seront déchargées (car les couches glissantes sont généralement de petite taille, il n'est donc pas nécessaire de les décharger, et les ignorer est plus rapide).
Classe de cache statique à utiliser avec torch.compile(model) et torch.export(). Elle vérifie la config pour une éventuelle structure de cache hybride et initialise chaque couche en conséquence.
Voir Cache pour les détails sur les méthodes communes implémentées par toutes les classes de cache.
Exemple :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, StaticCache
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
>>> inputs = tokenizer(text="My name is Llama", return_tensors="pt")
>>> # Prepare a cache class and pass it to model's forward
>>> # Leave empty space for 10 new tokens, which can be used when calling forward iteratively 10 times to generate
>>> max_generated_length = inputs.input_ids.shape[1] + 10
>>> past_key_values = StaticCache(config=model.config, max_cache_len=max_generated_length)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
StaticCache()classe transformers.QuantizedCache
< source >( backend: strconfig: PreTrainedConfignbits: int | None = Noneaxis_key: int | None = Noneaxis_value: int | None = Noneq_group_size: int | None = Noneresidual_length: int | None = None )
Paramètres
- backend (
str) — Le backend de quantification à utiliser. L'un des("quanto", "hqq", "fp8"). - config (
PreTrainedConfig) — La configuration du modèle pour lequel ce Cache sera utilisé. - nbits (
int, facultatif, valeur par défaut 4) — Le nombre de bits pour la quantification. - axis_key (
int, facultatif, par défaut 0) — L'axe sur lequel quantiser les clés. - axis_value (
int, facultatif, valeur par défaut 0) — L'axe sur lequel quantiser les valeurs. - q_group_size (
int, facultatif, valeur par défaut 64) — La quantification est effectuée par canal selon unq_group_sizedéfini pour les clés et les valeurs. - residual_length (
int, facultatif, valeur par défaut 128) — Capacité maximale du cache de précision d'origine.
Un cache de quantificateur similaire à celui décrit dans l’article KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache.
Il permet au modèle de générer des séquences plus longues sans allouer trop de mémoire pour les clés et les valeurs
en appliquant la quantification.
Le cache dispose de deux types de stockage, l’un pour la précision d’origine et l’autre pour le
cache quantifié. Une residual length est définie comme capacité maximale pour le cache de précision d’origine. Lorsque la
longueur dépasse la capacité maximale, le cache de précision d’origine est supprimé et transféré dans le cache quantifié.
La quantification est effectuée par canal avec un q_group_size défini pour les clés et les valeurs, contrairement à ce qui
était décrit dans l’article.
Voir Cache pour les détails sur les méthodes communes implémentées par toutes les classes de cache.
Les cinq derniers arguments configurent les backends entiers par groupe. Le backend fp8 quantise par tenseur et les rejette.
classe transformers.EncoderDecoderCache
< source >( *caches )
Paramètres
- caches (
Iterable) — Généralement un itérable de longueur 2, contenant 2 objetsCache, le premier pour l'auto-attention, le second pour l'attention croisée. Peut également être, en option, un itérable de longueur 1, contenant untuple[tuple[torch.Tensor]](utilisé généralement pour la compatibilité avec torch dp et ddp).
Base, classe abstraite pour tous les caches encodeur-décodeur. Peut être utilisée pour contenir des combinaisons de caches d'auto-attention et d'attention croisée.
Voir Cache pour les détails sur les méthodes communes implémentées par toutes les classes de cache.
Exemple :
>>> from transformers import AutoProcessor, AutoModelForCausalLM, DynamicCache, EncoderDecoderCache
>>> model = AutoModelForCausalLM.from_pretrained("openai/whisper-small")
>>> processor = AutoProcessor.from_pretrained("openai/whisper-small")
>>> inputs = processor(audio=YOUR-AUDIO, return_tensors="pt")
>>> # Prepare cache classes for encoder and decoder and pass it to model's forward
>>> self_attention_cache = DynamicCache(config=self.config)
>>> cross_attention_cache = DynamicCache(config=self.config)
>>> past_key_values = EncoderDecoderCache(self_attention_cache, cross_attention_cache)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
EncoderDecoderCache()Répétez le cache repeats fois dans la dimension du lot. Utilisé dans la recherche contrastive (sur le Hub).
Conserve uniquement les indices dans la dimension du lot de la cache. Utilisé dans la recherche contrastive (sur le Hub).
Supprimez les jetons tokens_to_remove de la couche de cache actuelle.
Retourne la longueur de séquence maximale (c.-à-d. la capacité maximale) de l'objet de cache
Retourne la longueur de séquence des états mis en cache. Un index de couche peut être transmis en option.
Réordonne le cache pour la recherche par faisceau, étant donné les indices de faisceaux sélectionnés.
Utils de filigrane
classe transformers.WatermarkingConfig
< source >( greenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
Classe qui contient les arguments pour la génération de filigrane et qui doit être transmise à GenerationConfig lors de generate.
Voir cet article pour plus de détails sur les arguments.
Accepte les clés suivantes :
- greenlist_ratio (
float) : Utilisé pour le marquage. Le ratio de jetons « verts » utilisés par rapport à la taille du vocabulaire. Valeur par défaut : 0.25. - bias (
float) : Utilisé avec le marquage filigrane. Le biais ajouté aux logits des jetons « verts » sélectionnés. Valeur par défaut : 2.0. - hashing_key (
int) : Clé de hachage utilisée pour le marquage. Valeur par défaut : 15485863 (le millionième nombre premier). - seeding_scheme (
str): Algorithme à utiliser pour le marquage. Valeurs acceptées :- « lefthash » (par défaut) : la sélection des jetons « green » dépend du dernier jeton (algorithme 2 de l'article)
- “selfhash” : la sélection des jetons “green” dépend du jeton courant lui-même (algorithme 3 de l’article) L’inconvénient de ce schéma est qu’il prend en compte tous les jetons suivants possibles et peut être plus lent que “lefthash”.
- context_width(
int): La longueur de contexte des jetons précédents à utiliser pour l’initialisation. Une longueur de contexte plus élevée rend le marquage filigrane plus robuste.
classe transformers.WatermarkDetector
< source >( model_config: PreTrainedConfigdevice: strwatermarking_config: typing.Union[ForwardRef('WatermarkingConfig'), dict]ignore_repeated_ngrams: bool = Falsemax_cache_size: int = 128 )
Paramètres
- model_config (
PreTrainedConfig) — La configuration du modèle qui sera utilisée pour obtenir les arguments spécifiques au modèle utilisés lors de la génération. - device (
str) — L’appareil utilisé lors de la génération de texte filigrané. - watermarking_config (Union[
WatermarkingConfig,Dict]) — La configuration et les arguments de filigrane exacts utilisés lors de la génération du texte. - ignore_repeated_ngrams (
bool, facultatif, valeur par défautFalse) — Indique s'il faut compter chaque ngramme unique une seule fois ou non. - max_cache_size (
int, facultatif, valeur par défaut 128) — Taille maximale utilisée pour la mise en cache LRU des algorithmes de semis/échantillonnage appelés pour chaque jeton.
Détecteur pour la détection de texte généré avec un filigrane. Le détecteur doit recevoir exactement les mêmes paramètres que ceux utilisés lors de la génération du texte afin de reproduire la génération de la liste verte du filigrane et ainsi détecter le filigrane. Cela inclut le bon appareil utilisé lors de la génération du texte, les bons arguments de filigrane et la bonne taille de vocabulaire du tokenizer. Le code est basé sur le dépôt original.
Voir l'article pour plus d'informations.
Exemples :
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkDetector, WatermarkingConfig
>>> model_id = "openai-community/gpt2"
>>> model = AutoModelForCausalLM.from_pretrained(model_id)
>>> tok = AutoTokenizer.from_pretrained(model_id)
>>> tok.pad_token_id = tok.eos_token_id
>>> tok.padding_side = "left"
>>> inputs = tok(["This is the beginning of a long story", "Alice and Bob are"], padding=True, return_tensors="pt")
>>> input_len = inputs["input_ids"].shape[-1]
>>> # first generate text with watermark and without
>>> watermarking_config = WatermarkingConfig(bias=2.5, seeding_scheme="selfhash")
>>> out_watermarked = model.generate(**inputs, watermarking_config=watermarking_config, do_sample=False, max_length=20)
>>> out = model.generate(**inputs, do_sample=False, max_length=20)
>>> # now we can instantiate the detector and check the generated text
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config)
>>> detection_out_watermarked = detector(out_watermarked, return_dict=True)
>>> detection_out = detector(out, return_dict=True)
>>> detection_out_watermarked.prediction
array([ True, True])
>>> detection_out.prediction
array([False, False])__call__
< source >( input_ids: LongTensorz_threshold: float = 3.0return_dict: bool = False ) → WatermarkDetectorOutput or np.ndarray
Paramètres
- input_ids (
torch.LongTensor) — Le texte généré avec filigrane. Il est conseillé de retirer le prompt, car il peut affecter la détection. - z_threshold (
Dict, facultatif, valeur par défaut3.0) — La modification de ce seuil modifie la sensibilité du détecteur. Un seuil z plus élevé réduit la sensibilité, et inversement pour un seuil z plus bas. - return_dict (
bool, facultatif, par défautFalse) — Indique s'il faut retourner~generation.WatermarkDetectorOutputou non. Sinon, des prédictions booléennes sont retournées,
Retourne
WatermarkDetectorOutput ou np.ndarray
Un WatermarkDetectorOutput
si return_dict=True, sinon un np.ndarray.
ma
classe transformers.BayesianDetectorConfig
< source >( watermarking_depth: int | None = Nonebase_rate: float = 0.5**kwargs )
Ceci est la classe de configuration destinée à stocker la configuration d'un BayesianDetectorModel. Elle est utilisée pour instancier un modèle Bayesian Detector selon les arguments spécifiés.
Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.
classe transformers.BayesianDetectorModel
< source >( config )
Paramètres
- config (BayesianDetectorConfig) — Classe de configuration du modèle contenant tous les paramètres du modèle. L’initialisation à partir d’un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode from_pretrained() pour charger les poids du modèle.
Classifieur bayésien pour la détection de filigrane.
Ce détecteur utilise la règle de Bayes pour calculer un score de filigrane, qui est le sigmoïde du logarithme du rapport des probabilités a posteriori P(watermarked|g_values) et P(unwatermarked|g_values). Veuillez consulter la section sur BayesianScore dans l’article pour plus de détails. URL de l’article : https://www.nature.com/articles/s41586-024-08025-4
Notez que ce détecteur ne fonctionne qu’avec le filigrane non déformant basé sur des tournois utilisant la distribution de valeurs g de Bernoulli(0.5).
Ce modèle hérite de PreTrainedModel. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, la taille des têtes, etc.)
Ce modèle est également une sous-classe de torch.nn.Module de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l'utilisation et le comportement généraux.
forward
< source >( g_values: Tensormask: Tensorlabels: typing.Optional[torch.Tensor] = Noneloss_batch_weight = 1return_dict = False )
Calcule la postérieure avec filigrane P(watermarked|g_values).
classe transformers.SynthIDTextWatermarkingConfig
< source >( ngram_len: intkeys: listcontext_history_size: int = 1024sampling_table_seed: int = 0sampling_table_size: int = 65536skip_first_ngram_calls: bool = Falsedebug_mode: bool = False )
Paramètres
- ngram_len (
int) — Longueur du n-gramme. - keys (
list[int]) — Une séquence de clés de filigrane, une pour chaque profondeur. - context_history_size (
int, facultatif, valeur par défaut 1024) — Taille du tenseur utilisé pour suivre les contextes déjà vus. - sampling_table_seed (
int, facultatif, valeur par défaut 0) — Graine aléatoire pour générer le tableau d'échantillonnage. - sampling_table_size (
int, facultatif, par défaut 65536) — Taille du tableau d'échantillonnage. - skip_first_ngram_calls (
bool, facultatif, valeur par défautFalse) — Indique s'il faut ignorer les premiers appels ngram. - debug_mode (
bool, facultatif, par défautFalse) — Les logits sont modifiés pour devenir uniformes avant que la modification de filigrane ne soit appliquée. Cela sert à tester l’implémentation.
Classe qui contient les arguments pour la génération de filigrane et qui doit être transmise à GenerationConfig lors de generate.
Voir cet article pour plus de détails sur les arguments.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')
>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
... keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
... ngram_len=5,
... )
>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
... **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)classe transformers.SynthIDTextWatermarkDetector
< source >( detector_module: BayesianDetectorModellogits_processor: SynthIDTextWatermarkLogitsProcessortokenizer: Any )
Paramètres
- detector_module (BayesianDetectorModel) — Objet du module de détection bayésienne initialisé avec des paramètres. Consultez https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text pour l’utilisation.
- logits_processor (
SynthIDTextWatermarkLogitsProcessor) — Le processeur de logits utilisé pour le filigrane. - tokenizer (
Any) — Le tokenizer utilisé pour le modèle.
Classe de détecteur de filigrane de texte SynthID.
Cette classe doit être initialisée avec le module de détecteur bayésien entraîné. Consultez le script de vérification dans examples/synthid_text/detector_training.py pour un exemple d’entraînement, de sauvegarde et de chargement de ce module de détecteur. Le dossier présente également un cas d’utilisation de ce détecteur.
Exemples :
>>> from transformers import (
... AutoTokenizer, BayesianDetectorModel, SynthIDTextWatermarkLogitsProcessor, SynthIDTextWatermarkDetector
... )
>>> # Load the detector. See https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text for training a detector.
>>> detector_model = BayesianDetectorModel.from_pretrained("joaogante/dummy_synthid_detector")
>>> logits_processor = SynthIDTextWatermarkLogitsProcessor(
... **detector_model.config.watermarking_config, device="cpu"
... )
>>> tokenizer = AutoTokenizer.from_pretrained(detector_model.config.model_name)
>>> detector = SynthIDTextWatermarkDetector(detector_model, logits_processor, tokenizer)
>>> # Test whether a certain string is watermarked
>>> test_input = tokenizer(["This is a test input"], return_tensors="pt")
>>> is_watermarked = detector(test_input.input_ids)Outils de compilation
classe transformers.CompileConfig
< source >( fullgraph: bool = Falsedynamic: bool | None = Nonebackend: str | collections.abc.Callable = 'inductor'mode: str = 'reduce-overhead'options: dict | None = None )
Paramètres
- fullgraph (
bool, facultatif, par défautFalse) — Si False (par défaut), tente de découvrir des régions compilables qui seront optimisées. Si True, exige que la fonction entière soit capturable dans un unique graphe. Si ce n’est pas possible (c’est-à-dire s’il y a des interruptions de graphe), une erreur est levée. - dynamic (
boolouNone, facultatif) — Indique s'il faut tenter d'utiliser des graphes de formes dynamiques. - backend (
strouCallable, facultatif, par défaut"inductor") — Backend à utiliser. - mode (
str, facultatif, par défaut"reduce-overhead") — Contrôle l'équilibre entre les performances et la surcharge. - options (
dict, facultatif) — Un dictionnaire d'options à passer au backend.
Classe qui contient les arguments relatifs au comportement de torch.compile, lors de l'utilisation de la compilation automatique dans generate.
Voir torch.compile pour plus de détails sur les arguments.
Exemples :
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, CompileConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b')
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b').cuda()
>>> # Automatic compile configuration, used with static cache
>>> compile_config = CompileConfig(dynamic=True)
>>> # Generation with static cache and compile config
>>> input = tokenizer.encode("Hello there, how", return_tensors="pt").cuda()
>>> output = model.generate(
... input, do_sample=False, max_new_tokens=300, cache_implementation="static", compile_config=compile_config
... )
>>> output_text = tokenizer.batch_decode(output, skip_special_tokens=True)[0]