Transformers 文档

生成

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

生成

每个框架都在其各自的 GenerationMixin 类中实现了文本生成的 generate 方法

无论您选择哪个框架,您都可以使用 GenerationConfig 类实例来参数化 generate 方法。请参考此类以获取生成参数的完整列表,这些参数控制生成方法的行为。

要了解如何检查模型的生成配置、默认值是什么、如何临时更改参数以及如何创建和保存自定义生成配置,请参阅文本生成策略指南。该指南还解释了如何使用相关功能,如令牌流式传输。

GenerationConfig

class transformers.GenerationConfig

< >

( **kwargs )

控制输出长度的参数

  • max_length (int, 可选, 默认为 20) — 生成的令牌可以具有的最大长度。对应于输入提示的长度 + max_new_tokens。如果也设置了 max_new_tokens,则其效果将被覆盖。
  • max_new_tokens (int, 可选) — 要生成的最大令牌数,忽略提示中的令牌数。
  • min_length (int, 可选, 默认为 0) — 要生成的序列的最小长度。对应于输入提示的长度 + min_new_tokens。如果也设置了 min_new_tokens,则其效果将被覆盖。
  • min_new_tokens (int, 可选) — 要生成的最小令牌数,忽略提示中的令牌数。
  • early_stopping (boolstr, 可选, 默认为 False) — 控制基于束搜索的方法(如束搜索)的停止条件。它接受以下值:True,其中生成在有 num_beams 个完整候选时立即停止;False,其中应用启发式方法,并且当不太可能找到更好的候选时生成停止;"never",其中束搜索过程仅在无法找到更好的候选时停止(规范束搜索算法)。
  • max_time (float, 可选) — 您允许计算运行的最长时间(以秒为单位)。即使超过分配的时间,生成仍将完成当前pass。
  • stop_strings (str 或 List[str], 可选) — 如果模型输出字符串或字符串列表,则应终止生成。

控制所用生成策略的参数

  • do_sample (bool, 可选, 默认为 False) — 是否使用采样;否则使用贪婪解码。
  • num_beams (int, 可选, 默认为 1) — 用于束搜索的束数量。1 表示不进行束搜索。
  • num_beam_groups (int, 可选, 默认为 1) — 将 num_beams 分成组的数量,以确保不同束组之间的多样性。本文 以了解更多详情。
  • penalty_alpha (float, 可选) — 这些值平衡了对比搜索解码中的模型置信度和退化惩罚。
  • dola_layers (strList[int], 可选) — 用于 DoLa 解码的层。如果为 None,则不使用 DoLa 解码。如果是字符串,则必须是 “low” 或 “high” 之一,分别表示使用模型层的较低部分或较高部分。“low” 表示前一半层,最多前 20 层,“high” 表示后一半层,最多后 20 层。如果是整数列表,则必须包含要在 DoLa 中用作候选过早层的层的索引。第 0 层是模型的词嵌入层。设置为 'low' 以改善长答案推理任务,'high' 以改善短答案任务。查看 文档论文 以了解更多详情。

控制缓存的参数

  • use_cache (bool, 可选, 默认为 True) — 模型是否应使用过去的最后一次键/值注意力(如果适用于模型)以加速解码。
  • cache_implementation (str, 可选, 默认为 None) — 将在 generate 中实例化的缓存类的名称,用于更快的解码。可能的值为:

    如果未指定任何内容,我们将使用模型的默认缓存(通常是 DynamicCache)。请参阅我们的 缓存文档 以获取更多信息。

  • cache_config (CacheConfigdict, 可选, 默认为 None) — 键值缓存类中使用的参数可以在 cache_config 中传递。可以作为 Dict 传递,它将在内部转换为其相应的 CacheConfig。否则,可以作为与指示的 cache_implementation 匹配的 CacheConfig 类传递。
  • return_legacy_cache (bool, 可选, 默认为 True) — 当默认使用 DynamicCache 时,是否返回旧版或新版缓存格式。

