语言模型|参数基础知识详解
在我们使用语言模型时,经常能够看一些参数名称难以理解的设置选项,但我们并不知道这些都代表着什么意思,调整参数后将会有什么影响,所以本站翻译了语言模型transformers
的GenerationConfig
类。你所使用的语言模型中不一定有以及参数,但以下参数应该是包含所有语言模型主流设置的,所以大家可以在这里快速搜索查阅。
参数解释来源
文本生成
每个框架都在其各自的 GenerationMixin 类中实现了 generate() 方法来进行文本生成:
- PyTorch 的 generate() 方法实现在 GenerationMixin 类中。
- TensorFlow 的 generate() 方法实现在 TFGenerationMixin 类中。
- Flax/JAX 的 generate() 方法实现在 FlaxGenerationMixin 类中。
不管您选择的是哪个框架,您都可以使用 GenerationConfig 类的实例来为 generate 方法参数化。请参阅该类以获取生成方法行为的完整参数列表。
要了解如何检查模型的生成配置、默认值是什么、如何临时更改参数以及如何创建和保存自定义的生成配置,请参阅文本生成策略指南。该指南还解释了如何使用相关功能,如令牌流式传输。
GenerationConfig
class transformers.GenerationConfig( **kwargs )
用于控制文本生成的参数类,它包含了多个参数,用于调整生成文本的长度和策略。以下是GenerationConfig中的参数列表及其说明:
控制输出长度的参数:
max_length(int,可选,默认为20)
— 生成的token的最大长度。对应于输入提示的长度 + max_new_tokens。如果设置了max_new_tokens,该参数的效果将被覆盖。
max_new_tokens(int,可选)
— 生成的token的最大数量,忽略输入提示中的token数。
min_length(int,可选,默认为0)
— 生成的序列的最小长度。对应于输入提示的长度 + min_new_tokens。如果设置了min_new_tokens,该参数的效果将被覆盖。
min_new_tokens(int,可选)
— 生成的token的最小数量,忽略输入提示中的token数。
early_stopping(bool或str,可选,默认为False)
— 控制基于beam的方法(如beam-search)的停止条件。它接受以下值:True,当有num_beams个完整候选时,生成停止;False,应用启发式方法,在很少可能找到更好候选时停止生成;”never”,只有当不能找到更好候选时(传统的beam search算法)才停止。
max_time(float,可选)
— 允许计算运行的最大时间,单位为秒。在分配的时间过去后,generation仍会完成当前的处理。
控制生成策略的参数:
do_sample(bool,可选,默认为False)
— 是否使用采样,否则使用贪婪解码。 num_beams(int,可选,默认为1)
— beam search的束搜索数量。1表示不使用beam search。 num_beam_groups(int,可选,默认为1)
— 将num_beams分成几组,以确保不同组的beam之间具有多样性。详见这篇论文以获取更多细节。 penalty_alpha(float,可选)
— 该值平衡了模型置信度和对比搜索解码中的退化惩罚。 use_cache(bool,可选,默认为True)
— 模型是否应该使用过去的键/值注意力(如果适用于该模型)来加速解码。
控制模型输出logits的参数:
temperature(float,可选,默认为1.0)
— 用于调节下一个token概率的值。
top_k(int,可选,默认为50)
— 保留前k个概率最高的词汇token,用于top-k过滤。
top_p(float,可选,默认为1.0)
— 如果设置为小于1的浮点数,则仅保留概率总和为top_p或更高的最小一组最有可能的token进行生成。
typical_p(float,可选,默认为1.0)
— 局部典型性衡量了条件概率预测下一个目标token与已生成的部分文本的预期条件概率预测随机token之间的相似性。如果设置为小于1的浮点数,则保留最局部典型性token的最小一组,概率总和为typical_p或更高。详见这篇论文以获取更多细节。
epsilon_cutoff(float,可选,默认为0.0)
— 如果设置为0到1之间的浮点数,则仅采样概率大于epsilon_cutoff的token。在论文中,建议的值范围为3e-4到9e-4,具体取决于模型的大小。详见Truncation Sampling as Language Model Desmoothing以获取更多细节。
eta_cutoff(float,可选,默认为0.0)
— Eta采样是局部典型性采样和epsilon采样的混合。如果设置为0到1之间的浮点数,则仅在大于eta_cutoff或sqrt(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)
— 如果生成的token与同一时间点其他组的beam生成的token相同,则从beam的分数中减去此值。注意,仅在启用组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的整数,则该大小的所有ngram只能出现一次。
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处理器或warper(包括自定义的)后是否重新规范化logits。强烈建议将此标志设置为True,因为搜索算法假设得分logits已经归一化,但某些logit处理器或warper可能会破坏归一化。
constraints(List[Constraint],可选)
— 可以添加到生成中的自定义约束,以确保输出将包含由Constraint对象定义的特定token的使用,以最合理的方式实现。
forced_bos_token_id(int,可选,默认为model.config.forced_bos_token_id)
— 在decoder_start_token_id后强制作为第一个生成的token的id。对于像mBART这样的多语言模型,第一个生成的token必须是目标语言的token。
forced_eos_token_id(Union[int,List[int]],可选,默认为model.config.forced_eos_token_id)
— 在达到max_length时强制作为最后一个生成的token的id。可以选择使用列表设置多个序列结束符。
remove_invalid_values(bool,可选,默认为model.config.remove_invalid_values)
— 是否删除模型的可能的nan和inf输出,以防止生成方法崩溃。注意,使用remove_invalid_values可能会减慢生成速度。
exponential_decay_length_penalty(tuple(int,float),可选)
— 此元组在生成一定数量的token后增加指数增加的长度惩罚。元组应包含:(start_index,decay_factor),其中start_index表示惩罚开始的位置,decay_factor表示指数衰减的因子。
suppress_tokens(List[int],可选)
— 在生成中将被抑制的token列表。SuppressTokens logits处理器将将它们的logits设置为-inf,以便它们不被采样。
begin_suppress_tokens(List[int],可选)
— 在生成的开始处将被抑制的token列表。SupressBeginTokens logits处理器将将它们的logits设置为-inf,以便它们不被采样。
forced_decoder_ids(List[List[int]],可选)
— 一个整数对的列表,指示从生成索引到token索引的映射,将在采样之前被强制。例如,[[1,123]]表示第二个生成的token将始终是索引为123的token。
sequence_bias(Dict[Tuple[int],float],可选)
— 将token序列映射到其偏差项的字典。正偏差增加了选择该序列的可能性,而负偏差则相反。详见SequenceBiasLogitsProcessor以获取更多文档和示例。
guidance_scale(float,可选)
— 用于分类器自由引导(CFG)的引导因子。通过设置guidance_scale > 1来启用CFG。更高的guidance_scale鼓励模型生成与输入提示更紧密相关的样本,通常以牺牲质量为代价。
生成输出的变量定义参数包括:
num_return_sequences(int,可选,默认为1)
— 对于批处理中的每个元素,独立计算返回的序列数量。
output_attentions(bool,可选,默认为False)
— 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回的张量下的attentions。
output_hidden_states(bool,可选,默认为False)
— 是否返回所有层的隐藏状态。有关详细信息,请参阅返回的张量下的hidden_states。
output_scores(bool,可选,默认为False)
— 是否返回预测得分。有关详细信息,请参阅返回的张量下的scores。
return_dict_in_generate(bool,可选,默认为False)
— 是否返回ModelOutput而不是普通元组。
生成时可以使用的特殊token
pad_token_id(int,可选)
— 填充token的id。
bos_token_id(int,可选)
— 开始序列的token的id。
eos_token_id(Union[int,List[int]],可选)
— 结束序列的token的id。可以选择使用列表设置多个序列结束符。
仅适用于编码器-解码器模型的生成参数
encoder_no_repeat_ngram_size(int,可选,默认为0)
— 如果设置为大于0的整数,则在encoder_input_ids中出现的大小为该值的所有ngram不能出现在decoder_input_ids中。
decoder_start_token_id(int,可选)
— 如果编码器-解码器模型以与bos不同的token开始解码,则为该token的id。
评论 (0)