Transformers 文档

生成工具

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

生成工具

此页面列出了 generate() 使用的所有工具函数。

生成输出

generate() 的输出是 ModelOutput 的一个子类的实例。这个输出是一个数据结构,包含了 generate() 返回的所有信息,但也可以作为元组或字典使用。

这是一个示例:

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)

generation_output 对象是一个 GenerateDecoderOnlyOutput,正如我们在下面该类的文档中所看到的,它意味着它具有以下属性:

  • sequences:生成的 token 序列
  • scores (可选):语言建模头的预测分数,针对每个生成步骤
  • hidden_states (可选):模型的隐藏状态,针对每个生成步骤
  • attentions (可选):模型的注意力权重,针对每个生成步骤

这里我们有 scores,因为我们传递了 output_scores=True,但我们没有 hidden_statesattentions,因为我们没有传递 output_hidden_states=Trueoutput_attentions=True

你可以像往常一样访问每个属性,如果该属性没有被模型返回,你将得到 None。例如,在这里 generation_output.scores 是语言建模头生成的所有预测分数,而 generation_output.attentionsNone

当将我们的 generation_output 对象用作元组时,它只保留那些值不为 None 的属性。例如,在这里,它有两个元素,先是 loss 然后是 logits,所以:

generation_output[:2]

将返回元组 (generation_output.sequences, generation_output.scores)

当将我们的 generation_output 对象用作字典时,它只保留那些值不为 None 的属性。例如,在这里,它有两个键,分别是 sequencesscores

我们在这里记录了所有输出类型。

PyTorch

class transformers.generation.GenerateDecoderOnlyOutput

< >

( sequences: LongTensor scores: typing.Optional[tuple[torch.FloatTensor]] = None logits: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None hidden_states: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None past_key_values: typing.Optional[tuple[tuple[tuple[torch.FloatTensor]]]] = None )

参数

  • sequences (torch.LongTensor,形状为 (batch_size, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前结束,则会更短。
  • scores (tuple(torch.FloatTensor),*可选*,在 output_scores=True 时返回) — 语言建模头在每个生成步骤的已处理预测分数(每个词汇表 token 在 SoftMax 之前的分数)。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size, config.vocab_size)
  • logits (tuple(torch.FloatTensor),*可选*,在 output_logits=True 时返回) — 语言建模头在每个生成步骤的未处理预测分数(每个词汇表 token 在 SoftMax 之前的分数)。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size, config.vocab_size)
  • attentions (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_attentions=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)torch.FloatTensor
  • hidden_states (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_hidden_states=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, generated_length, hidden_size)torch.FloatTensor
  • past_key_values (tuple(tuple(torch.FloatTensor))), *可选*, 在 use_cache=True 时返回) — 返回模型缓存,用于加速解码。不同模型的缓存格式不同,请查阅模型的文档。通常是 Cache 的实例。

仅解码器生成模型在使用非束搜索方法时的输出。

class transformers.generation.GenerateEncoderDecoderOutput

< >

( sequences: LongTensor scores: typing.Optional[tuple[torch.FloatTensor]] = None logits: typing.Optional[tuple[torch.FloatTensor]] = None encoder_attentions: typing.Optional[tuple[torch.FloatTensor]] = None encoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None decoder_attentions: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None cross_attentions: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None past_key_values: typing.Optional[tuple[tuple[tuple[torch.FloatTensor]]]] = None )

参数

  • sequences (torch.LongTensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前结束,则会更短。
  • scores (tuple(torch.FloatTensor),*可选*,在 output_scores=True 时返回) — 语言建模头在每个生成步骤的已处理预测分数(每个词汇表 token 在 SoftMax 之前的分数)。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size, config.vocab_size)
  • logits (tuple(torch.FloatTensor),*可选*,在 output_logits=True 时返回) — 语言建模头在每个生成步骤的未处理预测分数(每个词汇表 token 在 SoftMax 之前的分数)。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size, config.vocab_size)
  • encoder_attentions (tuple(torch.FloatTensor), *可选*, 在 output_attentions=True 时返回) — torch.FloatTensor 的元组(解码器每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(torch.FloatTensor), *可选*, 在 output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入层输出 + 每个层一个),形状为 (batch_size, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_attentions=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)torch.FloatTensor
  • cross_attentions (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_attentions=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)torch.FloatTensor
  • decoder_hidden_states (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_hidden_states=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, generated_length, hidden_size)torch.FloatTensor
  • past_key_values (tuple(tuple(torch.FloatTensor))), *可选*, 在传递 use_cache=Trueconfig.use_cache=True 时返回) — 返回模型缓存,用于加速解码。不同模型的缓存格式不同,请查阅模型的文档。通常是 Cache 的实例。

编码器-解码器生成模型在使用非束搜索方法时的输出。

class transformers.generation.GenerateBeamDecoderOnlyOutput

< >

( sequences: LongTensor sequences_scores: typing.Optional[torch.FloatTensor] = None scores: typing.Optional[tuple[torch.FloatTensor]] = None logits: typing.Optional[tuple[torch.FloatTensor]] = None beam_indices: typing.Optional[torch.LongTensor] = None attentions: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None hidden_states: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None past_key_values: typing.Optional[tuple[tuple[tuple[torch.FloatTensor]]]] = None )

参数

  • sequences (torch.LongTensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前结束,则会更短。
  • sequences_scores (torch.FloatTensor,形状为 (batch_size*num_return_sequences), *可选*, 在 output_scores=True 时返回) — 生成的 sequences 的最终束分数。
  • scores (tuple(torch.FloatTensor),*可选*,在 output_scores=True 时返回) — 每个生成步骤中每个词汇表 token 的束转换分数。束转换分数由 token 的对数概率组成,该概率以该束中先前生成的 token 的对数 softmax 为条件。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)
  • logits (tuple(torch.FloatTensor),*可选*,在 output_logits=True 时返回) — 语言建模头在每个生成步骤的未处理预测分数(每个词汇表 token 在 SoftMax 之前的分数)。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)
  • beam_indices (torch.LongTensor, *可选*, 在 output_scores=True 时返回) — 每个生成步骤中生成的 token ID 的束索引。torch.LongTensor 的形状为 (batch_size*num_return_sequences, sequence_length)
  • attentions (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_attentions=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams, num_heads, generated_length, sequence_length)torch.FloatTensor
  • hidden_states (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_hidden_states=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams*num_return_sequences, generated_length, hidden_size)torch.FloatTensor
  • past_key_values (tuple(tuple(torch.FloatTensor))), *可选*, 在 use_cache=True 时返回) — 返回模型缓存,用于加速解码。不同模型的缓存格式不同,请查阅模型的文档。通常是 Cache 的实例。

仅解码器生成模型在使用束搜索方法时的输出。

class transformers.generation.GenerateBeamEncoderDecoderOutput

< >

( sequences: LongTensor sequences_scores: typing.Optional[torch.FloatTensor] = None scores: typing.Optional[tuple[torch.FloatTensor]] = None logits: typing.Optional[tuple[torch.FloatTensor]] = None beam_indices: typing.Optional[torch.LongTensor] = None encoder_attentions: typing.Optional[tuple[torch.FloatTensor]] = None encoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None decoder_attentions: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None cross_attentions: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None past_key_values: typing.Optional[tuple[tuple[tuple[torch.FloatTensor]]]] = None )

参数

  • sequences (torch.LongTensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前结束,则会更短。
  • sequences_scores (torch.FloatTensor,形状为 (batch_size*num_return_sequences), *可选*, 在 output_scores=True 时返回) — 生成的 sequences 的最终束分数。
  • scores (tuple(torch.FloatTensor),*可选*,在 output_scores=True 时返回) — 每个生成步骤中每个词汇表 token 的束转换分数。束转换分数由 token 的对数概率组成,该概率以该束中先前生成的 token 的对数 softmax 为条件。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)
  • logits (tuple(torch.FloatTensor),*可选*,在 output_logits=True 时返回) — 语言建模头在每个生成步骤的未处理预测分数(每个词汇表 token 在 SoftMax 之前的分数)。torch.FloatTensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)
  • beam_indices (torch.LongTensor, *可选*, 在 output_scores=True 时返回) — 每个生成步骤中生成的 token ID 的束索引。torch.LongTensor 的形状为 (batch_size*num_return_sequences, sequence_length)
  • encoder_attentions (tuple(torch.FloatTensor), *可选*, 在 output_attentions=True 时返回) — torch.FloatTensor 的元组(解码器每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(torch.FloatTensor), *可选*, 在 output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入层输出 + 每个层一个),形状为 (batch_size*num_beams*num_return_sequences, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(torch.FloatTensor)), *可选*, 在 output_attentions=True 时返回) — 元组(每个生成的 token 一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length)torch.FloatTensor
  • cross_attentions (tuple(tuple(torch.FloatTensor)), 可选, 当 output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)torch.FloatTensor
  • decoder_hidden_states (tuple(tuple(torch.FloatTensor)), 可选, 当 output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams*num_return_sequences, generated_length, hidden_size)torch.FloatTensor
  • past_key_values (tuple(tuple(torch.FloatTensor))), 可选, 当 use_cache=True 时返回) — 返回模型缓存,用于加速解码。不同模型的缓存格式不同,请查看模型的文档。通常是一个 Cache 实例。

当使用束搜索方法时,编码器-解码器生成模型的输出。

TensorFlow

class transformers.generation.TFGreedySearchEncoderDecoderOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_attentions: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_hidden_states: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None decoder_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None cross_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size, sequence_length)) — 生成的序列。第二维度 (sequence_length) 等于 max_length,或者如果所有批次因 eos_token_id 而提前结束,则更短。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 语言模型头在每个生成步骤的已处理预测分数(SoftMax 之前的每个词汇词元的分数)。tf.Tensor 的元组,最多包含 max_new_tokens 个元素(每个生成的词元一个元素),每个张量的形状为 (batch_size, config.vocab_size)
  • encoder_attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — tf.Tensor 的元组(解码器的每一层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(tf.Tensor), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — tf.Tensor 的元组(一个用于词嵌入输出 + 每个层的输出一个),形状为 (batch_size, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • cross_attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • decoder_hidden_states (tuple(tuple(tf.Tensor)), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, generated_length, hidden_size)tf.Tensor

使用贪婪搜索的编码器-解码器生成模型的输出基类。解码器(和编码器)的隐藏状态和注意力权重可以通过 encoder_attentions 和 encoder_hidden_states 属性(以及 decoder_attentions 和 decoder_hidden_states 属性)访问。

class transformers.generation.TFGreedySearchDecoderOnlyOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size, sequence_length)) — 生成的序列。第二维度 (sequence_length) 等于 max_length,或者如果所有批次因 eos_token_id 而提前结束,则更短。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 语言模型头在每个生成步骤的已处理预测分数(SoftMax 之前的每个词汇词元的分数)。tf.Tensor 的元组,最多包含 max_new_tokens 个元素(每个生成的词元一个元素),每个张量的形状为 (batch_size, config.vocab_size)
  • attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • hidden_states (tuple(tuple(tf.Tensor)), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, generated_length, hidden_size)tf.Tensor

使用贪婪搜索的仅解码器生成模型的输出基类。

