Transformers documentation
Utilidades para la generación
Utilidades para la generación
Esta página enumera todas las funciones de utilidad utilizadas por generate().
Generar salidas
La salida de generate() es una instancia de una subclase de ModelOutput. Esta salida es una estructura de datos que contiene toda la información devuelta por generate(), pero que también puede usarse como tupla o diccionario.
Aquí hay un ejemplo:
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)El objeto generation_output es un GenerateDecoderOnlyOutput, como podemos ver en la documentación de esa clase a continuación, lo que significa que tiene los siguientes atributos:
sequences: las secuencias de tokens generadasscores(opcional): las puntuaciones de predicción de la cabeza de modelado de lenguaje, para cada paso de generaciónhidden_states(opcional): los estados ocultos del modelo, para cada paso de generaciónattentions(opcional): los pesos de atención del modelo, para cada paso de generación
Aquí tenemos las scores porque pasamos output_scores=True, pero no tenemos hidden_states ni attentions porque no pasamos output_hidden_states=True ni output_attentions=True.
Puede acceder a cada atributo de la forma habitual, y si ese atributo no ha sido devuelto por el modelo, obtendrá None. Por ejemplo, generation_output.scores son todas las puntuaciones de predicción generadas por la cabeza de modelado de lenguaje, y generation_output.attentions es None.
Al usar nuestro objeto generation_output como una tupla, solo conserva los atributos que no tienen valores None.
Aquí, por ejemplo, tiene dos elementos, loss y luego logits, por lo que
generation_output[:2]devolverá, por ejemplo, la tupla (generation_output.sequences, generation_output.scores).
Al usar nuestro objeto generation_output como un diccionario, solo conserva los atributos que no tienen valores None. Aquí, por ejemplo, tiene dos claves que son sequences y scores.
Aquí documentamos todos los tipos de salida.
clase transformers.generation.GenerateDecoderOnlyOutput
< source >( sequences: LongTensorscores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Noneattentions: tuple[tuple[torch.FloatTensor]] | None = Nonehidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parámetros
- sequences (
torch.LongTensorde forma(batch_size, sequence_length)) — Las secuencias generadas. La segunda dimensión (sequence_length) es igual amax_lengtho más corta si todos los lotes terminaron antes debido aeos_token_id. - scores (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_scores=True) — Puntuaciones de predicción procesadas de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax) en cada paso de generación. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento para cada token generado), con cada tensor de forma(batch_size, config.vocab_size). - logits (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_logits=True) — Puntuaciones de predicción sin procesar de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax) en cada paso de generación. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento para cada token generado), con cada tensor de forma(batch_size, config.vocab_size). - attentions (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_attentions=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size, num_heads, generated_length, sequence_length). - hidden_states (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_hidden_states=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size, generated_length, hidden_size). - past_key_values (
Cache, opcional, se devuelve cuandouse_cache=True) — Devuelve la caché del modelo, utilizada para acelerar la decodificación. Los distintos modelos tienen un formato de caché diferente, consulta la documentación del modelo. Por lo general, una instancia de Cache.
Salidas de modelos de generación solo decodificador, al utilizar métodos no de haz.
clase transformers.generation.GenerateEncoderDecoderOutput
< source >( sequences: LongTensorscores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Noneencoder_attentions: tuple[torch.FloatTensor] | None = Noneencoder_hidden_states: tuple[torch.FloatTensor] | None = Nonedecoder_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonecross_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parámetros
- sequences (
torch.LongTensorde forma(batch_size*num_return_sequences, sequence_length)) — Las secuencias generadas. La segunda dimensión (sequence_length) es igual amax_lengtho más corta si todos los lotes terminaron antes debido aeos_token_id. - scores (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_scores=True) — Puntuaciones de predicción procesadas de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax) en cada paso de generación. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento para cada token generado), con cada tensor de forma(batch_size, config.vocab_size). - logits (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_logits=True) — Puntuaciones de predicción sin procesar de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax) en cada paso de generación. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento para cada token generado), con cada tensor de forma(batch_size, config.vocab_size). - encoder_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=True) — Tupla detorch.FloatTensor(una por cada capa del decodificador) de forma(batch_size, num_heads, sequence_length, sequence_length). - encoder_hidden_states (
tuple(torch.FloatTensor), opcional, devuelto cuandooutput_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de las incrustaciones + una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size). - decoder_attentions (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_attentions=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size, num_heads, generated_length, sequence_length). - cross_attentions (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_attentions=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size, num_heads, generated_length, sequence_length). - decoder_hidden_states (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_hidden_states=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size, generated_length, hidden_size). - past_key_values (
Cache, opcional, se devuelve cuandouse_cache=True) — Devuelve la caché del modelo, utilizada para acelerar la decodificación. Los distintos modelos tienen un formato de caché diferente, consulta la documentación del modelo. Por lo general, una instancia de Cache.
Salidas de los modelos de generación encoder-decoder al utilizar métodos que no son de haz.
clase transformers.generation.GenerateBeamDecoderOnlyOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.FloatTensor] = Nonescores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneattentions: tuple[tuple[torch.FloatTensor]] | None = Nonehidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parámetros
- sequences (
torch.LongTensorde forma(batch_size*num_return_sequences, sequence_length)) — Las secuencias generadas. La segunda dimensión (sequence_length) es igual amax_lengtho más corta si todos los lotes terminaron antes debido aeos_token_id. - sequences_scores (
torch.FloatTensorde forma(batch_size*num_return_sequences), opcional, devuelto cuandooutput_scores=True) — Puntuaciones finales de haz de lassequencesgeneradas. - scores (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_scores=True) — Puntuaciones de transición de beam para cada token del vocabulario en cada paso de generación. Las puntuaciones de transición de beam consisten en las probabilidades logarítmicas de los tokens condicionadas al log softmax de los tokens generados previamente en este beam. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento por cada token generado), donde cada tensor tiene la forma(batch_size*num_beams, config.vocab_size). - logits (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_logits=True) — Puntuaciones de predicción sin procesar de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax) en cada paso de generación. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento para cada token generado), con cada tensor de forma(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor, opcional, se devuelve cuandooutput_scores=True) — Índices de haz del id del token generado en cada paso de generación.torch.LongTensorde forma(batch_size*num_return_sequences, sequence_length). - attentions (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_attentions=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size*num_beams, num_heads, generated_length, sequence_length). - hidden_states (
tuple(tuple(torch.FloatTensor)), opcional, devuelto cuandooutput_hidden_states=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size*num_beams*num_return_sequences, generated_length, hidden_size). - past_key_values (
Cache, opcional, se devuelve cuandouse_cache=True) — Devuelve la caché del modelo, utilizada para acelerar la decodificación. Los distintos modelos tienen un formato de caché diferente, consulta la documentación del modelo. Por lo general, una instancia de Cache.
Salidas de modelos de generación solo decodificador, al utilizar métodos de haz.
clase transformers.generation.GenerateBeamEncoderDecoderOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.FloatTensor] = Nonescores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneencoder_attentions: tuple[torch.FloatTensor] | None = Noneencoder_hidden_states: tuple[torch.FloatTensor] | None = Nonedecoder_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonecross_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parámetros
- sequences (
torch.LongTensorde forma(batch_size*num_return_sequences, sequence_length)) — Las secuencias generadas. La segunda dimensión (sequence_length) es igual amax_lengtho más corta si todos los lotes terminaron antes debido aeos_token_id. - sequences_scores (
torch.FloatTensorde forma(batch_size*num_return_sequences), opcional, devuelto cuandooutput_scores=True) — Puntuaciones finales de haz de lassequencesgeneradas. - scores (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_scores=True) — Puntuaciones de transición de beam para cada token del vocabulario en cada paso de generación. Las puntuaciones de transición de beam consisten en las probabilidades logarítmicas de los tokens condicionadas al log softmax de los tokens generados previamente en este beam. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento por cada token generado), donde cada tensor tiene la forma(batch_size*num_beams, config.vocab_size). - logits (
tuple(torch.FloatTensor)opcional, devuelto cuandooutput_logits=True) — Puntuaciones de predicción sin procesar de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax) en cada paso de generación. Tupla detorch.FloatTensorcon hastamax_new_tokenselementos (un elemento para cada token generado), con cada tensor de forma(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor, opcional, se devuelve cuandooutput_scores=True) — Índices de haz del id del token generado en cada paso de generación.torch.LongTensorde forma(batch_size*num_return_sequences, sequence_length). - encoder_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=True) — Tupla detorch.FloatTensor(una por cada capa del decodificador) de forma(batch_size, num_heads, sequence_length, sequence_length). - encoder_hidden_states (
tuple(torch.FloatTensor), opcional, devuelto cuandooutput_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de las incrustaciones + una para la salida de cada capa) de forma(batch_size*num_beams*num_return_sequences, sequence_length, hidden_size). - decoder_attentions (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_attentions=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length). - cross_attentions (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_attentions=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size, num_heads, generated_length, sequence_length). - decoder_hidden_states (
tuple(tuple(torch.FloatTensor)), opcional, se devuelve cuandooutput_hidden_states=True) — Tupla (un elemento para cada token generado) de tuplas (un elemento para cada capa del decodificador) detorch.FloatTensorde forma(batch_size*num_beams*num_return_sequences, generated_length, hidden_size). - past_key_values (
Cache, opcional, se devuelve cuandouse_cache=True) — Devuelve la caché del modelo, utilizada para acelerar la decodificación. Los distintos modelos tienen un formato de caché diferente, consulta la documentación del modelo. Por lo general, una instancia de Cache.
Salidas de los modelos de generación encoder-decoder, al utilizar métodos de haz.
LogitsProcessor
Un LogitsProcessor se puede utilizar para modificar las puntuaciones de predicción de la cabeza de un modelo de lenguaje para la generación.
clase transformers.AlternatingCodebooksLogitsProcessor
< source >( input_start_len: intsemantic_vocab_size: intcodebook_size: int )
LogitsProcessor que aplica una generación alternada entre los dos libros de códigos de Bark.
Este procesador de logits es compatible exclusivamente con el submodelo fino de Bark. Consulte la documentación del modelo para ver ejemplos.
LogitsProcessor para la guía libre de clasificador (CFG). Las puntuaciones se dividen a lo largo de la dimensión del lote, donde la primera mitad corresponde a los logits condicionales (predichos a partir del prompt de entrada) y la segunda mitad corresponde a los logits incondicionales (predichos a partir de un prompt vacío o ‘null’). El procesador calcula una media ponderada entre los logits condicionales e incondicionales, parametrizada por guidance_scale.
Consulte el artículo para obtener más información.
Este procesador de logits es compatible exclusivamente con MusicGen
Ejemplos:
>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> inputs = processor(
... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.EncoderNoRepeatNGramLogitsProcessor
< source >( encoder_ngram_size: intencoder_input_ids: LongTensor )
LogitsProcessor que funciona de manera similar a NoRepeatNGramLogitsProcessor, pero aplicado exclusivamente para evitar la repetición de n-gramas presentes en el prompt.
Estuvo diseñado para promover la conversación en un modelo de lenguaje, al evitar la generación de n-gramas presentes en rondas anteriores de la conversación.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("Alice: I love cats. What do you love?\nBob:", return_tensors="pt")
>>> # With greedy decoding, we see Bob repeating Alice's opinion. If Bob was a chatbot, it would be a poor one.
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: I love cats. What do you
>>> # With this logits processor, we can prevent Bob from repeating Alice's opinion.
>>> outputs = model.generate(**inputs, encoder_no_repeat_ngram_size=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: My cats are very cute.__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.EncoderRepetitionPenaltyLogitsProcessor
< source >( penalty: floatencoder_input_ids: LongTensor )
Parámetros
- penalty (
float) — El parámetro para la penalización de repetición. 1.0 significa sin penalización. Valores superiores a 1.0 premian los tokens del prompt. Entre 0.0 y 1.0 penaliza los tokens del prompt. - encoder_input_ids (
torch.LongTensor) — Los encoder_input_ids que deben repetirse dentro de los ids del decodificador.
LogitsProcessor que funciona de manera similar a RepetitionPenaltyLogitsProcessor, pero con una penalización inversa que se aplica a los tokens presentes en el prompt. En otras palabras, una penalización superior a 1.0 aumenta la probabilidad de seleccionar tokens que estaban presentes en el prompt.
Está diseñado para evitar la alucinación en tareas basadas en la entrada, como la resumición. Aunque originalmente estaba destinado a modelos codificador-decodificador, también se puede utilizar con modelos solo de decodificador, como los LLM.
Ejemplos:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer(["Alice and Bob. The third member's name was"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was not mentioned.
>>> # With the `encoder_repetition_penalty` argument we can trigger this logits processor in `generate`, which can
>>> # promote the use of prompt tokens ("Bob" in this example)
>>> gen_out = model.generate(**inputs, encoder_repetition_penalty=1.2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was Bob. The third member's name was Bob.__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.EpsilonLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parámetros
- epsilon (
float) — Si se establece en un valor > 0, solo se conservan para la generación los tokens con probabilidades deepsilono superiores. - filter_value (
float, opcional, valor predeterminado: -inf) — Todos los valores filtrados se establecerán en este valor flotante. - min_tokens_to_keep (
int, opcional, valor predeterminado 1) — Número mínimo de tokens que no pueden filtrarse.
LogitsProcessor que realiza muestreo por epsilon, es decir, restringe a los tokens con prob >= epsilon. Toma los tokens min_tokens_to_keep más grandes si ningún token satisface esta restricción. Consulte Truncation Sampling as Language Model Desmoothing para obtener más información.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With epsilon sampling, the output gets restricted to high-probability tokens. Note that this is similar to
>>> # Top P sampling, which restricts tokens based on their cumulative probability.
>>> # Pro tip: The paper recommends using `epsilon_cutoff` values between 3e-4 and 9e-4
>>> outputs = model.generate(**inputs, do_sample=True, epsilon_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.EtaLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1device: str = 'cpu' )
Parámetros
- epsilon (
float) — Un valor de tipo float en el rango (0, 1). Hipervariable utilizada para calcular el valor de corte dinámico,eta. Los valores sugeridos en el artículo van desde 3e-4 hasta 4e-3, dependiendo del tamaño del modelo. - filter_value (
float, opcional, valor predeterminado: -inf) — Todos los valores que se encuentran por debajo del valor de corte dinámico,eta, se establecen en este valor flotante. Este parámetro es útil cuando los logits necesitan modificarse para tokens con probabilidad muy baja que deben excluirse por completo de la generación. - min_tokens_to_keep (
int, opcional, valor predeterminado 1) — Especifica el número mínimo de tokens que deben conservarse para la generación, independientemente de sus probabilidades. Por ejemplo, simin_tokens_to_keepse establece en 1, siempre se conservará al menos un token para la generación, aunque todos los tokens tengan probabilidades por debajo del umbraleta. - device (
str, opcional, valor predeterminado"cpu") — El dispositivo en el que se asignarán los tensores.
LogitsProcessor que realiza eta-sampling, una técnica para filtrar tokens con probabilidades por debajo de un valor de corte dinámico, eta, que se calcula en función de una combinación del hiperparámetro epsilon y la entropía de las probabilidades de los tokens, es decir, eta := min(epsilon, sqrt(epsilon * e^-entropy(probabilities))). Toma los min_tokens_to_keep tokens más grandes si ningún token cumple esta restricción. Aborda el problema de la baja calidad en muestras largas de texto generadas por modelos de lenguaje neuronales, lo que conduce a un texto más coherente y fluido. Consulte Truncation Sampling as Language Model Desmoothing para obtener más información. Nota: do_sample debe establecerse en True para que este LogitsProcessor funcione.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With eta sampling, the output gets restricted to high-probability tokens. You can see it as a dynamic form of
>>> # epsilon sampling that adapts its cutoff probability based on the entropy (high entropy = lower cutoff).
>>> # Pro tip: The paper recommends using `eta_cutoff` values between 3e-4 to 4e-3
>>> outputs = model.generate(**inputs, do_sample=True, eta_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.ExponentialDecayLengthPenalty
< source >( exponential_decay_length_penalty: tupleeos_token_id: typing.Union[int, list[int], torch.Tensor]input_ids_seq_length: int )
Parámetros
- exponential_decay_length_penalty (
tuple(int, float)) — Esta tupla debe consistir en:(start_index, decay_factor)dondestart_indexindica dónde comienza la penalización ydecay_factorrepresenta el factor de decaimiento exponencial - eos_token_id (
Union[int, list[int], torch.Tensor]) — El o los id del token end-of-sequence. - input_ids_seq_length (
int) — La longitud de la secuencia de entrada.
LogitsProcessor que aumenta exponencialmente la puntuación del eos_token_id una vez que se ha alcanzado start_index. Esto permite generar secuencias más cortas sin un corte fijo, permitiendo que el eos_token se prediga en una posición significativa.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> text = "Just wanted to let you know, I"
>>> inputs = tokenizer(text, return_tensors="pt")
>>> # Let's consider that we want short sentences, so we limit `max_length=30`. However, we observe that the answer
>>> # tends to end abruptly.
>>> set_seed(1)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.9, max_length=30, pad_token_id=50256)
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010. Although
>>> # To promote the appearance of the EOS token at the right time, we add the `exponential_decay_length_penalty =
>>> # (start_index, decay_factor)`. Instead of cutting at max_tokens, the output comes to an end before and usually
>>> # with more meaning. What happens is that starting from `start_index` the EOS token score will be increased
>>> # by `decay_factor` exponentially. However, if you set a high decay factor, you may also end up with abruptly
>>> # ending sequences.
>>> set_seed(1)
>>> outputs = model.generate(
... **inputs,
... do_sample=True,
... temperature=0.9,
... max_length=30,
... pad_token_id=50256,
... exponential_decay_length_penalty=(15, 1.6),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network
which<|endoftext|>
>>> # With a small decay factor, you will have a higher chance of getting a meaningful sequence.
>>> set_seed(1)
>>> outputs = model.generate(
... **inputs,
... do_sample=True,
... temperature=0.9,
... max_length=30,
... pad_token_id=50256,
... exponential_decay_length_penalty=(15, 1.01),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010.<|endoftext|>__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.ForcedBOSTokenLogitsProcessor
< source >( bos_token_id: int )
LogitsProcessor que fuerza el token especificado como el primer token generado. Se usa con modelos encoder-decoder.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small")
>>> tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small")
>>> inputs = tokenizer("Translate from English to German: I love cats.", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad> Ich liebe Kitty.</s>
>>> # We can use `forced_bos_token_id` to force the start of generation with an encoder-decoder model
>>> # (including forcing it to end straight away with an EOS token)
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_bos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad></s>__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.ForcedEOSTokenLogitsProcessor
< source >( max_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
LogitsProcessor que fuerza el token especificado como el último token generado cuando se alcanza max_length.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8
>>> # `forced_eos_token_id` ensures the generation ends with a EOS token
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_eos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7,<|endoftext|>__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
LogitsProcessor que elimina todos los valores nan y inf para evitar que el método de generación falle. Tenga en cuenta que el procesador de logits solo debe usarse si es necesario, ya que puede ralentizar el método de generación.
Este procesador de logits no tiene un ejemplo de generate, ya que no debería existir una combinación correcta de banderas que justifique su uso.
__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
LogitsProcessor para normalizar las puntuaciones mediante log-softmax. Es importante normalizar las puntuaciones durante la búsqueda por haz, después de aplicar los procesadores o transformadores de logits, ya que el algoritmo de búsqueda utilizado en esta biblioteca no lo hace (solo lo hace antes, pero es posible que necesiten renormalización), aunque sigue suponiendo que las puntuaciones están normalizadas al comparar las hipótesis.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> import torch
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")
>>> # By default, the scores are not normalized -- the sum of their exponentials is NOT a normalized probability
>>> # distribution, summing to 1
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
False
>>> # Normalizing them may have a positive impact on beam methods, or when using the scores on your application
>>> outputs = model.generate(**inputs, renormalize_logits=True, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
True__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
Clase base abstracta para todos los procesadores de logits que pueden aplicarse durante la generación.
__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
Esta clase se puede utilizar para crear una lista de LogitsProcessor para procesar posteriormente un tensor de entrada scores.
Esta clase hereda de list y añade un método call específico para aplicar cada LogitsProcessor a las
entradas.
__call__
< source >( input_ids: LongTensorscores: FloatTensor**kwargs ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza beam search o log softmax para cada token del vocabulario cuando se utiliza beam search - kwargs (
dict[str, Any], opcional) — Kwargs adicionales específicos de un procesador de logits.
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.MinLengthLogitsProcessor
< source >( min_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
Parámetros
- min_length (
int) — La longitud mínima por debajo de la cual la puntuación deeos_token_idse establece en-float("Inf"). - eos_token_id (
Union[int, list[int], torch.Tensor]) — El o los id del token end-of-sequence. - device (
str, opcional, valor predeterminado"cpu") — El dispositivo en el que se asignarán los tensores.
LogitsProcessor que aplica una longitud mínima estableciendo la probabilidad de EOS en 0. Tenga en cuenta que, en los modelos solo decodificador como la mayoría de los LLM, la longitud incluye el prompt.
Ejemplos:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("A number:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting `min_length` to a value smaller than the uncontrolled output length has no impact
>>> gen_out = model.generate(**inputs, min_length=3)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting a larger `min_length` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_length=10)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand, nine hundred and ninety-four__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.MinNewTokensLengthLogitsProcessor
< source >( prompt_length_to_skip: intmin_new_tokens: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
Parámetros
- prompt_length_to_skip (
int) — La longitud de los tokens de entrada. No es un argumento válido cuando se usa congenerate, ya que asignará automáticamente la longitud de la entrada. - min_new_tokens (
int) — La longitud mínima de nuevos tokens por debajo de la cual la puntuación deeos_token_idse establece en-float("Inf"). - eos_token_id (
Union[int, list[int], torch.Tensor]) — El o los id del token end-of-sequence. - device (
str, opcional, valor predeterminado"cpu") — El dispositivo en el que se asignarán los tensores.
LogitsProcessor que aplica una longitud mínima de tokens nuevos estableciendo la probabilidad del token EOS (End-Of-Sequence) en 0. A diferencia de MinLengthLogitsProcessor, este procesador ignora el prompt.
Ejemplos:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer(["A number:"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting `min_new_tokens` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_new_tokens=2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.MinPLogitsWarper
< source >( min_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parámetros
- min_p (
float) — Probabilidad mínima del token, que se escalará por la probabilidad del token más probable. Debe ser un valor entre 0 y 1. Los valores típicos están en el rango de 0.01 a 0.2, con una selectividad comparable a la de establecertop_pen el rango de 0.99 a 0.8 (utilice el opuesto de los valores habituales detop_p). - filter_value (
float, opcional, valor predeterminado: -inf) — Todos los valores filtrados se establecerán en este valor flotante. - min_tokens_to_keep (
int, opcional, valor predeterminado 1) — Número mínimo de tokens que no pueden filtrarse.
LogitsProcessor que realiza min-p, es decir, conserva todos los tokens que superan una probabilidad mínima, escalada por la probabilidad del token más probable. Como resultado, el filtro se vuelve más agresivo en presencia de tokens de alta probabilidad, lo cual es una señal de una salida confiable de la que no deberíamos desviarnos.
Se utiliza a menudo junto con TemperatureLogitsWarper. Se usa como alternativa a TopPLogitsWarper y TopKLogitsWarper.
Creado por @menhguin y @kalomaze (nombres de usuario de GitHub). Código adaptado de esta PR externa
Ejemplos:
>>> 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, 9clase transformers.NoBadWordsLogitsProcessor
< source >( bad_words_ids: listeos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None )
LogitsProcessor que garantiza que las secuencias especificadas nunca serán seleccionadas.
Para obtener los ids de los tokens de las palabras que no deben aparecer en el texto generado, asegúrese de establecer
add_prefix_space=Trueal inicializar el tokenizador y usetokenizer(bad_words, add_special_tokens=False).input_ids. El argumentoadd_prefix_spacesolo se admite en algunos tokenizadores lentos, ya que los comportamientos de prefijado de los tokenizadores rápidos provienen depre tokenizers. Lea más aquí.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["In a word, the cake is a"], return_tensors="pt")
>>> output_ids = model.generate(inputs["input_ids"], max_new_tokens=5, pad_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a mess.
>>> # Now let's take the bad words out. Please note that the tokenizer is initialized differently
>>> tokenizer_with_prefix_space = AutoTokenizer.from_pretrained("openai-community/gpt2", add_prefix_space=True)
>>> def get_tokens_as_list(word_list):
... "Converts a sequence of words into a list of tokens"
... tokens_list = []
... for word in word_list:
... tokenized_word = tokenizer_with_prefix_space([word], add_special_tokens=False).input_ids[0]
... tokens_list.append(tokenized_word)
... return tokens_list
>>> bad_words_ids = get_tokens_as_list(word_list=["mess"])
>>> output_ids = model.generate(
... inputs["input_ids"], max_new_tokens=5, bad_words_ids=bad_words_ids, pad_token_id=tokenizer.eos_token_id
... )
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a surprise.__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.NoRepeatNGramLogitsProcessor
< source >( ngram_size: int )
Los n-gramas son grupos de “n” palabras, caracteres o tokens consecutivos extraídos de una secuencia de texto. Dada la oración: “She runs fast”, los bi-gramas (n=2) serían (“she”, “runs”) y (“runs”, “fast”). En la generación de texto, evitar la repetición de secuencias de palabras proporciona una salida más diversa. Este LogitsProcessor impide la repetición de n-gramas estableciendo las puntuaciones de los tokens prohibidos en infinito negativo, lo que elimina dichos tokens de la consideración al procesar las puntuaciones posteriormente. Tenga en cuenta que, para modelos solo de decodificador como la mayoría de los LLM, el prompt también se considera para obtener los n-gramas. Fairseq.
Utilice las penalizaciones de n-gramas con precaución. Por ejemplo, penalizar los 2-gramas (bigramas) en un artículo sobre la ciudad de Nueva York podría dar lugar a resultados no deseados, como que el nombre de la ciudad aparezca solo una vez en todo el texto. Referencia
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["Today I"], return_tensors="pt")
>>> output = model.generate(**inputs)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I'm not sure if I'm going to be able to do it.
>>> # Now let's add ngram size using `no_repeat_ngram_size`. This stops the repetitions ("I'm") in the output.
>>> output = model.generate(**inputs, no_repeat_ngram_size=2)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I'm not sure if I can get a better understanding of the nature of this issue__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.PrefixConstrainedLogitsProcessor
< source >( prefix_allowed_tokens_fn: Callablenum_beams: int )
Parámetros
- prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]]) — Esta función restringe la búsqueda por haz a los tokens permitidos en cada paso. Esta función toma 2 argumentosinputs_idsy el ID del lotebatch_id. Debe devolver una lista con los tokens permitidos para el siguiente paso de generación condicionado a los tokens generados previamenteinputs_idsy el ID del lotebatch_id.
LogitsProcessor que aplica generación restringida y es útil para la generación restringida condicionada por prefijo. Consulte Autoregressive Entity Retrieval para obtener más información.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("Alice and Bob", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=5)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob are friends
>>> # We can constrain it with `prefix_allowed_tokens_fn` to force a certain behavior based on a prefix.
>>> # For instance, we can force an entire entity to be generated when its beginning is detected.
>>> entity = tokenizer(" Bob Marley", return_tensors="pt").input_ids[0] # 3 tokens
>>> def prefix_allowed_tokens_fn(batch_id, input_ids):
... '''
... Attempts to generate 'Bob Marley' when 'Bob' is detected.
... In this case, `batch_id` is not used, but you can set rules for each batch member.
... '''
... if input_ids[-1] == entity[0]:
... return [entity[1].item()]
... elif input_ids[-2] == entity[0] and input_ids[-1] == entity[1]:
... return [entity[2].item()]
... return list(range(tokenizer.vocab_size)) # If no match, allow all tokens
>>> outputs = model.generate(**inputs, max_new_tokens=5, prefix_allowed_tokens_fn=prefix_allowed_tokens_fn)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob Marley__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.RepetitionPenaltyLogitsProcessor
< source >( penalty: floatprompt_ignore_length: int | None = None )
Parámetros
- penalty (
float) — El parámetro para la penalización de repetición. 1.0 significa sin penalización. Valores superiores a 1.0 penalizan los tokens generados previamente. Valores entre 0.0 y 1.0 premian los tokens generados previamente. - prompt_ignore_length (
int, opcional) — La longitud de la secuencia de ids de entrada original, que, si se proporciona, no se utilizará en el cálculo de la penalización.
LogitsProcessor que previene la repetición de tokens anteriores mediante una penalización. Esta penalización se aplica como máximo una vez por token. Tenga en cuenta que, en el caso de modelos solo decodificador como la mayoría de los LLM, los tokens considerados incluyen el prompt de forma predeterminada.
En el artículo original, los autores sugieren el uso de una penalización de alrededor de 1.2 para lograr un buen equilibrio entre la generación veraz y la falta de repetición. Para penalizar y reducir la repetición, use valores de penalty superiores a 1.0, donde un valor más alto penaliza con mayor fuerza. Para recompensar y fomentar la repetición, use valores de penalty entre 0.0 y 1.0, donde un valor más bajo recompensa con mayor fuerza.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, RepetitionPenaltyLogitsProcessor
>>> # Initializing the model and tokenizer for it
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["I'm not going to"], return_tensors="pt")
>>> # This shows a normal generate without any specific parameters
>>> summary_ids = model.generate(**inputs)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to be able to do that
>>> # This generates a penalty for repeated tokens
>>> penalized_ids = model.generate(**inputs, repetition_penalty=1.1)
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'll just have to go out and play
>>> # We can also exclude the input prompt by creating an instance of this class
>>> # with a `prompt_ignore_length` and passing it as a custom logit processor
>>> rep_pen_processor = RepetitionPenaltyLogitsProcessor(
... penalty=1.1,
... prompt_ignore_length=inputs["input_ids"].shape[-1]
... )
>>> penalized_ids = model.generate(**inputs, logits_processor=[rep_pen_processor])
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to have to go through a lot of things, and__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.SequenceBiasLogitsProcessor
< source >( sequence_bias: list )
Parámetros
- sequence_bias (
list[list[Union[list[int], float]]]) — Lista de listas que asigna una secuencia de tokens a su término de sesgo (p. ej.[[[10, 45], -2.0], [[64], -7.5]]). Los sesgos positivos aumentan la probabilidad de que la secuencia sea seleccionada, mientras que los sesgos negativos hacen lo contrario. Si una secuencia tiene una longitud de 1, su sesgo siempre se aplicará. De lo contrario, el sesgo solo se aplicará si la secuencia en cuestión está a punto de completarse (en el paso de selección de tokens después de aplicar este procesador).
LogitsProcessor que aplica un sesgo aditivo a las secuencias. El sesgo se aplica al último token de una secuencia cuando el token generado a continuación puede completarla. En consecuencia, para aprovechar al máximo el sesgo de secuencias con más de un token, considere utilizar métodos de beam (para manejar adecuadamente las secuencias parcialmente completadas que tienen un sesgo negativo) y aplicar el sesgo a sus prefijos (para garantizar que el sesgo se aplique antes).
A nivel de token, sesgar una palabra es diferente de sesgar una palabra con un espacio antes de ella. Si quieres sesgar “foo” a mitad de una oración, probablemente quieras añadir un espacio de prefijo y sesgar “ foo” en su lugar. Consulta la sección del tokenizador de nuestro curso de NLP para saber por qué: https://huggingface.co/learn/nlp-course/chapter2/4?fw=pt
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> inputs = tokenizer(["The full name of Donald is Donald"], return_tensors="pt")
>>> summary_ids = model.generate(inputs["input_ids"], max_new_tokens=4, do_sample=False)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.
>>> def get_tokens(word):
... return tokenizer([word], add_special_tokens=False).input_ids[0]
>>> # IMPORTANT: Remember our tip about adding spaces before words to bias them correctly.
>>> sequence_bias = [[get_tokens("Trump"), -10.0],] # will fail to apply bias
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.
>>> sequence_bias = [[get_tokens(" Trump"), -10.0],] # will work
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Harper. He
>>> # We can also add a positive bias to nudge the model towards specific tokens or continuations. This technique
>>> # is also more effective when paired up with beam search.
>>> sequence_bias = [[get_tokens(" Donald Duck"), 10.0],]
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, num_beams=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald Duck. He is__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.SuppressTokensAtBeginLogitsProcessor
< source >( begin_suppress_tokensbegin_indexdevice: str = 'cpu' )
SuppressTokensAtBeginLogitsProcessor suprime una lista de tokens en cuanto la función generate comienza a generar, utilizando los tokens de begin_index. Esto debe garantizar que los tokens definidos por begin_suppress_tokens no se generen al principio. Creado originalmente para Whisper.
Ejemplos:
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")
>>> # Whisper has `begin_suppress_tokens` set by default (= `[220, 50256]`). 50256 is the EOS token, so this means
>>> # it can't generate and EOS token in the first iteration, but it can in the others.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[0][0, 50256])
tensor(-inf)
>>> print(outputs.scores[-1][0, 50256]) # in other places we can see some probability mass for EOS
tensor(29.9010)
>>> # If we disable `begin_suppress_tokens`, we can generate EOS in the first iteration.
>>> outputs = model.generate(
... **inputs, return_dict_in_generate=True, output_scores=True, begin_suppress_tokens=None
... )
>>> print(outputs.scores[0][0, 50256])
tensor(11.2027)__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
Este procesador se puede utilizar para suprimir una lista de tokens. El procesador establecerá sus log probs en -inf para que no se generen. Creado originalmente para Whisper.
Ejemplos:
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")
>>> # Whisper has a long list of suppressed tokens. For instance, in this case, the token 1 is suppressed by default.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[1][0, 1]) # 1 (and not 0) is the first freely generated token
tensor(-inf)
>>> # If we disable `suppress_tokens`, we can generate it.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True, suppress_tokens=None)
>>> print(outputs.scores[1][0, 1])
tensor(6.0678)__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.SynthIDTextWatermarkLogitsProcessor
< source >( ngram_len: intkeys: listsampling_table_size: intsampling_table_seed: intcontext_history_size: intdevice: deviceskip_first_ngram_calls: bool = Falsedebug_mode: bool = False )
Parámetros
- ngram_len (
int) — Longitud del ngram. - keys (
list[int]) — Una secuencia de claves de marca de agua, una para cada profundidad. - sampling_table_size (
int) — Tamaño de la tabla de muestreo. - sampling_table_seed (
int) — Semilla aleatoria para generar la tabla de muestreo. - context_history_size (
int) — Tamaño del tensor para llevar un registro de los contextos vistos. - device (
torch.device) — Dispositivo a utilizar. - skip_first_ngram_calls (
bool, opcional, valor predeterminadoFalse) — Si se deben omitir las primeras llamadas de ngram. - debug_mode (
bool, opcional, valor predeterminadoFalse) — Los logits se modifican a uno uniforme antes de que se aplique la modificación de marca de agua. Esto es para probar la implementación.
Procesador de logits que implementa técnicas de marca de agua para modelos de generación de texto. Esta clase facilita la aplicación de la marca de agua de texto SynthID, un método para incrustar señales imperceptibles en el texto generado para ayudar a detectar contenido sintético. Funciona manipulando sutilmente las probabilidades de selección de tokens durante la generación de texto de una manera que puede recuperarse de forma fiable más adelante para la verificación.
Características principales:
Gestión del estado: Mantiene un estado interno para seguir las secuencias de tokens y generar dinámicamente las claves de marca de agua.
Generación de claves: Calcula hashes basados en secuencias de tokens y parámetros de marca de agua para crear claves únicas para cada posición.
Muestreo de valores G: Emplea una tabla de muestreo precalculada para muestrear los valores de marca de agua (valores g) en función de las claves generadas.
Ajuste de puntuación: Aplica los valores g calculados para modificar las probabilidades de los tokens durante la generación, incrustando la marca de agua.
Gestión de la repetición de contexto: Incorpora lógica para evitar la marca de agua en tokens de contextos repetidos, preservando la naturalidad.
Máscara de tokens EOS: Admite la aplicación de máscaras a los tokens de fin de oración para evitar su inclusión en los cálculos de marca de agua.
Funciones de utilidad: Proporciona funciones para calcular directamente los valores g, verificar la repetición de contexto, crear máscaras de tokens EOS y estimar los valores g medios esperados.
Consulte la URL del artículo: https://www.nature.com/articles/s41586-024-08025-4 para obtener más detalles al respecto.
Ejemplos:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')
>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
... keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
... ngram_len=5,
... )
>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
... **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.TemperatureLogitsWarper
< source >( temperature: float )
LogitsProcessor para la temperatura (escalado exponencial de la distribución de probabilidad de salida), lo que significa en la práctica que puede controlar la aleatoriedad de los tokens predichos. Se suele usar junto con TopPLogitsWarper y TopKLogitsWarper.
Asegúrate de que
do_sample=Trueesté incluido en los argumentos degenerate, de lo contrario el valor de la temperatura no tendrá ningún efecto.
Ejemplos:
>>> import torch
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(0) # for reproducibility
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> model.config.pad_token_id = model.config.eos_token_id
>>> inputs = tokenizer(["Hugging Face Company is"], return_tensors="pt")
>>> # With temperature=1.0, the default, we consistently get random outputs due to random sampling.
>>> generate_kwargs = {"max_new_tokens": 10, "do_sample": True, "temperature": 1.0, "num_return_sequences": 2}
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is one of these companies that is going to take a',
"Hugging Face Company is a brand created by Brian A. O'Neil"]
>>> # However, with temperature close to 0, it approximates greedy decoding strategies (invariant)
>>> generate_kwargs["temperature"] = 0.0001
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is a company that has been around for over 20 years',
'Hugging Face Company is a company that has been around for over 20 years']__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.TopHLogitsWarper
< source >( top_h: floatfilter_value: float = -inf )
LogitsProcessor que implementa la muestreo Top-H, un método de decodificación que selecciona de forma adaptativa un subconjunto de tokens de alta probabilidad en función de restricciones de entropía y probabilidad acumulada.
Este método determina dinámicamente cuántos tokens conservar analizando la diferencia de entropía de la distribución seleccionada, equilibrando así la exploración y la explotación. Garantiza que el texto generado mantenga tanto diversidad como coherencia.
Referencia: Para más detalles, consulte Top-H Decoding: Adapting the Creativity and Coherence with Bounded Entropy in Text Generation (NeurIPS 2025): https://arxiv.org/abs/2509.02510
Ejemplo:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> outputs = model.generate(**inputs, do_sample=True, top_h=0.4)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — IDs de tokens de entrada. - scores (
torch.FloatTensorde forma(batch_size, vocab_size)) — Logits sin procesar del modelo.
Devuelve
torch.FloatTensor de forma (batch_size, vocab_size)
Logits procesados donde los tokens no válidos se enmascaran con -inf.
Filtra los logits mediante muestreo Top-H.
clase transformers.TopKLogitsWarper
< source >( top_k: intfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parámetros
- top_k (
int) — El número de tokens del vocabulario con mayor probabilidad que se conservan para el filtrado top-k. - filter_value (
float, opcional, valor predeterminado: -inf) — Todos los valores filtrados se establecerán en este valor flotante. - min_tokens_to_keep (
int, opcional, valor predeterminado 1) — Número mínimo de tokens que no pueden filtrarse.
LogitsProcessor que realiza top-k, es decir, restringe a los k elementos con mayor probabilidad. A menudo se usa junto con TemperatureLogitsWarper y TopPLogitsWarper.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: A, B, C, D", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E — S — O, P — R
>>> # With `top_k` sampling, the output gets restricted the k most likely tokens.
>>> # Pro tip: In practice, LLMs use `top_k` in the 5-50 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_k=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E, F, G, H, I__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.TopPLogitsWarper
< source >( top_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parámetros
- top_p (
float) — Si se establece en < 1, solo se conservan para la generación el conjunto más pequeño de tokens más probables cuyas probabilidades sumentop_po más. - filter_value (
float, opcional, valor predeterminado: -inf) — Todos los valores filtrados se establecerán en este valor flotante. - min_tokens_to_keep (
int, opcional, valor predeterminado 1) — Número mínimo de tokens que no pueden filtrarse.
LogitsProcessor que realiza top-p, es decir, restringe a los tokens superiores cuya suma de probabilidades sea <= prob_cut_off. Se utiliza a menudo junto con TemperatureLogitsWarper y TopKLogitsWarper.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With `top_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `top_p` in the 0.9-0.95 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.TypicalLogitsWarper
< source >( mass: float = 0.9filter_value: float = -infmin_tokens_to_keep: int = 1 )
Parámetros
- mass (
float, opcional, valor predeterminado 0.9) — Valor de typical_p entre 0 y 1, ambos inclusive, valor predeterminado 0.9. - filter_value (
float, opcional, valor predeterminado: -inf) — Todos los valores filtrados se establecerán en este valor flotante. - min_tokens_to_keep (
int, opcional, valor predeterminado 1) — Número mínimo de tokens que no pueden filtrarse.
LogitsProcessor que realiza decodificación típica. Inspirado en cómo los humanos usan el lenguaje, prioriza los tokens cuya probabilidad logarítmica se acerca a la entropía de la distribución de probabilidad de tokens. Esto significa que los tokens más probables pueden descartarse en el proceso.
Consulte Decodificación típica para la generación de lenguaje natural para obtener más información.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("1, 2, 3", return_tensors="pt")
>>> # We can see that greedy decoding produces a sequence of numbers
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
>>> # For this particular seed, we can see that sampling produces nearly the same low-information (= low entropy)
>>> # sequence
>>> set_seed(18)
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9 and 10
>>> # With `typical_p` set, the most obvious sequence is no longer produced, which may be good for your problem
>>> set_seed(18)
>>> outputs = model.generate(
... **inputs, do_sample=True, typical_p=0.1, return_dict_in_generate=True, output_scores=True
... )
>>> print(tokenizer.batch_decode(outputs.sequences, skip_special_tokens=True)[0])
1, 2, 3 and 5
>>> # We can see that the token corresponding to "4" (token 934) in the second position, the most likely token
>>> # as seen with greedy decoding, was entirely blocked out
>>> print(outputs.scores[1][0, 934])
tensor(-inf)__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.UnbatchedClassifierFreeGuidanceLogitsProcessor
< source >( guidance_scale: floatmodelunconditional_ids: typing.Optional[torch.LongTensor] = Noneunconditional_attention_mask: typing.Optional[torch.LongTensor] = Noneuse_cache: bool = True )
Parámetros
- guidance_scale (
float) — La escala de guía para la guía libre de clasificador (CFG). CFG se habilita estableciendoguidance_scale != 1. Una escala de guía más alta anima al modelo a generar muestras más estrechamente vinculadas al prompt de entrada, generalmente a costa de una menor calidad. Un valor menor que 1 tiene el efecto contrario, haciendo que el prompt negativo proporcionado con negative_prompt_ids (si lo hay) actúe como un prompt positivo. - model (
PreTrainedModel) — El modelo que calcula las puntuaciones incondicionales. Presumiblemente, es el mismo que calcula las puntuaciones condicionales. Ambos modelos deben usar el mismo tokenizer. - unconditional_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices de los tokens de la secuencia de entrada en el vocabulario para la rama incondicional. Si no se establece, se usará por defecto el último token del prompt. - unconditional_attention_mask (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Máscara de atención para unconditional_ids. - use_cache (
bool, opcional, valor predeterminadoTrue) — Si se deben cachear las claves/valores durante la pasada hacia adelante del prompt negativo.
Procesador de logits para Classifier-Free Guidance (CFG). Los procesadores calculan una media ponderada entre las puntuaciones de los logits condicionados por el prompt y los logits incondicionales (o negativos), parametrizada por guidance_scale. Las puntuaciones incondicionales se calculan internamente solicitando a model que use la rama unconditional_ids.
Consulte el artículo para obtener más información.
Ejemplos:
>>> 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"clase transformers.WhisperTimeStampLogitsProcessor
< source >( generate_config: GenerationConfigbegin_index: int_detect_timestamp_from_logprob: bool | None = None )
Parámetros
- generate_config (
GenerateConfig) — La configuración de generación utilizada para generar la salida. Los siguientes parámetros son obligatorios: eos_token_id (int, opcional, valor predeterminado 50257): El identificador del token de fin de secuencia. no_timestamps_token_id (int, opcional, valor predeterminado 50363): El identificador del token"<|notimestamps|>". max_initial_timestamp_index (int, opcional, valor predeterminado 1): Se utiliza para establecer el valor máximo de la marca de tiempo inicial. Esto se usa para evitar que el modelo predice marcas de tiempo que estén demasiado en el futuro. - begin_index (
int) — Índice del token del primer token generado por el modelo. - _detect_timestamp_from_logprob (
bool, opcional) — Si se pueden predecir marcas de tiempo a partir de logprobs sobre todas las marcas de tiempo.
LogitsProcessor que modifica los logits para la generación de marcas de tiempo en la transcripción. Cuando los tokens de entrada alcanzan un umbral específico, el procesador establece las puntuaciones en negativo infinito. El procesador se asegura de que los tokens de marca de tiempo aparezcan en pares, enmascarando los logits que romperían este patrón de emparejamiento. Esto se hace para mantener la consistencia y la estructura de las marcas de tiempo generadas. También garantiza que, cuando la probabilidad predicha de muestrear cualquiera de los tokens de marca de tiempo es mayor que la de cualquier token individual no relacionado con marcas de tiempo, esos logits no relacionados se establezcan en negativo infinito. Esto se hace para asegurar la generación de marcas de tiempo frente a otros tokens potenciales.
Consulte el artículo para obtener más información.
Ejemplos:
>>> import torch
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration, GenerationConfig
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[3]["audio"]["array"], return_tensors="pt")
>>> input_features = inputs.input_features
>>> #Displaying timestamps
>>> generated_ids = model.generate(inputs=input_features, return_timestamps=True)
>>> transcription = processor.batch_decode(generated_ids, decode_with_timestamps=True)[0]
>>> print("Transcription:", transcription)
Transcription: <|startoftranscript|><|0.00|> He has grave doubts whether Sir Frederick Layton's work is really Greek after all, and can<|6.44|><|6.44|> discover in it but little of rocky Ithaca.<|9.44|><|endoftext|>
>>> #No timestamps & change EOS:
>>> #This allows the user to select a specific token to terminate the sequence on, in this case it's the word "can"(460)
>>> model.generation_config.eos_token_id = 460
>>> generated_ids = model.generate(inputs=input_features,return_timestamps=False)
>>> transcription = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print("Transcription:", transcription)
Transcription: He has grave doubts whether Sir Frederick Layton's work is really Greek after all and can__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
clase transformers.WatermarkLogitsProcessor
< source >( vocab_sizedevicegreenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
Parámetros
- vocab_size (
int) — El vocab_size del tokenizador del modelo. Se utiliza para calcular la proporción de tokens “green”. - device (
str) — El dispositivo donde se asigna el modelo. - greenlist_ratio (
float, opcional, opcional, valor predeterminado 0.25) — La proporción de tokens “green” utilizados respecto al tamaño del vocabulario. El valor predeterminado es 0.25. - bias (
float, opcional, opcional, valor predeterminado 2.0) — El sesgo que se suma a los logits de los tokens “verdes” seleccionados. Considere reducir elbiassi la calidad de la generación de texto se degrada. Los valores recomendados están en el rango [0.5, 2.0]. El valor predeterminado es 2.0. - hashing_key (
int, opcional, opcional, valor predeterminado 15485863) — Clave utilizada para el hash. Si implementa esta marca de agua, le recomendamos utilizar otra clave privada. El valor predeterminado es 15485863 (el millón primo). - seeding_scheme (
str, opcional, opcional, por defecto"lefthash") — El esquema de siembra utilizado para seleccionar los tokens «green». Acepta los siguientes valores:- “lefthash” (predeterminado): la selección de tokens “green” depende del último token (Algoritmo 2 del artículo)
- “selfhash”: la selección de tokens “green” depende del propio token actual (Algoritmo 3 del artículo) La desventaja de este esquema es que considera todos los tokens siguientes posibles y puede ser más lento que “lefthash”. La longitud de contexto de los tokens anteriores que se utilizará para la semilla. Una longitud de contexto mayor hace que el marcaje de agua sea más robusto.
- context_width (
int, opcional, valor predeterminado 1) — El número de tokens anteriores que se usarán al establecer la semilla.
Procesador de logits para aplicar marcas de agua al texto generado. El procesador modifica las puntuaciones de salida del modelo añadiendo un pequeño sesgo a un conjunto aleatorio de tokens “verdes” antes de generar el siguiente token. El proceso de selección de los tokens “verdes” depende del seeding_scheme utilizado. El código se basó en el repositorio original.
El texto generado por este LogitsProcessor puede detectarse mediante WatermarkDetector. Consulte call() para más detalles,
Consulte el artículo para obtener más información.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkingConfig
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Alice and Bob are"], return_tensors="pt")
>>> # normal generation
>>> out = model.generate(inputs["input_ids"], max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both in the same room.\n\n"I\'m not sure if you\'re'
>>> # watermarked generation
>>> watermarking_config = WatermarkingConfig(bias=2.5, context_width=2, seeding_scheme="selfhash")
>>> out = model.generate(inputs["input_ids"], watermarking_config=watermarking_config, max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both still alive and well and the story is pretty much a one-hour adventure'
>>> # to detect watermarked text use the WatermarkDetector class
>>> from transformers import WatermarkDetector
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config= watermarking_config)
>>> detection_preds = detector(out)
>>> detection_preds
array([ True])__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. ¿Qué son los IDs de entrada? - scores (
torch.FloatTensorde forma(batch_size, config.vocab_size)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje. Estas pueden ser logits para cada vocabulario cuando no se utiliza la búsqueda por haces o log softmax para cada token del vocabulario cuando se utiliza la búsqueda por haces
Devuelve
torch.FloatTensor de forma (batch_size, config.vocab_size)
Las puntuaciones de predicción procesadas.
StoppingCriteria
Se puede usar un StoppingCriteria para cambiar cuándo detener la generación (además del token EOS). Tenga en cuenta que esto está disponible exclusivamente en nuestras implementaciones de PyTorch.
Clase base abstracta para todos los criterios de parada que se pueden aplicar durante la generación.
Si su criterio de parada depende de la entrada scores, asegúrese de pasar return_dict_in_generate=True, output_scores=True a generate.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- scores (
tuple(torch.FloatTensor)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje, como una tupla con un tensor por paso de generación, cada uno de forma(batch_size, config.vocab_size). Estas pueden ser puntuaciones para cada token del vocabulario antes de SoftMax o puntuaciones para cada token del vocabulario después de SoftMax. Si este criterio de parada depende de la entradascores, asegúrate de pasarreturn_dict_in_generate=True, output_scores=Trueagenerate, de lo contrario se pasaNone. - kwargs (
dict[str, Any], opcional) — Criterios de parada adicionales específicos kwargs.
Devuelve
torch.BoolTensor. (torch.BoolTensor de forma (batch_size, 1))
True indica que detenemos la generación para una fila en particular.
False indica que debemos continuar.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- scores (
tuple(torch.FloatTensor)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje, como una tupla con un tensor por paso de generación, cada uno de forma(batch_size, config.vocab_size). Estas pueden ser puntuaciones para cada token del vocabulario antes de SoftMax o puntuaciones para cada token del vocabulario después de SoftMax. Si este criterio de parada depende de la entradascores, asegúrate de pasarreturn_dict_in_generate=True, output_scores=Trueagenerate, de lo contrario se pasaNone. - kwargs (
dict[str, Any], opcional) — Criterios de parada adicionales específicos kwargs.
Devuelve
torch.BoolTensor. (torch.BoolTensor de forma (batch_size, 1))
True indica que detenemos la generación para una fila en particular.
False indica que debemos continuar.
clase transformers.MaxLengthCriteria
< source >( max_length: intmax_position_embeddings: int | None = None )
Esta clase se puede usar para detener la generación en cualquier momento en que el número total de tokens generados exceda max_length. Tenga en cuenta que, en el caso de transformers de solo decodificador, esto incluirá los tokens iniciales del prompt.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- scores (
tuple(torch.FloatTensor)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje, como una tupla con un tensor por paso de generación, cada uno de forma(batch_size, config.vocab_size). Estas pueden ser puntuaciones para cada token del vocabulario antes de SoftMax o puntuaciones para cada token del vocabulario después de SoftMax. Si este criterio de parada depende de la entradascores, asegúrate de pasarreturn_dict_in_generate=True, output_scores=Trueagenerate, de lo contrario se pasaNone. - kwargs (
dict[str, Any], opcional) — Criterios de parada adicionales específicos kwargs.
Devuelve
torch.BoolTensor. (torch.BoolTensor de forma (batch_size, 1))
True indica que detenemos la generación para una fila en particular.
False indica que debemos continuar.
clase transformers.MaxTimeCriteria
< source >( max_time: floatinitial_timestamp: float | None = None )
Esta clase se puede usar para detener la generación en cualquier momento que la generación completa exceda cierta cantidad de tiempo. De forma predeterminada, el tiempo comienza a contarse cuando inicializas esta función. Puedes sobrescribir esto pasando un initial_timestamp.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- scores (
tuple(torch.FloatTensor)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje, como una tupla con un tensor por paso de generación, cada uno de forma(batch_size, config.vocab_size). Estas pueden ser puntuaciones para cada token del vocabulario antes de SoftMax o puntuaciones para cada token del vocabulario después de SoftMax. Si este criterio de parada depende de la entradascores, asegúrate de pasarreturn_dict_in_generate=True, output_scores=Trueagenerate, de lo contrario se pasaNone. - kwargs (
dict[str, Any], opcional) — Criterios de parada adicionales específicos kwargs.
Devuelve
torch.BoolTensor. (torch.BoolTensor de forma (batch_size, 1))
True indica que detenemos la generación para una fila en particular.
False indica que debemos continuar.
clase transformers.StopStringCriteria
< source >( tokenizer: PreTrainedTokenizerBasestop_strings: str | list[str] )
Parámetros
- tokenizer (
PreTrainedTokenizer) — El tokenizador asociado al modelo (necesario para extraer el vocabulario y tokenizar las secuencias de terminación) - stop_strings (
Union[str, list[str]]) — Una lista de cadenas que deben finalizar la generación. Si se pasa una cadena, se tratará como una lista con un único elemento.
Esta clase se puede usar para detener la generación en cualquier momento que se generen secuencias de caracteres específicas. Preprocesa las cadenas junto con el vocabulario del tokenizador para encontrar las posiciones donde los tokens pueden completar válidamente las cadenas de parada.
La generación se detiene en cuanto se genera un token que completa alguna de las cadenas de parada. Queremos detectar cualquier instancia en la que la cadena de parada esté presente en la salida decodificada, lo que significa que también debemos detectar los casos con “sobresalientes” en uno o ambos extremos. Para hacerlo más concreto, para la cadena de parada “stop”, cualquiera de las siguientes secuencias de tokens activaría la coincidencia:
- [“st”, “op”]
- [“stop”]
- [“st”, “opera”]
- [“sto”, “pper”]
- [“las”, “topper”]
- [“s”, “to”, “pped”]
Tenga en cuenta que solo se activará una coincidencia si la cadena de parada se encuentra al final de la secuencia generada. En otras palabras, estas secuencias no activarán una coincidencia:
- [“stop”, “at”]
- [“st”, “op”, “at”]
- [“st”, “opera”, “tion”]
La razón por la que no coinciden es que la cadena de parada no se superpone con el token final. Si se pueden eliminar uno o más tokens del final de la secuencia sin destruir la cadena de parada, este criterio no coincidirá con esa cadena de parada. Esto es por diseño; ya que esta comprobación se ejecuta después de que se genera cada token, no podemos pasar por alto una cadena de parada válida si se genera, pero no queremos detener la generación solo porque la cadena de parada exista en algún lugar de los input_ids de entrada anteriores.
¿Cómo se realiza realmente la coincidencia? Lo hacemos de una manera bastante confusa, porque queremos que todo el proceso de coincidencia sea compilable con Torch o XLA, lo que significa que no podemos usar métodos de cadena estándar. Sin embargo, es posible, con algo de trabajo, realizar la coincidencia de cadenas con operaciones puras de tensores. Comenzaremos describiendo el algoritmo que usamos con operaciones de cadena estándar, y al final explicaremos cómo se convierte esto en operaciones puras de tensores.
La clave del algoritmo es una observación: como la cadena de parada debe superponerse con el final de la secuencia de tokens, podemos comenzar en el final de la secuencia y trabajar hacia atrás. Específicamente, verificamos que exista una superposición entre el inicio del token final y el final de stop_string, o dicho de otra manera, stop_string[-i:] == token[:i] para algún i > 0. Si observa los ejemplos positivos anteriores, verá que el último token en todos ellos cumple esta propiedad:
- [“st”, “op”] (la superposición es “op”, longitud de superposición == 2)
- [“stop”] (la solapación es “stop”, longitud de solapación == 4)
- [“st”, “opera”] (la superposición es “op”, longitud de la superposición == 2)
- [“sto”, “pper”] (la superposición es “p”, longitud de superposición == 1)
- [“las”, “topper”] (la superposición es “top”, longitud de la superposición == 3)
- [“s”, “to”, “pped”] (la superposición es “p”, longitud de la superposición == 1)
Es imposible construir una secuencia coincidente que no tenga esta propiedad (puede verificarlo usted mismo). Sin embargo, aunque esta superposición entre el inicio del token final y el final de la cadena de parada es necesaria para una coincidencia, no es suficiente. También debemos comprobar que el resto de la secuencia de tokens sea coherente con la cadena de parada.
¿Cómo lo hacemos? Utilicemos [“s”, “to”, “pped”] como ejemplo. Sabemos que el token final, “pped”, tiene una superposición de 1 con la cadena de parada, “stop”. Luego retrocedemos al token anterior, “to”. Dado que ya hemos coincidido 1 carácter de la cadena de parada, el resto por verificar es “sto”. Comprobamos que el siguiente token “to” coincide con el final del resto, y así es. Ahora hemos coincidido 3 caracteres de la cadena de parada, y el resto por coincidir es “s”. Retrocedemos de nuevo al token anterior, que también es “s”. Esta es una coincidencia, por lo que hemos coincidido con la cadena de parada completa.
¿Cómo funciona cuando los tokens se extienden más allá del inicio de la cadena de parada? Consideremos el ejemplo de [“las”, “topper”]. El token final, “topper”, tiene una superposición de 3 con la cadena de parada, “stop”. Por lo tanto, la parte restante de la cadena de parada que debe coincidir es “s”. Volvemos al token anterior, “las”. Dado que el resto que debe coincidir es solo “s”, con longitud 1, consideramos únicamente el último carácter del token, que es “s”. Esto coincide con la cadena de parada, por lo que la cadena completa coincide.
¿Cómo calculamos estas coincidencias con operaciones de tensores? Simplemente: precalculamos de forma eficiente la información necesaria para todos los tokens. Para cada token, calculamos:
- Su solapamiento con el final de la cadena de parada, si lo hay
- Las posiciones dentro de la cadena de parada donde el token coincide, incluidas las coincidencias que se extienden más allá del inicio.
- La longitud total del token
Por ejemplo, para el token “pped”, calcularíamos una superposición final de 1, sin posiciones de coincidencia internas, y una longitud de 4. Para el token “to”, calcularíamos sin superposición final, una única posición de coincidencia interna de 1 (contando desde el final) y una longitud de 2. Para el token “s”, calcularíamos sin superposición final, una única posición de coincidencia interna de 3 (nuevamente contando desde el final) y una longitud de 1.
Mientras tengamos esta información, podemos ejecutar el algoritmo anterior sin ninguna operación de comparación de cadenas. Simplemente realizamos los siguientes pasos:
- Comprueba si el token final tiene una superposición final con la cadena de inicio
- Continúa hacia atrás, manteniendo un registro de cuánto de la cadena de parada hemos coincidido hasta ahora
- En cada punto, compruebe si el siguiente token tiene la posición actual como una de sus posiciones válidas
- Continúe hasta que una coincidencia falle o hasta que coincida completamente con la cadena de parada completa
De nuevo, consideremos [“s”, “to”, “pped”] como ejemplo. “pped” tiene una superposición final de 1, por lo que podemos comenzar una coincidencia. Hemos coincidido 1 carácter hasta ahora, por lo que comprobamos que el siguiente token “to” tiene 1 como posición válida (de nuevo, contando desde el final). Es así, por lo que añadimos la longitud de “to” a nuestro rastreador de posición. Ahora hemos coincidido 3 caracteres, por lo que comprobamos que el siguiente token “s” tiene 3 como posición válida. Es así, por lo que añadimos su longitud al rastreador de posición. El rastreador de posición ahora es 4, que es la longitud de la cadena de parada. Hemos coincidido con la cadena de parada completa.
En el segundo caso, [“las”, “topper”], “topper” tiene una superposición final de 3, por lo que podemos comenzar una coincidencia. Hasta ahora hemos coincidido 3 caracteres, así que comprobamos que el siguiente token “las” tiene 3 como posición válida. Es así, porque permitimos que los tokens coincidan con posiciones que se extienden más allá del inicio de la cadena de parada. Añadimos su longitud al rastreador de posiciones. El rastreador de posiciones ahora es 6, ¡que es mayor que la longitud de la cadena de parada! Sin embargo, no hay que entrar en pánico: esto también cuenta como una coincidencia de la cadena de parada. Hemos coincidido con la cadena de parada completa.
Ejemplos:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2")
>>> inputs = tokenizer("The biggest states in the USA by land area:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas
- California
>>> # Passing one or more stop strings will halt generation after those strings are emitted
>>> # Note that generating with stop strings requires you to pass the tokenizer too
>>> gen_out = model.generate(**inputs, stop_strings=["Texas"], tokenizer=tokenizer)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- scores (
tuple(torch.FloatTensor)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje, como una tupla con un tensor por paso de generación, cada uno de forma(batch_size, config.vocab_size). Estas pueden ser puntuaciones para cada token del vocabulario antes de SoftMax o puntuaciones para cada token del vocabulario después de SoftMax. Si este criterio de parada depende de la entradascores, asegúrate de pasarreturn_dict_in_generate=True, output_scores=Trueagenerate, de lo contrario se pasaNone. - kwargs (
dict[str, Any], opcional) — Criterios de parada adicionales específicos kwargs.
Devuelve
torch.BoolTensor. (torch.BoolTensor de forma (batch_size, 1))
True indica que detenemos la generación para una fila en particular.
False indica que debemos continuar.
clase transformers.EosTokenCriteria
< source >( eos_token_id: typing.Union[int, list[int], torch.Tensor] )
Esta clase se puede usar para detener la generación en cuanto se genere el token de “fin de secuencia”.
Por defecto, utiliza model.generation_config.eos_token_id.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | Nonenew_token_length: int = 1**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- scores (
tuple(torch.FloatTensor)) — Puntuaciones de predicción de una cabeza de modelado de lenguaje, como una tupla con un tensor por paso de generación, cada uno de forma(batch_size, config.vocab_size). Estas pueden ser puntuaciones para cada token del vocabulario antes de SoftMax o puntuaciones para cada token del vocabulario después de SoftMax. Si este criterio de parada depende de la entradascores, asegúrese de pasarreturn_dict_in_generate=True, output_scores=Trueagenerate, de lo contrario se pasaNone. - new_token_length (
int, opcional, valor predeterminado1) — El número de tokens que se verificarán para los criterios. Se verificarán los últimosnew_token_lengthtokens de cada elemento del lote. - kwargs (
dict[str, Any], opcional) — Criterios de parada adicionales específicos kwargs.
Devuelve
torch.BoolTensor. (torch.BoolTensor de forma (batch_size, 1))
True indica que detenemos la generación para una fila en particular.
False indica que debemos continuar.
Streamers
clase transformers.TextStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = False**decode_kwargs: Any )
Parámetros
- tokenizer (
AutoTokenizer) — El tokenizador utilizado para decodificar los tokens. - skip_prompt (
bool, opcional, valor predeterminadoFalse) — Indica si se debe omitir el prompt para.generate()o no. Útil, por ejemplo, para chatbots. - decode_kwargs (
dict, opcional) — Argumentos de palabra clave adicionales para pasar al métododecodedel tokenizador.
Streamer de texto simple que imprime los tokens en stdout en cuanto se forman palabras completas.
Ejemplos:
>>> 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,Descarga cualquier caché restante e imprime un salto de línea en la salida estándar.
Imprime el nuevo texto en stdout. Si el flujo está terminando, también imprime un salto de línea.
Recibe tokens, los decodifica y los imprime en stdout en cuanto forman palabras completas.
clase transformers.TextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
Parámetros
- tokenizer (
AutoTokenizer) — El tokenizador utilizado para decodificar los tokens. - skip_prompt (
bool, opcional, valor predeterminadoFalse) — Indica si se debe omitir el prompt para.generate()o no. Útil, por ejemplo, para chatbots. - timeout (
float, opcional) — El tiempo de espera para la cola de texto. Si esNone, la cola bloqueará indefinidamente. Útil para manejar excepciones en.generate()cuando se llama en un hilo separado. - decode_kwargs (
dict, opcional) — Argumentos de palabra clave adicionales para pasar al métododecodedel tokenizador.
Streamer que almacena texto listo para imprimir en una cola, para ser utilizado por una aplicación aguas abajo como un iterador. Esto es útil para aplicaciones que se benefician de acceder al texto generado de manera no bloqueante (p. ej., en una demo interactiva de Gradio).
Ejemplos:
>>> 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,'Coloca el nuevo texto en la cola. Si el flujo está terminando, coloca también una señal de parada en la cola.
clase transformers.AsyncTextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
Parámetros
- tokenizer (
AutoTokenizer) — El tokenizador utilizado para decodificar los tokens. - skip_prompt (
bool, opcional, valor predeterminadoFalse) — Indica si se debe omitir el prompt para.generate()o no. Útil, por ejemplo, para chatbots. - timeout (
float, opcional) — El tiempo de espera para la cola de texto. Si esNone, la cola bloqueará indefinidamente. Útil para manejar excepciones en.generate()cuando se llama en un hilo separado. - decode_kwargs (
dict, opcional) — Argumentos de palabra clave adicionales para pasar al métododecodedel tokenizador.
Lanza
TimeoutError
TimeoutError— Si el tiempo de generación de tokens supera el valor de timeout.
Streamer que almacena texto listo para imprimir en una cola, para ser utilizado por una aplicación aguas abajo como un iterador asíncrono. Esto es útil para aplicaciones que se benefician de acceder al texto generado de forma asíncrona (p. ej. en una demo interactiva de Gradio).
Ejemplos:
>>> 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,Coloca el nuevo texto en la cola. Si el flujo está terminando, coloca también una señal de parada en la cola.
clase transformers.TextDiffusionStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsesleep_time: float | None = None**decode_kwargs: Any )
Parámetros
- tokenizer (
AutoTokenizer) — El tokenizado utilizado para decodificar los tokens. - skip_prompt (
bool, opcional, valor predeterminadoFalse) — Indica si se debe omitir el prompt para.generate()o no. Útil, por ejemplo, para chatbots. - sleep_time (
float, opcional) — Tiempo de espera entre los borradores de difusión, que puede ser útil para visualizar las salidas intermedias. - decode_kwargs (
dict, opcional) — Argumentos de palabra clave adicionales para pasar al métododecodedel tokenizador.
Streamer que imprime las salidas de difusión de texto. Los pasos intermedios de difusión (borradores) son temporales y se sobrescriben con los borradores posteriores, y se eliminan cuando se imprime el texto confirmado.
Si estás trabajando en un entorno como tmux, es posible que el texto de borrador no se sobrescriba a sí mismo.
Ejemplos:
>>> 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)Vacía cualquier caché restante e imprime un salto de línea.
Recibe los tokens confirmados, limpia el borrador y los imprime de forma permanente.
Recibe la secuencia completa de tokens de borrador, los decodifica y los imprime en amarillo. Sobrescribe el borrador anterior.
Cachés
Base, clase abstracta para la caché de una sola capa.
Devuelve la longitud máxima de secuencia que la capa puede almacenar. Un valor de -1 significa que no hay un máximo, o que el máximo no está definido, por ejemplo, una capa de atención dinámica que crece indefinidamente o una capa de atención lineal que no tiene una dimensión de longitud de secuencia.
Restablece los valores de la caché mientras preserva los objetos
Reordena la caché de esta capa para la búsqueda por haz.
Una capa de caché que crece dinámicamente a medida que se generan más tokens. Este es el valor predeterminado para los modelos generativos.
Almacena los estados de clave y valor como tensores de forma [batch_size, num_heads, seq_len, head_dim].
actualizar
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Actualice las cachés de claves y valores in-place y devuelva los estados de claves y valores necesarios.
Elimina los tokens tokens_to_remove de la capa de caché actual.
Repite la caché repeats veces en la dimensión del lote.
Conserva solo los indices en la dimensión del lote de la caché.
clase transformers.StaticLayer
< source >( max_cache_len: int**kwargs )
Una capa de caché estática que almacena los estados de clave y valor como tensores estáticos de forma [batch_size, num_heads, max_cache_len, head_dim].
Asigna de forma perezosa sus tensores de respaldo completos y luego los modifica in situ. Está diseñado para admitir torch.compile.
actualizar
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Actualice las cachés de claves y valores in-place y devuelva los estados de claves y valores necesarios.
Inicialización perezosa de los tensores de claves y valores. Esto permite obtener todas las propiedades (dtype, device, num_heads en caso de TP, etc.) directamente en tiempo de ejecución, lo cual es extremadamente práctico ya que evita mover dispositivos, dtypes, etc. más adelante para cada update (lo que también podría romper las direcciones estáticas de dynamo).
Si esto no es deseado, se puede llamar a early_initialization(...) directamente en la Cache, lo que invocará esta función de antemano (esto es necesario, por ejemplo, para torch.export). También es necesario siempre que el prefill en sí termine en una región compilada (por ejemplo, con prefill por fragmentos).
clase transformers.StaticSlidingWindowLayer
< source >( max_cache_len: intsliding_window: int**kwargs )
Una capa de caché estática que almacena los estados de clave y valor como tensores estáticos de forma [batch_size, num_heads, min(max_cache_len, sliding_window), head_dim]. Asigna de forma perezosa sus tensores de respaldo completos y luego los modifica in situ. Diseñada para el soporte de torch.compile.
actualizar
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Actualice las cachés de claves y valores in-place y devuelva los estados de claves y valores necesarios.
Inicialización perezosa de los tensores de claves y valores. Esto permite obtener todas las propiedades (dtype, device, num_heads en caso de TP, etc.) directamente en tiempo de ejecución, lo cual es extremadamente práctico ya que evita mover dispositivos, dtypes, etc. más adelante para cada update (lo que también podría romper las direcciones estáticas de dynamo).
Si esto no es deseado, se puede llamar a early_initialization(...) directamente en la Cache, lo que invocará esta función de antemano (esto es necesario, por ejemplo, para torch.export). También es necesario siempre que el prefill en sí termine en una región compilada (por ejemplo, con prefill por fragmentos).
clase transformers.QuantoQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
actualizar
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Actualice las cachés de claves y valores in-place y devuelva los estados de claves y valores necesarios.
clase transformers.HQQQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
actualizar
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Actualice las cachés de claves y valores in-place y devuelva los estados de claves y valores necesarios.
Una capa cuantizada que almacena los estados de clave y valor en punto flotante de 8 bits. La escala por tensor se congela después de la primera update, por lo que los nuevos estados se agregan tal cual: sin caché residual y sin recuantización.
Una variante de menor granularidad corresponde aquí y no bajo QuantizedLayer, ya que agrupar a lo largo de la dimensión de cabeceras mantiene los estados apendibles y solo convierte la escala almacenada en un tensor.
actualizar
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Actualice las cachés de claves y valores in-place y devuelva los estados de claves y valores necesarios.
clase transformers.Cache
< source >( layers: list[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin | transformers.cache_utils.DummyLayer] | None = Nonelayer_class_to_replicate: type[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin] | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = True )
Parámetros
- layers (
Optional, opcional) — Una lista deCacheLayerMixinoLinearAttentionCacheLayerMixinprecreados. Si se omite (None), se utilizarálayer_class_to_replicate. - layer_class_to_replicate (
type[CacheLayerMixin | LinearAttentionCacheLayerMixin], opcional) — Solo se utiliza si se omitelayers(None), en cuyo caso se usará como clase base para cada capa, y las capas se añadirán de forma perezosa en cuanto se llame aupdatecon unlayer_idxmayor que el de la lista actual de capas. - offloading (
bool, opcional, valor predeterminadoFalse) — Si se realiza el offloading de las capas acpupara ahorrar memoria de GPU. - offload_only_non_sliding (
bool, opcional, valor predeterminadoTrue) — SioffloadingesTrue, este parámetro determina si solo se descargarán las capas no deslizantes (ya que generalmente las capas deslizantes son pequeñas en tamaño, por lo que no es necesario descargarlas y omitirlo es más rápido).
Un Cache es principalmente una lista de objetos CacheLayerMixin, uno por cada capa del modelo. Sirve como contenedor para el Cache de cada capa.
actualizar
< source >( key_states: Tensorvalue_states: Tensorlayer_idx: int*args**kwargs )
Actualiza la caché con los nuevos key_states y value_states para la capa layer_idx.
early_initialization
< source >( batch_size: intnum_heads: int | list[int]head_dim: int | list[int]dtype: dtypedevice: device )
Inicializa todas las capas de antemano (de lo contrario, se inicializan de forma perezosa en la primera llamada a update).
Esto es útil para nuestras recetas de export, ya que export necesita todo de antemano.
Devuelve la longitud de la secuencia de la caché para la capa indicada.
Devuelve una tupla (kv_length, kv_offset) que corresponde a la longitud y el desplazamiento que se devolverán para la capa dada en layer_idx.
A continuación, las máscaras se preparan según las longitudes (kv_length, kv_offset) y los patrones dados para cada capa.
Devuelve la longitud máxima de la caché. Si no se proporciona layer_idx (valor predeterminado), devuelve el máximo
entre todas las capas. En caso contrario, devuelve el valor máximo admitido para la capa indicada.
Un valor de -1 significa que no hay máximo, o que el máximo no está definido, por ejemplo, para capas de atención dinámica que pueden crecer indefinidamente,
o capas de atención lineal que no tienen una dimensión de longitud de secuencia.
Restablecer recursivamente los tensores de todas las capas
Reordenar la caché para la búsqueda por haz
Elimina los tokens tokens_to_remove de la Cache actual. Para las capas que no necesitan mantener todos los estados pasados en memoria, como las capas de ventana deslizante o las capas de atención lineal, esto también limitará el tamaño de los estados en caché a su tamaño de trabajo mínimo. Esto significa que crop(0) no será necesariamente una operación sin efecto, ya que aún puede eliminar estados innecesarios (es decir, estados que no se necesitan para el próximo forward) de la Cache.
Repetir e intercalar la caché
Seleccionar índices de la caché
clase transformers.DynamicCache
< source >( ddp_cache_data: collections.abc.Iterable[tuple[typing.Optional[torch.Tensor], ...]] | None = Noneconfig: transformers.configuration_utils.PreTrainedConfig | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = False )
Parámetros
- ddp_cache_data (
Iterable[tuple[torch.Tensor, torch.Tensor]], opcional) — Se añadió originalmente para compatibilidad contorch.distributed(DDP). En resumen, esmap(gather_map, zip(*caches)), es decir, cada elemento del iterable contiene los estados de clave y valor para una capa recopilados entre réplicas por torch.distributed (shape=[global batch size, num_heads, seq_len, head_dim]). Nota: también debe ser el 1er argumento para que funcione correctamente - config (
PreTrainedConfig, opcional) — La configuración del modelo para el que se usará esta Cache. Si se pasa, se utilizará para comprobar la estructura de capas deslizantes o híbridas, reduciendo en gran medida el requisito de memoria de los tensores en caché a[batch_size, num_heads, min(seq_len, sliding_window), head_dim]. - offloading (
bool, opcional, valor predeterminadoFalse) — Si se realiza el offloading de las capas acpupara ahorrar memoria de GPU. - offload_only_non_sliding (
bool, opcional, valor predeterminadoFalse) — SioffloadingesTrue, este parámetro determina si solo se descargarán las capas no deslizantes (ya que generalmente las capas deslizantes son pequeñas en tamaño, por lo que no es necesario descargarlas y omitirlo es más rápido).
Una caché que crece dinámicamente a medida que se generan más tokens. Este es el valor predeterminado para los modelos generativos.
Almacena los estados de clave y valor como una lista de CacheLayer, uno por cada capa. La forma esperada para cada tensor
en las CacheLayer es [batch_size, num_heads, seq_len, head_dim].
Si se pasa una configuración, también se comprueba la estructura de caché deslizante o híbrida, reduciendo en gran medida el
requisito de memoria de los tensores en caché a [batch_size, num_heads, min(seq_len, sliding_window), head_dim].
Consulte Cache para obtener detalles sobre los métodos comunes que implementan todas las clases de caché.
Ejemplo:
>>> 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 generationclase transformers.StaticCache
< source >( config: PreTrainedConfigmax_cache_len: intoffloading: bool = Falseoffload_only_non_sliding: bool = True**kwargs )
Parámetros
- config (
PreTrainedConfig) — La configuración del modelo para el que se usará esta Cache. Se utilizará para verificar la estructura de capas deslizantes o híbridas e inicializar cada capa en consecuencia. - max_cache_len (
int) — El número máximo de tokens que esta Cache debe contener. - offloading (
bool, opcional, valor predeterminadoFalse) — Si se realiza el offloading de las capas acpupara ahorrar memoria de GPU. - offload_only_non_sliding (
bool, opcional, valor predeterminadoTrue) — SioffloadingesTrue, este parámetro determina si solo se descargarán las capas no deslizantes (ya que generalmente las capas deslizantes son pequeñas en tamaño, por lo que no es necesario descargarlas y omitirlo es más rápido).
Clase de caché estática para usar con torch.compile(model) y torch.export(). Revisará la config en busca de una posible estructura de caché híbrida e inicializará cada capa en consecuencia.
Consulte Cache para obtener detalles sobre los métodos comunes que implementan todas las clases de caché.
Ejemplo:
>>> 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()clase transformers.QuantizedCache
< source >( backend: strconfig: PreTrainedConfignbits: int | None = Noneaxis_key: int | None = Noneaxis_value: int | None = Noneq_group_size: int | None = Noneresidual_length: int | None = None )
Parámetros
- backend (
str) — El backend de cuantización a utilizar. Uno de("quanto", "hqq", "fp8"). - config (
PreTrainedConfig) — La configuración del modelo para el que se usará esta Cache. - nbits (
int, opcional, valor predeterminado 4) — El número de bits para la cuantización. - axis_key (
int, opcional, valor predeterminado 0) — El eje sobre el que cuantizar las claves. - axis_value (
int, opcional, valor predeterminado 0) — El eje sobre el que cuantizar los valores. - q_group_size (
int, opcional, valor predeterminado 64) — La cuantización se realiza por canal según unq_group_sizeestablecido para ambas claves y valores. - residual_length (
int, opcional, valor predeterminado 128) — Capacidad máxima para la caché de precisión original.
Un caché de cuantizador similar al descrito en el artículo KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache.
Permite que el modelo genere secuencias de mayor longitud sin asignar demasiada memoria para las claves y los valores
mediante la aplicación de cuantización.
El caché tiene dos tipos de almacenamiento, uno para la precisión original y otro para el
caché cuantizado. Se establece una residual length como capacidad máxima para el caché de precisión original. Cuando la
longitud supera la capacidad máxima, el caché de precisión original se descarta y se mueve al caché cuantizado.
La cuantización se realiza por canal con un q_group_size establecido para ambas claves y valores, a diferencia de lo que se
describió en el artículo.
Consulte Cache para obtener detalles sobre los métodos comunes que implementan todas las clases de caché.
Los últimos cinco argumentos configuran los backends de enteros por grupo. El backend fp8 cuantiza por tensor y los rechaza.
clase transformers.EncoderDecoderCache
< source >( *caches )
Parámetros
- caches (
Iterable) — Normalmente, un iterable de longitud 2 que contiene 2 objetosCache, el primero para la autoatención y el segundo para la atención cruzada. Opcionalmente, también puede ser un iterable de longitud 1 que contiene unatuple[tuple[torch.Tensor]](se usa habitualmente para compatibilidad con torch dp y ddp).
Clase base y abstracta para todas las cachés de codificador-decodificador. Puede usarse para contener combinaciones de cachés de autoatención y atención cruzada.
Consulte Cache para obtener detalles sobre los métodos comunes que implementan todas las clases de caché.
Ejemplo:
>>> 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()Repite la caché repeats veces en la dimensión del lote. Se utiliza en la búsqueda contrastiva (en el Hub).
Conserva solo los indices en la dimensión del lote de la caché. Se utiliza en la búsqueda contrastiva (en el Hub).
Elimina los tokens tokens_to_remove de la capa de caché actual.
Devuelve la longitud máxima de la secuencia (es decir, la capacidad máxima) del objeto de caché
Devuelve la longitud de la secuencia de los estados en caché. Se puede pasar opcionalmente un índice de capa.
Reordena la caché para la búsqueda por haces, dados los índices de los haces seleccionados.
Utilidades de marca de agua
clase transformers.WatermarkingConfig
< source >( greenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
Clase que contiene los argumentos para la generación de marcas de agua y que debe pasarse a GenerationConfig durante generate.
Consulte este artículo para obtener más detalles sobre los argumentos.
Acepta las siguientes claves:
- greenlist_ratio (
float): Se utiliza para el marcado de agua. La proporción de tokens “verdes” utilizados en relación con el tamaño del vocabulario. El valor predeterminado es 0.25. - bias (
float): Se usa con watermarking. El sesgo que se suma a los logits de los tokens “green” seleccionados. El valor predeterminado es 2.0. - hashing_key (
int): Clave de hash utilizada para la marca de agua. El valor predeterminado es 15485863 (el millón primo). - seeding_scheme (
str): Algoritmo a utilizar para la marca de agua. Acepta los siguientes valores:- “lefthash” (predeterminado): la selección de tokens “green” depende del último token (Algoritmo 2 del artículo)
- “selfhash”: la selección de tokens “green” depende del propio token actual (Algoritmo 3 del artículo) La desventaja de este esquema es que considera todos los tokens siguientes posibles y puede ser más lento que “lefthash”.
- context_width(
int): La longitud de contexto de los tokens anteriores que se utilizará en la siembra. Una longitud de contexto mayor hace que el marcaje de agua sea más robusto.
clase transformers.WatermarkDetector
< source >( model_config: PreTrainedConfigdevice: strwatermarking_config: typing.Union[ForwardRef('WatermarkingConfig'), dict]ignore_repeated_ngrams: bool = Falsemax_cache_size: int = 128 )
Parámetros
- model_config (
PreTrainedConfig) — La configuración del modelo que se utilizará para obtener los argumentos específicos del modelo empleados durante la generación. - device (
str) — El dispositivo que se utilizó durante la generación de texto con marca de agua. - watermarking_config (Union[
WatermarkingConfig,Dict]) — La configuración y los argumentos de marca de agua exactos utilizados al generar texto. - ignore_repeated_ngrams (
bool, opcional, valor predeterminadoFalse) — Si se cuenta cada ngrama único solo una vez o no. - max_cache_size (
int, opcional, valor predeterminado 128) — El tamaño máximo que se usará para la caché LRU de los algoritmos de inicialización/muestreo llamados para cada token.
Detector para la detección de texto generado con marca de agua. El detector debe recibir exactamente la misma configuración que se proporcionó durante la generación del texto para replicar la generación de la lista verde de la marca de agua y, así, detectar la marca de agua. Esto incluye el dispositivo correcto utilizado durante la generación del texto, los argumentos correctos de marca de agua y el tamaño correcto del vocabulario del tokenizador. El código se basó en el repositorio original.
Consulte el artículo para obtener más información.
Ejemplos:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkDetector, WatermarkingConfig
>>> model_id = "openai-community/gpt2"
>>> model = AutoModelForCausalLM.from_pretrained(model_id)
>>> tok = AutoTokenizer.from_pretrained(model_id)
>>> tok.pad_token_id = tok.eos_token_id
>>> tok.padding_side = "left"
>>> inputs = tok(["This is the beginning of a long story", "Alice and Bob are"], padding=True, return_tensors="pt")
>>> input_len = inputs["input_ids"].shape[-1]
>>> # first generate text with watermark and without
>>> watermarking_config = WatermarkingConfig(bias=2.5, seeding_scheme="selfhash")
>>> out_watermarked = model.generate(**inputs, watermarking_config=watermarking_config, do_sample=False, max_length=20)
>>> out = model.generate(**inputs, do_sample=False, max_length=20)
>>> # now we can instantiate the detector and check the generated text
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config)
>>> detection_out_watermarked = detector(out_watermarked, return_dict=True)
>>> detection_out = detector(out, return_dict=True)
>>> detection_out_watermarked.prediction
array([ True, True])
>>> detection_out.prediction
array([False, False])__call__
< source >( input_ids: LongTensorz_threshold: float = 3.0return_dict: bool = False ) → WatermarkDetectorOutput or np.ndarray
Parámetros
- input_ids (
torch.LongTensor) — El texto generado con marca de agua. Se recomienda eliminar el prompt, ya que puede afectar la detección. - z_threshold (
Dict, opcional, valor predeterminado3.0) — Cambiar este umbral modifica la sensibilidad del detector. Un umbral z más alto reduce la sensibilidad y viceversa para un umbral z más bajo. - return_dict (
bool, opcional, por defectoFalse) — Si se debe devolver~generation.WatermarkDetectorOutputo no. En caso contrario, se devolverán predicciones booleanas,
Devuelve
WatermarkDetectorOutput o np.ndarray
Un WatermarkDetectorOutput
si return_dict=True, de lo contrario un np.ndarray.
ma
clase transformers.BayesianDetectorConfig
< source >( watermarking_depth: int | None = Nonebase_rate: float = 0.5**kwargs )
Esta es la clase de configuración para almacenar la configuración de un BayesianDetectorModel. Se utiliza para instanciar un modelo Bayesian Detector según los argumentos especificados.
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
clase transformers.BayesianDetectorModel
< source >( config )
Parámetros
- config (BayesianDetectorConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
Clasificador bayesiano para la detección de marcas de agua.
Este detector utiliza la regla de Bayes para calcular una puntuación de marca de agua, que es la sigmoide del logaritmo de la razón entre las probabilidades a posteriori P(watermarked|g_values) y P(unwatermarked|g_values). Consulte la sección sobre BayesianScore en el artículo para obtener más detalles. URL del artículo: https://www.nature.com/articles/s41586-024-08025-4
Tenga en cuenta que este detector solo funciona con marcas de agua basadas en torneos no distorsionantes que utilizan la distribución de valores g Bernoulli(0.5).
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( g_values: Tensormask: Tensorlabels: typing.Optional[torch.Tensor] = Noneloss_batch_weight = 1return_dict = False )
Calcula la posterior con marca de agua P(watermarked|g_values).
clase transformers.SynthIDTextWatermarkingConfig
< source >( ngram_len: intkeys: listcontext_history_size: int = 1024sampling_table_seed: int = 0sampling_table_size: int = 65536skip_first_ngram_calls: bool = Falsedebug_mode: bool = False )
Parámetros
- ngram_len (
int) — Longitud del ngram. - keys (
list[int]) — Una secuencia de claves de marca de agua, una para cada profundidad. - context_history_size (
int, opcional, valor predeterminado 1024) — Tamaño del tensor para llevar un registro de los contextos vistos. - sampling_table_seed (
int, opcional, valor predeterminado 0) — Semilla aleatoria para generar la tabla de muestreo. - sampling_table_size (
int, opcional, valor predeterminado 65536) — Tamaño de la tabla de muestreo. - skip_first_ngram_calls (
bool, opcional, valor predeterminadoFalse) — Si se deben omitir las primeras llamadas de ngram. - debug_mode (
bool, opcional, valor predeterminadoFalse) — Los logits se modifican a uno uniforme antes de que se aplique la modificación de marca de agua. Esto es para probar la implementación.
Clase que contiene los argumentos para la generación de marcas de agua y que debe pasarse a GenerationConfig durante generate.
Consulte este artículo para obtener más detalles sobre los argumentos.
Ejemplos:
>>> 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)clase transformers.SynthIDTextWatermarkDetector
< source >( detector_module: BayesianDetectorModellogits_processor: SynthIDTextWatermarkLogitsProcessortokenizer: Any )
Parámetros
- detector_module (BayesianDetectorModel) — Objeto del módulo detector bayesiano inicializado con parámetros. Consulte https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text para ver su uso.
- logits_processor (
SynthIDTextWatermarkLogitsProcessor) — El procesador de logits utilizado para la marca de agua. - tokenizer (
Any) — El tokenizador utilizado para el modelo.
Clase del detector de marca de agua de texto SynthID.
Esta clase debe inicializarse con el módulo de detector bayesiano entrenado. Consulte el script de verificación en examples/synthid_text/detector_training.py para ver, por ejemplo, cómo entrenar, guardar y cargar este módulo de detector. La carpeta también muestra un caso de uso de ejemplo de este detector.
Ejemplos:
>>> 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)Utilidades de compilación
clase transformers.CompileConfig
< source >( fullgraph: bool = Falsedynamic: bool | None = Nonebackend: str | collections.abc.Callable = 'inductor'mode: str = 'reduce-overhead'options: dict | None = None )
Parámetros
- fullgraph (
bool, opcional, valor predeterminadoFalse) — Si es False (predeterminado), intenta descubrir regiones compilables que se optimizarán. Si es True, se requiere que la función completa sea capturable en un único grafo. Si esto no es posible (es decir, si hay interrupciones de grafo), se generará un error. - dynamic (
booloNone, opcional) — Si se debe intentar usar grafos de forma dinámica. - backend (
stroCallable, opcional, por defecto"inductor") — Backend a utilizar. - mode (
str, opcional, valor predeterminado"reduce-overhead") — Controla el equilibrio entre el rendimiento y la sobrecarga. - options (
dict, opcional) — Un diccionario de opciones para pasar al backend.
Clase que contiene los argumentos relativos al comportamiento de torch.compile al usar la compilación automática en generate.
Consulte torch.compile para obtener más detalles sobre los argumentos.
Ejemplos:
>>> 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]