生成
每个框架在其各自的 GenerationMixin
类中都实现了用于文本生成的生成方法
- PyTorch 的 generate() 方法是在 GenerationMixin 类中实现的。
- TensorFlow 的 generate() 方法是在 TFGenerationMixin 类中实现的。
- Flax/JAX 的 generate() 方法是在 FlaxGenerationMixin 类中实现的。
无论您选择哪个框架,您都可以使用 GenerationConfig 类实例来参数化 generate 方法。有关生成参数的完整列表,请参考此类,这些参数控制着生成方法的行为。
要了解如何检查模型的生成配置、默认值、如何临时更改参数以及如何创建和保存自定义生成配置,请参考 文本生成策略指南。该指南还解释了如何使用相关功能,例如 token 流式传输。
GenerationConfig
from_pretrained
< source >( pretrained_model_name: Union config_file_name: Union = None cache_dir: Union = None force_download: bool = False local_files_only: bool = False token: Union = None revision: str = 'main' **kwargs ) → GenerationConfig
参数
- pretrained_model_name (
str
或os.PathLike
) — 可以是以下两种情况之一:- 字符串,表示托管在 huggingface.co 上的模型库中的预训练模型配置的 模型 ID。
- 保存的配置文件的 目录 的路径,使用 save_pretrained() 方法保存,例如
./my_model_directory/
。
- config_file_name (
str
或os.PathLike
,可选,默认为"generation_config.json"
) — 要从pretrained_model_name
加载的生成配置 JSON 文件的名称。 - cache_dir (
str
或os.PathLike
,可选) — 要缓存下载的预训练模型配置的目录的路径,如果不想使用标准缓存。 - force_download (
bool
,可选,默认为False
) — 是否强制 (重新) 下载配置文件,即使存在缓存版本也覆盖它们。 resume_download — 已弃用,不再使用。现在,所有下载默认情况下都可以在可能的情况下恢复。将在 Transformers v5 中删除。 - proxies (
Dict[str, str]
,可选) — 要按协议或端点使用的代理服务器的字典,例如{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.
代理服务器用于每个请求。 - token (
str
或bool
, 可选) — 用作远程文件 HTTP 身份验证承载者的令牌。如果为True
,或未指定,则使用运行huggingface-cli login
时生成的令牌(存储在~/.huggingface
中)。 - revision (
str
, 可选, 默认值为"main"
) — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,因为我们使用基于 git 的系统来存储 huggingface.co 上的模型和其他工件,因此revision
可以是 git 允许的任何标识符。要测试你在 Hub 上提交的拉取请求,你可以传递
revision=“refs/pr/
“。 - 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。
示例
>>> 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
< source >( model_config: PretrainedConfig ) → GenerationConfig
从 PretrainedConfig 实例化一个 GenerationConfig。此函数用于将可能包含生成参数的旧版 PretrainedConfig 对象转换为独立的 GenerationConfig。
save_pretrained
< source >( save_directory: Union config_file_name: Union = None push_to_hub: bool = False **kwargs )
参数
- save_directory (
str
或os.PathLike
) — 将保存配置 JSON 文件的目录(如果不存在,则会创建)。 - config_file_name (
str
或os.PathLike
, 可选, 默认值为"generation_config.json"
) — 要保存在save_directory
中的生成配置 JSON 文件的名称。 - push_to_hub (
bool
, 可选, 默认值为False
) — 是否在保存模型后将其推送到 Hugging Face 模型中心。 你可以使用repo_id
指定要推送到的仓库 (将默认使用save_directory
在你命名空间中的名称)。 - kwargs (
Dict[str, Any]
, 可选) — 传递到 push_to_hub() 方法的额外关键字参数。
将生成配置对象保存到 save_directory
目录,以便可以使用 from_pretrained() 类方法重新加载。
更新
< 源代码 >( **kwargs ) → Dict[str, Any]
使用 kwargs
中的属性更新此类实例的属性,如果它们与现有属性匹配,则返回所有未使用的 kwargs。
验证 GenerationConfig 实例的属性值的有效性。如果存在仅从配置实例本身就可以检测到的参数化错误,则引发异常。
请注意,这里没有验证的某些参数最适合在生成运行时验证,因为它们可能取决于其他输入和/或模型,例如与生成长度相关的参数。
获取生成模式
< 源代码 >( assistant_model: Optional = None ) → GenerationMode
返回由 GenerationConfig 实例触发的生成模式。
类 transformers.WatermarkingConfig
< source >( greenlist_ratio: Optional = 0.25 bias: Optional = 2.0 hashing_key: Optional = 15485863 seeding_scheme: Optional = 'lefthash' context_width: Optional = 1 )
用于生成水印的类,应在 `generate` 期间传递给 `GenerationConfig`。有关参数的更多详细信息,请参阅 这篇论文。
接受以下键
- greenlist_ratio (
float
): 用于水印。用于水印的“绿色”标记与词汇量之比。默认值为 0.25。 - bias (
float
): 用于水印。添加到所选“绿色”标记的对数中的偏差。默认值为 2.0。 - hashing_key (
int
): 用于水印的哈希密钥。默认值为 15485863(百万分之一个质数)。 - seeding_scheme (
str
): 用于水印的算法。接受的值- “lefthash” (默认):“绿色”标记选择取决于最后一个标记(论文中的算法 2)
- “selfhash”: “绿色”标记选择取决于当前标记本身(论文中的算法 3)。此方案的缺点是它考虑所有可能的下一个标记,并且可能比“lefthash” 速度慢。
- context_width(
int
): 用于播种的先前标记的上下文长度。较高的上下文长度使水印更加稳健。
from_dict
< source >( config_dict **kwargs ) → WatermarkingConfig
从参数字典构造 WatermarkingConfig 实例。
将此实例序列化为 Python 字典。
to_json_file
< source >( json_file_path: Union )
将此实例保存到 JSON 文件。
将此实例序列化为 JSON 格式字符串。
使用新值更新配置属性。
GenerationMixin
这是一个包含所有自回归文本生成的函数的类,用作 PreTrainedModel 的 mixin。
该类公开了 generate(),它可用于
- 贪婪解码,如果
num_beams=1
且do_sample=False
- 对比搜索,如果
penalty_alpha>0
且top_k>1
- 多项式采样,如果
num_beams=1
且do_sample=True
- 束搜索解码,如果
num_beams>1
且do_sample=False
- 束搜索多项式采样,如果
num_beams>1
且do_sample=True
- 多样性束搜索解码,如果
num_beams>1
且num_beam_groups>1
- 约束束搜索解码,如果
constraints!=None
或force_words_ids!=None
- 辅助解码,如果
assistant_model
或prompt_lookup_num_tokens
传递给.generate()
要详细了解解码策略,请参阅 文本生成策略指南。
generate
< source >( inputs: Optional = None generation_config: Optional = None logits_processor: Optional = None stopping_criteria: Optional = None prefix_allowed_tokens_fn: Optional = None synced_gpus: Optional = None assistant_model: Optional = None streamer: Optional = None negative_prompt_ids: Optional = None negative_prompt_attention_mask: Optional = None **kwargs ) → ModelOutput 或 torch.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
的**kwargs
与generation_config
的属性匹配将覆盖它们。如果未提供generation_config
,将使用默认值,加载优先级如下:1) 从generation_config.json
模型文件(如果存在),2) 从模型配置。请注意,未指定的参数将继承 GenerationConfig 的默认值,其文档应检查以参数化生成。 - logits_processor (
LogitsProcessorList
,可选) — 补充从参数和生成配置构建的默认 logits 处理器的自定义 logits 处理器。如果传递的 logit 处理器已使用参数或生成配置创建,则会抛出错误。此功能适用于高级用户。 - stopping_criteria (
StoppingCriteriaList
,可选) — 补充从参数和生成配置构建的默认停止条件的自定义停止条件。如果传递的停止条件已使用参数或生成配置创建,则会抛出错误。如果您的停止条件依赖于scores
输入,请确保将return_dict_in_generate=True, output_scores=True
传递给generate
。此功能适用于高级用户。 - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], List[int]]
, 可选) — 如果提供,此函数在每一步都将束搜索限制为仅允许的令牌。 如果不提供,则不应用任何约束。 此函数接受 2 个参数:批次 IDbatch_id
和input_ids
。 它必须返回一个列表,其中包含根据批次 IDbatch_id
和先前生成的令牌inputs_ids
条件化的下一个生成步骤的允许令牌。 此参数对于根据前缀进行约束生成(如 自回归实体检索 中所述)很有用。 - synced_gpus (
bool
, 可选) — 是否继续运行 while 循环直到 max_length。 除非被覆盖,否则此标志将在 DeepSpeed ZeRO Stage 3 多个 GPU 环境下设置为True
,以避免在某个 GPU 完成生成之前其他 GPU 出现挂起。 否则,它将被设置为False
。 - assistant_model (
PreTrainedModel
, 可选) — 可以用来加速生成的辅助模型。 辅助模型必须具有完全相同的 tokenizer。 当使用辅助模型预测候选令牌比使用您调用 generate 的模型运行生成快得多时,可以实现加速。 因此,辅助模型应该更小。 - streamer (
BaseStreamer
, 可选) — 将用于流式传输生成的序列的流式传输器对象。 生成的令牌通过streamer.put(token_ids)
传递,流式传输器负责任何进一步的处理。 - negative_prompt_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
, 可选) — 一些处理器(如 CFG)所需的负面提示。 批次大小必须与输入批次大小匹配。 这是一个实验性功能,在将来的版本中可能会发生 API 更改。 - negative_prompt_attention_mask (
torch.LongTensor
形状为(batch_size, sequence_length)
, 可选) —negative_prompt_ids
的注意力掩码。 - kwargs (
Dict[str, Any]
, 可选) —generation_config
的临时参数化,以及/或将转发到模型的forward
函数的额外模型特定 kwargs。 如果模型是编码器-解码器模型,则编码器特定 kwargs 不应添加前缀,解码器特定 kwargs 应添加 decoder_ 前缀。
返回
ModelOutput 或 torch.LongTensor
一个 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 类型是
为具有语言建模头的模型生成令牌 ID 序列。
大多数生成控制参数在 generation_config
中设置,如果未传递,它将设置为模型的默认生成配置。 您可以通过将相应的参数传递给 generate() 来覆盖任何 generation_config
,例如 .generate(inputs, num_beams=4, do_sample=True)
。
有关生成策略和代码示例的概述,请查看 以下指南.
compute_transition_scores
< 源代码 >( sequences: Tensor scores: Tuple beam_indices: Optional = None normalize_logits: bool = False ) → torch.Tensor
参数
- sequences (
torch.LongTensor
) — 生成的序列。第二维(sequence_length)要么等于max_length
,要么由于eos_token_id
而更短。 - scores (
tuple(torch.FloatTensor)
) — 每个生成步骤中每个词汇表标记的过渡分数。光束过渡分数由之前在该光束中生成的标记的 log softmax 条件下标记的对数概率组成。torch.FloatTensor
元组,最多包含max_new_tokens
个元素(每个生成标记一个元素),每个张量的形状为(batch_size*num_beams, config.vocab_size)
。 - beam_indices (
torch.LongTensor
, optional) — 每个生成步骤中生成标记 ID 的光束索引。形状为(batch_size*num_return_sequences, sequence_length)
的torch.LongTensor
。仅在生成时num_beams>1
时需要。 - normalize_logits (
bool
, optional, defaults toFalse
) — 是否规范化 logits(出于历史原因,它们可能未规范化)。
返回
torch.Tensor
形状为 (batch_size*num_return_sequences, sequence_length)
的 torch.Tensor
,包含过渡分数(logits)
根据生成分数(以及光束索引,如果使用了光束搜索)计算序列的过渡分数。这是一个方便的方法,可以快速获得生成时选定标记的分数。
示例
>>> 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
一个包含所有支持生成的函数的类,用作 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 ) → ModelOutput 或 tf.Tensor
参数
- inputs (
tf.Tensor
,形状取决于模态,optional) — 用作生成提示或作为编码器模型输入的序列。如果为None
,则该方法将使用bos_token_id
和 1 的批次大小对其进行初始化。对于仅解码器模型,inputs
应采用input_ids
的格式。对于编码器-解码器模型,inputs 可以表示input_ids
、input_values
、input_features
或pixel_values
中的任何一个。 - generation_config (
~generation.GenerationConfig
, optional) — 用作生成调用的基本参数化的生成配置。传递给生成匹配generation_config
属性的**kwargs
将覆盖它们。如果未提供generation_config
,则将使用默认值,其加载优先级如下:1) 如果存在,则来自generation_config.json
模型文件;2) 来自模型配置。请注意,未指定的参数将继承 GenerationConfig 的默认值,应检查其文档以参数化生成。 - logits_processor (
LogitsProcessorList
, 可选) — 自定义的 logits 处理器,用于补充从参数和生成配置构建的默认 logits 处理器。 如果传入一个已使用参数或生成配置创建的 logits 处理器,则会抛出错误。 此功能适用于高级用户。 - seed (
List[int]
, 可选) — 用于控制采样的随机种子,包含两个整数,在do_sample
为True
时使用。 请参阅tf.random
中无状态函数的seed
参数。 - kwargs (
Dict[str, Any]
, 可选) —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 类型是
为具有语言建模头的模型生成令牌 ID 序列。
大多数生成控制参数都在 generation_config
中设置,如果没有传递,则将设置为模型的默认生成配置。 可以通过将相应的参数传递给 generate 来覆盖任何 generation_config
,例如 .generate(inputs, num_beams=4, do_sample=True)
。
有关生成策略和代码示例的概述,请查看 以下指南.
compute_transition_scores
< 源代码 >( sequences: Tensor scores: Tuple beam_indices: Optional = None normalize_logits: bool = False ) → tf.Tensor
参数
- sequences (
tf.Tensor
) — 生成的序列。 第二维(sequence_length)要么等于max_length
,要么更短,如果所有批次由于eos_token_id
而提前结束。 - scores (
tuple(tf.Tensor)
) — 每个生成步骤中每个词汇表标记的转移得分。 包含先前生成的标记的对数 softmax 条件下的标记对数概率的束转移得分tf.Tensor
元组,最多包含max_new_tokens
个元素(每个生成的标记一个元素),每个张量形状为(batch_size*num_beams, config.vocab_size)
。 - beam_indices (
tf.Tensor
, 可选) — 每个生成步骤中生成的标记 ID 的束索引。 形状为(batch_size*num_return_sequences, sequence_length)
的tf.Tensor
。 仅在生成时num_beams>1
时才需要。 - normalize_logits (
bool
, 可选, 默认值False
) — 是否对 logits 进行归一化(出于遗留原因,logits 可能未归一化)。
返回
tf.Tensor
一个形状为 (batch_size*num_return_sequences, sequence_length)
的 tf.Tensor
,包含转移得分(logits)。
根据生成分数(以及光束索引,如果使用了光束搜索)计算序列的过渡分数。这是一个方便的方法,可以快速获得生成时选定标记的分数。
示例
>>> 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
一个包含所有用于自回归文本生成的函数的类,用作 FlaxPreTrainedModel 的 mixin。
该类公开 generate(),它可用于
- 贪婪解码,如果
num_beams=1
且do_sample=False
,则调用_greedy_search()
- 多项式采样,如果
num_beams=1
且do_sample=True
,则调用_sample()
- 束搜索解码,如果
num_beams>1
且do_sample=False
,则调用_beam_search()
您无需直接调用上述任何方法。而是将自定义参数值传递给“generate”。要了解有关解码策略的更多信息,请参阅 文本生成策略指南。
generate
< 源代码 >( input_ids: Array generation_config: Optional = None prng_key: Optional = None trace: bool = True params: Optional = None logits_processor: Optional = None **kwargs )
参数
- input_ids (
jnp.ndarray
形状为(batch_size, sequence_length)
) — 用作生成提示的序列。 - 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 处理器。如果传递的 logit 处理器已经使用参数或生成配置创建,则会抛出错误。此功能适用于高级用户。 - kwargs (
Dict[str, Any]
, 可选) —generate_config
的临时参数化和/或将转发到模型forward
函数的额外模型特定kwargs
。如果模型是编码器-解码器模型,则编码器特定kwargs
不应加前缀,而解码器特定kwargs
应以 decoder_ 为前缀。
为具有语言建模头的模型生成令牌 ID 序列。