class transformers.generation.TFSampleEncoderDecoderOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_attentions: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_hidden_states: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None decoder_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None cross_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二维度 (sequence_length) 等于 max_length,或者如果所有批次因 eos_token_id 而提前结束,则更短。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 语言模型头在每个生成步骤的已处理预测分数(SoftMax 之前的每个词汇词元的分数)。tf.Tensor 的元组,最多包含 max_new_tokens 个元素(每个生成的词元一个元素),每个张量的形状为 (batch_size*num_return_sequences, config.vocab_size)
  • encoder_attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — tf.Tensor 的元组(解码器的每一层一个),形状为 (batch_size*num_return_sequences, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(tf.Tensor), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — tf.Tensor 的元组(一个用于词嵌入输出 + 每个层的输出一个),形状为 (batch_size*num_return_sequences, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size*num_return_sequences, num_heads, generated_length, sequence_length)tf.Tensor
  • cross_attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • decoder_hidden_states (tuple(tuple(tf.Tensor)), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size*num_return_sequences, generated_length, hidden_size)tf.Tensor

使用采样的编码器-解码器生成模型的输出基类。解码器(和编码器)的隐藏状态和注意力权重可以通过 encoder_attentions 和 encoder_hidden_states 属性(以及 decoder_attentions 和 decoder_hidden_states 属性)访问。

class transformers.generation.TFSampleDecoderOnlyOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二维度 (sequence_length) 等于 max_length,或者如果所有批次因 eos_token_id 而提前结束,则更短。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 语言模型头在每个生成步骤的已处理预测分数(SoftMax 之前的每个词汇词元的分数)。tf.Tensor 的元组,最多包含 max_new_tokens 个元素(每个生成的词元一个元素),每个张量的形状为 (batch_size*num_return_sequences, config.vocab_size)
  • attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (num_return_sequences*batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • hidden_states (tuple(tuple(tf.Tensor)), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (num_return_sequences*batch_size, generated_length, hidden_size)tf.Tensor

使用采样的仅解码器生成模型的输出基类。

class transformers.generation.TFBeamSearchEncoderDecoderOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None sequences_scores: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None beam_indices: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None encoder_attentions: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_hidden_states: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None decoder_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None cross_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二维度 (sequence_length) 等于 max_length,或者如果所有批次因 eos_token_id 而提前结束,则更短。
  • sequences_scores (tf.Tensor,形状为 (batch_size*num_return_sequences)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 生成的 sequences 的最终束搜索分数。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 每个生成步骤中每个词汇词元的已处理束搜索分数。束搜索分数包括每个词汇词元的对数 softmax 分数和该束中先前生成的词元的对数 softmax 之和。tf.Tensor 的元组,最多包含 max_new_tokens 个元素(每个生成的词元一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)
  • beam_indices (tf.Tensor, 可选, 当传递 output_scores=Trueconfig.output_scores=True 时返回) — 每个生成步骤中生成的词元 id 的束索引。tf.Tensor 的形状为 (batch_size*num_return_sequences, sequence_length)
  • encoder_attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — tf.Tensor 的元组(解码器的每一层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(tf.Tensor), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — tf.Tensor 的元组(一个用于词嵌入输出 + 每个层的输出一个),形状为 (batch_size*num_beams*num_return_sequences, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length)tf.Tensor
  • cross_attentions (tuple(tuple(tf.Tensor)), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • decoder_hidden_states (tuple(tuple(tf.Tensor)), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器的每一层一个元素),其中包含形状为 (batch_size*num_beams*num_return_sequences, generated_length, hidden_size)tf.Tensor

使用束搜索的编码器-解码器生成模型的输出基类。解码器(和编码器)的隐藏状态和注意力权重可以通过 encoder_attentions 和 encoder_hidden_states 属性(以及 decoder_attentions 和 decoder_hidden_states 属性)访问。

class transformers.generation.TFBeamSearchDecoderOnlyOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None sequences_scores: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None beam_indices: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二维度 (sequence_length) 等于 max_length,或者如果所有批次因 eos_token_id 而提前结束,则更短。
  • sequences_scores (tf.Tensor,形状为 (batch_size*num_return_sequences)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 生成的 sequences 的最终束得分。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 在每个生成步骤中,为每个词汇表词元处理后的束得分。束得分包括每个词汇表词元的 log softmax 分数,以及该束中先前生成的词元的 log softmax 分数之和。这是一个 `tf.Tensor` 的元组,最多包含 `max_new_tokens` 个元素(每个生成的词元一个元素),每个张量的形状为 `(batch_size*num_beams*num_return_sequences, config.vocab_size)`。
  • beam_indices (tf.Tensor可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 在每个生成步骤中生成的词元 id 的束索引。tf.Tensor 的形状为 (batch_size*num_return_sequences, sequence_length)
  • attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams, num_heads, generated_length, sequence_length)tf.Tensor
  • hidden_states (tuple(tuple(tf.Tensor))可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams*num_return_sequences, generated_length, hidden_size)tf.Tensor

使用束搜索的仅解码器生成模型输出的基类。

class transformers.generation.TFBeamSampleEncoderDecoderOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None sequences_scores: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None beam_indices: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None encoder_attentions: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_hidden_states: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None decoder_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None cross_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size*num_beams, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前完成,则会更短。
  • sequences_scores (tf.Tensor,形状为 (batch_size * num_return_sequence)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 生成的 sequences 的最终束得分。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 在每个生成步骤中,为每个词汇表词元处理后的束得分。束得分包括每个词汇表词元的 log softmax 分数,以及该束中先前生成的词元的 log softmax 分数之和。这是一个 `tf.Tensor` 的元组,最多包含 `max_new_tokens` 个元素(每个生成的词元一个元素),每个张量的形状为 `(batch_size*num_beams, config.vocab_size)`。
  • beam_indices (tf.Tensor可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 在每个生成步骤中生成的词元 id 的束索引。tf.Tensor 的形状为 (batch_size*num_return_sequences, sequence_length)
  • encoder_attentions (tuple(tf.Tensor)可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — `tf.Tensor` 的元组(解码器每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(tf.Tensor)可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — `tf.Tensor` 的元组(嵌入层的输出 + 每层的输出),形状为 (batch_size*num_beams, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams, num_heads, generated_length, sequence_length)tf.Tensor
  • cross_attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • decoder_hidden_states (tuple(tuple(tf.Tensor))可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams, generated_length, hidden_size)tf.Tensor

使用束采样的编码器-解码器生成模型输出的基类。解码器(或编码器)的隐藏状态和注意力权重可以通过 encoder_attentions 和 encoder_hidden_states 属性(或 decoder_attentions 和 decoder_hidden_states 属性)访问。

class transformers.generation.TFBeamSampleDecoderOnlyOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None sequences_scores: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None beam_indices: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size*num_return_sequences, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前完成,则会更短。
  • sequences_scores (tf.Tensor,形状为 (batch_size * num_return_sequence)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 生成的 sequences 的最终束得分。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 在每个生成步骤中,为每个词汇表词元处理后的束得分。束得分包括每个词汇表词元的 log softmax 分数,以及该束中先前生成的词元的 log softmax 分数之和。这是一个 `tf.Tensor` 的元组,最多包含 `max_new_tokens` 个元素(每个生成的词元一个元素),每个张量的形状为 `(batch_size*num_beams*num_return_sequences, config.vocab_size)`。
  • beam_indices (tf.Tensor可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 在每个生成步骤中生成的词元 id 的束索引。tf.Tensor 的形状为 (batch_size*num_return_sequences, sequence_length)
  • attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams, num_heads, generated_length, sequence_length)tf.Tensor
  • hidden_states (tuple(tuple(tf.Tensor))可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size*num_beams, generated_length, hidden_size)tf.Tensor

使用束采样的仅解码器生成模型输出的基类。

class transformers.generation.TFContrastiveSearchEncoderDecoderOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_attentions: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None encoder_hidden_states: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None decoder_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None cross_attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None decoder_hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前完成,则会更短。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 语言模型头在每个生成步骤中的处理后预测分数(SoftMax 之前的每个词汇表词元的分数)。这是一个 `tf.Tensor` 的元组,最多包含 `max_new_tokens` 个元素(每个生成的词元一个元素),每个张量的形状为 `(batch_size, config.vocab_size)`。
  • encoder_attentions (tuple(tf.Tensor)可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — `tf.Tensor` 的元组(解码器每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)
  • encoder_hidden_states (tuple(tf.Tensor)可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — `tf.Tensor` 的元组(嵌入层的输出 + 每层的输出),形状为 (batch_size, sequence_length, hidden_size)
  • decoder_attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • cross_attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • decoder_hidden_states (tuple(tuple(tf.Tensor))可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, generated_length, hidden_size)tf.Tensor

使用对比搜索的编码器-解码器生成模型输出的基类。解码器(或编码器)的隐藏状态和注意力权重可以通过 encoder_attentions 和 encoder_hidden_states 属性(或 decoder_attentions 和 decoder_hidden_states 属性)访问。

class transformers.generation.TFContrastiveSearchDecoderOnlyOutput

< >

( sequences: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None scores: typing.Optional[tuple[tensorflow.python.framework.tensor.Tensor]] = None attentions: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None hidden_states: typing.Optional[tuple[tuple[tensorflow.python.framework.tensor.Tensor]]] = None )

参数

  • sequences (tf.Tensor,形状为 (batch_size, sequence_length)) — 生成的序列。第二个维度 (sequence_length) 等于 max_length,或者如果所有批次都因 eos_token_id 而提前完成,则会更短。
  • scores (tuple(tf.Tensor)可选,当传递 output_scores=Trueconfig.output_scores=True 时返回) — 语言模型头在每个生成步骤中的处理后预测分数(SoftMax 之前的每个词汇表词元的分数)。这是一个 `tf.Tensor` 的元组,最多包含 `max_new_tokens` 个元素(每个生成的词元一个元素),每个张量的形状为 `(batch_size, config.vocab_size)`。
  • attentions (tuple(tuple(tf.Tensor))可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, num_heads, generated_length, sequence_length)tf.Tensor
  • hidden_states (tuple(tuple(tf.Tensor))可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 元组(每个生成的词元一个元素)的元组(解码器每层一个元素),其中包含形状为 (batch_size, generated_length, hidden_size)tf.Tensor

使用对比搜索的仅解码器生成模型输出的基类。

FLAX

class transformers.generation.FlaxSampleOutput

< >

( sequences: typing.Optional[jax.Array] = None )

参数

  • sequences (jnp.ndarray,形状为 (batch_size, max_length)) — 生成的序列。

使用采样的仅解码器生成模型的 Flax 输出基类。

替换

< >

( **updates )

“返回一个新对象,用新值替换指定字段。

class transformers.generation.FlaxGreedySearchOutput

< >

( sequences: typing.Optional[jax.Array] = None )

参数

  • sequences (jnp.ndarray,形状为 (batch_size, max_length)) — 生成的序列。

使用贪婪搜索的仅解码器生成模型的 Flax 输出基类。

替换

< >

( **updates )

“返回一个新对象,用新值替换指定字段。

class transformers.generation.FlaxBeamSearchOutput

< >

( sequences: typing.Optional[jax.Array] = None scores: typing.Optional[jax.Array] = None )

参数

  • sequences (jnp.ndarray,形状为 (batch_size, max_length)) — 生成的序列。
  • scores (jnp.ndarray,形状为 (batch_size,)) — 生成序列的分数(对数概率)。

使用贪婪搜索的仅解码器生成模型的 Flax 输出基类。

替换

< >

( **updates )

“返回一个新对象,用新值替换指定字段。

LogitsProcessor

LogitsProcessor 可用于修改语言模型头在生成时的预测分数。

PyTorch

class transformers.AlternatingCodebooksLogitsProcessor

< >

( input_start_len: int semantic_vocab_size: int codebook_size: int )

参数

  • input_start_len (int) — 初始输入序列的长度。
  • semantic_vocab_size (int) — 语义部分的词汇表大小,即与语义词汇表关联的词元数量。
  • codebook_size (int) — 与码本关联的词元数量。

用于强制 Bark 两个码本之间交替生成的 LogitsProcessor

此 logits 处理器仅与 Bark 的 fine 子模型兼容。有关示例,请参阅模型文档。

__call__

< >

( input_ids: LongTensor scores: FloatTensor )

class transformers.ClassifierFreeGuidanceLogitsProcessor

< >

( guidance_scale )

参数

  • guidance_scale (float) — 用于无分类器指导 (CFG) 的指导比例。通过设置 `guidance_scale > 1` 来启用 CFG。更高的指导比例会鼓励模型生成与输入提示更紧密相关的样本,但这通常会以牺牲质量为代价。

用于无分类器指导 (CFG) 的 LogitsProcessor。分数在批次维度上被分割,其中前半部分对应于条件 logits(根据输入提示预测),后半部分对应于无条件 logits(根据空或“null”提示预测)。该处理器根据 `guidance_scale` 参数计算条件和无条件 logits 的加权平均值。

更多信息请参阅论文

此 logits 处理器仅与 MusicGen 兼容。

示例

>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration

>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")

>>> inputs = processor(
...     text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
...     padding=True,
...     return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.EncoderNoRepeatNGramLogitsProcessor

< >

( encoder_ngram_size: int encoder_input_ids: LongTensor )

参数

  • encoder_ngram_size (int) — 大小为 `ngram_size` 的所有 n-gram 只能在编码器输入 ID 中出现。
  • encoder_input_ids (int) — 不应在解码器 ID 中重复的 encoder_input_ids。

功能类似于 NoRepeatNGramLogitsProcessorLogitsProcessor,但专门用于防止提示中存在的 n-gram 重复。

它旨在通过防止生成先前对话轮次中存在的 n-gram 来促进语言模型的健谈性。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer("Alice: I love cats. What do you love?\nBob:", return_tensors="pt")

>>> # With greedy decoding, we see Bob repeating Alice's opinion. If Bob was a chatbot, it would be a poor one.
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: I love cats. What do you

>>> # With this logits processor, we can prevent Bob from repeating Alice's opinion.
>>> outputs = model.generate(**inputs, encoder_no_repeat_ngram_size=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: My cats are very cute.

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.EncoderRepetitionPenaltyLogitsProcessor

< >

( penalty: float encoder_input_ids: LongTensor )

参数

  • penalty (float) — 重复惩罚的参数。1.0 表示没有惩罚。大于 1.0 会奖励提示词元。介于 0.0 和 1.0 之间会惩罚提示词元。
  • encoder_input_ids (torch.LongTensor) — 应该在解码器 ID 中重复的 encoder_input_ids。

功能类似于 RepetitionPenaltyLogitsProcessorLogitsProcessor,但它对提示中存在的词元施加*反向*惩罚。换句话说,大于 1.0 的惩罚会增加选择提示中出现过的词元的几率。

它旨在避免在基于输入的任务(如摘要)中产生幻觉。虽然最初是为编码器-解码器模型设计的,但它也可以用于仅解码器模型,如大语言模型 (LLM)。

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer(["Alice and Bob. The third member's name was"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was not mentioned.

>>> # With the `encoder_repetition_penalty` argument we can trigger this logits processor in `generate`, which can
>>> # promote the use of prompt tokens ("Bob" in this example)
>>> gen_out = model.generate(**inputs, encoder_repetition_penalty=1.2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was Bob. The third member's name was Bob.

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.EpsilonLogitsWarper

< >

( epsilon: float filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • epsilon (float) — 如果设置为 > 0,则只保留概率为 `epsilon` 或更高的词元用于生成。
  • filter_value (float, *可选*, 默认为 -inf) — 所有被过滤的值将被设置为此浮点数值。
  • min_tokens_to_keep (int, *可选*, 默认为 1) — 不能被过滤的最小词元数量。

执行 epsilon-sampling 的 LogitsProcessor,即限制为概率 `prob >= epsilon` 的词元。如果没有词元满足此约束,则取概率最大的 min_tokens_to_keep 个词元。更多信息请参阅《截断采样作为语言模型去平滑》

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With epsilon sampling, the output gets restricted to high-probability tokens. Note that this is similar to
>>> # Top P sampling, which restricts tokens based on their cumulative probability.
>>> # Pro tip: The paper recommends using `epsilon_cutoff` values between 3e-4 and 9e-4
>>> outputs = model.generate(**inputs, do_sample=True, epsilon_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.EtaLogitsWarper

< >

( epsilon: float filter_value: float = -inf min_tokens_to_keep: int = 1 device: str = 'cpu' )

参数

  • epsilon (float) — 范围在 (0, 1) 的浮点值。用于计算动态截断值 `eta` 的超参数。根据模型的大小,论文中建议的值范围从 3e-4 到 4e-3 不等。
  • filter_value (float, *可选*, 默认为 -inf) — 所有被发现低于动态截断值 `eta` 的值都会被设置为此浮点数值。当需要修改那些概率极低、应完全排除在生成之外的词元的 logits 时,此参数很有用。
  • min_tokens_to_keep (int, *可选*, 默认为 1) — 指定无论概率如何,都必须保留用于生成的最小词元数量。例如,如果 `min_tokens_to_keep` 设置为 1,即使所有词元的概率都低于截断值 `eta`,也至少会保留一个词元用于生成。
  • device (str, *可选*, 默认为 "cpu") — 分配张量的设备。

执行 eta-sampling 的 LogitsProcessor,这是一种过滤掉概率低于动态截断值 `eta` 的词元的技术,`eta` 是根据超参数 `epsilon` 和词元概率的熵组合计算的,即 `eta := min(epsilon, sqrt(epsilon * e^-entropy(probabilities)))`。如果没有词元满足此约束,则取概率最大的 min_tokens_to_keep 个词元。它解决了神经语言模型生成的长文本样本质量差的问题,从而产生更连贯、更流畅的文本。更多信息请参阅《截断采样作为语言模型去平滑》。注意:必须将 `do_sample` 设置为 `True`,此 `LogitsProcessor` 才能工作。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With eta sampling, the output gets restricted to high-probability tokens. You can see it as a dynamic form of
>>> # epsilon sampling that adapts its cutoff probability based on the entropy (high entropy = lower cutoff).
>>> # Pro tip: The paper recommends using `eta_cutoff` values between 3e-4 to 4e-3
>>> outputs = model.generate(**inputs, do_sample=True, eta_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.ExponentialDecayLengthPenalty

< >

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

参数

  • exponential_decay_length_penalty (tuple(int, float)) — 该元组应包含:`(start_index, decay_factor)`,其中 `start_index` 表示惩罚开始的位置,`decay_factor` 代表指数衰减的因子。
  • eos_token_id (Union[int, list[int], torch.Tensor]) — *序列结束* 词元的 ID。
  • input_ids_seq_length (int) — 输入序列的长度。

在达到 `start_index` 后,指数级增加 `eos_token_id` 分数的 LogitsProcessor。这允许生成较短的序列而无需硬性截断,使得 `eos_token` 可以在有意义的位置被预测。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")

>>> text = "Just wanted to let you know, I"
>>> inputs = tokenizer(text, return_tensors="pt")

>>> # Let's consider that we want short sentences, so we limit `max_length=30`. However, we observe that the answer
>>> # tends to end abruptly.
>>> set_seed(1)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.9, max_length=30, pad_token_id=50256)
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010. Although

>>> # To promote the appearance of the EOS token at the right time, we add the `exponential_decay_length_penalty =
>>> # (start_index, decay_factor)`. Instead of cutting at max_tokens, the output comes to an end before and usually
>>> # with more meaning. What happens is that starting from `start_index` the EOS token score will be increased
>>> # by `decay_factor` exponentially. However, if you set a high decay factor, you may also end up with abruptly
>>> # ending sequences.
>>> set_seed(1)
>>> outputs = model.generate(
...     **inputs,
...     do_sample=True,
...     temperature=0.9,
...     max_length=30,
...     pad_token_id=50256,
...     exponential_decay_length_penalty=(15, 1.6),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network
which<|endoftext|>

>>> # With a small decay factor, you will have a higher chance of getting a meaningful sequence.
>>> set_seed(1)
>>> outputs = model.generate(
...     **inputs,
...     do_sample=True,
...     temperature=0.9,
...     max_length=30,
...     pad_token_id=50256,
...     exponential_decay_length_penalty=(15, 1.01),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010.<|endoftext|>

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.ForcedBOSTokenLogitsProcessor

< >

( bos_token_id: int )

参数

  • bos_token_id (int) — 强制作为第一个生成词元的 ID。

强制将指定词元作为第一个生成词元的 LogitsProcessor。用于编码器-解码器模型。

示例

>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small")
>>> tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small")

>>> inputs = tokenizer("Translate from English to German: I love cats.", return_tensors="pt")

>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad> Ich liebe Kitty.</s>

>>> # We can use `forced_bos_token_id` to force the start of generation with an encoder-decoder model
>>> # (including forcing it to end straight away with an EOS token)
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_bos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad></s>

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.ForcedEOSTokenLogitsProcessor

< >

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

参数

  • max_length (int) — 要生成的序列的最大长度。
  • eos_token_id (Union[int, list[int], torch.Tensor]) — *序列结束* 词元的 ID。
  • device (str, *可选*, 默认为 "cpu") — 分配张量的设备。

当达到 `max_length` 时,强制将指定词元作为最后一个生成词元的 LogitsProcessor

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")

>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8

>>> # `forced_eos_token_id` ensures the generation ends with a EOS token
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_eos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7,<|endoftext|>

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。 什么是 input ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,可以是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.HammingDiversityLogitsProcessor

< >

( diversity_penalty: float num_beams: int num_beam_groups: int )

参数

  • diversity_penalty (float) — 如果一个束(beam)在特定时间点生成的词元(token)与其他组的任何束生成的词元相同,则会从该束的分数中减去此值。更高的 diversity_penalty 会强制束之间具有更大的多样性。调整此值有助于在多样性和自然可能性之间取得平衡。
  • num_beams (int) — 用于束搜索的束数量。1 表示不使用束搜索。
  • num_beam_groups (int) — 为确保不同束组之间的多样性,将 num_beams 分成的组数。更多细节请参阅这篇论文

强制执行多样化束搜索的 LogitsProcessor

请注意,此 logits 处理器仅对 PreTrainedModel.group_beam_search 有效。更多细节请参阅 Diverse Beam Search: Decoding Diverse Solutions from Neural Sequence Models

传统的束搜索通常会在不同的束中生成非常相似的序列。HammingDiversityLogitsProcessor 通过惩罚那些生成了同一时间步中其他束已选择的词元的束来解决此问题。

示例

>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
>>> import torch

>>> # Initialize the model and tokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("google-t5/t5-base")
>>> model = AutoModelForSeq2SeqLM.from_pretrained("google-t5/t5-base")

>>> # A long text about the solar system
>>> text = (
...     "The Solar System is a gravitationally bound system comprising the Sun and the objects that orbit it, "
...     "either directly or indirectly. Of the objects that orbit the Sun directly, the largest are the eight "
...     "planets, with the remainder being smaller objects, such as the five dwarf planets and small Solar System "
...     "bodies. The Solar System formed 4.6 billion years ago from the gravitational collapse of a giant "
...     "interstellar molecular cloud."
... )
>>> inputs = tokenizer("summarize: " + text, return_tensors="pt")

>>> # Generate diverse summary
>>> outputs_diverse = model.generate(
...     **inputs,
...     num_beam_groups=2,
...     diversity_penalty=10.0,
...     max_length=100,
...     num_beams=4,
...     num_return_sequences=2,
... )
>>> summaries_diverse = tokenizer.batch_decode(outputs_diverse, skip_special_tokens=True)

>>> # Generate non-diverse summary
>>> outputs_non_diverse = model.generate(
...     **inputs,
...     max_length=100,
...     num_beams=4,
...     num_return_sequences=2,
... )
>>> summary_non_diverse = tokenizer.batch_decode(outputs_non_diverse, skip_special_tokens=True)

>>> # With `diversity_penalty`, the resulting beams are much more diverse
>>> print(summary_non_diverse)
['the solar system formed 4.6 billion years ago from the collapse of a giant interstellar molecular cloud. of the objects that orbit the Sun directly, the largest are the eight planets.',
'the Solar System formed 4.6 billion years ago from the collapse of a giant interstellar molecular cloud. of the objects that orbit the Sun directly, the largest are the eight planets.']

>>> print(summaries_diverse)
['the solar system formed 4.6 billion years ago from the collapse of a giant interstellar molecular cloud. of the objects that orbit the Sun directly, the largest are the eight planets.',
'the solar system formed 4.6 billion years ago from the collapse of a giant interstellar molecular cloud. of the objects that orbit the Sun directly, the largest are the eight planets. the rest of the objects are smaller objects, such as the five dwarf planets and small solar system bodies.']

__call__

< >

( input_ids: LongTensor scores: FloatTensor current_tokens: LongTensor beam_group_idx: int ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。
  • current_tokens (形状为 (batch_size)torch.LongTensor) — 词汇表中输入序列词元的索引,对应于当前生成步骤中其他束组选择的词元。
  • beam_group_idx (int) — 当前正在处理的束组的索引。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.InfNanRemoveLogitsProcessor

< >

( )

移除所有 naninf 值的 LogitsProcessor,以避免生成方法失败。请注意,只有在必要时才应使用此 logits 处理器,因为它可能会减慢生成方法的速度。

此 logits 处理器没有 generate 示例,因为不应该有任何正确的标志组合来保证其使用。

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.LogitNormalization

< >

( )

使用 log-softmax 对分数进行归一化的 LogitsProcessor。在束搜索期间,应用 logits 处理器或变换器后,对分数进行归一化很重要,因为本库中使用的搜索算法不会这样做(它只在之前做,但可能需要重新归一化),但在比较假设时它仍然假设分数是归一化的。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> import torch

>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")

>>> # By default, the scores are not normalized -- the sum of their exponentials is NOT a normalized probability
>>> # distribution, summing to 1
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
False

>>> # Normalizing them may have a positive impact on beam methods, or when using the scores on your application
>>> outputs = model.generate(**inputs, renormalize_logits=True, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
True

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.LogitsProcessor

< >

( )

可应用于生成过程中的所有 logit 处理器的抽象基类。

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.LogitsProcessorList

< >

( iterable = () )

此类可用于创建 LogitsProcessor 的列表,以随后处理一个 scores 输入张量。此类继承自列表,并添加了一个特定的 call 方法,用于将每个 LogitsProcessor 应用于输入。

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。
  • kwargs (dict[str, Any], 可选) — 特定于某个 logits 处理器的附加关键字参数。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.MinLengthLogitsProcessor

< >

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

参数

  • min_length (int) — 最小长度,低于此长度时,eos_token_id 的分数将被设置为 -float("Inf")
  • eos_token_id (Union[int, list[int], torch.Tensor]) — 序列结束 词元的 ID。
  • device (str, 可选, 默认为 "cpu") — 分配张量的设备。

通过将 EOS 概率设置为 0 来强制执行最小长度的 LogitsProcessor。请注意,对于像大多数 LLM 这样的仅解码器模型,长度包括提示(prompt)。

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer("A number:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one

>>> # setting `min_length` to a value smaller than the uncontrolled output length has no impact
>>> gen_out = model.generate(**inputs, min_length=3)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one

>>> # setting a larger `min_length` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_length=10)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand, nine hundred and ninety-four

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.MinNewTokensLengthLogitsProcessor

< >

( prompt_length_to_skip: int min_new_tokens: int eos_token_id: typing.Union[int, list[int], torch.Tensor] device: str = 'cpu' )

参数

  • prompt_length_to_skip (int) — 输入词元的长度。与 generate 一起使用时不是有效参数,因为它会自动分配输入长度。
  • min_new_tokens (int) — 最小*新*词元长度,低于此长度时,eos_token_id 的分数将被设置为 -float("Inf")
  • eos_token_id (Union[int, list[int], torch.Tensor]) — 序列结束 词元的 ID。
  • device (str, 可选, 默认为 "cpu") — 分配张量的设备。

通过将 EOS(序列结束)词元概率设置为 0 来强制执行新词元最小长度的 LogitsProcessor。与 MinLengthLogitsProcessor 相反,此处理器会忽略提示(prompt)。

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer(["A number:"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one

>>> # setting `min_new_tokens` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_new_tokens=2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些是每个词汇词元的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.MinPLogitsWarper

< >

( min_p: float filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • min_p (float) — 最小词元概率,将根据最可能词元的概率进行缩放。它必须是 0 到 1 之间的值。典型值在 0.01-0.2 范围内,选择性与将 top_p 设置在 0.99-0.8 范围内相当(使用与正常 top_p 值相反的值)。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值都将被设置为此浮点值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 无法被过滤的最小词元数量。

执行 min-p 的 LogitsProcessor,即保留所有高于最小概率(根据最可能词元的概率进行缩放)的词元。结果是,在存在高概率词元时,过滤器会变得更具攻击性,这是自信输出的标志,我们不应偏离。

通常与 TemperatureLogitsWarper 一起使用。用作 TopPLogitsWarperTopKLogitsWarper 的替代方案。

由 @menhguin 和 @kalomaze (github 用户名) 创建。代码改编自此外部 PR

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With `min_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `min_p` in the 0.01-0.2 range.
>>> outputs = model.generate(**inputs, do_sample=True, min_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensor scores: FloatTensor )

class transformers.NoBadWordsLogitsProcessor

< >

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

参数

  • bad_words_ids (list[list[int]]) — 不允许生成的词元 ID 列表的列表。
  • eos_token_id (Union[int, list[int], torch.Tensor], 可选) — 序列结束 词元的 ID。

强制指定序列永远不会被选中的 LogitsProcessor

为了获取不应出现在生成文本中的词的 token id,请确保在初始化 tokenizer 时设置 add_prefix_space=True,并使用 tokenizer(bad_words, add_special_tokens=False).input_idsadd_prefix_space 参数仅部分慢速 tokenizer 支持,因为快速 tokenizer 的前缀行为来自 pre tokenizers。请在此处阅读更多内容。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["In a word, the cake is a"], return_tensors="pt")

>>> output_ids = model.generate(inputs["input_ids"], max_new_tokens=5, pad_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a mess.

>>> # Now let's take the bad words out. Please note that the tokenizer is initialized differently
>>> tokenizer_with_prefix_space = AutoTokenizer.from_pretrained("openai-community/gpt2", add_prefix_space=True)


>>> def get_tokens_as_list(word_list):
...     "Converts a sequence of words into a list of tokens"
...     tokens_list = []
...     for word in word_list:
...         tokenized_word = tokenizer_with_prefix_space([word], add_special_tokens=False).input_ids[0]
...         tokens_list.append(tokenized_word)
...     return tokens_list


>>> bad_words_ids = get_tokens_as_list(word_list=["mess"])
>>> output_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=5, bad_words_ids=bad_words_ids, pad_token_id=tokenizer.eos_token_id
... )
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a surprise.

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.NoRepeatNGramLogitsProcessor

< >

( ngram_size: int )

参数

  • ngram_size (int) — 所有大小为 ngram_size 的 n-gram 只能出现一次。

N-gram 是从文本序列中提取的“n”个连续词、字符或 token 的组合。给定句子:“她跑得快”,二元组(n=2)将是(“她”,“跑得”)和(“跑得”,“快”)。在文本生成中,避免词序列的重复可以提供更多样化的输出。此 LogitsProcessor 通过将被禁止的 token 的分数设置为负无穷大来强制不重复 n-gram,从而在进一步处理分数时排除这些 token。请注意,对于仅解码器模型(如大多数 LLM),提示(prompt)也被考虑用于获取 n-gram。Fairseq

请谨慎使用 n-gram 惩罚。例如,在一篇关于纽约市的文章中惩罚 2-gram(二元组),可能会导致不理想的结果,即城市名称在整个文本中只出现一次。参考

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["Today I"], return_tensors="pt")

>>> output = model.generate(**inputs)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I’m not sure if I’m going to be able to do it.

>>> # Now let's add ngram size using `no_repeat_ngram_size`. This stops the repetitions ("I’m") in the output.
>>> output = model.generate(**inputs, no_repeat_ngram_size=2)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I’m not sure if I can get a better understanding of the nature of this issue

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.PrefixConstrainedLogitsProcessor

< >

( prefix_allowed_tokens_fn: typing.Callable[[int, torch.Tensor], list[int]] num_beams: int )

参数

  • prefix_allowed_tokens_fn (Callable[[int, torch.Tensor], list[int]]) — 此函数在每一步将束搜索限制为仅允许的 token。此函数接受 2 个参数:inputs_ids 和批次 ID batch_id。它必须返回一个列表,其中包含根据先前生成的 token inputs_ids 和批次 ID batch_id 条件下的下一个生成步骤所允许的 token。

LogitsProcessor,用于强制执行约束生成,对前缀条件约束生成很有用。更多信息请参阅自回归实体检索

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer("Alice and Bob", return_tensors="pt")

>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=5)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob are friends

>>> # We can constrain it with `prefix_allowed_tokens_fn` to force a certain behavior based on a prefix.
>>> # For instance, we can force an entire entity to be generated when its beginning is detected.
>>> entity = tokenizer(" Bob Marley", return_tensors="pt").input_ids[0]  # 3 tokens
>>> def prefix_allowed_tokens_fn(batch_id, input_ids):
...     '''
...     Attempts to generate 'Bob Marley' when 'Bob' is detected.
...     In this case, `batch_id` is not used, but you can set rules for each batch member.
...     '''
...     if input_ids[-1] == entity[0]:
...         return [entity[1].item()]
...     elif input_ids[-2] == entity[0] and input_ids[-1] == entity[1]:
...         return [entity[2].item()]
...     return list(range(tokenizer.vocab_size))  # If no match, allow all tokens

>>> outputs = model.generate(**inputs, max_new_tokens=5, prefix_allowed_tokens_fn=prefix_allowed_tokens_fn)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob Marley

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.RepetitionPenaltyLogitsProcessor

< >

( penalty: float prompt_ignore_length: typing.Optional[int] = None )

参数

  • penalty (float) — 重复惩罚的参数。1.0 表示没有惩罚。大于 1.0 会惩罚先前生成的 token。介于 0.0 和 1.0 之间会奖励先前生成的 token。
  • prompt_ignore_length (int, 可选) — 原始输入 id 序列的长度,如果提供,则不用于惩罚计算。

LogitsProcessor 通过惩罚来防止先前 token 的重复。此惩罚对每个 token 最多应用一次。请注意,对于仅解码器模型(如大多数 LLM),默认情况下,考虑的 token 包括提示(prompt)。

在原始论文中,作者建议使用大约 1.2 的惩罚值,以在真实生成和无重复之间取得良好平衡。要惩罚并减少重复,请使用大于 1.0 的 penalty 值,值越高惩罚越强。要奖励并鼓励重复,请使用 0.0 到 1.0 之间的 penalty 值,值越低奖励越强。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, RepetitionPenaltyLogitsProcessor

>>> # Initializing the model and tokenizer for it
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["I'm not going to"], return_tensors="pt")

>>> # This shows a normal generate without any specific parameters
>>> summary_ids = model.generate(**inputs)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to be able to do that

>>> # This generates a penalty for repeated tokens
>>> penalized_ids = model.generate(**inputs, repetition_penalty=1.1)
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'll just have to go out and play

>>> # We can also exclude the input prompt by creating an instance of this class
>>> # with a `prompt_ignore_length` and passing it as a custom logit processor
>>> rep_pen_processor = RepetitionPenaltyLogitsProcessor(
...     penalty=1.1,
...     prompt_ignore_length=inputs["input_ids"].shape[-1]
... )
>>> penalized_ids = model.generate(**inputs, logits_processor=[rep_pen_processor])
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to have to go through a lot of things, and

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.SequenceBiasLogitsProcessor

< >

( sequence_bias: list )

参数

  • sequence_bias (list[list[Union[list[int], float]]]) — 列表的列表,将 token 序列映射到其偏置项(例如 [[[10, 45], -2.0], [[64], -7.5]])。正偏置会增加序列被选中的几率,而负偏置则相反。如果序列长度为 1,其偏置将始终被应用。否则,偏置只在相关序列即将完成时(在此处理器应用后的 token 选择步骤中)应用。

LogitsProcessor 对序列施加加性偏置。当下一个生成的 token 可以完成一个序列时,偏置会应用于该序列的最后一个 token。因此,为了充分利用对超过一个 token 的序列进行偏置,请考虑使用束方法(以优雅地处理具有负偏置的部分完成序列)并对其前缀应用偏置(以确保偏置更早地应用)。

在 token 级别上,对一个词进行偏置与对其前面有空格的词进行偏置是不同的。如果你想在句子中间偏置“foo”,你可能需要添加一个前缀空格并偏置“ foo”。请查看我们的 NLP 课程的 tokenizer 部分,了解原因:https://huggingface.co/learn/nlp-course/chapter2/4#pt

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> inputs = tokenizer(["The full name of Donald is Donald"], return_tensors="pt")

>>> summary_ids = model.generate(inputs["input_ids"], max_new_tokens=4, do_sample=False)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.

>>> def get_tokens(word):
...     return tokenizer([word], add_special_tokens=False).input_ids[0]

>>> # IMPORTANT: Remember our tip about adding spaces before words to bias them correctly.
>>> sequence_bias = [[get_tokens("Trump"), -10.0],]  # will fail to apply bias
>>> biased_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.

>>> sequence_bias = [[get_tokens(" Trump"), -10.0],]  # will work
>>> biased_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Harper. He

>>> # We can also add a positive bias to nudge the model towards specific tokens or continuations. This technique
>>> # is also more effective when paired up with beam search.
>>> sequence_bias = [[get_tokens(" Donald Duck"), 10.0],]
>>> biased_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=4, num_beams=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald Duck. He is

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.SuppressTokensAtBeginLogitsProcessor

< >

( begin_suppress_tokens begin_index device: str = 'cpu' )

SuppressTokensAtBeginLogitsProcessor 会在 generate 函数开始生成时,使用 begin_index 个 token 来抑制一个 token 列表。这应确保由 begin_suppress_tokens 定义的 token 不会在开头生成。最初为 Whisper 创建。

示例

>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")

>>> # Whisper has `begin_suppress_tokens` set by default (= `[220, 50256]`). 50256 is the EOS token, so this means
>>> # it can't generate and EOS token in the first iteration, but it can in the others.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[0][0, 50256])
tensor(-inf)
>>> print(outputs.scores[-1][0, 50256])  # in other places we can see some probability mass for EOS
tensor(29.9010)

>>> # If we disable `begin_suppress_tokens`, we can generate EOS in the first iteration.
>>> outputs = model.generate(
...     **inputs, return_dict_in_generate=True, output_scores=True, begin_suppress_tokens=None
... )
>>> print(outputs.scores[0][0, 50256])
tensor(11.2027)

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.SuppressTokensLogitsProcessor

< >

( suppress_tokens device: str = 'cpu' )

此处理器可用于抑制 token 列表。处理器会将其对数概率设置为 -inf,从而使它们不会被生成。最初为 Whisper 创建。

示例

>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")

>>> # Whisper has a long list of suppressed tokens. For instance, in this case, the token 1 is suppressed by default.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[1][0, 1])  # 1 (and not 0) is the first freely generated token
tensor(-inf)

>>> # If we disable `suppress_tokens`, we can generate it.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True, suppress_tokens=None)
>>> print(outputs.scores[1][0, 1])
tensor(6.0678)

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.SynthIDTextWatermarkLogitsProcessor

< >

( ngram_len: int keys: list sampling_table_size: int sampling_table_seed: int context_history_size: int device: device skip_first_ngram_calls: bool = False debug_mode: bool = False )

参数

  • ngram_len (int) — N-gram 长度。
  • keys (list[int]) — 水印密钥序列,每个深度一个。
  • sampling_table_size (int) — 采样表的大小。
  • sampling_table_seed (int) — 用于生成采样表的随机种子。
  • context_history_size (int) — 用于跟踪已见上下文的张量大小。
  • device (torch.device) — 要使用的设备。
  • skip_first_ngram_calls (bool, 可选, 默认为 False) — 是否跳过第一次 n-gram 调用。
  • debug_mode (bool, 可选, 可选, 默认为 False) — Logits 在应用水印修改前被修改为均匀分布。这用于测试实现。

实现文本生成模型水印技术的 Logits 处理器。此类有助于应用 SynthID 文本水印,这是一种将不可感知的信号嵌入生成文本中以帮助检测合成内容的方法。它通过在文本生成过程中巧妙地操纵 token 选择的概率,使其能够可靠地在之后恢复以进行验证。

主要功能

  • 状态管理: 维护内部状态以跟踪 token 序列并动态生成水印密钥。

  • 密钥生成: 根据 token 序列和水印参数计算哈希值,为每个位置创建唯一的密钥。

  • G 值采样: 使用预计算的采样表,根据生成的密钥对水印值(g 值)进行采样。

  • 分数调整: 应用计算出的 g 值来修改生成过程中的 token 概率,从而嵌入水印。

  • 上下文重复处理: 包含避免在重复上下文中对 token 加水印的逻辑,以保持自然性。

  • EOS token 掩码: 支持对句子结束 token 进行掩码,以防止它们被包含在水印计算中。

  • 实用函数: 提供直接计算 g 值、检查上下文重复、创建 EOS token 掩码以及估计预期平均 g 值的函数。

有关此内容的更多详细信息,请参阅论文链接:https://www.nature.com/articles/s41586-024-08025-4

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig

>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')

>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
...     keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
...     ngram_len=5,
... )

>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
...     **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.TemperatureLogitsWarper

< >

( temperature: float )

参数

  • temperature (float) — 严格为正的浮点值,用于调节 logits 分布。小于 1 的值会减少随机性(反之亦然),0 等效于将所有概率质量转移到最可能的 token。

LogitsProcessor 用于温度(指数缩放输出概率分布),这实际上意味着它可以控制预测 token 的随机性。通常与 TopPLogitsWarperTopKLogitsWarper 一起使用。

请确保在 generate 参数中包含 do_sample=True,否则温度值将没有任何效果。

示例

>>> import torch
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(0)  # for reproducibility

>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> model.config.pad_token_id = model.config.eos_token_id
>>> inputs = tokenizer(["Hugging Face Company is"], return_tensors="pt")

>>> # With temperature=1.0, the default, we consistently get random outputs due to random sampling.
>>> generate_kwargs = {"max_new_tokens": 10, "do_sample": True, "temperature": 1.0, "num_return_sequences": 2}
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is one of these companies that is going to take a',
"Hugging Face Company is a brand created by Brian A. O'Neil"]

>>> # However, with temperature close to 0, it approximates greedy decoding strategies (invariant)
>>> generate_kwargs["temperature"] = 0.0001
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is a company that has been around for over 20 years',
'Hugging Face Company is a company that has been around for over 20 years']

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 token 的索引。什么是 input ID?
  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。当不使用束搜索时,这些可以是每个词汇的 logits;当使用束搜索时,这些是每个词汇 token 的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.TopKLogitsWarper

< >

( top_k: int filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • top_k (int) — 用于 top-k 过滤的最高概率词汇标记的数量。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值都将被设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小标记数。

执行 top-k 的 LogitsProcessor,即限制为 k 个最高概率的元素。常与 TemperatureLogitsWarperTopPLogitsWarper 一起使用。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: A, B, C, D", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E — S — O, P — R

>>> # With `top_k` sampling, the output gets restricted the k most likely tokens.
>>> # Pro tip: In practice, LLMs use `top_k` in the 5-50 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_k=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E, F, G, H, I

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,可以是每个词汇标记的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.TopPLogitsWarper

< >

( top_p: float filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • top_p (float) — 如果设置为 < 1,则仅保留概率总和达到 top_p 或更高的最小概率标记集合用于生成。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值都将被设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小标记数。

执行 top-p 的 LogitsProcessor,即限制为概率总和小于等于 prob_cut_off 的顶级标记。常与 TemperatureLogitsWarperTopKLogitsWarper 一起使用。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With `top_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `top_p` in the 0.9-0.95 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,可以是每个词汇标记的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.TypicalLogitsWarper

< >

( mass: float = 0.9 filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • mass (float, 可选, 默认为 0.9) — typical_p 的值,介于 0 和 1 之间(含 0 和 1),默认为 0.9。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值都将被设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小标记数。

执行典型解码的 LogitsProcessor。受人类使用语言方式的启发,它优先考虑那些对数概率接近于标记概率分布熵的标记。这意味着最可能的标记可能会在此过程中被丢弃。

更多信息请参阅 Typical Decoding for Natural Language Generation

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer("1, 2, 3", return_tensors="pt")

>>> # We can see that greedy decoding produces a sequence of numbers
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

>>> # For this particular seed, we can see that sampling produces nearly the same low-information (= low entropy)
>>> # sequence
>>> set_seed(18)
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9 and 10

>>> # With `typical_p` set, the most obvious sequence is no longer produced, which may be good for your problem
>>> set_seed(18)
>>> outputs = model.generate(
...     **inputs, do_sample=True, typical_p=0.1, return_dict_in_generate=True, output_scores=True
... )
>>> print(tokenizer.batch_decode(outputs.sequences, skip_special_tokens=True)[0])
1, 2, 3 and 5

>>> # We can see that the token corresponding to "4" (token 934) in the second position, the most likely token
>>> # as seen with greedy decoding, was entirely blocked out
>>> print(outputs.scores[1][0, 934])
tensor(-inf)

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,可以是每个词汇标记的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.UnbatchedClassifierFreeGuidanceLogitsProcessor

< >

( guidance_scale: float model unconditional_ids: typing.Optional[torch.LongTensor] = None unconditional_attention_mask: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = True )

参数

  • guidance_scale (float) — 用于无分类器指导(CFG)的指导比例。通过设置 guidance_scale != 1 来启用 CFG。较高的指导比例会鼓励模型生成与输入提示更紧密相关的样本,但通常会牺牲质量。小于 1 的值效果相反,同时使通过 negative_prompt_ids(如果提供)提供的负面提示起到正面提示的作用。
  • model (PreTrainedModel) — 计算无条件分数的模型。应与计算有条件分数的模型相同。两个模型必须使用相同的分词器。
  • unconditional_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 无条件分支的词汇表中输入序列标记的索引。如果未设置,将默认为提示的最后一个标记。
  • unconditional_attention_mask (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 用于 unconditional_ids 的注意力掩码。
  • use_cache (bool, 可选, 默认为 True) — 是否在负面提示的前向传播过程中缓存键/值。

用于无分类器指导(CFG)的 Logits 处理器。该处理器根据 guidance_scale 参数化的提示条件 logits 和提示无条件(或负面)logits 的分数计算加权平均值。无条件分数是通过使用 unconditional_ids 分支提示 model 在内部计算的。

更多信息请参阅此论文

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Today, a dragon flew over Paris, France,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=1.5)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 50 people and injuring more than 100'

>>> # with a negative prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=2, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 130 people. French media reported that'

>>> # with a positive prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=0, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
"Today, a dragon flew over Paris, France, and I'm very happy to be here. I"

__call__

< >

( input_ids scores )

class transformers.WhisperTimeStampLogitsProcessor

< >

( generate_config: GenerationConfig begin_index: int _detect_timestamp_from_logprob: typing.Optional[bool] = None )

参数

  • generate_config (GenerateConfig) — 用于生成输出的生成配置。需要以下参数: eos_token_id (int, 可选, 默认为 50257): 序列结束 标记的 ID。no_timestamps_token_id (int, 可选, 默认为 50363): "<|notimestamps|>" 标记的 ID。max_initial_timestamp_index (int, 可选, 默认为 1): 用于设置初始时间戳的最大值。这用于防止模型预测未来过远的时间戳。
  • begin_index (int) — 模型生成的第一个标记的标记索引。
  • _detect_timestamp_from_logprob (bool, 可选) — 是否可以从所有时间戳的 logprobs 中预测时间戳。

用于修改转录中时间戳生成 logits 的 LogitsProcessor。当输入标记达到特定阈值时,处理器将分数设置为负无穷大。处理器通过屏蔽会破坏配对模式的 logits 来确保时间戳标记成对出现。这样做是为了保持生成的时间戳的一致性和结构。它还确保当采样任何时间戳标记的预测概率大于任何单个非时间戳标记时,这些非时间戳 logits 被设置为负无穷大。这样做是为了确保在其他潜在标记之上生成时间戳。

更多信息请参阅此论文

示例

>>> import torch
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration, GenerationConfig
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[3]["audio"]["array"], return_tensors="pt")
>>> input_features = inputs.input_features

>>> #Displaying timestamps
>>> generated_ids = model.generate(inputs=input_features, return_timestamps=True)
>>> transcription = processor.batch_decode(generated_ids, decode_with_timestamps=True)[0]
>>> print("Transcription:", transcription)
Transcription: <|startoftranscript|><|0.00|> He has grave doubts whether Sir Frederick Layton's work is really Greek after all, and can<|6.44|><|6.44|> discover in it but little of rocky Ithaca.<|9.44|><|endoftext|>


>>> #No timestamps & change EOS:
>>> #This allows the user to select a specific token to terminate the sequence on, in this case it's the word "can"(460)
>>> model.generation_config.eos_token_id = 460
>>> generated_ids = model.generate(inputs=input_features,return_timestamps=False)
>>> transcription = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print("Transcription:", transcription)
Transcription:  He has grave doubts whether Sir Frederick Layton's work is really Greek after all and can

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,可以是每个词汇标记的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

class transformers.WatermarkLogitsProcessor

< >

( vocab_size device greenlist_ratio: float = 0.25 bias: float = 2.0 hashing_key: int = 15485863 seeding_scheme: str = 'lefthash' context_width: int = 1 )

参数

  • vocab_size (int) — 模型分词器的 vocab_size。用于计算“绿色”标记的比例。
  • device (str) — 模型分配的设备。
  • greenlist_ratio (float, 可选, 可选, 默认为 0.25) — 使用的“绿色”标记与词汇表大小的比例。默认为 0.25。
  • bias (float, 可选, 可选, 默认为 2.0) — 添加到所选“绿色”标记 logits 的偏置。如果文本生成质量下降,请考虑降低 bias。推荐值范围为 [0.5, 2.0]。默认为 2.0。
  • hashing_key (int, 可选, 可选, 默认为 15485863) — 用于哈希的密钥。如果您部署此水印,建议使用另一个私钥。默认为 15485863(第一百万个素数)。
  • seeding_scheme (str, 可选, 可选, 默认为 "lefthash") — 用于选择“绿色”标记的播种方案。接受值:
    • “lefthash”(默认):“绿色”标记的选择取决于最后一个标记(论文中的算法 2)
    • “selfhash”:“绿色”标记的选择取决于当前标记本身(论文中的算法 3)。此方案的缺点是它会考虑所有可能的下一个标记,可能比“lefthash”慢。用于播种的先前标记的上下文长度。更高的上下文长度使水印更具鲁棒性。
  • context_width (int, 可选, 默认为 1) — 设置种子时使用的先前标记的数量。

用于对生成文本加水印的 Logits 处理器。该处理器通过在生成下一个标记之前向随机化的“绿色”标记集添加一个小的偏置来修改模型输出分数。“绿色”标记的选择过程取决于所使用的 seeding_scheme。代码基于原始仓库

由该 LogitsProcessor 生成的文本可以使用 WatermarkDetector 进行检测。详情请参阅 call()

更多信息请参阅此论文

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkingConfig

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Alice and Bob are"], return_tensors="pt")

>>> # normal generation
>>> out = model.generate(inputs["input_ids"], max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both in the same room.\n\n"I\'m not sure if you\'re'

>>> # watermarked generation
>>> watermarking_config = WatermarkingConfig(bias=2.5, context_width=2, seeding_scheme="selfhash")
>>> out = model.generate(inputs["input_ids"], watermarking_config=watermarking_config, max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both still alive and well and the story is pretty much a one-hour adventure'

>>> # to detect watermarked text use the WatermarkDetector class
>>> from transformers import WatermarkDetector
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config= watermarking_config)
>>> detection_preds = detector(out)
>>> detection_preds
array([ True])

__call__

< >

( input_ids: LongTensor scores: FloatTensor ) 形状为 (batch_size, config.vocab_size)torch.FloatTensor

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。什么是输入 ID?
  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,可以是每个词汇标记的 log softmax。

返回

形状为 (batch_size, config.vocab_size)torch.FloatTensor

处理后的预测分数。

TensorFlow

class transformers.TFForcedBOSTokenLogitsProcessor

< >

( bos_token_id: int )

参数

  • bos_token_id (int) — 强制作为第一个生成标记的标记 ID。

强制将指定标记作为第一个生成标记的 TFLogitsProcessor

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFForcedEOSTokenLogitsProcessor

< >

( max_length: int eos_token_id: int )

参数

  • max_length (int) — 要生成的序列的最大长度。
  • eos_token_id (int) — 当达到 max_length 时,强制作为最后一个生成标记的标记 ID。

强制将指定标记作为最后一个生成标记的 TFLogitsProcessor,当达到 max_length 时。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFForceTokensLogitsProcessor

< >

( force_token_map: list )

该处理器接收一个整数对列表,该列表指示了从生成索引到将在采样前被强制生成的词元索引的映射。该处理器会将其对数概率设置为 `0`,并将所有其他词元的对数概率设置为 `-inf`,以便它们在对应的索引处被采样。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFLogitsProcessor

< >

( )

可应用于生成过程中的所有 logit 处理器的抽象基类。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int ) `tf.Tensor` of shape `(batch_size, config.vocab_size)`

参数

  • input_ids (tf.Tensor of shape (batch_size, sequence_length)) — 词汇表中输入序列词元的索引。

    可以使用 PreTrainedTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.__call__()

    什么是输入 ID?

  • scores (tf.Tensor of shape (batch_size, config.vocab_size)) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些可以是每个词汇词元的 log softmax。
  • cur_len (int) — 有效输入序列词元的当前长度。在 TF 实现中,input_ids 的序列长度是 `generate` 方法可以产生的最大长度,我们需要知道哪些词元是有效的。
  • kwargs (dict[str, Any], 可选) — 其他 logits 处理器特定的 kwargs 参数。

返回

形状为 (batch_size, config.vocab_size) 的 `tf.Tensor`

处理后的预测分数。

用于处理 logits 的 TF 方法。

class transformers.TFLogitsProcessorList

< >

( iterable = () )

此类可用于创建 TFLogitsProcessor 的列表,以随后处理 `scores` 输入张量。此类继承自 list,并添加了一个特定的 *__call__* 方法,以将每个 TFLogitsProcessor 应用于输入。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int **kwargs ) `tf.Tensor` of shape `(batch_size, config.vocab_size)`

参数

  • input_ids (tf.Tensor of shape (batch_size, sequence_length)) — 词汇表中输入序列词元的索引。

    可以使用 PreTrainedTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.__call__()

    什么是输入 ID?

  • scores (tf.Tensor of shape (batch_size, config.vocab_size)) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些可以是每个词汇词元的 log softmax。
  • cur_len (int) — 有效输入序列词元的当前长度。在 TF 实现中,input_ids 的序列长度是 `generate` 方法可以产生的最大长度,我们需要知道哪些词元是有效的。
  • kwargs (dict[str, Any], 可选) — 其他 logits 处理器特定的 kwargs 参数。

返回

形状为 (batch_size, config.vocab_size) 的 `tf.Tensor`

处理后的预测分数。

class transformers.TFLogitsWarper

< >

( )

所有可在多项式采样生成过程中应用的 logit warper 的抽象基类。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int ) `tf.Tensor` of shape `(batch_size, config.vocab_size)`

参数

  • input_ids (tf.Tensor of shape (batch_size, sequence_length)) — 词汇表中输入序列词元的索引。

    可以使用 PreTrainedTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.__call__()

    什么是输入 ID?

  • scores (tf.Tensor of shape (batch_size, config.vocab_size)) — 语言模型头的预测分数。在不使用束搜索时,这些可以是每个词汇的 logits;在使用束搜索时,这些可以是每个词汇词元的 log softmax。
  • cur_len (int) — 有效输入序列词元的当前长度。在 TF 实现中,input_ids 的序列长度是 `generate` 方法可以产生的最大长度,我们需要知道哪些词元是有效的。
  • kwargs (dict[str, Any], 可选) — 其他 logits 处理器特定的 kwargs 参数。

返回

形状为 (batch_size, config.vocab_size) 的 `tf.Tensor`

处理后的预测分数。

用于扭曲(warp) logits 的 TF 方法。

class transformers.TFMinLengthLogitsProcessor

< >

( min_length: int eos_token_id: int )

参数

  • min_length (int) — 最小长度,低于此长度时,`eos_token_id` 的分数将被设置为 `-float("Inf")`。
  • eos_token_id (int) — *序列结束* 词元的 ID。

通过将 EOS 概率设置为 0 来强制执行最小长度的 TFLogitsProcessor

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFNoBadWordsLogitsProcessor

< >

( bad_words_ids: list eos_token_id: int )

参数

  • bad_words_ids (list[list[int]]) — 不允许生成的词元 ID 列表的列表。为了获取不应出现在生成文本中的单词的词元,请确保在初始化 tokenizer 时设置 `add_prefix_space=True`,并使用 `tokenizer(bad_words, add_special_tokens=False).input_ids`。`add_prefix_space` 参数仅对某些慢速 tokenizer 支持,因为快速 tokenizer 的前缀行为来自 `pre_tokenizers`。更多信息请阅读这里
  • eos_token_id (int) — *序列结束* 词元的 ID。

强制指定序列永远不会被采样的 TFLogitsProcessor

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFNoRepeatNGramLogitsProcessor

< >

( ngram_size: int )

参数

  • ngram_size (int) — 所有大小为 `ngram_size` 的 n-gram 只能出现一次。

强制不重复 n-gram 的 TFLogitsProcessor。参见 Fairseq

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFRepetitionPenaltyLogitsProcessor

< >

( penalty: float )

参数

  • repetition_penalty (float) — 重复惩罚的参数。1.0 表示没有惩罚。更多细节请参阅这篇论文

强制对重复序列施加指数惩罚的 TFLogitsProcessor

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFSuppressTokensAtBeginLogitsProcessor

< >

( begin_suppress_tokens begin_index )

TFSuppressTokensAtBeginLogitsProcessor 在 `generate` 函数开始使用 `begin_index` 个词元生成时,立即抑制一个词元列表。这应确保由 `begin_suppress_tokens` 定义的词元不会在生成开始时被采样。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFSuppressTokensLogitsProcessor

< >

( suppress_tokens )

该处理器可用于抑制一个词元列表。处理器会将其对数概率设置为 `-inf`,从而使它们不被采样。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFTemperatureLogitsWarper

< >

( temperature: float )

参数

  • temperature (float) — 用于调整 logits 分布的值。

用于温度缩放(指数缩放输出概率分布)的 TFLogitsWarper

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFTopKLogitsWarper

< >

( top_k: int filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • top_k (int) — 为 top-k 过滤保留的最高概率词汇词元的数量。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值都将设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小词元数量。

执行 top-k 操作的 TFLogitsWarper,即限制为 k 个最高概率的元素。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

class transformers.TFTopPLogitsWarper

< >

( top_p: float filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • top_p (float) — 如果设置为 < 1,则仅保留概率总和达到 `top_p` 或更高的最小概率词元集合用于生成。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值都将设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小词元数量。

执行 top-p 操作的 TFLogitsWarper,即限制为概率总和 <= prob_cut_off 的顶层词元。

__call__

< >

( input_ids: Tensor scores: Tensor cur_len: int )

FLAX

class transformers.FlaxForcedBOSTokenLogitsProcessor

< >

( bos_token_id: int )

参数

  • bos_token_id (int) — 强制作为第一个生成词元的词元 ID。

强制将指定词元作为第一个生成词元的 FlaxLogitsProcessor

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxForcedEOSTokenLogitsProcessor

< >

( max_length: int eos_token_id: int )

参数

  • max_length (int) — 要生成的序列的最大长度。
  • eos_token_id (int) — 当达到 max_length 时,强制作为最后生成词元的词元 ID。

FlaxLogitsProcessor,当达到 max_length 时,强制将指定的词元作为最后生成的词元。

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxForceTokensLogitsProcessor

< >

( force_token_map )

参数

  • force_token_map (list) — 给出词元 ID 和它们将被强制采样的索引的映射。

FlaxLogitsProcessor 接受一个整数对列表,该列表指示从生成索引到将在采样前被强制的词元索引的映射。该处理器会将其对数概率设置为 0,并将所有其他词元的对数概率设置为 -inf,以便它们能在相应的索引处被采样。

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxLogitsProcessor

< >

( )

可应用于生成过程中的所有 logit 处理器的抽象基类。

__call__

< >

( input_ids: Array scores: Array ) 形状为 (batch_size, config.vocab_size)jnp.ndarray

参数

  • input_ids (形状为 (batch_size, sequence_length)jnp.ndarray) — 词汇表中输入序列词元的索引。

    可以使用 PreTrainedTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (形状为 (batch_size, config.vocab_size)jnp.ndarray) — 语言建模头的预测分数。在不使用束搜索时,可以是每个词汇表的 logits;在使用束搜索时,可以是每个词汇表词元的对数 softmax。
  • kwargs (dict[str, Any], 可选) — 额外的 logits 处理器特定 kwargs。

返回

形状为 (batch_size, config.vocab_size)jnp.ndarray

处理后的预测分数。

用于处理 logits 的 Flax 方法。

class transformers.FlaxLogitsProcessorList

< >

( iterable = () )

该类可用于创建 FlaxLogitsProcessorFlaxLogitsWarper 的列表,以随后处理一个 scores 输入张量。该类继承自 list,并添加了一个特定的 call 方法,以将每个 FlaxLogitsProcessorFlaxLogitsWarper 应用于输入。

__call__

< >

( input_ids: Array scores: Array cur_len: int **kwargs ) 形状为 (batch_size, config.vocab_size)jnp.ndarray

参数

  • input_ids (形状为 (batch_size, sequence_length)jnp.ndarray) — 词汇表中输入序列词元的索引。

    可以使用 PreTrainedTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (形状为 (batch_size, config.vocab_size)jnp.ndarray) — 语言建模头的预测分数。在不使用束搜索时,可以是每个词汇表的 logits;在使用束搜索时,可以是每个词汇表词元的对数 softmax。
  • kwargs (dict[str, Any], 可选) — 额外的 logits 处理器特定 kwargs。

返回

形状为 (batch_size, config.vocab_size)jnp.ndarray

处理后的预测分数。

class transformers.FlaxLogitsWarper

< >

( )

所有可在多项式采样生成过程中应用的 logit warper 的抽象基类。

__call__

< >

( input_ids: Array scores: Array ) 形状为 (batch_size, config.vocab_size)jnp.ndarray

参数

  • input_ids (形状为 (batch_size, sequence_length)jnp.ndarray) — 词汇表中输入序列词元的索引。

    可以使用 PreTrainedTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (形状为 (batch_size, config.vocab_size)jnp.ndarray) — 语言建模头的预测分数。在不使用束搜索时,可以是每个词汇表的 logits;在使用束搜索时,可以是每个词汇表词元的对数 softmax。
  • kwargs (dict[str, Any], 可选) — 额外的 logits 处理器特定 kwargs。

返回

形状为 (batch_size, config.vocab_size)jnp.ndarray

处理后的预测分数。

用于扭曲 logits 的 Flax 方法。

class transformers.FlaxMinLengthLogitsProcessor

< >

( min_length: int eos_token_id: int )

参数

  • min_length (int) — 最小长度,低于此长度时,eos_token_id 的分数将被设置为 -float("Inf")
  • eos_token_id (int) — 序列结束 词元的 ID。

通过将 EOS 概率设置为 0 来强制执行最小长度的 FlaxLogitsProcessor

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxSuppressTokensAtBeginLogitsProcessor

< >

( begin_suppress_tokens begin_index )

参数

  • begin_suppress_tokens (list[int]) — 不进行采样的词元。
  • begin_index (int) — 抑制词元的起始索引。

FlaxLogitsProcessor,当 generate 函数开始使用 begin_index 词元生成时,抑制一个词元列表。这应确保由 begin_suppress_tokens 定义的词元不会在生成开始时被采样。

__call__

< >

( input_ids scores cur_len: int )

class transformers.FlaxSuppressTokensLogitsProcessor

< >

( suppress_tokens: list )

参数

  • suppress_tokens (list) — 不进行采样的词元。

FlaxLogitsProcessor 在每个解码步骤中抑制一个词元列表。该处理器会将其对数概率设置为 -inf,从而不会被采样。

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxTemperatureLogitsWarper

< >

( temperature: float )

参数

  • temperature (float) — 用于调节 logits 分布的值。

用于温度(指数缩放输出概率分布)的 FlaxLogitsWarper

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxTopKLogitsWarper

< >

( top_k: int filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • top_k (int) — 为 top-k 过滤保留的最高概率词汇词元的数量。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值将被设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小词元数量。

执行 top-k 操作的 FlaxLogitsWarper,即将概率限制在 k 个最高概率的元素中。

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxTopPLogitsWarper

< >

( top_p: float filter_value: float = -inf min_tokens_to_keep: int = 1 )

参数

  • top_p (float) — 如果设置为 < 1,则仅保留概率总和达到 top_p 或更高的最小最可能词元集用于生成。
  • filter_value (float, 可选, 默认为 -inf) — 所有被过滤的值将被设置为此浮点数值。
  • min_tokens_to_keep (int, 可选, 默认为 1) — 不能被过滤的最小词元数量。

执行 top-p 操作的 FlaxLogitsWarper,即将概率限制在概率总和 <= prob_cut_off 的顶级词元中。

__call__

< >

( input_ids: Array scores: Array cur_len: int )

class transformers.FlaxWhisperTimeStampLogitsProcessor

< >

( generate_config model_config decoder_input_length )

参数

  • generate_config (GenerateConfig) — 用于生成输出的生成配置。需要以下参数: eos_token_id (int, 可选, 默认为 50257): 序列结束 词元的 ID。no_timestamps_token_id (int, 可选, 默认为 50363): "<|notimestamps|>" 词元的 ID。max_initial_timestamp_index (int, 可选, 默认为 1): 用于设置初始时间戳的最大值。这用于防止模型预测未来太远的时间戳。

Whisper 特定的处理器。此处理器可用于强制一个词元列表。该处理器会将其对数概率设置为 inf,以便它们能在相应的索引处被采样。

__call__

< >

( input_ids scores cur_len )

StoppingCriteria

一个 StoppingCriteria 可以用来改变何时停止生成(除了 EOS 词元)。请注意,这仅适用于我们的 PyTorch 实现。

class transformers.StoppingCriteria

< >

( )

所有可在生成过程中应用的停止条件的抽象基类。

如果你的停止条件依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列词元的索引。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (形状为 (batch_size, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数。这可以是 SoftMax 之前每个词汇词元的分数,也可以是 SoftMax 之后每个词汇词元的分数。如果此停止条件依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True
  • kwargs (dict[str, Any], 可选) — 额外的停止条件特定 kwargs。

返回

torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

True 表示我们停止对特定行的生成。False 表示我们应该继续。

class transformers.StoppingCriteriaList

< >

( iterable = () )

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。这些可以是 SoftMax 前每个词汇标记的分数,也可以是 SoftMax 后每个词汇标记的分数。如果此停止标准依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True
  • kwargs (dict[str, Any]可选) — 其他特定于停止标准的关键字参数。

返回

torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

True 表示我们停止对特定行的生成。False 表示我们应该继续。

class transformers.MaxLengthCriteria

< >

( max_length: int max_position_embeddings: typing.Optional[int] = None )

参数

  • max_length (int) — 输出序列所能包含的最大标记数。
  • max_position_embeddings (int可选) — 模型的最大长度,由模型的 config.max_position_embeddings 属性定义。

该类可用于在生成的标记总数超过 max_length 时停止生成。请注意,对于仅解码器类型的 Transformer,这包括初始的提示标记。

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。这些可以是 SoftMax 前每个词汇标记的分数,也可以是 SoftMax 后每个词汇标记的分数。如果此停止标准依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True
  • kwargs (dict[str, Any]可选) — 其他特定于停止标准的关键字参数。

返回

torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

True 表示我们停止对特定行的生成。False 表示我们应该继续。

class transformers.MaxTimeCriteria

< >

( max_time: float initial_timestamp: typing.Optional[float] = None )

参数

  • max_time (float) — 生成所允许的最大时间(以秒为单位)。
  • initial_time (float可选,默认为 time.time()) — 允许的生成时间的开始时间。

当总生成时间超过某个时间量时,该类可用于停止生成。默认情况下,时间将在初始化此函数时开始计算。您可以通过传递 initial_time 来覆盖此行为。

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。这些可以是 SoftMax 前每个词汇标记的分数,也可以是 SoftMax 后每个词汇标记的分数。如果此停止标准依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True
  • kwargs (dict[str, Any]可选) — 其他特定于停止标准的关键字参数。

返回

torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

True 表示我们停止对特定行的生成。False 表示我们应该继续。

class transformers.StopStringCriteria

< >

( tokenizer: PreTrainedTokenizerBase stop_strings: typing.Union[str, list[str]] )

参数

  • tokenizer (PreTrainedTokenizer) — 模型关联的 tokenizer(用于提取词汇表和对终止序列进行分词)。
  • stop_strings (Union[str, list[str]]) — 应该结束生成的字符串列表。如果传递一个字符串,它将被视为一个只有一个元素的列表。

当生成特定的字符串序列时,该类可用于停止生成。它将字符串与 tokenizer 词汇表一起进行预处理,以找到标记可以有效完成停止字符串的位置。

一旦生成了一个能完成任何停止字符串的标记,生成就会停止。我们希望捕获任何解码输出中存在停止字符串的情况,这意味着我们还必须捕获一端或两端都有“悬垂”的情况。为了更具体,对于停止字符串“stop”,以下任何标记序列都会触发匹配:

  • [“st”, “op”]
  • [“stop”]
  • [“st”, “opera”]
  • [“sto”, “pper”]
  • [“las”, “topper”]
  • [“s”, “to”, “pped”]

请注意,只有当停止字符串位于生成序列的末尾时才会触发匹配。换句话说,这些序列不会触发匹配:

  • [“stop”, “at”]
  • [“st”, “op”, “at”]
  • [“st”, “opera”, “tion”]

这些不匹配的原因是停止字符串不与最后一个标记重叠。如果您可以从序列末尾移除一个或多个标记而不破坏停止字符串,则此标准将不会匹配该停止字符串。这是设计使然;因为每次生成标记后都会运行此检查,所以如果生成了有效的停止字符串,我们不会错过它,但我们不希望仅仅因为停止字符串存在于过去的 input_ids 中就停止生成。

那么,匹配实际上是如何执行的呢?我们采用一种相当令人困惑的方式,因为我们希望整个匹配过程都能与 Torch 或 XLA 兼容,这意味着我们不能使用标准的字符串方法。然而,经过一些工作,是可以用纯张量操作来进行字符串匹配的。我们将首先描述我们使用标准字符串操作的算法,然后在最后解释如何将其转换为纯张量操作。

该算法的关键在于一个观察:因为停止字符串必须与标记序列的末尾重叠,所以我们可以从序列的末尾开始向后工作。具体来说,我们检查最后一个标记的开头和停止字符串的结尾之间是否存在重叠,或者换句话说,对于某个 i > 0,stop_string[-i:] == token[:i]。如果您查看上面的正例,您会发现它们中的最后一个标记都满足此属性:

  • [“st”, “op”] (重叠部分是“op”,重叠长度 == 2)
  • [“stop”] (重叠部分是“stop”,重叠长度 == 4)
  • [“st”, “opera”] (重叠部分是“op”,重叠长度 == 2)
  • [“sto”, “pper”] (重叠部分是“p”,重叠长度 == 1)
  • [“las”, “topper”] (重叠部分是“top”,重叠长度 == 3)
  • [“s”, “to”, “pped”] (重叠部分是“p”,重叠长度 == 1)

不可能构造一个不具有此属性的匹配序列(您可以自行验证)。然而,尽管最后一个标记的开头和停止字符串的结尾之间的这种重叠是匹配的必要条件,但它不是充分条件。我们还需要检查标记序列的其余部分是否与停止字符串一致。

我们该怎么做呢?让我们以 [“s”, “to”, “pped”] 为例。我们知道最后一个标记“pped”与停止字符串“stop”有 1 个字符的重叠。然后我们回到前一个标记“to”。由于我们已经从停止字符串中匹配了 1 个字符,因此要检查的剩余部分是“sto”。我们检查下一个标记“to”是否匹配剩余部分的结尾,结果是匹配的。我们现在已经从停止字符串中匹配了 3 个字符,要匹配的剩余部分是“s”。我们再次回到前一个标记,它也是“s”。这是一个匹配,因此我们已经匹配了整个停止字符串。

但是,当标记超出停止字符串的开头时,它又是如何工作的呢?让我们考虑 [“las”, “topper”] 的例子。最后一个标记“topper”与停止字符串“stop”有 3 个字符的重叠。因此,要匹配的剩余停止字符串是“s”。我们回到前一个标记“las”。因为要匹配的剩余部分只是“s”,长度为 1,我们只考虑标记的最后一个字符,即“s”。这与停止字符串匹配,因此整个字符串都匹配了。

那么,我们如何用张量操作来计算这些匹配呢?很简单:我们高效地为所有标记预计算必要的信息!对于每个标记,我们计算:

  • 它与停止字符串结尾的重叠部分(如果有)
  • 标记在停止字符串内匹配的位置,包括超出开头的匹配。
  • 标记的总长度

例如,对于标记“pped”,我们将计算出 1 的结尾重叠,没有内部匹配位置,长度为 4。对于标记“to”,我们将计算出没有结尾重叠,一个内部匹配位置为 1(从结尾开始计数),长度为 2。对于标记“s”,我们将计算出没有结尾重叠,一个内部匹配位置为 3(同样从结尾开始计数),长度为 1。

只要我们有这些信息,我们就可以执行上述算法而无需任何字符串比较操作。我们只需执行以下步骤:

  • 检查最后一个标记是否与开始字符串有结尾重叠
  • 继续向后,记录到目前为止我们已经匹配了多少停止字符串
  • 在每一步,检查下一个标记是否将当前位置作为其有效位置之一
  • 继续直到匹配失败,或者我们完全匹配了整个停止字符串

再次以 [“s”, “to”, “pped”] 为例。“pped” 的结尾重叠为 1,所以我们可以开始匹配。到目前为止我们已经匹配了 1 个字符,所以我们检查下一个标记“to”是否以 1 作为有效位置(同样,从结尾开始计数)。它确实是,所以我们将“to”的长度加到我们的位置跟踪器上。我们现在已经匹配了 3 个字符,所以我们检查下一个标记“s”是否以 3 作为有效位置。它确实是,所以我们将其长度加到位置跟踪器上。位置跟踪器现在是 4,也就是停止字符串的长度。我们已经匹配了整个停止字符串。

在第二种情况 [“las”, “topper”] 中,“topper” 的结尾重叠为 3,所以我们可以开始匹配。到目前为止我们已经匹配了 3 个字符,所以我们检查下一个标记“las”是否以 3 作为有效位置。它确实是,因为我们允许标记匹配超出停止字符串开头的那些位置。我们将其长度加到位置跟踪器上。位置跟踪器现在是 6,大于停止字符串的长度!不过别慌,这也算作是停止字符串的匹配。我们已经匹配了整个停止字符串。

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2")
>>> inputs = tokenizer("The biggest states in the USA by land area:", return_tensors="pt")

>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas
- California

>>> # Passing one or more stop strings will halt generation after those strings are emitted
>>> # Note that generating with stop strings requires you to pass the tokenizer too
>>> gen_out = model.generate(**inputs, stop_strings=["Texas"], tokenizer=tokenizer)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。这些可以是 SoftMax 前每个词汇标记的分数,也可以是 SoftMax 后每个词汇标记的分数。如果此停止标准依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True
  • kwargs (dict[str, Any]可选) — 其他特定于停止标准的关键字参数。

返回

torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

True 表示我们停止对特定行的生成。False 表示我们应该继续。

class transformers.EosTokenCriteria

< >

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

参数

  • eos_token_id (Union[int, list[int], torch.Tensor]) — *序列结束*标记的 ID。

当生成“序列结束”标记时,该类可用于停止生成。默认情况下,它使用 model.generation_config.eos_token_id

__call__

< >

( input_ids: LongTensor scores: FloatTensor **kwargs ) torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • scores (torch.FloatTensor,形状为 (batch_size, config.vocab_size)) — 语言模型头的预测分数。这些可以是 SoftMax 前每个词汇标记的分数,也可以是 SoftMax 后每个词汇标记的分数。如果此停止标准依赖于 scores 输入,请确保在调用 generate 时传递 return_dict_in_generate=True, output_scores=True
  • kwargs (dict[str, Any]可选) — 其他特定于停止标准的关键字参数。

返回

torch.BoolTensor. (形状为 (batch_size, 1)torch.BoolTensor)

True 表示我们停止对特定行的生成。False 表示我们应该继续。

约束

Constraint 可用于强制生成在输出中包含特定的标记或序列。请注意,这仅适用于我们的 PyTorch 实现。

class transformers.Constraint

< >

( )

所有可在生成过程中应用的约束的抽象基类。它必须定义如何满足约束。

所有继承 Constraint 的类都必须遵循以下要求:

completed = False
while not completed:
    _, completed = constraint.update(constraint.advance())

将始终终止(停止)。

advance

< >

( ) token_ids (Union[int, list[int], None])

返回

token_ids (Union[int, list[int], None])

  • 一个推进约束的单个标记 ID (int),或
  • 一个可以推进约束的标记 ID 列表
  • 如果约束已完成或无法推进,则为 None

调用时,返回将此约束向满足状态推进一步的标记。

复制

< >

( stateful = False ) constraint(Constraint)

参数

  • stateful(bool) — 是否不仅为新实例复制约束,还复制其状态。

返回

constraint(Constraint)

与被调用的约束相同的约束。

创建此约束的新实例。

does_advance

< >

( token_id: int )

读入一个标记并返回它是否取得进展。

remaining

< >

( )

返回完成此约束所需的 advance() 剩余步骤数。

重置

< >

( )

将此约束的状态重置为其初始化状态。当约束的满足被一个不想要的标记打断时,我们会调用此方法。

test

< >

( )

测试此约束是否已正确定义。

update

< >

( token_id: int ) stepped(bool)

参数

  • token_id(int) — 集束搜索中新生成的标记的 ID。

返回

stepped(bool)

此约束是否向满足状态迈进了一步。 completed(bool):此约束是否因生成此标记而完全满足。 reset (bool):此约束是否因生成此标记而重置了其进度。

读入一个标记并返回指示其进展的布尔值。与 does_advance(self, token_id: int) 不同,此函数将更新此对象的状态。

这不是为了测试某个标记是否会推进进度;而是为了更新其状态,就好像它已经被生成了一样。如果 token_id != desired token,这一点变得很重要(请参考 PhrasalConstraint 中的 else 语句)。

class transformers.PhrasalConstraint

< >

( token_ids: list )

参数

  • token_ids (list[int]) — 必须由输出生成的标记的 ID。

强制输出中包含一个有序标记序列的 Constraint

class transformers.DisjunctiveConstraint

< >

( nested_token_ids: list )

参数

  • nested_token_ids (list[list[int]]) — 一个单词列表,其中每个单词都是一个 ID 列表。通过生成列表中的一个单词即可满足此约束。

一种特殊的 Constraint,通过满足多个约束中的一个即可满足。

class transformers.ConstraintListState

< >

( constraints: list )

参数

  • constraints (list[Constraint]) — 一个 Constraint 对象列表,集束评分器必须满足这些约束。

一个供集束评分器追踪约束列表进度的类。

advance

< >

( )

可以取得进展的待生成词元列表。这里的“列表”并非指能完全满足一个约束的词元列表。

给定约束 c_i = {t_ij | j == # of tokens},如果我们没有正在处理某个特定约束 c_i,则返回

[t_k1 for k in indices of unfulfilled constraints]

如果我们正在处理一个约束,则返回:[t_ij],其中 i 是正在处理的约束的索引,j 是该约束的下一步。

尽管我们不关心哪个约束先被满足,但如果我们正在满足一个约束,那么只会返回与该约束相关的词元。

重置

< >

( token_ids: typing.Optional[list[int]] )

token_ids: 迄今为止生成的词元,用于重置约束处理进度的状态。

BeamSearch

class transformers.BeamScorer

< >

( )

用于 ~PreTrainedModel.beam_search~PreTrainedModel.beam_sample 的所有集束评分器的抽象基类。

process

< >

( input_ids: LongTensor next_scores: FloatTensor next_tokens: LongTensor next_indices: LongTensor **kwargs ) UserDict

参数

  • input_ids (torch.LongTensor,形状为 (batch_size * num_beams, sequence_length)) — 词汇表中输入序列词元的索引。

    可以使用任何继承自 PreTrainedTokenizer 的类来获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • next_scores (torch.FloatTensor,形状为 (batch_size, 2 * num_beams)) — 2 * num_beams 个未完成集束假设的当前分数。
  • next_tokens (torch.LongTensor,形状为 (batch_size, 2 * num_beams)) — 对应于 2 * num_beams 个未完成集束假设的词元的 input_ids
  • next_indices (torch.LongTensor,形状为 (batch_size, 2 * num_beams)) — 指示 next_tokens 对应于哪个集束假设的集束索引。
  • pad_token_id (int, 可选) — 填充 词元的 ID。
  • eos_token_id (Union[int, list[int]], 可选) — 序列结束 词元的 ID。可选择使用列表来设置多个 序列结束 词元。
  • beam_indices (torch.LongTensor, 可选) — 指示每个词元对应哪个集束假设的集束索引。
  • group_index (int, 可选) — 集束组的索引。与 ~PreTrainedModel.group_beam_search 一起使用。

返回

UserDict

由上述字段组成的字典

  • next_beam_scores (torch.FloatTensor,形状为 (batch_size * num_beams)) — 所有未完成集束的更新后分数。
  • next_beam_tokens (torch.FloatTensor,形状为 (batch_size * num_beams)) — 将要添加到未完成集束假设中的下一个词元。
  • next_beam_indices (torch.FloatTensor,形状为 (batch_size * num_beams)) — 指示下一个词元应添加到哪个集束的集束索引。

finalize

< >

( input_ids: LongTensor next_scores: FloatTensor next_tokens: LongTensor next_indices: LongTensor max_length: int **kwargs ) torch.LongTensor,形状为 (batch_size * num_return_sequences, sequence_length)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size * num_beams, sequence_length)) — 词汇表中输入序列词元的索引。

    可以使用任何继承自 PreTrainedTokenizer 的类来获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • final_beam_scores (torch.FloatTensor,形状为 (batch_size * num_beams)) — 所有未完成集束的最终分数。
  • final_beam_tokens (torch.FloatTensor,形状为 (batch_size * num_beams)) — 将要添加到未完成集束假设中的最后一个词元。
  • final_beam_indices (torch.FloatTensor,形状为 (batch_size * num_beams)) — 指示 final_beam_tokens 应添加到哪个集束的集束索引。
  • pad_token_id (int, 可选) — 填充 词元的 ID。
  • eos_token_id (Union[int, list[int]], 可选) — 序列结束 词元的 ID。可选择使用列表来设置多个 序列结束 词元。

返回

torch.LongTensor,形状为 (batch_size * num_return_sequences, sequence_length)

生成的序列。如果所有批次因 eos_token_id 而提前结束,第二个维度(sequence_length)等于或短于 max_length

class transformers.BeamSearchScorer

< >

( batch_size: int num_beams: int device: device length_penalty: typing.Optional[float] = 1.0 do_early_stopping: typing.Union[str, bool, NoneType] = False num_beam_hyps_to_keep: typing.Optional[int] = 1 num_beam_groups: typing.Optional[int] = 1 max_length: typing.Optional[int] = None )

参数

  • batch_size (int) — 并行运行标准集束搜索解码的 input_ids 的批次大小。
  • num_beams (int) — 集束搜索的集束数量。
  • device (torch.device) — 定义此 BeamSearchScorer 实例将分配到的设备类型(例如 "cpu""cuda")。
  • length_penalty (float, 可选, 默认为 1.0) — 用于基于集束的生成的长度指数惩罚。它作为序列长度的指数,用于除以序列的分数。由于分数是序列的对数似然(即负数),length_penalty > 0.0 会倾向于生成更长的序列,而 length_penalty < 0.0 会鼓励生成更短的序列。
  • do_early_stopping (boolstr, 可选, 默认为 False) — 控制基于集束的方法(如集束搜索)的停止条件。它接受以下值:True,当有 num_beams 个完整候选时,生成停止;False,应用启发式方法,当找到更好候选的可能性很小时,生成停止;"never",集束搜索过程仅在不可能有更好候选时才停止(标准的集束搜索算法)。
  • num_beam_hyps_to_keep (int, 可选, 默认为 1) — 调用 finalize() 时应返回的集束假设数量。
  • num_beam_groups (int, 可选, 默认为 1) — 将 num_beams 分成的组数,以确保不同集束组之间的多样性。更多详情请参阅这篇论文
  • max_length (int, 可选) — 待生成序列的最大长度。

实现标准集束搜索解码的 BeamScorer

部分改编自 Facebook 的 XLM 集束搜索代码

多样化集束搜索算法及实现的参考:Ashwin Kalyan 的 DBS 实现

process

< >

( input_ids: LongTensor next_scores: FloatTensor next_tokens: LongTensor next_indices: LongTensor pad_token_id: typing.Union[int, torch.Tensor, NoneType] = None eos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None beam_indices: typing.Optional[torch.LongTensor] = None group_index: typing.Optional[int] = 0 decoder_prompt_len: typing.Optional[int] = 0 )

finalize

< >

( input_ids: LongTensor final_beam_scores: FloatTensor final_beam_tokens: LongTensor final_beam_indices: LongTensor max_length: int pad_token_id: typing.Union[int, torch.Tensor, NoneType] = None eos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None beam_indices: typing.Optional[torch.LongTensor] = None decoder_prompt_len: typing.Optional[int] = 0 )

class transformers.ConstrainedBeamSearchScorer

< >

( batch_size: int num_beams: int constraints: list device: device length_penalty: typing.Optional[float] = 1.0 do_early_stopping: typing.Union[str, bool, NoneType] = False num_beam_hyps_to_keep: typing.Optional[int] = 1 num_beam_groups: typing.Optional[int] = 1 max_length: typing.Optional[int] = None )

参数

  • batch_size (int) — 并行运行标准集束搜索解码的 input_ids 的批次大小。
  • num_beams (int) — 集束搜索的集束数量。
  • constraints (list[Constraint]) — 一个表示为 Constraint 对象的正向约束列表,这些约束必须在生成输出中得到满足。更多信息,请阅读 Constraint 的文档。
  • device (torch.device) — 定义此 BeamSearchScorer 实例将分配到的设备类型(例如 "cpu""cuda")。
  • length_penalty (float, 可选, 默认为 1.0) — 用于基于集束的生成的长度指数惩罚。它作为序列长度的指数,用于除以序列的分数。由于分数是序列的对数似然(即负数),length_penalty > 0.0 会倾向于生成更长的序列,而 length_penalty < 0.0 会鼓励生成更短的序列。
  • do_early_stopping (boolstr, 可选, 默认为 False) — 控制基于集束的方法(如集束搜索)的停止条件。它接受以下值:True,当有 num_beams 个完整候选时,生成停止;False,应用启发式方法,当找到更好候选的可能性很小时,生成停止;"never",集束搜索过程仅在不可能有更好候选时才停止(标准的集束搜索算法)。
  • num_beam_hyps_to_keep (int, 可选, 默认为 1) — 调用 finalize() 时应返回的集束假设数量。
  • num_beam_groups (int, 可选, 默认为 1) — 将 num_beams 分成的组数,以确保不同集束组之间的多样性。更多详情请参阅这篇论文
  • max_length (int, optional) — 要生成的序列的最大长度。

BeamScorer 实现约束集束搜索解码。

process

< >

( input_ids: LongTensor next_scores: FloatTensor next_tokens: LongTensor next_indices: LongTensor scores_for_all_vocab: FloatTensor pad_token_id: typing.Union[int, torch.Tensor, NoneType] = None eos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None beam_indices: typing.Optional[torch.LongTensor] = None decoder_prompt_len: typing.Optional[int] = 0 ) UserDict

参数

  • input_ids (torch.LongTensor,形状为 (batch_size * num_beams, sequence_length)) — 词汇表中输入序列标记的索引。

    可以使用任何继承自 PreTrainedTokenizer 的类来获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • next_scores (torch.FloatTensor,形状为 (batch_size, 2 * num_beams)) — 前 2 * num_beams 个未完成的束假设的当前得分。
  • next_tokens (torch.LongTensor,形状为 (batch_size, 2 * num_beams)) — 对应于前 2 * num_beams 个未完成的束假设的标记的 input_ids
  • next_indices (torch.LongTensor,形状为 (batch_size, 2 * num_beams)) — 束索引,指示 next_tokens 对应于哪个束假设。
  • scores_for_all_vocab (torch.FloatTensor,形状为 (batch_size * num_beams, sequence_length)) — 每个束假设中词汇表所有标记的得分。
  • pad_token_id (int, optional) — 填充标记的 ID。
  • eos_token_id (Union[int, list[int]], optional) — 序列结束标记的 ID。可选地,使用列表设置多个序列结束标记。
  • beam_indices (torch.LongTensor, optional) — 束索引,指示每个标记对应于哪个束假设。
  • decoder_prompt_len (int, optional) — 解码器输入中包含的提示长度。

返回

UserDict

由上述字段组成的字典

  • next_beam_scores (torch.FloatTensor,形状为 (batch_size * num_beams)) — 所有未完成集束的更新后分数。

  • next_beam_tokens (torch.FloatTensor,形状为 (batch_size * num_beams)) — 将要添加到未完成集束假设中的下一个词元。

  • next_beam_indices (torch.FloatTensor,形状为 (batch_size * num_beams)) — 指示下一个词元应添加到哪个集束的集束索引。

finalize

< >

( input_ids: LongTensor final_beam_scores: FloatTensor final_beam_tokens: LongTensor final_beam_indices: LongTensor max_length: int pad_token_id: typing.Union[int, torch.Tensor, NoneType] = None eos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None beam_indices: typing.Optional[torch.LongTensor] = None decoder_prompt_len: typing.Optional[int] = 0 )

流式处理器

class transformers.TextStreamer

< >

( tokenizer: AutoTokenizer skip_prompt: bool = False **decode_kwargs )

参数

  • tokenizer (AutoTokenizer) — 用于解码标记的分词器。
  • skip_prompt (bool, optional, 默认为 False) — 是否跳过 .generate() 的提示。例如,对于聊天机器人很有用。
  • decode_kwargs (dict, optional) — 传递给分词器 decode 方法的附加关键字参数。

简单的文本流式处理器,一旦形成完整的单词,就将标记打印到标准输出。

流式处理器类的 API 仍在开发中,将来可能会发生变化。

示例

>>> 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,

结束

< >

( )

刷新所有剩余的缓存,并向标准输出打印一个换行符。

on_finalized_text

< >

( text: str stream_end: bool = False )

将新文本打印到标准输出。如果流结束,则同时打印一个换行符。

put

< >

( value )

接收标记,解码它们,并在它们形成完整的单词后立即将其打印到标准输出。

class transformers.TextIteratorStreamer

< >

( tokenizer: AutoTokenizer skip_prompt: bool = False timeout: Optional[float] = None **decode_kwargs )

参数

  • tokenizer (AutoTokenizer) — 用于解码标记的分词器。
  • skip_prompt (bool, optional, 默认为 False) — 是否跳过 .generate() 的提示。例如,对于聊天机器人很有用。
  • timeout (float, optional) — 文本队列的超时时间。如果为 None,队列将无限期阻塞。在单独的线程中调用 .generate() 时,这对于处理异常很有用。
  • decode_kwargs (dict, optional) — 传递给分词器 decode 方法的附加关键字参数。

将可打印文本存储在队列中的流式处理器,供下游应用程序作为迭代器使用。这对于需要以非阻塞方式访问生成文本的应用程序(例如,在交互式 Gradio 演示中)非常有用。

流式处理器类的 API 仍在开发中,将来可能会发生变化。

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
>>> from threading import Thread

>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> streamer = TextIteratorStreamer(tok)

>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
>>> thread = Thread(target=model.generate, kwargs=generation_kwargs)
>>> thread.start()
>>> generated_text = ""
>>> for new_text in streamer:
...     generated_text += new_text
>>> generated_text
'An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,'

on_finalized_text

< >

( text: str stream_end: bool = False )

将新文本放入队列。如果流结束,则同时在队列中放入一个停止信号。

class transformers.AsyncTextIteratorStreamer

< >

( tokenizer: AutoTokenizer skip_prompt: bool = False timeout: Optional[float] = None **decode_kwargs )

参数

  • tokenizer (AutoTokenizer) — 用于解码标记的分词器。
  • skip_prompt (bool, optional, 默认为 False) — 是否跳过 .generate() 的提示。例如,对于聊天机器人很有用。
  • timeout (float, optional) — 文本队列的超时时间。如果为 None,队列将无限期阻塞。在单独的线程中调用 .generate() 时,这对于处理异常很有用。
  • decode_kwargs (dict, optional) — 传递给分词器 decode 方法的附加关键字参数。

引发

TimeoutError

  • TimeoutError — 如果标记生成时间超过超时值。

将可打印文本存储在队列中的流式处理器,供下游应用程序作为异步迭代器使用。这对于需要异步访问生成文本的应用程序(例如,在交互式 Gradio 演示中)非常有用。

流式处理器类的 API 仍在开发中,将来可能会发生变化。

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, AsyncTextIteratorStreamer
>>> from threading import Thread
>>> import asyncio

>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")

>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> async def main():
...     # Important: AsyncTextIteratorStreamer must be initialized inside a coroutine!
...     streamer = AsyncTextIteratorStreamer(tok)
...     generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
...     thread = Thread(target=model.generate, kwargs=generation_kwargs)
...     thread.start()
...     generated_text = ""
...     async for new_text in streamer:
...         generated_text += new_text
>>>     print(generated_text)
>>> asyncio.run(main())
An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,

on_finalized_text

< >

( text: str stream_end: bool = False )

将新文本放入队列。如果流结束,则同时在队列中放入一个停止信号。

缓存

class transformers.Cache

< >

( )

所有缓存的基类、抽象类。实际的数据结构特定于每个子类。

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

参数

  • key_states (torch.Tensor) — 要缓存的新键状态。
  • value_states (torch.Tensor) — 要缓存的新值状态。
  • layer_idx (int) — 要缓存状态的层的索引。
  • cache_kwargs (dict[str, Any], `optional`) — 缓存子类的附加参数。这些参数特定于每个子类,并允许创建新型缓存。

使用层 layer_idx 的新 key_statesvalue_states 更新缓存。

class transformers.CacheConfig

< >

( cache_implementation: None )

缓存配置的基类

update

< >

( **kwargs ) dict[str, Any]

参数

  • kwargs (dict[str, Any]) — 用于尝试更新此类属性的字典。

返回

dict[str, Any]

包含所有未用于更新实例的键值对的字典。

如果 kwargs 中的属性与现有属性匹配,则使用它们更新此类实例的属性,并返回所有未使用的 kwargs。

class transformers.QuantizedCacheConfig

< >

( backend: str = 'quanto' nbits: typing.Optional[int] = 4 axis_key: typing.Optional[int] = 0 axis_value: typing.Optional[int] = 0 q_group_size: typing.Optional[int] = 64 residual_length: typing.Optional[int] = 128 compute_dtype: typing.Optional[torch.dtype] = torch.float16 device: typing.Optional[str] = 'cpu' )

参数

  • backend (str, optional, 默认为 "quanto") — 执行量化时使用的后端,可以是 [quanto, HQQ] 之一
  • nbits (Optional[int], optional, 默认为 4) — 比特数,对于 quanto 后端可以是 2 或 4,对于 HQQ 后端可以是 [1, 2, 3, 4, 8] 中的一个。默认为 2。
  • axis_key (int, optional, 默认为 0) — 对键张量执行分组的轴。对于 quanto 后端可以是 [0, -1],对于 HQQ 后端可以是 [0, 1]。
  • axis_value (int, optional, 默认为 0) — 对值张量执行分组的轴。对于 quanto 后端可以是 [0, -1],对于 HQQ 后端可以是 [0, 1]。
  • q_group_size (Optional[int], optional, 默认为 64) — 量化组的大小,应为模型隐藏维度的除数。默认为 64。
  • residual_length (Optional[int], 可选, 默认为 128) — 残差缓存的长度,该部分将始终以原始精度存储。默认为 128。
  • compute_dtype (torch.dtype, 可选, 默认为 torch.float16) — 模型中用于计算的默认 dtype。键(Keys)和值(Values)在反量化后将被转换为此 dtype。
  • device (str, 可选, 默认为 "cpu") — 执行计算的设备,应与模型的设备相同。

用于量化缓存设置的配置类。

validate

< >

( )

验证传入的参数是否正确

class transformers.DynamicCache

< >

( _distributed_cache_data: typing.Optional[collections.abc.Iterable] = None )

一种随着生成更多令牌而动态增长的缓存。这是生成模型的默认设置。

它将键(Key)和值(Value)状态存储为张量列表,每层一个。每个张量的预期形状为 [batch_size, num_heads, seq_len, head_dim]

示例

>>> 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()
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
DynamicCache()

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

参数

  • key_states (torch.Tensor) — 要缓存的新键状态。
  • value_states (torch.Tensor) — 要缓存的新值状态。
  • layer_idx (int) — 要缓存状态的层的索引。
  • cache_kwargs (dict[str, Any], 可选) — 缓存子类的附加参数。在 DynamicCache 中不使用附加参数。

使用层 layer_idx 的新 key_statesvalue_states 更新缓存。

get_seq_length

< >

( layer_idx: typing.Optional[int] = 0 )

返回缓存状态的序列长度。可以有选择地传入层索引。

reorder_cache

< >

( beam_idx: LongTensor )

根据选定的束索引,为束搜索(beam search)重新排序缓存。

to_legacy_cache

< >

( )

DynamicCache 实例转换为其等效的旧版缓存格式。用于向后兼容。

from_legacy_cache

< >

( past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor, torch.FloatTensor]]] = None )

将旧版缓存格式的缓存转换为等效的 DynamicCache。用于向后兼容。

class transformers.QuantizedCache

< >

( cache_config: QuantizedCacheConfig )

一种量化器缓存,类似于 KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache 论文 中描述的方法。它通过应用量化,使模型能够生成更长的序列,而无需为键(Key)和值(Value)缓存分配过多内存。

缓存有两种存储类型,一种用于原始精度,一种用于量化缓存。设置了一个 `residual length` 作为原始精度缓存的最大容量。当长度超过最大容量时,原始精度缓存将被丢弃并移入量化缓存。与论文中描述的不同,键(Keys)和值(Values)的量化是按通道进行的,并设置了 `q_group_size`。

它将键(Keys)和值(Values)存储为量化张量的列表(如果需要存储元数据,则为元组),每层一个。此外,它还将原始精度的键和值状态存储为张量列表,每层一个。每个张量的大小为 `[batch_size, num_heads, seq_len - residual_length, head_dim]`

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

get_seq_length

< >

( layer_idx: typing.Optional[int] = 0 )

返回缓存状态的序列长度。可以有选择地传入层索引。

class transformers.QuantoQuantizedCache

< >

( cache_config: CacheConfig )

参数

  • cache_config (QuantizedCacheConfig) — 包含量化器使用的所有参数的配置,包括轴、qtype 和组大小。

使用 quanto 作为后端执行量化的量化缓存类。当前实现仅支持 int2int4 dtypes。

示例

>>> # Run pip install quanto first if you don't have it yet
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, QuantoQuantizedCache, QuantizedCacheConfig

>>> 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
>>> cache_config = QuantizedCacheConfig(nbits=4)
>>> past_key_values = QuantoQuantizedCache(cache_config=cache_config)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
QuantoQuantizedCache()

class transformers.HQQQuantizedCache

< >

( cache_config: CacheConfig )

参数

  • cache_config (QuantizedCacheConfig) — 包含量化器使用的所有参数的配置,包括轴、qtype 和组大小。

使用 HQQ 作为后端执行量化的量化缓存类。当前实现支持 int2int4int8 dtypes。

示例

>>> # Run pip install hqq first if you don't have it yet
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, HQQQuantizedCache, QuantizedCacheConfig

>>> 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
>>> cache_config = QuantizedCacheConfig(nbits=4, axis_key=1, axis_value=1)
>>> past_key_values = HQQQuantizedCache(cache_config=cache_config)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
HQQQuantizedCache()

class transformers.OffloadedCache

< >

( )

DynamicCache 的直接替代品,以更多 CPU 内存为代价来节省加速器(GPU、XPU)内存。适用于从具有非常长上下文的模型生成内容。

除了所有 forward() 计算都发生的默认加速器流之外,此类还使用另一个它自己创建的流,即预取流。由于在不同流上的操作调度是独立的,此类使用预取流在层 k 执行时异步预取层 k+1 的 KV 缓存。层 k-1 缓存向 CPU 的移动由默认流处理,这是一种确保在该缓存上的所有计算完成后调度驱逐的简单方法。

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

参数

  • key_states (torch.Tensor) — 要缓存的新键状态。
  • value_states (torch.Tensor) — 要缓存的新值状态。
  • layer_idx (int) — 要缓存状态的层的索引。
  • cache_kwargs (dict[str, Any], 可选) — 缓存子类的附加参数。在 OffloadedCache 中不使用附加参数。

使用层 layer_idx 的新 key_statesvalue_states 更新缓存。

prefetch_layer

< >

( layer_idx: int )

开始预取下一层缓存

evict_previous_layer

< >

( layer_idx: int )

将上一层缓存移动到 CPU

class transformers.StaticCache

< >

( config: PretrainedConfig max_batch_size: int max_cache_len: typing.Optional[int] = None device: typing.Union[torch.device, str, NoneType] = None dtype: dtype = torch.float32 layer_device_map: typing.Optional[dict[int, typing.Union[str, torch.device, int]]] = None )

参数

  • config (PretrainedConfig) — 定义初始化静态缓存所需形状相关属性的配置文件。
  • max_batch_size (int) — 模型将使用的最大批处理大小。请注意,如果使用较小的批处理大小,则必须实例化一个新实例。如果您手动设置批处理大小,请确保在运行束搜索时考虑束的数量
  • max_cache_len (int, 可选) — 模型将使用的最大序列长度。
  • device (torch.devicestr, 可选) — 缓存应在其上初始化的设备。如果您使用超过 1 个计算设备,则应改用 layer_device_map 参数。
  • dtype (torch.dtype, 可选, 默认为 torch.float32) — 初始化层时使用的默认 dtype
  • layer_device_map (Optional[dict[int, Union[str, torch.device, int]]], 可选) — 层与其设备之间的映射。当您手动初始化缓存且模型分布在不同 GPU 之间时,此参数是必需的。您可以通过检查关联的 device_map 来了解哪些层映射到哪个设备:model.hf_device_map

静态缓存类,用于 torch.compile(model)torch.export()

示例

>>> 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_batch_size=1, max_cache_len=max_generated_length, device=model.device, dtype=model.dtype)
>>> 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()

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

参数

  • key_states (torch.Tensor) — 要缓存的新键状态。
  • value_states (torch.Tensor) — 要缓存的新值状态。
  • layer_idx (int) — 要缓存状态的层的索引。
  • cache_kwargs (dict[str, Any], 可选) — 缓存子类的附加参数。StaticCache 需要 cache_position 输入来知道在缓存中的写入位置。

使用层 layer_idx 的新 key_statesvalue_states 更新缓存。使用张量进行索引非常重要,否则会引入到设备的副本。

get_seq_length

< >

( layer_idx: typing.Optional[int] = 0 )

返回模型已见过的缓存状态的序列长度。

重置

< >

( )

在保留对象的同时重置缓存值

class transformers.OffloadedStaticCache

< >

( config: PretrainedConfig max_batch_size: int max_cache_len: typing.Optional[int] device: typing.Union[str, torch.device] dtype: typing.Optional[torch.dtype] = None offload_device: typing.Union[str, torch.device] = device(type='cpu') layer_device_map: typing.Optional[dict[int, typing.Union[str, torch.device, int]]] = None )

参数

  • config (`PretrainedConfig) — 定义初始化静态缓存所需形状相关属性的配置文件。
  • max_batch_size (int) — 模型将使用的最大批处理大小。
  • max_cache_len (int) — 模型将使用的最大序列长度。
  • device (Union[str, torch.device]) — 缓存应在其上初始化的设备。如果您使用超过 1 个计算设备,则应改用 layer_device_map 参数。
  • dtype (torch.dtype, 可选) — 初始化缓存时使用的默认 dtype
  • offload_device (Union[str, torch.device], 可选, 默认为 cpu) — 要卸载到的设备。默认为 CPU。
  • layer_device_map (dict[int, Union[str, torch.device, int]], 可选) — 层与其设备之间的映射。当您手动初始化缓存且模型分布在不同 GPU 之间时,此参数是必需的。您可以通过检查关联的 device_map 来了解哪些层映射到哪个设备:model.hf_device_map

静态缓存类,用于 torch.compile(model),可卸载到 CPU 或其他设备。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, OffloadedStaticCache

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")

>>> inputs = tokenizer(text="My name is GPT2", 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 = OffloadedStaticCache(config=model.config, max_batch_size=1, max_cache_len=max_generated_length, device=model.device, dtype=model.dtype)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> past_kv_length = outputs.past_key_values # access cache filled with key/values from generation

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

参数

  • key_states (torch.Tensor) — 要缓存的新键状态。
  • value_states (torch.Tensor) — 要缓存的新值状态。
  • layer_idx (int) — 要缓存状态的层的索引。
  • cache_kwargs (dict[str, Any], optional) — 缓存子类的附加参数。OffloadedStaticCache 需要 cache_position 输入来知道在缓存中的写入位置。

使用层 layer_idx 的新 key_statesvalue_states 更新缓存。使用张量进行索引非常重要,否则会引入到设备的副本。

get_seq_length

< >

( layer_idx: typing.Optional[int] = 0 )

返回模型已见过的缓存状态的序列长度。

重置

< >

( )

重置缓存值,同时保留对象。

class transformers.HybridCache

< >

( config: PretrainedConfig max_batch_size: int max_cache_len: typing.Optional[int] = None device: typing.Union[torch.device, str, NoneType] = None dtype: dtype = torch.float32 layer_device_map: typing.Optional[dict[int, typing.Union[str, torch.device, int]]] = None )

参数

  • config (`PretrainedConfig) — 定义初始化静态缓存所需形状相关属性的配置文件。
  • max_batch_size (int) — 模型将使用的最大批处理大小。请注意,如果使用较小的批处理大小,则必须实例化一个新实例。
  • max_cache_len (int, optional) — 模型将使用的最大序列长度。
  • device (torch.device or str, optional) — 缓存应初始化的设备。如果您使用超过 1 个计算设备,则应传递 layer_device_map 参数。
  • dtype (torch.dtype, optional, defaults to torch.float32) — 初始化层时使用的默认 dtype
  • layer_device_map (Optional[dict[int, Union[str, torch.device, int]]]], optional) — 层与其设备之间的映射。当您手动初始化缓存且模型在不同 GPU 之间拆分时,此参数是必需的。您可以通过检查关联的 device_map 来了解哪些层映射到哪个设备:model.hf_device_map

混合缓存类,与 torch.compile 一起使用,适用于在每隔一层中交替使用局部滑动窗口注意力和全局注意力的模型(最初为 Gemma2 实现)。在底层,混合缓存利用 [“SlidingWindowCache”] 实现滑动窗口注意力,利用 [“StaticCache”] 实现全局注意力。有关更多信息,请参阅每个子组件缓存类的文档。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, HybridCache

>>> model = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b")
>>> tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")

>>> inputs = tokenizer(text="My name is Gemma", 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 = HybridCache(config=model.config, max_batch_size=1, max_cache_len=max_generated_length, device=model.device, dtype=model.dtype)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
HybridCache()

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

get_seq_length

< >

( layer_idx: typing.Optional[int] = 0 )

重置

< >

( )

在保留对象的同时重置缓存值

class transformers.SlidingWindowCache

< >

( config: PretrainedConfig max_batch_size: int max_cache_len: typing.Optional[int] = None device: typing.Union[torch.device, str, NoneType] = None dtype: dtype = torch.float32 layer_device_map: typing.Optional[dict[int, typing.Union[str, torch.device, int]]] = None )

参数

  • config (PretrainedConfig) — 定义初始化静态缓存所需形状相关属性的配置文件。
  • max_batch_size (int) — 模型将使用的最大批处理大小。请注意,如果使用较小的批处理大小,则必须实例化一个新实例。
  • max_cache_len (int, optional) — 模型将使用的最大序列长度。
  • device (torch.device or str, optional) — 缓存应初始化的设备。如果您使用超过 1 个计算设备,则应传递 layer_device_map 参数。
  • dtype (torch.dtype, optional, defaults to torch.float32) — 初始化层时使用的默认 dtype
  • layer_device_map (Optional[dict[int, Union[str, torch.device, int]]]], optional) — 层与其设备之间的映射。当您手动初始化缓存且模型在不同 GPU 之间拆分时,此参数是必需的。您可以通过检查关联的 device_map 来了解哪些层映射到哪个设备:model.hf_device_map

滑动窗口缓存类,用于支持滑动窗口注意力的模型(如 Mistral),并与 torch.compile 一起使用。每次我们尝试更新缓存时,我们都会根据 cache_position >= self.config.sliding_window - 1 计算 indices,如果为 true(这意味着由于滑动窗口约束,缓存无法同时容纳所有旧的键值状态和新状态),我们需要根据 indices 进行循环移位,以用传入的新键值状态替换最旧的状态。

只有当我们超过 sliding_window 时,`to_shift` 才为 true。因此,当 `sliding_window==64` 时

indices = (slicing + to_shift[-1].sum()-1) % self.config.sliding_window tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0])

我们使用这些索引来覆盖缓存,然后我们总是在 cache_position (被限制在 `sliding_window` 内) 写入。

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, SlidingWindowCache

>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.3")
>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.3")

>>> inputs = tokenizer(text="My name is Mistral", 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 = SlidingWindowCache(config=model.config, max_batch_size=1, max_cache_len=max_generated_length, device=model.device, dtype=model.dtype)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
SlidingWindowCache()

update

< >

( key_states: Tensor value_states: Tensor layer_idx: int cache_kwargs: typing.Optional[dict[str, typing.Any]] = None )

重置

< >

( )

class transformers.EncoderDecoderCache

< >

( self_attention_cache: Cache cross_attention_cache: Cache )

所有编码器-解码器缓存的基类、抽象类。可用于保存自注意力和交叉注意力缓存的组合。

示例

>>> 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()
>>> cross_attention_cache = DynamicCache()
>>> 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()

get_seq_length

< >

( layer_idx: typing.Optional[int] = 0 )

返回缓存状态的序列长度。可以有选择地传入层索引。

to_legacy_cache

< >

( )

EncoderDecoderCache 实例转换为其等效的旧版缓存格式。

from_legacy_cache

< >

( past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None )

将旧版缓存格式的缓存转换为等效的 EncoderDecoderCache

重置

< >

( )

reorder_cache

< >

( beam_idx: LongTensor )

根据选定的束索引,为束搜索(beam search)重新排序缓存。

class transformers.MambaCache

< >

( config: PretrainedConfig max_batch_size: int dtype: dtype = torch.float16 device: typing.Union[torch.device, str, NoneType] = None )

参数

  • config (`PretrainedConfig) — 定义初始化静态缓存所需形状相关属性的配置文件。
  • max_batch_size (int) — 模型将使用的最大批处理大小。请注意,如果使用较小的批处理大小,则必须实例化一个新实例。
  • dtype (torch.dtype, optional, defaults to torch.float16) — 初始化层时使用的默认 dtype
  • device (torch.device or str, optional) — 缓存应初始化的设备。应与层设备相同。

用于 mamba 模型的缓存,该模型没有注意力机制和键值状态。

示例

>>> from transformers import AutoTokenizer, MambaForCausalLM, MambaCache

>>> model = MambaForCausalLM.from_pretrained("state-spaces/mamba-130m-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-130m-hf")

>>> inputs = tokenizer(text="My name is Mamba", return_tensors="pt")

>>> # Prepare a cache class and pass it to model's forward
>>> past_key_values = MambaCache(config=model.config, max_batch_size=1, device=model.device, dtype=model.dtype)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values
MambaCache()

update_conv_state

< >

( layer_idx: int new_conv_state: Tensor cache_position: LongTensor )

update_ssm_state

< >

( layer_idx: int new_ssm_state: Tensor )

重置

< >

( )

水印工具

class transformers.WatermarkingConfig

< >

( greenlist_ratio: typing.Optional[float] = 0.25 bias: typing.Optional[float] = 2.0 hashing_key: typing.Optional[int] = 15485863 seeding_scheme: typing.Optional[str] = 'lefthash' context_width: typing.Optional[int] = 1 )

该类持有水印生成参数,应在 `generate` 期间传递给 `GenerationConfig`。有关参数的更多详细信息,请参阅这篇论文

接受以下键

  • greenlist_ratio (float): 用于水印。使用的“绿色”词元与词汇表大小的比例。默认为 0.25。
  • bias (float): 与水印一起使用。添加到所选“绿色”词元 logits 的偏置。默认为 2.0。
  • hashing_key (int): 用于水印的哈希键。默认为 15485863 (第一百万个素数)。
  • seeding_scheme (str): 用于水印的算法。接受的值有
    • “lefthash” (默认): “绿色”词元的选择取决于最后一个词元 (论文中的算法 2)
    • “selfhash”: “绿色”词元的选择取决于当前词元本身 (论文中的算法 3)。该方案的缺点是它会考虑所有可能的下一个词元,并且可能比“lefthash”慢。
  • context_width(int): 用于播种的前一个词元的上下文长度。更高的上下文长度使水印更具鲁棒性。

__call__

( *args **kwargs )

将自身作为函数调用。

class transformers.WatermarkDetector

< >

( model_config: PretrainedConfig device: str watermarking_config: typing.Union[transformers.generation.configuration_utils.WatermarkingConfig, dict] ignore_repeated_ngrams: bool = False max_cache_size: int = 128 )

参数

  • model_config (PretrainedConfig) — 模型配置,将用于获取生成时使用的模型特定参数。
  • device (str) — 在生成带水印文本期间使用的设备。
  • watermarking_config (Union[WatermarkingConfig, Dict]) — 在生成文本时使用的完全相同的水印配置和参数。
  • ignore_repeated_ngrams (bool, optional, defaults to False) — 是否只计算每个唯一的 ngram 一次。
  • max_cache_size (int, optional, defaults to 128) — 用于每个词元调用的播种/采样算法的 LRU 缓存的最大大小。

用于检测生成的水印文本的检测器。检测器需要被赋予与文本生成期间完全相同的设置,以复制水印绿名单的生成,从而检测水印。这包括在文本生成期间使用的正确设备、正确的水印参数和正确的分词器词汇表大小。该代码基于原始仓库

更多信息请参阅此论文

示例

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkDetector, WatermarkingConfig

>>> model_id = "openai-community/gpt2"
>>> model = AutoModelForCausalLM.from_pretrained(model_id)
>>> tok = AutoTokenizer.from_pretrained(model_id)
>>> tok.pad_token_id = tok.eos_token_id
>>> tok.padding_side = "left"

>>> inputs = tok(["This is the beginning of a long story", "Alice and Bob are"], padding=True, return_tensors="pt")
>>> input_len = inputs["input_ids"].shape[-1]

>>> # first generate text with watermark and without
>>> watermarking_config = WatermarkingConfig(bias=2.5, seeding_scheme="selfhash")
>>> out_watermarked = model.generate(**inputs, watermarking_config=watermarking_config, do_sample=False, max_length=20)
>>> out = model.generate(**inputs, do_sample=False, max_length=20)

>>> # now we can instantiate the detector and check the generated text
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config)
>>> detection_out_watermarked = detector(out_watermarked, return_dict=True)
>>> detection_out = detector(out, return_dict=True)
>>> detection_out_watermarked.prediction
array([ True,  True])

>>> detection_out.prediction
array([False,  False])

__call__

< >

( input_ids: LongTensor z_threshold: float = 3.0 return_dict: bool = False ) WatermarkDetectorOutput or np.array

参数

  • input_ids (torch.LongTensor) — 带水印的生成文本。建议移除提示,因为它会影响检测。
  • z_threshold (Dict, optional, defaults to 3.0) — 更改此阈值将改变检测器的灵敏度。较高的 z 阈值灵敏度较低,反之亦然。
  • return_dict (bool, optional, defaults to False) — 是否返回 ~generation.WatermarkDetectorOutput。如果不返回,将返回布尔预测。

返回

WatermarkDetectorOutput or np.array

如果 `return_dict=True` 则返回 `WatermarkDetectorOutput`,否则返回 `np.array`。

ma

class transformers.BayesianDetectorConfig

< >

( watermarking_depth: typing.Optional[int] = None base_rate: float = 0.5 **kwargs )

参数

  • watermarking_depth (int, optional) — 锦标赛层数。
  • base_rate (float1, optional, defaults to 0.5) — 文本带水印的先验概率 P(w)。

这是用于存储 BayesianDetectorModel 配置的配置类。它用于根据指定的参数实例化贝叶斯检测器模型。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

class transformers.BayesianDetectorModel

< >

( config )

参数

  • config (BayesianDetectorConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

用于水印检测的贝叶斯分类器。

该检测器使用贝叶斯定理计算水印分数,该分数是后验概率 P(watermarked|g_values) 与 P(unwatermarked|g_values) 之比的对数的 sigmoid 函数值。更多详情,请参阅论文中关于 BayesianScore 的部分。论文 URL:https://www.nature.com/articles/s41586-024-08025-4

请注意,此检测器仅适用于使用 Bernoulli(0.5) g-value 分布的无失真、基于锦标赛(Tournament-based)的水印技术。

该模型继承自 PreTrainedModel。请查阅超类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪注意力头等)。

该模型也是 PyTorch torch.nn.Module 的子类。您可以像使用常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( g_values: Tensor mask: Tensor labels: typing.Optional[torch.Tensor] = None loss_batch_weight = 1 return_dict = False )

参数

  • g_values (torch.Tensor,形状为 (batch_size, seq_len, watermarking_depth, ...)) — g 值(值为 0 或 1)
  • mask — 形状为 [batch_size, seq_len] 的二进制数组,指示应使用哪些 g 值。mask 值为 0 的 g 值将被丢弃。

计算带水印的后验概率 P(watermarked|g_values)。

class transformers.SynthIDTextWatermarkingConfig

< >

( ngram_len: int keys: list context_history_size: int = 1024 sampling_table_seed: int = 0 sampling_table_size: int = 65536 skip_first_ngram_calls: bool = False debug_mode: bool = False )

参数

  • ngram_len (int) — Ngram 长度。
  • keys (list[int]) — 水印密钥序列,每个深度对应一个。
  • context_history_size (int, 可选, 默认为 1024) — 用于跟踪已见上下文的张量大小。
  • sampling_table_seed (int, 可选, 默认为 0) — 用于生成采样表的随机种子。
  • sampling_table_size (int, 可选, 默认为 65536) — 采样表的大小。
  • skip_first_ngram_calls (bool, 可选, 默认为 False) — 是否跳过首次 ngram 调用。
  • debug_mode (bool, optional, 可选, 默认为 False) — Logits 会在应用水印修改前被修改为均匀分布。这用于测试实现。

该类包含水印生成的参数,并应在 `generate` 期间传递给 `GenerationConfig`。有关参数的更多详细信息,请参阅这篇论文

示例

>>> 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)

class transformers.SynthIDTextWatermarkDetector

< >

( detector_module: BayesianDetectorModel logits_processor: SynthIDTextWatermarkLogitsProcessor tokenizer: typing.Any )

参数

SynthID 文本水印检测器类。

该类必须使用经过训练的贝叶斯检测器模块进行初始化,请查看 examples/synthid_text/detector_training.py 中的脚本,了解训练/保存/加载此检测器模块的示例。该文件夹还展示了此检测器的示例用例。

示例

>>> from transformers import (
...     AutoTokenizer, BayesianDetectorModel, SynthIDTextWatermarkLogitsProcessor, SynthIDTextWatermarkDetector
... )

>>> # Load the detector. See https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text for training a detector.
>>> detector_model = BayesianDetectorModel.from_pretrained("joaogante/dummy_synthid_detector")
>>> logits_processor = SynthIDTextWatermarkLogitsProcessor(
...     **detector_model.config.watermarking_config, device="cpu"
... )
>>> tokenizer = AutoTokenizer.from_pretrained(detector_model.config.model_name)
>>> detector = SynthIDTextWatermarkDetector(detector_model, logits_processor, tokenizer)

>>> # Test whether a certain string is watermarked
>>> test_input = tokenizer(["This is a test input"], return_tensors="pt")
>>> is_watermarked = detector(test_input.input_ids)

__call__

< >

( tokenized_outputs: Tensor )

编译工具

class transformers.CompileConfig

< >

( fullgraph: bool = True dynamic: typing.Optional[bool] = None backend: typing.Union[str, typing.Callable] = 'inductor' mode: str = 'reduce-overhead' options: typing.Optional[dict] = None )

参数

  • fullgraph (bool, 可选, 默认为 True) — 如果为 True,则要求整个前向传播过程都能在单个图中捕获。
  • dynamic (boolNone, 可选) — 是否尝试使用动态形状图。
  • backend (strCallable, 可选, 默认为 "inductor") — 要使用的后端。
  • mode (str, 可选, 默认为 "reduce-overhead") — 控制性能和开销之间的平衡。
  • options (dict, 可选) — 传递给后端的选项字典。

该类包含与 `torch.compile` 行为相关的参数,当在 `generate` 中使用自动编译时。有关参数的更多详细信息,请参阅 `torch.compile`

示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, CompileConfig

>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b')
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b').cuda()

>>> # Automatic compile configuration, used with static cache
>>> compile_config = CompileConfig(dynamic=True)

>>> # Generation with static cache and compile config
>>> input = tokenizer.encode("Hello there, how", return_tensors="pt").cuda()
>>> output = model.generate(
...     input, do_sample=False, max_new_tokens=300, cache_implementation="static", compile_config=compile_config
... )
>>> output_text = tokenizer.batch_decode(output, skip_special_tokens=True)[0]

__call__

( *args **kwargs )

将自身作为函数调用。

< > 在 GitHub 上更新