Transformers 4.37 中文文档(十五)(2)https://developer.aliyun.com/article/1564965
对比搜索
( input_ids: LongTensor top_k: Optional = 1 penalty_alpha: Optional = 0 logits_processor: Optional = None logits_warper: Optional = None stopping_criteria: Optional = None pad_token_id: Optional = None eos_token_id: Union = None output_attentions: Optional = None output_hidden_states: Optional = None output_scores: Optional = None return_dict_in_generate: Optional = None synced_gpus: bool = False streamer: Optional = None sequential: Optional = None **model_kwargs )
参数
input_ids
(torch.LongTensor
,形状为(batch_size, sequence_length)
) — 用作生成提示的序列。top_k
(int
, 可选,默认为 1) — 用于重新排名对比搜索的候选集的大小penalty_alpha
(float
, 可选,默认为 0) — 对比搜索的退化惩罚;当大于 0 时激活logits_processor
(LogitsProcessorList
, 可选) — LogitsProcessorList 的实例。派生自 LogitsProcessor 类的实例列表,用于修改每个生成步骤中应用的语言建模头的预测分数。logits_warper
(LogitsProcessorList
, 可选) — LogitsProcessorList 的实例。派生自 LogitsWarper 类的实例列表,用于在每个生成步骤之前应用于多项式抽样的语言建模头的预测分数分布。stopping_criteria
(StoppingCriteriaList
, 可选) — StoppingCriteriaList 的实例。派生自 StoppingCriteria 类的实例列表,用于告知生成循环是否应该停止。pad_token_id
(int
, 可选) — 填充标记的 id。eos_token_id
(Union[int, List[int]]
, 可选) — 序列结束标记的 id。可选择使用列表设置多个序列结束标记。output_attentions
(bool
, 可选,默认为False
) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回张量下的attentions
。output_hidden_states
(bool
, 可选,默认为False
) — 是否返回所有层的隐藏状态。有关更多详细信息,请查看返回张量下的hidden_states
。output_scores
(bool
, 可选,默认为False
) — 是否返回预测分数。有关更多详细信息,请查看返回张量下的scores
。return_dict_in_generate
(bool
, 可选,默认为False
) — 是否返回 ModelOutput 而不是普通元组。synced_gpus
(bool
, 可选,默认为False
) — 是否继续运行 while 循环直到 max_length(需要 ZeRO 阶段 3)streamer
(BaseStreamer
, 可选) — 将用于流式传输生成序列的 Streamer 对象。生成的标记通过streamer.put(token_ids)
传递,streamer 负责任何进一步处理。sequential
(bool
, optional) — 如果为 True,则将 topk 隐藏状态计算从并行切换到顺序以减少内存。model_kwargs — 附加的模型特定关键字参数将被转发到模型的forward
函数。如果模型是编码器-解码器模型,则 kwargs 应包括encoder_outputs
。
使用对比搜索为具有语言建模头的模型生成标记 id 序列,可用于文本解码器、文本到文本、语音到文本和视觉到文本模型。
在大多数情况下,您不需要直接调用 contrastive_search()。请改用 generate()。有关生成策略和代码示例的概述,请查看以下指南。
示例:
>>> from transformers import ( ... AutoTokenizer, ... AutoModelForCausalLM, ... StoppingCriteriaList, ... MaxLengthCriteria, ... ) >>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-125m") >>> model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m") >>> # set pad_token_id to eos_token_id because OPT does not have a PAD token >>> model.config.pad_token_id = model.config.eos_token_id >>> input_prompt = "DeepMind Company is" >>> input_ids = tokenizer(input_prompt, return_tensors="pt") >>> stopping_criteria = StoppingCriteriaList([MaxLengthCriteria(max_length=64)]) >>> outputs = model.contrastive_search( ... **input_ids, penalty_alpha=0.6, top_k=4, stopping_criteria=stopping_criteria ... ) >>> tokenizer.batch_decode(outputs, skip_special_tokens=True) ['DeepMind Company is a company that focuses on the development and commercialization of artificial intelligence (AI). DeepMind’s mission is to help people understand and solve problems that are difficult to solve in the world today.\n\nIn this post, we talk about the benefits of deep learning in business and how it']
group_beam_search
( input_ids: LongTensor beam_scorer: BeamScorer logits_processor: Optional = None stopping_criteria: Optional = None max_length: Optional = None pad_token_id: Optional = None eos_token_id: Union = None output_attentions: Optional = None output_hidden_states: Optional = None output_scores: Optional = None return_dict_in_generate: Optional = None synced_gpus: bool = False **model_kwargs )
参数
input_ids
(torch.LongTensor
,形状为(batch_size, sequence_length)
) — 用作生成提示的序列。beam_scorer
(BeamScorer
) — 一个派生自 BeamScorer 的实例,定义了在生成过程中如何构建、存储和排序 beam 假设。有关更多信息,请阅读 BeamScorer 的文档。logits_processor
(LogitsProcessorList
, optional) — 一个 LogitsProcessorList 的实例。用于修改应用于每个生成步骤的语言建模头的预测分数的类派生自 LogitsProcessor 的实例列表。stopping_criteria
(StoppingCriteriaList
, optional) — 一个 StoppingCriteriaList 的实例。用于告诉生成循环是否应该停止的类派生自 StoppingCriteria 的实例列表。max_length
(int
, optional, 默认为 20) — 已弃用。直接使用logits_processor
或stopping_criteria
来限制生成标记的数量。要生成的序列的最大长度。pad_token_id
(int
, optional) — 填充标记的 id。eos_token_id
(Union[int, List[int]]
, optional) — 序列结束标记的 id。可选择使用列表设置多个序列结束标记。output_attentions
(bool
, optional, 默认为False
) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。output_hidden_states
(bool
, optional, 默认为False
) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。output_scores
(bool
, optional, 默认为False
) — 是否返回预测分数。有关更多详细信息,请参阅返回张量下的scores
。return_dict_in_generate
(bool
, optional, 默认为False
) — 是否返回 ModelOutput 而不是普通元组。synced_gpus
(bool
, optional, 默认为False
) — 是否继续运行 while 循环直到 max_length(需要 ZeRO 阶段 3)
model_kwargs — 附加的模型特定 kwargs 将被转发到模型的forward
函数。如果模型是编码器-解码器模型,则 kwargs 应包括encoder_outputs
。
使用多样化束搜索解码为具有语言建模头的模型生成令牌 id 序列,可用于文本解码器、文本到文本、语音到文本和视觉到文本模型。
在大多数情况下,您不需要直接调用 group_beam_search()。请改用 generate()。有关生成策略和代码示例的概述,请查看以下指南。
示例:
>>> from transformers import ( ... AutoTokenizer, ... AutoModelForSeq2SeqLM, ... LogitsProcessorList, ... MinLengthLogitsProcessor, ... HammingDiversityLogitsProcessor, ... BeamSearchScorer, ... ) >>> import torch >>> tokenizer = AutoTokenizer.from_pretrained("t5-base") >>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base") >>> encoder_input_str = "translate English to German: How old are you?" >>> encoder_input_ids = tokenizer(encoder_input_str, return_tensors="pt").input_ids >>> # lets run diverse beam search using 6 beams >>> num_beams = 6 >>> # define decoder start token ids >>> input_ids = torch.ones((num_beams, 1), device=model.device, dtype=torch.long) >>> input_ids = input_ids * model.config.decoder_start_token_id >>> # add encoder_outputs to model keyword arguments >>> model_kwargs = { ... "encoder_outputs": model.get_encoder()( ... encoder_input_ids.repeat_interleave(num_beams, dim=0), return_dict=True ... ) ... } >>> # instantiate beam scorer >>> beam_scorer = BeamSearchScorer( ... batch_size=1, ... max_length=model.config.max_length, ... num_beams=num_beams, ... device=model.device, ... num_beam_groups=3, ... ) >>> # instantiate logits processors >>> logits_processor = LogitsProcessorList( ... [ ... HammingDiversityLogitsProcessor(5.5, num_beams=6, num_beam_groups=3), ... MinLengthLogitsProcessor(5, eos_token_id=model.config.eos_token_id), ... ] ... ) >>> outputs = model.group_beam_search( ... input_ids, beam_scorer, logits_processor=logits_processor, **model_kwargs ... ) >>> tokenizer.batch_decode(outputs, skip_special_tokens=True) ['Wie alt bist du?']
constrained_beam_search
( input_ids: LongTensor constrained_beam_scorer: ConstrainedBeamSearchScorer logits_processor: Optional = None stopping_criteria: Optional = None max_length: Optional = None pad_token_id: Optional = None eos_token_id: Union = None output_attentions: Optional = None output_hidden_states: Optional = None output_scores: Optional = None return_dict_in_generate: Optional = None synced_gpus: Optional = None **model_kwargs )
参数
input_ids
(torch.LongTensor
,形状为(batch_size, sequence_length)
) — 用作生成提示的序列。constrained_beam_scorer
(ConstrainedBeamSearchScorer
) — 表示如何在生成过程中构建、存储和排序束假设的 BeamScorer 的派生实例,同时满足一系列正面约束。有关更多信息,请阅读 ConstrainedBeamSearchScorer 的文档。logits_processor
(LogitsProcessorList
, optional) — LogitsProcessorList 的实例。用于修改每个生成步骤应用的语言建模头的预测分数的类派生实例的列表。stopping_criteria
(StoppingCriteriaList
, optional) — StoppingCriteriaList 的实例。用于告知生成循环是否应该停止的类派生实例的列表。logits_warper
(LogitsProcessorList
, optional) — LogitsProcessorList 的实例。用于在每个生成步骤的多项式抽样之前应用于语言建模头的预测分数分布的类派生实例的列表。max_length
(int
, optional, 默认为 20) — 已弃用。直接使用logits_processor
或stopping_criteria
来限制生成的令牌数量。要生成的序列的最大长度。pad_token_id
(int
, optional) — 填充 令牌的 id。eos_token_id
(Union[int, List[int]]
, optional) — 结束序列 令牌的 id。可选择使用列表设置多个 结束序列 令牌。output_attentions
(bool
, optional, 默认为False
) — 是否返回所有注意力层的注意力张量。有关更多细节,请参见返回张量中的attentions
。output_hidden_states
(bool
, optional, 默认为False
) — 是否返回所有层的隐藏状态。有关更多细节,请参见返回张量中的hidden_states
。output_scores
(bool
, optional, 默认为False
) — 是否返回预测分数。有关更多细节,请参见返回张量中的scores
。return_dict_in_generate
(bool
, optional, 默认为False
) — 是否返回一个 ModelOutput 而不是一个普通元组。synced_gpus
(bool
,可选,默认为False
)- 是否继续运行 while 循环直到 max_length(需要 ZeRO 阶段 3)model_kwargs-其他特定于模型的 kwargs 将被转发到模型的forward
函数。如果模型是编码器-解码器模型,则 kwargs 应包括encoder_outputs
。
使用受限束搜索解码为具有语言建模头的模型生成令牌 id 序列,可用于文本解码器、文本到文本、语音到文本和视觉到文本模型。
在大多数情况下,您不需要直接调用 constrained_beam_search()。请改用 generate()。有关生成策略和代码示例的概述,请查看以下指南。
示例:
>>> from transformers import ( ... AutoTokenizer, ... AutoModelForSeq2SeqLM, ... LogitsProcessorList, ... MinLengthLogitsProcessor, ... ConstrainedBeamSearchScorer, ... PhrasalConstraint, ... ) >>> import torch >>> tokenizer = AutoTokenizer.from_pretrained("t5-base") >>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base") >>> encoder_input_str = "translate English to German: How old are you?" >>> encoder_input_ids = tokenizer(encoder_input_str, return_tensors="pt").input_ids >>> # lets run beam search using 3 beams >>> num_beams = 3 >>> # define decoder start token ids >>> input_ids = torch.ones((num_beams, 1), device=model.device, dtype=torch.long) >>> input_ids = input_ids * model.config.decoder_start_token_id >>> # add encoder_outputs to model keyword arguments >>> model_kwargs = { ... "encoder_outputs": model.get_encoder()( ... encoder_input_ids.repeat_interleave(num_beams, dim=0), return_dict=True ... ) ... } >>> constraint_str = "Sie" >>> constraint_token_ids = tokenizer.encode(constraint_str)[:-1] # slice to remove eos token >>> constraints = [PhrasalConstraint(token_ids=constraint_token_ids)] >>> # instantiate beam scorer >>> beam_scorer = ConstrainedBeamSearchScorer( ... batch_size=1, num_beams=num_beams, device=model.device, constraints=constraints ... ) >>> # instantiate logits processors >>> logits_processor = LogitsProcessorList( ... [ ... MinLengthLogitsProcessor(5, eos_token_id=model.config.eos_token_id), ... ] ... ) >>> outputs = model.constrained_beam_search( ... input_ids, beam_scorer, constraints=constraints, logits_processor=logits_processor, **model_kwargs ... ) >>> tokenizer.batch_decode(outputs, skip_special_tokens=True) ['Wie alt sind Sie?']
TFGenerationMixin
class transformers.TFGenerationMixin
( )
包含支持生成的所有函数的类,可用作 TFPreTrainedModel 中的 mixin。
该类公开 generate(),可用于:
- 贪婪解码,如果
num_beams=1
且do_sample=False
,则调用greedy_search()
- 对比搜索,如果
penalty_alpha>0
和top_k>1
,则调用contrastive_search()
- 多项式采样,如果
num_beams=1
且do_sample=True
,则调用sample()
- 束搜索解码,如果
num_beams>1
,则调用beam_search()
您不需要直接调用上述任何方法。请将自定义参数值传递给“generate”而不是。要了解有关解码策略的更多信息,请参考文本生成策略指南。
generate
( inputs: Optional = None generation_config: Optional = None logits_processor: Optional = None seed = None **kwargs ) → export const metadata = 'undefined';ModelOutput or tf.Tensor
参数
inputs
(tf.Tensor
,根据模态性质而变化的形状,可选)- 用作生成提示或作为编码器的模型输入的序列。如果为None
,则该方法将使用bos_token_id
和批量大小为 1 进行初始化。对于仅解码器模型,inputs
应为input_ids
格式。对于编码器-解码器模型,inputs可以表示input_ids
、input_values
、input_features
或pixel_values
中的任何一个。generation_config
(~generation.GenerationConfig
,可选)- 用作生成调用的基本参数化的生成配置。传递给生成的**kwargs
与generation_config
的属性匹配将覆盖它们。如果未提供generation_config
,将使用默认值,其加载优先级如下:1)从generation_config.json
模型文件中,如果存在;2)从模型配置中。请注意,未指定的参数将继承 GenerationConfig 的默认值,应检查其文档以参数化生成。logits_processor
(LogitsProcessorList
,可选)- 自定义 logits 处理器,补充从参数和生成配置构建的默认 logits 处理器。如果传递的 logit 处理器已经使用参数或生成配置创建,则会抛出错误。此功能适用于高级用户。seed
(List[int]
,可选)- 用于控制采样的随机种子,包含两个整数,在do_sample
为True
时使用。请参阅tf.random
中无状态函数的seed
参数。kwargs
(Dict[str, Any]
, optional) —generate_config
的特定参数化和/或将转发到模型的forward
函数的其他模型特定 kwargs。如果模型是编码器-解码器模型,则不应该为编码器特定 kwargs 添加前缀,而应该为解码器特定 kwargs 添加前缀decoder_。
返回
ModelOutput 或 tf.Tensor
一个 ModelOutput(如果return_dict_in_generate=True
或config.return_dict_in_generate=True
)或一个tf.Tensor
。
如果模型不是编码器-解码器模型(model.config.is_encoder_decoder=False
),可能的 ModelOutput 类型为:
- TFGreedySearchDecoderOnlyOutput,
- TFSampleDecoderOnlyOutput,
- TFBeamSearchDecoderOnlyOutput,
- TFBeamSampleDecoderOnlyOutput
如果模型是编码器-解码器模型(model.config.is_encoder_decoder=True
),可能的 ModelOutput 类型为:
- TFGreedySearchEncoderDecoderOutput,
- TFSampleEncoderDecoderOutput,
- TFBeamSearchEncoderDecoderOutput,
- TFBeamSampleEncoderDecoderOutput
为具有语言建模头的模型生成 token id 序列。
大多数控制生成的参数都在generation_config
中设置,如果未传递,则将设置为模型的默认生成配置。您可以通过将相应的参数传递给 generate 来覆盖任何generation_config
,例如.generate(inputs, num_beams=4, do_sample=True)
。
有关生成策略和代码示例的概述,请查看以下指南。
Transformers 4.37 中文文档(十五)(4)https://developer.aliyun.com/article/1564967