用于操作模型输出 logits 的参数

  • temperature (float, 可选,默认为 1.0) — 用于调整下一个 token 概率的值。此值在模型的 generation_config.json 文件中设置。如果未设置,则默认值为 1.0。
  • top_k (int, 可选,默认为 50) — 用于 top-k 过滤的最高概率词汇 tokens 的数量。此值在模型的 generation_config.json 文件中设置。如果未设置,则默认值为 50。
  • top_p (float, 可选,默认为 1.0) — 如果设置为小于 1 的浮点数,则仅保留概率总和达到 top_p 或更高的最小概率 tokens 集合用于生成。此值在模型的 generation_config.json 文件中设置。如果未设置,则默认值为 1.0。
  • min_p (float, 可选) — 最小 token 概率,它将按最可能 token 的概率进行缩放。它必须是 0 到 1 之间的值。典型值在 0.01-0.2 范围内,与在 0.99-0.8 范围内设置 top_p 具有可比的选择性(使用正常 top_p 值的相反值)。
  • typical_p (float, 可选,默认为 1.0) — 局部典型性衡量了预测下一个目标 token 的条件概率与预测下一个随机 token 的预期条件概率(给定已生成的部分文本)的相似程度。如果设置为小于 1 的浮点数,则保留概率总和达到 typical_p 或更高的局部最典型 tokens 的最小集合用于生成。有关更多详细信息,请参见 本文
  • epsilon_cutoff (float, 可选,默认为 0.0) — 如果设置为严格介于 0 和 1 之间的浮点数,则仅采样条件概率大于 epsilon_cutoff 的 tokens。在论文中,建议值范围为 3e-4 到 9e-4,具体取决于模型的大小。有关更多详细信息,请参见 Truncation Sampling as Language Model Desmoothing
  • eta_cutoff (float, 可选,默认为 0.0) — Eta 采样是局部典型性采样和 epsilon 采样的混合。如果设置为严格介于 0 和 1 之间的浮点数,则仅当 token 大于 eta_cutoffsqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits))) 时才考虑该 token。后一个术语直观上是预期的下一个 token 概率,按 sqrt(eta_cutoff) 缩放。在论文中,建议值范围为 3e-4 到 2e-3,具体取决于模型的大小。有关更多详细信息,请参见 Truncation Sampling as Language Model Desmoothing
  • diversity_penalty (float, 可选,默认为 0.0) — 如果 beam 在特定时间生成与来自其他组的任何 beam 相同的 token,则从该 beam 的得分中减去此值。请注意,仅当启用 group beam search 时,diversity_penalty 才有效。
  • repetition_penalty (float, 可选,默认为 1.0) — 重复惩罚的参数。1.0 表示没有惩罚。有关更多详细信息,请参见 本文
  • encoder_repetition_penalty (float, 可选,默认为 1.0) — encoder_repetition_penalty 的参数。对不在原始输入中的序列进行指数惩罚。1.0 表示没有惩罚。
  • length_penalty (float, 可选,默认为 1.0) — 用于基于 beam 生成的长度指数惩罚。它作为指数应用于序列长度,而序列长度又用于除以序列的分数。由于分数是序列的对数似然(即负数),因此 length_penalty > 0.0 鼓励更长的序列,而 length_penalty < 0.0 鼓励更短的序列。
  • no_repeat_ngram_size (int, 可选,默认为 0) — 如果设置为大于 0 的整数,则该大小的所有 n-gram 只能出现一次。
  • bad_words_ids (List[List[int]], 可选) — 不允许生成的 token id 列表的列表。有关更多文档和示例,请查看 NoBadWordsLogitsProcessor
  • force_words_ids (List[List[int]]List[List[List[int]]], 可选) — 必须生成的 token id 列表。如果给定 List[List[int]],则将其视为必须包含的简单单词列表,与 bad_words_ids 相反。如果给定 List[List[List[int]]],则会触发 析取约束,其中可以允许每个单词的不同形式。
  • renormalize_logits (bool, 可选,默认为 False) — 是否在应用所有 logits 处理器(包括自定义处理器)后重新归一化 logits。强烈建议将此标志设置为 True,因为搜索算法假设得分 logits 是归一化的,但某些 logits 处理器会破坏归一化。
  • constraints (List[Constraint], 可选) — 可以添加到生成中的自定义约束,以确保输出将包含由 Constraint 对象定义的某些 token 的使用,以尽可能合理的方式。
  • forced_bos_token_id (int, 可选,默认为 model.config.forced_bos_token_id) — 强制作为 decoder_start_token_id 之后生成的第一个 token 的 token id。对于多语言模型(如 mBART)非常有用,其中生成的第一个 token 需要是目标语言 token。
  • forced_eos_token_id (int 或 List[int], *可选*, 默认为 model.config.forced_eos_token_id) -- 强制作为达到 max_length` 时生成的最后一个 token 的 token id。可以选择使用列表来设置多个序列结束 token。
  • remove_invalid_values (bool, 可选,默认为 model.config.remove_invalid_values) — 是否删除模型可能存在的 naninf 输出,以防止生成方法崩溃。请注意,使用 remove_invalid_values 可能会减慢生成速度。
  • exponential_decay_length_penalty (tuple(int, float), 可选) — 此元组在生成一定数量的 token 后添加指数增长的长度惩罚。该元组应包含:(start_index, decay_factor),其中 start_index 指示惩罚开始的位置,decay_factor 表示指数衰减因子
  • suppress_tokens (List[int], 可选) — 在生成时将被抑制的 token 列表。SupressTokens logits 处理器将它们的 log probs 设置为 -inf,以便不采样它们。
  • begin_suppress_tokens (List[int], 可选) — 在生成开始时将被抑制的 token 列表。SupressBeginTokens logits 处理器将它们的 log probs 设置为 -inf,以便不采样它们。
  • forced_decoder_ids (List[List[int]], 可选) — 一个整数对列表,指示从生成索引到将在采样之前强制执行的 token 索引的映射。例如,[[1, 123]] 表示第二个生成的 token 将始终是索引为 123 的 token。
  • sequence_bias (Dict[Tuple[int], float], 可选)) — 将 token 序列映射到其偏差项的字典。正偏差会增加选择该序列的几率,而负偏差则相反。有关更多文档和示例,请查看 SequenceBiasLogitsProcessor
  • token_healing (bool, 可选,默认为 False) — 通过将 prompts 的尾部 token 替换为适当的扩展来修复它们。这提高了受贪婪 token 化偏差影响的 prompts 的完成质量。
  • guidance_scale (float, 可选) — 用于无分类器引导 (CFG) 的引导缩放。通过设置 guidance_scale > 1 启用 CFG。较高的引导缩放鼓励模型生成与输入 prompt 更紧密相关的样本,但通常以质量较差为代价。
  • low_memory (bool, 可选) — 切换到顺序 beam search 和顺序 topk 以进行对比搜索,以减少峰值内存。与 beam search 和对比搜索一起使用。
  • watermarking_config (BaseWatermarkingConfigdict, 可选) — 用于为模型输出添加水印的参数,通过向随机选择的“绿色” token 集合添加小的偏差。 有关更多详细信息,请参阅 SynthIDTextWatermarkingConfigWatermarkingConfig 的文档。 如果作为 Dict 传递,它将在内部转换为 WatermarkingConfig

定义 generate 输出变量的参数

  • num_return_sequences (int, 可选, 默认为 1) — 批次中每个元素独立计算的返回序列的数量。
  • output_attentions (bool, 可选, 默认为 False) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选, 默认为 False) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • output_scores (bool, 可选, 默认为 False) — 是否返回预测分数。 有关更多详细信息,请参阅返回张量下的 scores
  • output_logits (bool, 可选) — 是否返回未经处理的预测 logits 分数。 有关更多详细信息,请参阅返回张量下的 logits
  • return_dict_in_generate (bool, 可选, 默认为 False) — 是否返回 ModelOutput,而不是仅返回生成的序列。 必须将此标志设置为 True 才能返回生成缓存(当 use_cacheTrue 时)或可选输出(请参阅以 output_ 开头的标志)。

生成时可以使用的特殊 token

  • pad_token_id (int, 可选) — 填充 (padding) token 的 id。
  • bos_token_id (int, 可选) — beginning-of-sequence (序列开始) token 的 id。
  • eos_token_id (Union[int, List[int]], 可选) — end-of-sequence (序列结束) token 的 id。 可选地,使用列表来设置多个 end-of-sequence token。

编码器-解码器模型独有的生成参数

  • encoder_no_repeat_ngram_size (int, 可选, 默认为 0) — 如果设置为大于 0 的整数,则在 encoder_input_ids 中出现的所有该大小的 n-gram 都不能在 decoder_input_ids 中出现。
  • decoder_start_token_id (intList[int], 可选) — 如果编码器-解码器模型以与 bos 不同的 token 开始解码,则该 token 的 id 或长度为 batch_size 的列表。 指示列表允许批次中每个元素使用不同的起始 id(例如,在一个批次中使用不同目标语言的多语言模型)。

助手生成独有的生成参数

  • is_assistant (bool, 可选, 默认为 False) — 模型是否为助手(草稿)模型。
  • num_assistant_tokens (int, 可选, 默认为 20) — 定义助手模型在每次迭代中被目标模型检查之前应生成的推测性 token 的数量。 num_assistant_tokens 的值越高,生成就越推测性:如果助手模型性能良好,则可以实现更大的加速;如果助手模型需要大量校正,则加速会降低。
  • num_assistant_tokens_schedule (str, 可选, 默认为 "constant") — 定义在推理期间应更改最大助手 token 的计划。
    • "heuristic": 当所有推测性 token 都正确时,将 num_assistant_tokens 增加 2,否则减少 1。 num_assistant_tokens 值在同一助手模型的多个生成调用中保持不变。
    • "heuristic_transient": 与 "heuristic" 相同,但 num_assistant_tokens 在每次生成调用后重置为其初始值。
    • "constant": num_assistant_tokens 在生成期间保持不变
  • assistant_confidence_threshold (float, 可选, 默认为 0.4) — 助手模型的置信度阈值。 如果助手模型对其当前 token 预测的置信度低于此阈值,则即使尚未达到推测性 token 的数量(由 num_assistant_tokens 定义),助手模型也会停止当前 token 生成迭代。 助手的置信度阈值在整个推测性迭代中进行调整,以减少不必要的草稿和目标前向传递的次数,并偏向于避免假阴性。 assistant_confidence_threshold 值在同一助手模型的多个生成调用中保持不变。 它是动态推测前瞻的无监督版本,来自 Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models https://arxiv.org/abs/2405.04304
  • prompt_lookup_num_tokens (int, 可选) — 要作为候选 token 输出的 token 数量。
  • max_matching_ngram_size (int, 可选) — 在 prompt 中要考虑匹配的最大 n-gram 大小。 如果未提供,则默认为 2。
  • assistant_early_exit(int, 可选) — 如果设置为正整数,则模型的提前退出将用作助手。 只能与支持提前退出的模型一起使用(即,中间层的 logits 可以被 LM 头解释的模型)。
  • assistant_lookbehind(int, 可选, 默认为 10) — 如果设置为正整数,则重新编码过程将额外考虑最后 assistant_lookbehind 个助手 token,以正确对齐 token。 只能在推测性解码中使用不同的 tokenizer。 有关更多详细信息,请参阅此博客
  • target_lookbehind(int, 可选, 默认为 10) — 如果设置为正整数,则重新编码过程将额外考虑最后 target_lookbehind 个目标 token,以正确对齐 token。 只能在推测性解码中使用不同的 tokenizer。 有关更多详细信息,请参阅此博客

与性能和编译相关的参数

  • compile_config (CompileConfig, 可选) — 如果使用静态缓存,则此参数控制 generate 如何 compile 前向传递以提高性能。
    • generation_kwargs — Additional generation kwargs will be forwarded to the generate function of the model. Kwargs that are not present in generate’s signature will be used in the model forward pass.

Class that holds a configuration for a generation task. A generate call supports the following generation methods for text-decoder, text-to-text, speech-to-text, and vision-to-text models

  • num_beams=1do_sample=False 时为贪婪解码
  • penalty_alpha>0.top_k>1 时为对比搜索
  • num_beams=1do_sample=True 时为多项式采样
  • num_beams>1do_sample=False 时为束搜索解码
  • num_beams>1do_sample=True 时为束搜索多项式采样
  • num_beams>1num_beam_groups>1 时为多样化束搜索解码
  • constraints!=Noneforce_words_ids!=None 时为约束束搜索解码
  • 如果将 assistant_modelprompt_lookup_num_tokens 传递给 .generate(),则为辅助解码
  • 如果将 dola_layers 传递给 .generate(),则为dola 解码

要了解有关解码策略的更多信息,请参阅文本生成策略指南

这些标志中的绝大部分控制着生成的 logits 或停止标准。请务必查看generate 相关类,以获得对可能操作的完整描述,以及它们的使用示例。

from_pretrained

< >

( pretrained_model_name: typing.Union[str, os.PathLike] config_file_name: typing.Union[str, os.PathLike, NoneType] = None cache_dir: typing.Union[str, os.PathLike, NoneType] = None force_download: bool = False local_files_only: bool = False token: typing.Union[str, bool, NoneType] = None revision: str = 'main' **kwargs ) GenerationConfig

参数

  • pretrained_model_name (stros.PathLike) — 可以是以下之一:

    • 一个字符串,即托管在 huggingface.co 上的模型仓库内的预训练模型配置的模型 ID
    • 一个目录的路径,其中包含使用 save_pretrained() 方法保存的配置文件,例如,./my_model_directory/
  • config_file_name (stros.PathLike, 可选, 默认为 "generation_config.json") — 要从 pretrained_model_name 加载的生成配置 JSON 文件的名称。
  • cache_dir (stros.PathLike, 可选) — 如果不想使用标准缓存,则应在其中缓存下载的预训练模型配置的目录路径。
  • force_download (bool, 可选, 默认为 False) — 是否强制(重新)下载配置文件并覆盖缓存版本(如果存在)。
  • resume_download — 已弃用且被忽略。现在所有下载在可能的情况下默认恢复。将在 Transformers v5 中移除。
  • proxies (Dict[str, str], 可选) — 按协议或端点使用的代理服务器字典,例如,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. 代理用于每个请求。
  • token (strbool, 可选) — 用作远程文件的 HTTP Bearer 授权的令牌。如果为 True,或未指定,将使用运行 huggingface-cli login 时生成的令牌(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,因为我们使用基于 git 的系统来存储 huggingface.co 上的模型和其他工件,因此 revision 可以是 git 允许的任何标识符。

    要测试您在 Hub 上创建的拉取请求,您可以传递 revision="refs/pr/<pr_number>"

  • return_unused_kwargs (bool, 可选, 默认为 False) — 如果为 False,则此函数仅返回最终配置对象。

    如果为 True,则此函数返回一个 Tuple(config, unused_kwargs),其中 unused_kwargs 是一个字典,其中包含键/值对,其键不是配置属性:即,kwargs 中未用于更新 config 的部分,否则将被忽略。

  • subfolder (str, 可选, 默认为 "") — 如果相关文件位于 huggingface.co 上的模型仓库的子文件夹中,您可以在此处指定文件夹名称。
  • kwargs (Dict[str, Any], 可选) — kwargs 中任何键是配置属性的值将用于覆盖加载的值。关于键/值对的行为,其键不是配置属性,由 return_unused_kwargs 关键字参数控制。

返回

GenerationConfig

从此预训练模型实例化的配置对象。

从生成配置文件实例化一个 GenerationConfig

示例

>>> from transformers import GenerationConfig

>>> # Download configuration from huggingface.co and cache.
>>> generation_config = GenerationConfig.from_pretrained("openai-community/gpt2")

>>> # E.g. config was saved using *save_pretrained('./test/saved_model/')*
>>> generation_config.save_pretrained("./test/saved_model/")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/")

>>> # You can also specify configuration names to your generation configuration file
>>> generation_config.save_pretrained("./test/saved_model/", config_file_name="my_configuration.json")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/", "my_configuration.json")

>>> # If you'd like to try a minor variation to an existing configuration, you can also pass generation
>>> # arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored
>>> generation_config, unused_kwargs = GenerationConfig.from_pretrained(
...     "openai-community/gpt2", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True
... )
>>> generation_config.top_k
1

>>> unused_kwargs
{'foo': False}

from_model_config

< >

( model_config: PretrainedConfig ) GenerationConfig

参数

  • model_config (PretrainedConfig) — 将用于实例化生成配置的模型配置。

返回

GenerationConfig

从此参数实例化的配置对象。

PretrainedConfig 实例化一个 GenerationConfig。此函数对于将可能包含生成参数的旧版 PretrainedConfig 对象转换为独立的 GenerationConfig 非常有用。

save_pretrained

< >

( save_directory: typing.Union[str, os.PathLike] config_file_name: typing.Union[str, os.PathLike, NoneType] = None push_to_hub: bool = False **kwargs )

参数

  • save_directory (stros.PathLike) — 将保存配置 JSON 文件的目录(如果不存在将创建)。
  • config_file_name (stros.PathLike, 可选, 默认为 "generation_config.json") — 要保存在 save_directory 中的生成配置 JSON 文件的名称。
  • push_to_hub (bool, 可选, 默认为 False) — 是否在保存模型后将其推送到 Hugging Face 模型 Hub。您可以使用 repo_id 指定要推送到的仓库(默认为您命名空间中 save_directory 的名称)。
  • kwargs (Dict[str, Any], 可选) — 传递给 push_to_hub() 方法的附加关键字参数。

将生成配置对象保存到目录 save_directory,以便可以使用 from_pretrained() 类方法重新加载它。

update

< >

( **kwargs ) Dict[str, Any]

参数

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

返回

Dict[str, Any]

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

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

validate

< >

( is_init = False )

参数

  • is_init (bool, 可选, 默认为 False) — 验证是否在实例初始化期间执行。

验证 GenerationConfig 实例的属性值。如果存在仅从配置实例即可检测为不正确的参数化,则引发异常。

请注意,此处未验证的某些参数最好在生成运行时进行验证,因为它们可能取决于其他输入和/或模型,例如与生成长度相关的参数。

get_generation_mode

< >

( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) GenerationMode

参数

  • assistant_model (PreTrainedModel, 可选) — 用于辅助生成的辅助模型。如果设置,生成模式将为辅助生成。

返回

GenerationMode

由此实例触发的生成模式。

返回由 GenerationConfig 实例触发的生成模式。

GenerationMixin

class transformers.GenerationMixin

< >

( )

一个类,包含用于自回归文本生成的所有函数,用作模型类中的 mixin。继承此类会导致模型具有与生成相关的特殊行为,例如在初始化时加载 GenerationConfig,或确保在 transformers CI 中运行与 generate 相关的测试。

模型类应继承 GenerationMixin 以启用调用 generate 等方法,或者当它定义了一个自定义的 generate 方法,直接或间接地依赖于 GenerationMixin,并且该方法与 generate 等公共方法大致共享相同的接口时。以下是三个例子:

  • LlamaForCausalLM 应该继承 GenerationMixin,以启用调用 mixin 中的 generate 和其他公共方法;
  • BlipForQuestionAnswering 有一个自定义的 generate 方法,该方法与 GenerationMixin.generate 大致共享相同的接口(它有一些额外的参数,并且输出相同)。该函数还通过内部模型间接调用 GenerationMixin.generate。因此,BlipForQuestionAnswering 应该继承 GenerationMixin,以受益于我们代码库中所有与生成相关的自动化;
  • BarkModel 有一个自定义的 generate 方法,并且它的一个内部模型调用了 GenerationMixin.generate。但是,它的 generate 方法与 GenerationMixin.generate 不共享相同的接口。在这种情况下,BarkModel 不应该继承 GenerationMixin,因为它破坏了 generate 接口。

此类公开了 generate(),可用于:

  • num_beams=1do_sample=False 时为贪婪解码
  • 对比搜索(如果 penalty_alpha>0 且 top_k>1)
  • num_beams=1do_sample=True 时为多项式采样
  • num_beams>1do_sample=False 时为束搜索解码
  • num_beams>1do_sample=True 时为束搜索多项式采样
  • num_beams>1num_beam_groups>1 时为多样化束搜索解码
  • constraints!=Noneforce_words_ids!=None 时为约束束搜索解码
  • 如果将 assistant_modelprompt_lookup_num_tokens 传递给 .generate(),则为辅助解码

要了解有关解码策略的更多信息,请参阅文本生成策略指南

generate

< >

( inputs: typing.Optional[torch.Tensor] = None generation_config: typing.Optional[transformers.generation.configuration_utils.GenerationConfig] = None logits_processor: typing.Optional[transformers.generation.logits_process.LogitsProcessorList] = None stopping_criteria: typing.Optional[transformers.generation.stopping_criteria.StoppingCriteriaList] = None prefix_allowed_tokens_fn: typing.Optional[typing.Callable[[int, torch.Tensor], typing.List[int]]] = None synced_gpus: typing.Optional[bool] = None assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None streamer: typing.Optional[ForwardRef('BaseStreamer')] = None negative_prompt_ids: typing.Optional[torch.Tensor] = None negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None use_model_defaults: typing.Optional[bool] = None **kwargs ) ModelOutputtorch.LongTensor

参数

  • **inputs** (`torch.Tensor`,形状取决于模态,*可选*) — 用作生成提示或作为模型输入到编码器的序列。如果为 `None`,则该方法使用 `bos_token_id` 和批量大小 1 进行初始化。对于仅解码器模型,`inputs` 应为 `input_ids` 格式。对于编码器-解码器模型,*inputs* 可以表示 `input_ids`、`input_values`、`input_features` 或 `pixel_values` 中的任何一个。
  • **generation_config** (GenerationConfig,*可选*) — 用作生成调用的基本参数化的生成配置。传递给 generate 的与 `generation_config` 属性匹配的 `**kwargs` 将覆盖它们。如果未提供 `generation_config`,将使用默认值,默认值具有以下加载优先级:1) 来自 `generation_config.json` 模型文件(如果存在);2) 来自模型配置。请注意,未指定的参数将继承 GenerationConfig 的默认值,应查阅其文档以参数化生成。
  • **logits_processor** ([`LogitsProcessorList`](transformers.generation.logits_process.LogitsProcessorList), *可选*) — 自定义 logits 处理器,用于补充从参数和生成配置构建的默认 logits 处理器。如果传递的 logits 处理器已经使用参数或生成配置创建,则会抛出错误。此功能旨在供高级用户使用。
  • **stopping_criteria** ([`StoppingCriteriaList`](transformers.generation.stopping_criteria.StoppingCriteriaList), *可选*) — 自定义停止标准,用于补充从参数和生成配置构建的默认停止标准。如果传递的停止标准已经使用参数或生成配置创建,则会抛出错误。如果您的停止标准依赖于 `scores` 输入,请确保将 `return_dict_in_generate=True, output_scores=True` 传递给 `generate`。此功能旨在供高级用户使用。
  • **prefix_allowed_tokens_fn** (`Callable[[int, torch.Tensor], List[int]]`, *可选*) — 如果提供,此函数将 beam search 限制为每步仅允许的 tokens。如果未提供,则不应用任何约束。此函数接受 2 个参数:批量 ID `batch_id` 和 `input_ids`。它必须返回一个列表,其中包含在批量 ID `batch_id` 和先前生成的 tokens `inputs_ids` 的条件下,下一步生成步骤允许的 tokens。此参数对于在 prefix 条件下的约束生成非常有用,如 Autoregressive Entity Retrieval 中所述。
  • **synced_gpus** (`bool`, *可选*) — 是否继续运行 while 循环直到 `max_length`。除非被覆盖,否则如果使用 FullyShardedDataParallel 或 DeepSpeed ZeRO Stage 3 与多个 GPU,则此标志将设置为 `True`,以避免在一个 GPU 在其他 GPU 之前完成生成时发生死锁。否则,默认为 `False`。
  • **assistant_model** ([`PreTrainedModel`](transformers.PreTrainedModel), *可选*) — 可用于加速生成的辅助模型。辅助模型必须具有完全相同的 tokenizer。当使用辅助模型预测候选 tokens 比使用您从中调用 generate 的模型运行生成快得多时,可以实现加速。因此,辅助模型应该小得多。
  • **streamer** ([`BaseStreamer`](transformers.generation.streamer.BaseStreamer), *可选*) — 将用于流式传输生成序列的 Streamer 对象。生成的 tokens 通过 `streamer.put(token_ids)` 传递,streamer 负责任何进一步的处理。
  • **negative_prompt_ids** (`torch.LongTensor`,形状为 `(batch_size, sequence_length)`,*可选*) — 某些处理器(如 CFG)所需的负面提示。批量大小必须与输入批量大小匹配。这是一个实验性功能,未来版本中可能会发生破坏性的 API 更改。
  • **negative_prompt_attention_mask** (`torch.LongTensor`,形状为 `(batch_size, sequence_length)`,*可选*) — `negative_prompt_ids` 的 Attention_mask。
  • **use_model_defaults** (`bool`, *可选*) — 当为 `True` 时,`generation_config` 中未设置的参数将设置为模型特定的默认生成配置 (`model.generation_config`),而不是全局默认值 (`GenerationConfig()`)。如果未设置,则从 `v4.50` 开始保存的模型将认为此标志为 `True`。
  • **kwargs** (`Dict[str, Any]`, *可选*) — `generation_config` 的临时参数化和/或将转发到模型的 `forward` 函数的其他模型特定 kwargs。如果模型是编码器-解码器模型,则编码器特定的 kwargs 不应添加前缀,解码器特定的 kwargs 应添加 `decoder_` 前缀。

返回

ModelOutputtorch.LongTensor

[`ModelOutput`](/docs/transformers/v4.50.0/en/main_classes/output#transformers.utils.ModelOutput)(如果 `return_dict_in_generate=True` 或当 `config.return_dict_in_generate=True` 时)或 `torch.LongTensor`。

如果模型*不是*编码器-解码器模型 (`model.config.is_encoder_decoder=False`),则可能的 ModelOutput 类型为:

如果模型是编码器-解码器模型 (`model.config.is_encoder_decoder=True`),则可能的 ModelOutput 类型为:

为具有语言建模头的模型生成 token id 序列。

大多数生成控制参数在 `generation_config` 中设置,如果未传递,则将设置为模型的默认生成配置。您可以通过将相应的参数传递给 `generate()` 来覆盖任何 `generation_config`,例如 `.generate(inputs, num_beams=4, do_sample=True)`。

有关生成策略和代码示例的概述,请查看以下指南

compute_transition_scores

< >

( sequences: Tensor scores: typing.Tuple[torch.Tensor] beam_indices: typing.Optional[torch.Tensor] = None normalize_logits: bool = False ) torch.Tensor

参数

  • **sequences** (`torch.LongTensor`) — 生成的序列。如果所有批次由于 `eos_token_id` 提前完成,则第二个维度(`sequence_length`)等于 `max_length` 或更短。
  • **scores** (`tuple(torch.FloatTensor)`) — 每个生成步骤中每个词汇表 token 的转移分数。Beam 转移分数由 tokens 的对数概率组成,这些概率以该 beam 中先前生成的 tokens 的对数 softmax 为条件。`torch.FloatTensor` 的元组,最多包含 `max_new_tokens` 个元素(每个生成的 token 一个元素),每个张量的形状为 `(batch_size*num_beams, config.vocab_size)`。
  • **beam_indices** (`torch.LongTensor`, *可选*) — 每个生成步骤中生成的 token id 的 beam 索引。形状为 `(batch_size*num_return_sequences, sequence_length)` 的 `torch.LongTensor`。仅当在生成时 `num_beams>1` 时才需要。
  • **normalize_logits** (`bool`, *可选*, 默认为 `False`) — 是否标准化 logits(出于遗留原因,logits 可能未标准化)。

返回

torch.Tensor

形状为 `(batch_size*num_return_sequences, sequence_length)` 的 `torch.Tensor`,包含转移分数 (logits)

计算给定生成分数(以及 beam 索引,如果使用了 beam search)的序列的转移分数。这是一种方便的方法,可以在生成时快速获得所选 tokens 的分数。

示例

>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM
>>> import numpy as np

>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="pt")

>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
...     # | token | token string | log probability | probability
...     print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
|   262 |  the     | -1.414 | 24.33%
|  1110 |  day     | -2.609 | 7.36%
|   618 |  when    | -2.010 | 13.40%
|   356 |  we      | -1.859 | 15.58%
|   460 |  can     | -2.508 | 8.14%

>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
...     **inputs,
...     max_new_tokens=5,
...     num_beams=4,
...     num_return_sequences=4,
...     return_dict_in_generate=True,
...     output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> # Tip 2: the output length does NOT include the input length
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
True

TFGenerationMixin

class transformers.TFGenerationMixin

< >

( )

一个类,包含所有支持生成的功能,用作 TFPreTrainedModel 中的 mixin。

此类公开了 generate(),可用于:

  • 如果 num_beams=1do_sample=False,则通过调用 greedy_search() 实现贪婪解码
  • 如果 penalty_alpha>0top_k>1,则通过调用 contrastive_search() 实现对比搜索
  • 如果 num_beams=1do_sample=True,则通过调用 sample() 实现多项式采样
  • 如果 num_beams>1,则通过调用 beam_search() 实现束搜索解码

您无需直接调用上述任何方法。请将自定义参数值传递给 ‘generate’ 代替。要了解有关解码策略的更多信息,请参阅文本生成策略指南

generate

< >

( inputs: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None generation_config: typing.Optional[transformers.generation.configuration_utils.GenerationConfig] = None logits_processor: typing.Optional[transformers.generation.tf_logits_process.TFLogitsProcessorList] = None seed = None **kwargs ) ModelOutputtf.Tensor

参数

  • inputs (根据模态而变化形状的 tf.Tensor可选) — 用作生成的提示或作为模型编码器输入的序列。如果为 None,则该方法使用 bos_token_id 和批量大小 1 初始化它。对于仅解码器模型,inputs 应采用 input_ids 的格式。对于编码器-解码器模型,inputs 可以表示 input_idsinput_valuesinput_featurespixel_values 中的任何一个。
  • generation_config (~generation.GenerationConfig可选) — 用作生成调用的基本参数化的生成配置。传递给 generate 的与 generation_config 的属性匹配的 **kwargs 将覆盖它们。如果未提供 generation_config,将使用默认值,其加载优先级如下:1) 来自 generation_config.json 模型文件(如果存在);2) 来自模型配置。 请注意,未指定的参数将继承 GenerationConfig 的默认值,应检查其文档以参数化生成。
  • logits_processor (LogitsProcessorList可选) — 自定义 logits 处理器,用于补充从参数和生成配置构建的默认 logits 处理器。 如果传递的 logits 处理器已使用参数或生成配置创建,则会引发错误。 此功能适用于高级用户。
  • seed (List[int]可选) — 用于控制采样的随机种子,包含两个整数,当 do_sampleTrue 时使用。 请参阅 tf.random 中无状态函数的 seed 参数。
  • kwargs (Dict[str, Any]可选) — generate_config 的特定参数化和/或将转发到模型的 forward 函数的其他模型特定 kwargs。 如果模型是编码器-解码器模型,则编码器特定的 kwargs 不应加前缀,解码器特定的 kwargs 应以 decoder_ 为前缀。

返回

ModelOutputtf.Tensor

一个 ModelOutput (如果 return_dict_in_generate=True 或当 config.return_dict_in_generate=True 时) 或一个 tf.Tensor

如果模型*不是*编码器-解码器模型 (`model.config.is_encoder_decoder=False`),则可能的 ModelOutput 类型为:

如果模型是编码器-解码器模型 (`model.config.is_encoder_decoder=True`),则可能的 ModelOutput 类型为:

为具有语言建模头的模型生成 token id 序列。

大多数生成控制参数在 generation_config 中设置,如果未传递,则将设置为模型的默认生成配置。您可以通过将相应的参数传递给 generate 来覆盖任何 generation_config,例如 .generate(inputs, num_beams=4, do_sample=True)

有关生成策略和代码示例的概述,请查看以下指南

compute_transition_scores

< >

( sequences: Tensor scores: typing.Tuple[tensorflow.python.framework.tensor.Tensor] beam_indices: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None normalize_logits: bool = False ) tf.Tensor

参数

  • sequences (tf.Tensor) — 生成的序列。 第二维度(sequence_length)等于 max_length,或者如果所有批次由于 eos_token_id 而提前完成,则更短。
  • scores (tuple(tf.Tensor)) — 每个生成步骤中每个词汇表标记的转换得分。 Beam 转换得分由以先前生成的标记的 log softmax 为条件的标记的对数概率组成。 tf.Tensor 元组,最多包含 max_new_tokens 个元素(每个生成的标记一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)
  • beam_indices (tf.Tensor可选) — 每个生成步骤中生成的标记 id 的 Beam 索引。 形状为 (batch_size*num_return_sequences, sequence_length)tf.Tensor。 仅当 generate-time 的 num_beams>1 时才需要。
  • normalize_logits (bool可选,默认为 False) — 是否标准化 logits(由于历史原因,logits 可能未标准化)。

返回

tf.Tensor

形状为 (batch_size*num_return_sequences, sequence_length)tf.Tensor,包含转换得分 (logits)

计算给定生成分数(以及 beam 索引,如果使用了 beam search)的序列的转移分数。这是一种方便的方法,可以在生成时快速获得所选 tokens 的分数。

示例

>>> from transformers import GPT2Tokenizer, TFAutoModelForCausalLM
>>> import numpy as np

>>> tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
>>> model = TFAutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="tf")

>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
...     # | token | token string | logits | probability
...     print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
|   262 |  the     | -1.414 | 24.33%
|  1110 |  day     | -2.609 | 7.36%
|   618 |  when    | -2.010 | 13.40%
|   356 |  we      | -1.859 | 15.58%
|   460 |  can     | -2.508 | 8.14%

>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
...     **inputs,
...     max_new_tokens=5,
...     num_beams=4,
...     num_return_sequences=4,
...     return_dict_in_generate=True,
...     output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = np.sum(transition_scores, axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
True

FlaxGenerationMixin

class transformers.FlaxGenerationMixin

< >

( )

一个包含用于自回归文本生成的所有功能的类,用作 FlaxPreTrainedModel 中的 mixin。

该类公开了 generate(),可用于

  • 如果 num_beams=1do_sample=False,则通过调用 _greedy_search() 实现贪婪解码
  • 如果 num_beams=1do_sample=True,则通过调用 _sample() 实现多项式采样
  • 如果 num_beams>1do_sample=False,则通过调用 _beam_search() 实现束搜索解码

您无需直接调用上述任何方法。请将自定义参数值传递给 ‘generate’ 代替。要了解有关解码策略的更多信息,请参阅文本生成策略指南

generate

< >

( input_ids: Array generation_config: typing.Optional[transformers.generation.configuration_utils.GenerationConfig] = None prng_key: typing.Optional[jax.Array] = None trace: bool = True params: typing.Optional[typing.Dict[str, jax.Array]] = None logits_processor: typing.Optional[transformers.generation.flax_logits_process.FlaxLogitsProcessorList] = None **kwargs )

参数

  • input_ids (形状为 (batch_size, sequence_length)jnp.ndarray) — 用作生成的提示的序列。
  • generation_config (~generation.GenerationConfig可选) — 用作生成调用的基本参数化的生成配置。传递给 generate 的与 generation_config 的属性匹配的 **kwargs 将覆盖它们。如果未提供 generation_config,将使用默认值,其加载优先级如下:1) 来自 generation_config.json 模型文件(如果存在);2) 来自模型配置。 请注意,未指定的参数将继承 GenerationConfig 的默认值,应检查其文档以参数化生成。
  • trace (bool可选,默认为 True) — 是否跟踪生成。 设置 trace=False 仅应用于调试,并将导致运行时速度明显降低。
  • params (Dict[str, jnp.ndarray]可选) — 可选地,可以传递模型参数。 这对于并行化生成很有用。
  • logits_processor (FlaxLogitsProcessorList 可选) — 自定义 logits 处理器,用于补充从参数和生成配置构建的默认 logits 处理器。 如果传递的 logits 处理器已使用参数或生成配置创建,则会引发错误。 此功能适用于高级用户。
  • kwargs (Dict[str, Any]可选) — generate_config 的特定参数化和/或将转发到模型的 forward 函数的其他模型特定 kwargs。 如果模型是编码器-解码器模型,则编码器特定的 kwargs 不应加前缀,解码器特定的 kwargs 应以 decoder_ 为前缀。

为具有语言建模头的模型生成 token id 序列。

< > Update on GitHub