Transformers 4.37 中文文档(十五)(3)https://developer.aliyun.com/article/1564966
compute_transition_scores
( sequences: Tensor scores: Tuple beam_indices: Optional = None normalize_logits: bool = False ) → export const metadata = 'undefined';tf.Tensor
参数
sequences
(tf.Tensor
) — 生成的序列。第二维(序列长度)要么等于max_length
,要么如果所有批次由于eos_token_id
而提前完成,则要短一些。scores
(tuple(tf.Tensor)
) — 每个生成步骤中每个词汇标记的转移分数。Beam 转移分数由 tokens 的 log 概率组成,条件是先前生成的 tokens 的 log softmax。形状为(batch_size*num_beams, config.vocab_size)
的tf.Tensor
元组,最多包含max_new_tokens
个元素(每个生成的 token 一个元素)。beam_indices
(tf.Tensor
, optional) — 每个生成步骤中生成的 token id 的 beam 索引。形状为(batch_size*num_return_sequences, sequence_length)
的tf.Tensor
。在生成时如果num_beams>1
则是必需的。normalize_logits
(bool
, optional, defaults toFalse
) — 是否对 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("gpt2") >>> model = TFAutoModelForCausalLM.from_pretrained("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.413 | 24.33% | 1110 | day | -2.609 | 7.36% | 618 | when | -2.009 | 13.41% | 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 = input_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=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
(形状为(batch_size, sequence_length)
的jnp.ndarray
)—用作生成提示的序列。generation_config
(~generation.GenerationConfig
,可选)—用作生成调用的基本参数化的生成配置。传递给 generate 的**kwargs
匹配generation_config
的属性将覆盖它们。如果未提供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 序列。
将🤗 Transformers 模型导出到 ONNX
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/onnx
🤗 Transformers 提供了一个transformers.onnx
包,通过利用配置对象,您可以将模型检查点转换为 ONNX 图。
查看有关导出🤗 Transformers 模型的更多详细信息的指南。
ONNX 配置
我们提供了三个抽象类,您应该根据希望导出的模型架构类型继承其中一个:
- 基于编码器的模型继承自 OnnxConfig
- 基于解码器的模型继承自 OnnxConfigWithPast
- 编码器-解码器模型继承自 OnnxSeq2SeqConfigWithPast
OnnxConfig
class transformers.onnx.OnnxConfig
( config: PretrainedConfig task: str = 'default' patching_specs: List = None )
用于描述通过 ONNX 格式导出模型的元数据的可导出模型的基类。
flatten_output_collection_property
( name: str field: Iterable ) → export const metadata = 'undefined';(Dict[str, Any])
返回
(Dict[str, Any])
具有扁平结构和映射到此新结构的键的输出。
展平任何潜在的嵌套结构,将字段的名称与结构中元素的索引扩展。
from_model_config
( config: PretrainedConfig task: str = 'default' )
为特定模型实例化一个 OnnxConfig
generate_dummy_inputs
( preprocessor: Union batch_size: int = -1 seq_length: int = -1 num_choices: int = -1 is_pair: bool = False framework: Optional = None num_channels: int = 3 image_width: int = 40 image_height: int = 40 sampling_rate: int = 22050 time_duration: float = 5.0 frequency: int = 220 tokenizer: PreTrainedTokenizerBase = None )
参数
batch_size
(int
, 可选,默认为-1) — 用于导出模型的批量大小(-1 表示动态轴)。num_choices
(int
, 可选,默认为-1) — 为多选任务提供的候选答案数量(-1 表示动态轴)。seq_length
(int
, 可选,默认为-1) — 为导出模型指定的序列长度(-1 表示动态轴)。is_pair
(bool
, 可选,默认为False
) — 指示输入是否为一对(句子 1,句子 2)framework
(TensorType
, 可选,默认为None
) — 分词器将为其生成张量的框架(PyTorch 或 TensorFlow)。num_channels
(int
, 可选,默认为 3) — 生成图像的通道数。image_width
(int
, 可选,默认为 40) — 生成图像的宽度。image_height
(int
, 可选,默认为 40) — 生成图像的高度。sampling_rate
(int
, 可选 默认为 22050) — 用于音频数据生成的采样率。time_duration
(float
, 可选 默认为 5.0) — 用于音频数据生成的采样总秒数。frequency
(int
, 可选 默认为 220) — 生成音频的期望自然频率。
生成要提供给特定框架的 ONNX 导出器的输入
generate_dummy_inputs_onnxruntime
( reference_model_inputs: Mapping ) → export const metadata = 'undefined';Mapping[str, Tensor]
参数
reference_model_inputs
([Mapping[str, Tensor]
)— 模型的参考输入。
返回
Mapping[str, Tensor]
保存要提供给模型前向函数的 kwargs 的映射
使用参考模型输入为 ONNX Runtime 生成输入。覆盖此选项以使用将编码器和解码器导出为单独的 ONNX 文件的 seq2seq 模型进行推理。
use_external_data_format
( num_parameters: int )
标志,指示模型是否需要使用外部数据格式
OnnxConfigWithPast
class transformers.onnx.OnnxConfigWithPast
( config: PretrainedConfig task: str = 'default' patching_specs: List = None use_past: bool = False )
fill_with_past_key_values_
( inputs_or_outputs: Mapping direction: str inverted_values_shape: bool = False )
考虑填充具有过去键值动态轴的输入或输出映射。
with_past
( config: PretrainedConfig task: str = 'default' )
实例化一个具有 use_past
属性设置为 True 的 OnnxConfig
OnnxSeq2SeqConfigWithPast
class transformers.onnx.OnnxSeq2SeqConfigWithPast
( config: PretrainedConfig task: str = 'default' patching_specs: List = None use_past: bool = False )
ONNX 特性
每个 ONNX 配置都与一组 特性 关联,使您能够为不同类型的拓扑或任务导出模型。
FeaturesManager
class transformers.onnx.FeaturesManager
( )
check_supported_model_or_raise
( model: Union feature: str = 'default' )
检查模型是否具有请求的特征。
determine_framework
( model: str framework: str = None )
参数
model
(str
) — 要导出的模型的名称。framework
(str
, 可选, 默认为None
) — 用于导出的框架。如果未提供,则参见上文的优先级。
确定用于导出的框架。
优先级按以下顺序排列:
- 通过
framework
的用户输入。 - 如果提供了本地检查点,则使用与检查点相同的框架。
- 环境中可用的框架,优先考虑 PyTorch。
get_config
( model_type: str feature: str ) → export const metadata = 'undefined';OnnxConfig
参数
model_type
(str
) — 要检索配置的模型类型。feature
(str
) — 要检索配置的特征。
返回
OnnxConfig
用于组合的配置
获取模型类型和特征组合的 OnnxConfig。
get_model_class_for_feature
( feature: str framework: str = 'pt' )
参数
feature
(str
) — 所需的特征。framework
(str
, 可选, 默认为"pt"
) — 用于导出的框架。
尝试从特征名称中检索 AutoModel 类。
get_model_from_feature
( feature: str model: str framework: str = None cache_dir: str = None )
参数
feature
(str
) — 所需的特征。model
(str
) — 要导出的模型的名称。framework
(str
, 可选, 默认为None
) — 用于导出的框架。如果未提供,则参见FeaturesManager.determine_framework
的优先级。
尝试从模型的名称和要启用的特征中检索模型。
get_supported_features_for_model_type
( model_type: str model_name: Optional = None )
参数
model_type
(str
) — 要检索支持特征的模型类型。model_name
(str
, 可选) — 模型对象的名称属性,仅用于异常消息。
尝试从模型类型中检索特征 -> OnnxConfig 构造函数映射。
优化
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/optimizer_schedules
.optimization
模块提供:
- 一个带有固定权重衰减的优化器,可用于微调模型,以及
_LRSchedule
继承的形式有几个调度对象:- 一个梯度累积类,用于累积多个批次的梯度
AdamW(PyTorch)
class transformers.AdamW
( params: Iterable lr: float = 0.001 betas: Tuple = (0.9, 0.999) eps: float = 1e-06 weight_decay: float = 0.0 correct_bias: bool = True no_deprecation_warning: bool = False )
参数
params
(Iterable[nn.parameter.Parameter]
)— 要优化的参数的可迭代对象或定义参数组的字典。lr
(float
,可选,默认为 0.001)— 要使用的学习率。betas
(Tuple[float,float]
,可选,默认为(0.9, 0.999)
)— Adam 的 betas 参数(b1,b2)。eps
(float
,可选,默认为 1e-06)— Adam 的数值稳定性 epsilon。weight_decay
(float
,可选,默认为 0.0)— 要应用的解耦权重衰减。correct_bias
(bool
,可选,默认为True
)— 是否在 Adam 中校正偏差(例如,在 Bert TF 存储库中,它们使用False
)。no_deprecation_warning
(bool
,可选,默认为False
)— 用于禁用弃用警告的标志(设置为True
以禁用警告)。
实现了带有权重衰减修复的 Adam 算法,该算法在解耦权重衰减正则化中引入。
step
( closure: Callable = None )
参数
closure
(Callable
,可选)— 重新评估模型并返回损失的闭包。
执行单个优化步骤。
Transformers 4.37 中文文档(十五)(5)https://developer.aliyun.com/article/1564968