Transformers documentation

Utilitaires pour la génération

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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ées
  • scores (facultatif) : les scores de prédiction de la tête de modélisation du langage, pour chaque étape de génération
  • hidden_states (facultatif) : les états cachés du modèle, pour chaque étape de génération
  • attentions (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

< >

( 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.LongTensor de 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 de eos_token_id.
  • scores (tuple(torch.Tensor) facultatif, renvoyé lorsque output_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 de torch.Tensor avec au plus max_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é lorsque output_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 de torch.Tensor avec au plus max_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é lorsque output_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size, num_heads, generated_length, sequence_length).
  • hidden_states (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size, generated_length, hidden_size).
  • past_key_values (Cache, facultatif, renvoyé lorsque use_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

< >

( 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.LongTensor de 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 de eos_token_id.
  • scores (tuple(torch.Tensor) facultatif, renvoyé lorsque output_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 de torch.Tensor avec au plus max_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é lorsque output_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 de torch.Tensor avec au plus max_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é lorsque output_attentions=True) — Tuplet de torch.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é lorsque output_hidden_states=True) — Tuplet de torch.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é lorsque output_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size, num_heads, generated_length, sequence_length).
  • cross_attentions (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size, num_heads, generated_length, sequence_length).
  • decoder_hidden_states (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size, generated_length, hidden_size).
  • past_key_values (Cache, facultatif, renvoyé lorsque use_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

< >

( 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.LongTensor de 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 de eos_token_id.
  • sequences_scores (torch.Tensor de forme (batch_size*num_return_sequences), facultatif, renvoyé lorsque output_scores=True) — Scores finaux des faisceaux des sequences générées.
  • scores (tuple(torch.Tensor) facultatif, renvoyé lorsque output_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 de torch.Tensor contenant au plus max_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é lorsque output_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 de torch.Tensor avec au plus max_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é lorsque output_scores=True) — Indices des faisceaux des identifiants de jetons générés à chaque étape de génération. torch.LongTensor de forme (batch_size*num_return_sequences, sequence_length).
  • attentions (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size*num_beams, num_heads, generated_length, sequence_length).
  • hidden_states (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size*num_beams*num_return_sequences, generated_length, hidden_size).
  • past_key_values (Cache, facultatif, renvoyé lorsque use_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

< >

( 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.LongTensor de 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 de eos_token_id.
  • sequences_scores (torch.Tensor de forme (batch_size*num_return_sequences), facultatif, renvoyé lorsque output_scores=True) — Scores finaux des faisceaux des sequences générées.
  • scores (tuple(torch.Tensor) facultatif, renvoyé lorsque output_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 de torch.Tensor contenant au plus max_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é lorsque output_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 de torch.Tensor avec au plus max_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é lorsque output_scores=True) — Indices des faisceaux des identifiants de jetons générés à chaque étape de génération. torch.LongTensor de forme (batch_size*num_return_sequences, sequence_length).
  • encoder_attentions (tuple(torch.Tensor), facultatif, renvoyé lorsque output_attentions=True) — Tuplet de torch.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é lorsque output_hidden_states=True) — Tuplet de torch.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é lorsque output_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length).
  • cross_attentions (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_attentions=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size, num_heads, generated_length, sequence_length).
  • decoder_hidden_states (tuple(tuple(torch.Tensor)), facultatif, renvoyé lorsque output_hidden_states=True) — Tuplet (un élément pour chaque jeton généré) de tuplets (un élément pour chaque couche du décodeur) de torch.Tensor de forme (batch_size*num_beams*num_return_sequences, generated_length, hidden_size).
  • past_key_values (Cache, facultatif, renvoyé lorsque use_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

< >

( input_start_len: intsemantic_vocab_size: intcodebook_size: int )

Paramètres

  • input_start_len (int) — La longueur de la séquence d'entrée initiale.
  • semantic_vocab_size (int) — Taille du vocabulaire de la partie sémantique, c'est-à-dire le nombre de jetons associés au vocabulaire sémantique.
  • codebook_size (int) — Nombre de jetons associés au codebook.

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.

__call__

< >

( input_ids: LongTensorscores: Tensor )

classe transformers.ClassifierFreeGuidanceLogitsProcessor

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( encoder_ngram_size: intencoder_input_ids: LongTensor )

Paramètres

  • encoder_ngram_size (int) — Tous les n-grammes de taille ngram_size ne peuvent apparaître que dans les identifiants d’entrée de l’encodeur.
  • encoder_input_ids (int) — Les encoder_input_ids qui ne doivent pas être répétés dans les ids du décodeur.

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 à epsilon sont 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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, si min_tokens_to_keep est 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 seuil eta.
  • 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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_index indique le point de départ de la pénalité et decay_factor repré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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( bos_token_id: int )

Paramètres

  • bos_token_id (int) — L'identifiant du jeton à forcer comme premier jeton généré.

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( max_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )

Paramètres

  • max_length (int) — La longueur maximale de la séquence à générer.
  • 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 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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.InfNanRemoveLogitsProcessor

< >

( )

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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.LogitNormalization

< >

( )

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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.LogitsProcessor

< >

( )

Classe de base abstraite pour tous les processeurs de logits applicables lors de la génération.

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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.LogitsProcessorList

< >

( iterable = () )

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__

< >

( input_ids: LongTensorscores: Tensor**kwargs ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 de eos_token_id est 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 avec generate, 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 de eos_token_id est 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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églant top_p dans la plage 0,99-0,8 (utilisez l'inverse des valeurs habituelles de top_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, 9

__call__

< >

( input_ids: LongTensorscores: Tensor )

classe transformers.NoBadWordsLogitsProcessor

< >

( bad_words_ids: listeos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None )

Paramètres

  • bad_words_ids (list[list[int]]) — Liste de listes d'identifiants de jetons qui ne sont pas autorisés à être générés.
  • eos_token_id (Union[int, list[int], torch.Tensor], facultatif) — L’identifiant (ou les identifiants) du jeton end-of-sequence.

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=True lors de l’initialisation du tokeniseur, et utilisez tokenizer(bad_words, add_special_tokens=False).input_ids. L’argument add_prefix_space n’est pris en charge que par certains tokeniseurs lents, car les comportements de préfixation des tokeniseurs rapides proviennent de pre 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( ngram_size: int )

Paramètres

  • ngram_size (int) — Tous les n-grammes de taille ngram_size ne peuvent apparaître qu’une seule fois.

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 arguments inputs_ids et l’identifiant du lot batch_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és inputs_ids et l’identifiant du lot batch_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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 (int ou torch.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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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.SuppressTokensLogitsProcessor

< >

( suppress_tokensdevice: str = 'cpu' )

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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éfaut False) — Indique s'il faut ignorer les premiers appels ngram.
  • debug_mode (bool, facultatif, par défaut False) — 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( temperature: float )

Paramètres

  • temperature (float) — Valeur flottante strictement positive utilisée pour moduler la distribution des logits. Une valeur inférieure à 1 diminue l'aléatoire (et inversement), 0 étant équivalent à déplacer toute la masse de probabilité vers le jeton le plus probable.

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=True est inclus dans les arguments de generate, 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( top_h: floatfilter_value: float = -inf )

Paramètres

  • top_h (float) — Coefficient de mise à l'échelle du seuil basé sur l'entropie (tau). Doit être compris dans l'intervalle (0, 1].
  • filter_value (float, facultatif, valeur par défaut : -inf) — Toutes les valeurs filtrées seront définies sur cette valeur flottante.

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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, vocab_size)

Paramètres

  • input_ids (torch.LongTensor de forme (batch_size, sequence_length)) — Identifiants des jetons d'entrée.
  • scores (torch.Tensor de 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

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 atteignent top_p ou 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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é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é. 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.LongTensor de 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.LongTensor de forme (batch_size, sequence_length), facultatif) — Masque d'attention pour unconditional_ids.
  • use_cache (bool, facultatif, par défaut True) — 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"

__call__

< >

( input_idsscores )

classe transformers.WhisperTimeStampLogitsProcessor

< >

( 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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

< >

( 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 le bias si 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

Paramètres

  • input_ids (torch.LongTensor de 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.Tensor de 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 transformers.StoppingCriteria

< >

( )

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__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

Paramètres

  • input_ids (torch.LongTensor de 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.

    Qu'est-ce que les identifiants d'entrée ?

  • 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ée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate, sinon None est 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.StoppingCriteriaList

< >

( iterable = () )

__call__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

Paramètres

  • input_ids (torch.LongTensor de 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.

    Qu'est-ce que les identifiants d'entrée ?

  • 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ée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate, sinon None est 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

< >

( max_length: intmax_position_embeddings: int | None = None )

Paramètres

  • max_length (int) — La longueur maximale que la séquence de sortie peut atteindre, en nombre de jetons.
  • max_position_embeddings (int, facultatif) — La longueur maximale du modèle, telle que définie par l’attribut config.max_position_embeddings du modèle.

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__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

Paramètres

  • input_ids (torch.LongTensor de 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.

    Qu'est-ce que les identifiants d'entrée ?

  • 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ée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate, sinon None est 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

< >

( max_time: floatinitial_timestamp: float | None = None )

Paramètres

  • max_time (float) — Temps maximal autorisé en secondes pour la génération.
  • initial_timestamp (float, facultatif, par défaut time.time()) — Début de la plage de temps autorisée pour la génération.

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__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

Paramètres

  • input_ids (torch.LongTensor de 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.

    Qu'est-ce que les identifiants d'entrée ?

  • 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ée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate, sinon None est 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

< >

( 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__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

Paramètres

  • input_ids (torch.LongTensor de 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.

    Qu'est-ce que les identifiants d'entrée ?

  • 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ée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate, sinon None est 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

< >

( eos_token_id: typing.Union[int, list[int], torch.Tensor] )

Paramètres

  • eos_token_id (Union[int, list[int], torch.Tensor]) — L’identifiant (ou les identifiants) du jeton end-of-sequence.

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__

< >

( 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.LongTensor de 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.

    Qu'est-ce que les identifiants d'entrée ?

  • 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ée scores, assurez-vous de passer return_dict_in_generate=True, output_scores=True à generate, sinon None est transmis.
  • new_token_length (int, facultatif, par défaut 1) — Le nombre de jetons qui seront vérifiés par rapport aux critères. Les new_token_length derniers 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

< >

( 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éfaut False) — 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éthode decode du 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,

fin

< >

( )

Vide le cache restant et affiche un retour à la ligne sur la sortie standard.

on_finalized_text

< >

( text: strstream_end: bool = False )

Affiche le nouveau texte sur la sortie standard. Si le flux est en cours de terminaison, affiche également un retour à la ligne.

put

< >

( value )

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

< >

( 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éfaut False) — 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. Si None, 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éthode decode du 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,'

on_finalized_text

< >

( text: strstream_end: bool = False )

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

< >

( 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éfaut False) — 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. Si None, 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éthode decode du 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,

on_finalized_text

< >

( text: strstream_end: bool = False )

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

< >

( 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éfaut False) — 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éthode decode du 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)

fin

< >

( )

Vide le cache restant et affiche un retour à la ligne.

put

< >

( value )

Reçoit les jetons confirmés, efface le brouillon et les imprime de manière permanente.

put_draft

< >

( value**kwargs )

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

classe transformers.CacheLayerMixin

< >

( **kwargs )

Base, classe abstraite pour le cache d'une couche unique.

update

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs )

get_seq_length

< >

( )

get_mask_sizes

< >

( query_length: int )

get_max_length

< >

( )

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éinitialiser

< >

( )

Réinitialise les valeurs du cache tout en conservant les objets

reorder_cache

< >

( beam_idx: LongTensor )

Réordonne le cache de cette couche pour la recherche par faisceau.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

classe transformers.DynamicLayer

< >

( **kwargs )

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

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

Paramètres

  • key_states (torch.Tensor) — Les nouveaux états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.

Retourne

tuple[torch.Tensor, torch.Tensor]

Les états de clé et de valeur.

Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

crop

< >

( tokens_to_remove: int )

Supprimez les jetons tokens_to_remove de la couche de cache actuelle.

batch_repeat_interleave

< >

( repeats: int )

Répétez le cache repeats fois dans la dimension du lot.

batch_select_indices

< >

( indices: Tensor )

Conservez uniquement les indices dans la dimension du lot de la cache.

classe transformers.StaticLayer

< >

( max_cache_len: int**kwargs )

Paramètres

  • max_cache_len (int) — Nombre maximal de jetons pouvant être stockés, utilisé pour la préallocation des tenseurs.

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

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

Paramètres

  • key_states (torch.Tensor) — Les nouveaux états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.

Retourne

tuple[torch.Tensor, torch.Tensor]

Les états de clé et de valeur.

Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

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

< >

( max_cache_len: intsliding_window: int**kwargs )

Paramètres

  • max_cache_len (int) — Nombre maximal de jetons pouvant être stockés, utilisé pour la préallocation des tenseurs.
  • sliding_window (int) — La taille de la fenêtre glissante.

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

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

Paramètres

  • key_states (torch.Tensor) — Les nouveaux états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.

Retourne

tuple[torch.Tensor, torch.Tensor]

Les états de clé et de valeur.

Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

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

< >

( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )

update

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

Paramètres

  • key_states (torch.Tensor) — Les nouveaux états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.

Retourne

tuple[torch.Tensor, torch.Tensor]

Les états de clé et de valeur.

Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

classe transformers.HQQQuantizedLayer

< >

( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )

update

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

Paramètres

  • key_states (torch.Tensor) — Les nouveaux états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.

Retourne

tuple[torch.Tensor, torch.Tensor]

Les états de clé et de valeur.

Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

classe transformers.Fp8QuantizedLayer

< >

( )

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

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

Paramètres

  • key_states (torch.Tensor) — Les nouveaux états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.

Retourne

tuple[torch.Tensor, torch.Tensor]

Les états de clé et de valeur.

Mettre à jour les caches de clés et de valeurs sur place, et retourner les états de clés et de valeurs nécessaires.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

classe transformers.Cache

< >

( 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 de CacheLayerMixin ou LinearAttentionCacheLayerMixin précréés. Si omis (None), layer_class_to_replicate sera utilisé.
  • layer_class_to_replicate (type[CacheLayerMixin | LinearAttentionCacheLayerMixin], facultatif) — Utilisé uniquement si layers est 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 que update est appelé avec un layer_idx supérieur à la liste actuelle des couches.
  • offloading (bool, facultatif, par défaut False) — Indique s'il faut effectuer le déchargement des couches vers le cpu afin d'économiser la mémoire GPU.
  • offload_only_non_sliding (bool, facultatif, valeur par défaut True) — Si offloading est True, 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

< >

( key_states: Tensorvalue_states: Tensorlayer_idx: int*args**kwargs )

Paramètres

  • key_states (torch.Tensor) — Nouvelles états des clés à mettre en cache.
  • value_states (torch.Tensor) — Les nouveaux états de valeur à mettre en cache.
  • layer_idx (int) — L'index de la couche pour laquelle mettre en cache les états.

Met à jour le cache avec les nouvelles key_states et value_states pour la couche layer_idx.

early_initialization

< >

( 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.

get_seq_length

< >

( layer_idx: int = 0 )

Retourne la longueur de la séquence du cache pour la couche donnée.

get_mask_sizes

< >

( query_length: intlayer_idx: int )

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.

get_max_length

< >

( layer_idx: int | None = None )

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éinitialiser récursivement les tenseurs de toutes les couches

reorder_cache

< >

( beam_idx: LongTensor )

Réorganiser le cache pour la recherche par faisceau

crop

< >

( tokens_to_remove: int )

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.

batch_repeat_interleave

< >

( repeats: int )

Répéter et entrelacer le cache

batch_select_indices

< >

( indices: Tensor )

Sélectionner des indices depuis le cache

classe transformers.DynamicCache

< >

( 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é avec torch.distributed (DDP). En résumé, il s’agit de map(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éfaut False) — Indique s'il faut effectuer le déchargement des couches vers le cpu afin d'économiser la mémoire GPU.
  • offload_only_non_sliding (bool, facultatif, valeur par défaut False) — Si offloading est True, 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 generation

classe transformers.StaticCache

< >

( 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éfaut False) — Indique s'il faut effectuer le déchargement des couches vers le cpu afin d'économiser la mémoire GPU.
  • offload_only_non_sliding (bool, facultatif, valeur par défaut True) — Si offloading est True, 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

< >

( 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 un q_group_size dé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

< >

( *caches )

Paramètres

  • caches (Iterable) — Généralement un itérable de longueur 2, contenant 2 objets Cache, 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 un tuple[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()

batch_repeat_interleave

< >

( repeats: int )

Répétez le cache repeats fois dans la dimension du lot. Utilisé dans la recherche contrastive (sur le Hub).

batch_select_indices

< >

( indices: Tensor )

Conserve uniquement les indices dans la dimension du lot de la cache. Utilisé dans la recherche contrastive (sur le Hub).

crop

< >

( tokens_to_remove: int )

Supprimez les jetons tokens_to_remove de la couche de cache actuelle.

get_max_length

< >

( layer_idx: int | None = None )

Retourne la longueur de séquence maximale (c.-à-d. la capacité maximale) de l'objet de cache

get_seq_length

< >

( layer_idx: int = 0 )

Retourne la longueur de séquence des états mis en cache. Un index de couche peut être transmis en option.

reorder_cache

< >

( beam_idx: LongTensor )

Réordonne le cache pour la recherche par faisceau, étant donné les indices de faisceaux sélectionnés.

Utils de filigrane

classe transformers.WatermarkingConfig

< >

( 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.

__call__

( *args**kwargs )

Appeler self en tant que fonction.

classe transformers.WatermarkDetector

< >

( 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éfaut False) — 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__

< >

( 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éfaut 3.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éfaut False) — Indique s'il faut retourner ~generation.WatermarkDetectorOutput ou 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

< >

( watermarking_depth: int | None = Nonebase_rate: float = 0.5**kwargs )

Paramètres

  • watermarking_depth (int, facultatif) — Le nombre de couches de tournoi.
  • base_rate (float, facultatif, valeur par défaut 0.5) — Probabilité a priori P(w) qu'un texte soit filigrané.

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

< >

( 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

< >

( g_values: Tensormask: Tensorlabels: typing.Optional[torch.Tensor] = Noneloss_batch_weight = 1return_dict = False )

Paramètres

  • g_values (torch.Tensor de forme (batch_size, seq_len, watermarking_depth, ...)) — valeurs g (avec des valeurs 0 ou 1)
  • mask — Un tableau binaire de forme [batch_size, seq_len] indiquant quelles valeurs g doivent être utilisées. Les valeurs g dont la valeur du masque est 0 sont ignorées.

Calcule la postérieure avec filigrane P(watermarked|g_values).

classe transformers.SynthIDTextWatermarkingConfig

< >

( 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éfaut False) — Indique s'il faut ignorer les premiers appels ngram.
  • debug_mode (bool, facultatif, par défaut False) — 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

< >

( detector_module: BayesianDetectorModellogits_processor: SynthIDTextWatermarkLogitsProcessortokenizer: Any )

Paramètres

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)

__call__

< >

( tokenized_outputs: Tensor )

Outils de compilation

classe transformers.CompileConfig

< >

( 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éfaut False) — 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 (bool ou None, facultatif) — Indique s'il faut tenter d'utiliser des graphes de formes dynamiques.
  • backend (str ou Callable, 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]

__call__

( *args**kwargs )

Appeler self en tant que fonction.

Update on GitHub