原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/switch_transformers
SwitchTransformers 模型是由 William Fedus、Barret Zoph 和 Noam Shazeer 在Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity中提出的。
Switch Transformer 模型使用了稀疏的 T5 编码器-解码器架构,其中 MLP 被 Mixture of Experts(MoE)替换。一个路由机制(在这种情况下是前 1 个)将每个标记与一个专家关联起来,其中每个专家都是一个密集的 MLP。虽然开关变压器比其等效的密集模型有更多的权重,但稀疏性允许更好的扩展和更好的规模微调性能。在前向传递过程中,只使用了一小部分权重。路由机制允许模型动态选择相关权重,从而增加模型容量而不增加操作数量。
论文摘要如下:
在深度学习中,模型通常对所有输入重复使用相同的参数。专家混合(MoE)违背了这一点,而是为每个传入的示例选择不同的参数。结果是一个稀疏激活的模型 - 具有惊人数量的参数 - 但是计算成本恒定。然而,尽管 MoE 取得了几个显著的成功,但广泛采用受到了复杂性、通信成本和训练不稳定性的阻碍 - 我们通过 Switch Transformer 来解决这些问题。我们简化了 MoE 路由算法,并设计了直观的改进模型,减少了通信和计算成本。我们提出的训练技术有助于解决不稳定性问题,并且我们展示了大型稀疏模型可以首次使用更低精度(bfloat16)格式进行训练。我们基于 T5-Base 和 T5-Large 设计模型,利用相同的计算资源实现了高达 7 倍的预训练速度提升。这些改进延伸到多语言设置,我们在所有 101 种语言中测量了对 mT5-Base 版本的增益。最后,我们通过在“Colossal Clean Crawled Corpus”上预训练高达万亿参数模型,将语言模型的当前规模提升,并实现了 T5-XXL 模型的 4 倍加速。
该模型由Younes Belkada和Arthur Zucker贡献。原始代码可以在这里找到。
class transformers.SwitchTransformersConfig( vocab_size = 32128 d_model = 768 d_kv = 64 d_ff = 2048 expert_capacity = 64 num_layers = 12 num_sparse_encoder_layers = 3 num_decoder_layers = 12 num_sparse_decoder_layers = 3 num_heads = 12 num_experts = 8 router_bias = False router_jitter_noise = 0.01 router_dtype = 'float32' router_ignore_padding_tokens = False relative_attention_num_buckets = 32 relative_attention_max_distance = 128 dropout_rate = 0.1 layer_norm_epsilon = 1e-06 router_z_loss_coef = 0.001 router_aux_loss_coef = 0.001 initializer_factor = 1.0 dense_act_fn = 'relu' is_encoder_decoder = True add_router_probs = False use_cache = True pad_token_id = 0 eos_token_id = 1 **kwargs )参数
vocab_size(int,可选,默认为 32128) - SwitchTransformers 模型的词汇量。定义了在调用 SwitchTransformersModel 时可以表示的不同标记的数量。
d_model(int,可选,默认为 768) - 编码器层和池化层的大小。
d_kv(int,可选,默认为 64) - 每个注意力头的键、查询、值投影的大小。d_kv必须等于d_model // num_heads。
d_ff (int, optional, defaults to 2048) — 每个SwitchTransformersBlock中间级前馈层的大小。
expert_capacity (int, optional, defaults to 64) — 每个专家可以存储的令牌数量。如果设置为 1,则模型将表现得像一个常规 Transformer。
num_layers (int, optional, defaults to 12) — Transformer 编码器层中的稠密隐藏层数量。
num_sparse_encoder_layers (int, optional, defaults to 3) — Transformer 编码器层中稀疏(MoE)稠密隐藏层的数量。
num_decoder_layers (int, optional, defaults to 12) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与num_layers相同的值。
num_sparse_decoder_layers (int, optional, defaults to 3) — Transformer 解码器层中稀疏(MoE)稠密隐藏层的数量。
num_heads (int, optional, defaults to 12) — 每个注意力层中的注意力头数。
num_experts (int, optional, defaults to 8) — 每个 SwitchTransformer 层的专家数量。
router_bias (bool, optional, defaults to False) — 是否向路由器添加偏置。
router_jitter_noise (float, optional, defaults to 0.01) — 添加到路由器的噪音量。
router_dtype (str, optional, default to "float32") — 用于路由器的dtype。最好将dtype保持为"float32",如论文中的选择性精度讨论中所指定的。
router_ignore_padding_tokens (bool, optional, defaults to False) — 在路由时是否忽略填充标记。
relative_attention_num_buckets (int, optional, defaults to 32) — 每个注意力层使用的桶数。
relative_attention_max_distance (int, optional, defaults to 128) — 用于桶分离的较长序列的最大距离。
dropout_rate (float, optional, defaults to 0.1) — 所有 dropout 层的比率。
layer_norm_eps (float, optional, defaults to 1e-6) — 层归一化层使用的 epsilon。
router_z_loss_coef (float, optional, defaults to 0.001) — 总损失的 z 损失因子。
router_aux_loss_coef (float, optional, defaults to 0.001) — 总损失的辅助损失因子。
initializer_factor (float, optional, defaults to 1.0) — 初始化所有权重矩阵的因子(应保持为 1,用于内部初始化测试)。
dense_act_fn (string, optional, defaults to "relu") — 要使用的前馈层类型。应为"relu"或"gated-gelu"之一。SwitchTransformersv1.1 使用"gated-gelu"前馈投影。原始 SwitchTransformers 使用"relu"。
add_router_probs (bool, optional, defaults to False) — 是否输出路由器概率以计算路由器辅助损失。
use_cache (bool, optional, defaults to True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。
这是一个配置类,用于存储 SwitchTransformersModel 的配置。根据指定的参数实例化 SwitchTransformers 模型,定义模型架构。使用默认值实例化配置将产生类似于 SwitchTransformers google/switch-base-8架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
class transformers.SwitchTransformersTop1Router( config: SwitchTransformersConfig )使用令牌选择顶级专家分配的路由器。
该路由器使用与 Switch Transformer (arxiv.org/abs/2101.03961)和 V-MoE (arxiv.org/abs/2106.05974)相同的机制:令牌选择其顶级专家。项目按router_probs排序,然后路由到其选择的专家,直到达到专家的expert_capacity。不能保证每个令牌都由专家处理,也不能保证每个专家至少收到一个令牌。
_compute_router_probabilities( hidden_states: Tensor ) → export const metadata = 'undefined';router_probabilities (torch.Tensor)参数
hidden_states (torch.Tensor) — (batch_size, sequence_length, hidden_dim) 从中计算路由器概率的隐藏状态。返回
router_probabilities (torch.Tensor)
形状为(batch_size, sequence_length, num_experts)的张量,对应于每个令牌和专家的概率。用于将令牌路由到专家。router_logits (torch.Tensor): 形状为(batch_size, sequence_length, num_experts)的对应原始路由器 logits 的对数张量。稍后用于计算路由器 z-loss。
从输入隐藏状态计算路由器概率。
forward( hidden_states: Tensor )参数
hidden_states (torch.Tensor) — [num_groups, tokens_per_group, hidden_dim] 发送给专家的输入。每个路由器类的通用前向函数。每个路由器都期望具有相同的输入隐藏状态(hidden_states),对应于每个令牌的隐藏状态,expert_capacity对应于路由器将发送到每个专家的令牌数量,一些路由器可以将少量令牌发送给每个专家。
每个路由器的工作方式如下:它期望每个令牌的隐藏状态,从router_weights获取router_probs和router_logits。这将为每个令牌分配原始概率以分配给专家。然后每个路由器类将不得不定义自己的_compute_routing_instructions。
class transformers.SwitchTransformersSparseMLP( config: SwitchTransformersConfig expert_class: Module = <class 'transformers.models.switch_transformers.modeling_switch_transformers.SwitchTransformersDenseActDense'> )Switch Transformers Sparse MLP 模块的实现。
forward( hidden_states )稍等,这可能有点难以理解。按正确顺序,MoE 层执行以下操作:
1- 从路由器获取router_mask。掩码的形状为(batch_size, sequence_length, num_expert),对应于router_probs的 argmax。在计算隐藏状态时需要这些概率:它们被广播到隐藏状态值(可以解释为缩放因子)。
2- 将令牌分派给其关联的专家。我们对专家进行经典的 for 循环,并为每个专家分配相应的隐藏状态。
class transformers.SwitchTransformersModel( config: SwitchTransformersConfig )参数
config(SwitchTransformersConfig)- 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。裸的 SWITCH_TRANSFORMERS 模型变压器输出原始隐藏状态,没有特定的头部。
SWITCH_TRANSFORMERS 模型是由Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity中提出的,作者是William Fedus、Barret Zoph和Noam Shazeer。它是一个编码器-解码器 T5 样式的模型,具有稀疏前馈,代表专家混合(MoE)架构。
该模型继承自 PreTrainedModel。检查超类文档以获取库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。
该模型还是一个 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward( input_ids: Optional = None attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None head_mask: Optional = None decoder_head_mask: Optional = None cross_attn_head_mask: Optional = None encoder_outputs: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None output_router_logits: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.Seq2SeqMoEModelOutput or tuple(torch.FloatTensor)参数
input_ids(形状为(batch_size, sequence_length)的torch.LongTensor)- 词汇表中输入序列标记的索引。SWITCH_TRANSFORMERS 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是输入 ID?
要了解有关如何为预训练准备input_ids的更多信息,请查看 SWITCH_TRANSFORMERS Training。
attention_mask(形状为(batch_size, sequence_length)的torch.FloatTensor,可选)- 用于避免在填充标记索引上执行注意力的掩码。选择在[0, 1]中的掩码值:
masked的标记为 1。
masked的标记为 0。
什么是注意力掩码?
decoder_input_ids(形状为(batch_size, target_sequence_length)的torch.LongTensor,可选)- 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
SWITCH_TRANSFORMERS 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,则可选择仅输入最后的decoder_input_ids(请参阅past_key_values)。
要了解有关如何为预训练准备decoder_input_ids的更多信息,请查看 SWITCH_TRANSFORMERS Training。
decoder_attention_mask(形状为(batch_size, target_sequence_length)的torch.BoolTensor,可选)- 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.FloatTensor,可选)- 用于使编码器中自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]中:
未被掩码,
掩码。
decoder_head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.FloatTensor,可选)- 用于在解码器中使自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]中:
未被掩码,
掩码。
cross_attn_head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.Tensor,可选)- 用于使解码器中交叉注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]中:
未被掩码,
掩码。
encoder_outputs(tuple(tuple(torch.FloatTensor),可选)- 元组包括(last_hidden_state,可选:hidden_states,可选:attentions)last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values(长度为config.n_layers的tuple(tuple(torch.FloatTensor)),每个元组包含 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的张量)- 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用了past_key_values,用户可以选择仅输入形状为(batch_size, 1)的最后一个decoder_input_ids(这些没有将它们的过去键值状态提供给此模型)而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。
inputs_embeds(形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor,可选)- 可选地,可以直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制权,以便将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
decoder_inputs_embeds(形状为(batch_size, target_sequence_length, hidden_size)的torch.FloatTensor,可选)- 可选地,可以直接传递嵌入表示,而不是传递decoder_input_ids。如果使用了past_key_values,则只需输入最后一个decoder_inputs_embeds(参见past_key_values)。如果您想要更多控制权,以便将decoder_input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache(bool,可选)- 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
output_attentions(bool,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions。
output_hidden_states(bool,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states。
output_router_logits(bool,可选)- 是否返回所有路由器的对数。它们对于计算路由器损失很有用,在推理期间不应返回。
return_dict (bool, optional) — 是否返回一个 ModelOutput 而不是一个普通元组。
返回
transformers.modeling_outputs.Seq2SeqMoEModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Seq2SeqMoEModelOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或 config.return_dict=False)包含根据配置(SwitchTransformersConfig)和输入的不同元素。
last_hidden_state (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size)) — 模型解码器最后一层的隐藏状态序列。
如果仅使用 past_key_values,则输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。
past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当传递 use_cache=True 或 config.use_cache=True 时返回) — 长度为 config.n_layers 的 tuple(torch.FloatTensor) 元组,每个元组有两个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量,以及两个额外的形状为 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head) 的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(参见 past_key_values 输入)。
decoder_hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size) 的 torch.FloatTensor 元组。
解码器每一层的隐藏状态以及可选的初始嵌入输出。
decoder_attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length) 的 torch.FloatTensor 元组(每层一个)。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
decoder_router_logits (tuple(torch.FloatTensor), optional, 当传递 output_router_logits=True 或 config.add_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts) 的 torch.FloatTensor 元组(每层一个)。
解码器模型的路由器 logits,用于计算混合专家模型的辅助损失。
cross_attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length) 的 torch.FloatTensor 元组(每层一个)。
解码器交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size) 的 torch.FloatTensor 元组。
编码器每一层的隐藏状态以及可选的初始嵌入输出。
encoder_attentions (tuple(torch.FloatTensor), 可选, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
encoder_router_logits (tuple(torch.FloatTensor), 可选, 当传递output_router_logits=True或config.add_router_probs=True时返回) — 形状为(batch_size, sequence_length, num_experts)的torch.FloatTensor元组(每层一个)。
编码器模型的路由器 logits,用于计算辅助损失和稀疏模块的 z_loss。
SwitchTransformersModel 的 forward 方法,覆盖了__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, SwitchTransformersModel
>>> tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
>>> model = SwitchTransformersModel.from_pretrained("google/switch-base-8")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="pt"
... ).input_ids # Batch size 1
>>> decoder_input_ids = tokenizer("Studies show that", return_tensors="pt").input_ids # Batch size 1
>>> # preprocess: Prepend decoder_input_ids with start token which is pad token for SwitchTransformersModel.
>>> # This is not needed for torch's SwitchTransformersForConditionalGeneration as it does this internally using labels arg.
>>> decoder_input_ids = model._shift_right(decoder_input_ids)
>>> # forward pass
>>> outputs = model(input_ids=input_ids, decoder_input_ids=decoder_input_ids)
>>> last_hidden_states = outputs.last_hidden_stateclass transformers.SwitchTransformersForConditionalGeneration( config: SwitchTransformersConfig )参数
config (SwitchTransformersConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。SWITCH_TRANSFORMERS 模型在顶部有一个语言建模头。
SWITCH_TRANSFORMERS 模型是由William Fedus、Barret Zoph和Noam Shazeer提出的,其在Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity中描述。它是一种具有稀疏前馈的编码器-解码器 T5-like 模型,代表着专家混合(MoE)架构。
此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward( input_ids: Optional = None attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None head_mask: Optional = None decoder_head_mask: Optional = None cross_attn_head_mask: Optional = None encoder_outputs: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None output_router_logits: Optional = True return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.Seq2SeqMoEOutput or tuple(torch.FloatTensor)参数
input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。SWITCH_TRANSFORMERS 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 来获取索引。详细信息请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是输入 ID?
要了解有关如何为预训练准备 input_ids 的更多信息,请查看 SWITCH_TRANSFORMERS Training。
attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值在 [0, 1] 中选择:
掩码 的标记,
掩码 的标记。
什么是注意力掩码?
decoder_input_ids (torch.LongTensor of shape (batch_size, target_sequence_length), optional) — 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
SWITCH_TRANSFORMERS 使用 pad_token_id 作为 decoder_input_ids 生成的起始标记。如果使用 past_key_values,则可以选择仅输入最后的 decoder_input_ids(参见 past_key_values)。
要了解有关如何为预训练准备 decoder_input_ids 的更多信息,请查看 SWITCH_TRANSFORMERS Training。
decoder_attention_mask (torch.BoolTensor of shape (batch_size, target_sequence_length), optional) — 默认行为:生成一个张量,忽略 decoder_input_ids 中的填充标记。因果掩码也将默认使用。
head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使编码器中的自注意力模块中的选定头部失效的掩码。掩码值在 [0, 1] 中选择:
掩码,
掩码。
decoder_head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使解码器中的自注意力模块中的选定头部失效的掩码。掩码值在 [0, 1] 中选择:
掩码,
掩码。
cross_attn_head_mask (torch.Tensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使解码器中的交叉注意力模块中的选定头部失效的掩码。掩码值在 [0, 1] 中选择:
掩码,
掩码。
encoder_outputs (tuple(tuple(torch.FloatTensor), optional) — 元组由 (last_hidden_state, optional: hidden_states, optional: attentions) 组成,last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。在解码器的交叉注意力中使用。
past_key_values (tuple(tuple(torch.FloatTensor)) of length config.n_layers with each tuple having 4 tensors of shape (batch_size, num_heads, sequence_length - 1, embed_size_per_head)) — 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用 past_key_values,用户可以选择仅输入最后的 decoder_input_ids(即那些没有将其过去键值状态提供给此模型的)的形状为 (batch_size, 1),而不是形状为 (batch_size, sequence_length) 的所有 decoder_input_ids。
inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示而不是传递 input_ids。如果您想要更多控制权来将 input_ids 索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
decoder_inputs_embeds (torch.FloatTensor,形状为(batch_size, target_sequence_length, hidden_size),可选) — 可选地,可以直接传递嵌入表示,而不是传递decoder_input_ids。如果使用past_key_values,则只需输入最后的decoder_inputs_embeds(参见past_key_values)。如果要更好地控制如何将decoder_input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache (bool,可选) — 如果设置为True,则返回past_key_values键值状态,可用于加速解码(参见past_key_values)。
output_attentions (bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回的张量下的attentions。
output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回的张量下的hidden_states。
output_router_logits (bool,可选) — 是否返回所有路由器的逻辑。用于计算路由器损失,不应在推理期间返回。
return_dict (bool,可选) — 是否返回 ModelOutput 而不是普通元组。
labels (torch.LongTensor,形状为(batch_size,),可选) — 用于计算序列分类/回归损失的标签。索引应在[-100, 0, ..., config.vocab_size - 1]中。所有设置为-100的标签都被忽略(掩码),损失仅计算标签在[0, ..., config.vocab_size]中的标签
返回
transformers.modeling_outputs.Seq2SeqMoEOutput或tuple(torch.FloatTensor)
一个transformers.modeling_outputs.Seq2SeqMoEOutput或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False,则根据配置(SwitchTransformersConfig)和输入返回不同的元素。
loss (torch.FloatTensor,形状为(1,),可选,当提供labels时返回) — 语言建模损失。
logits (torch.FloatTensor,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
past_key_values (tuple(tuple(torch.FloatTensor)),可选,当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
decoder_hidden_states (tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组。
解码器在每一层输出的隐藏状态以及初始嵌入输出。
decoder_attentions (tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
decoder_router_logits(tuple(torch.FloatTensor),可选,当传递output_router_logits=True或config.add_router_probs=True时返回)— 形状为(batch_size, sequence_length, num_experts)的torch.FloatTensor元组(每层一个)。
解码器模型的路由器 logits,用于计算混合专家模型的辅助损失。
cross_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state(形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor,可选)— 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states(tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的输出+每层的输出)。
每层输出的编码器的隐藏状态加上初始嵌入输出。
encoder_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
encoder_router_logits(tuple(torch.FloatTensor),可选,当传递output_router_logits=True或config.add_router_probs=True时返回)— 形状为(batch_size, sequence_length, num_experts)的torch.FloatTensor元组(每层一个)。
编码器模型的路由器 logits,用于计算混合专家模型的辅助损失和 z_loss。
SwitchTransformersForConditionalGeneration 的前向方法,覆盖了__call__特殊方法。
虽然前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, SwitchTransformersForConditionalGeneration
>>> tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
>>> model = SwitchTransformersForConditionalGeneration.from_pretrained("google/switch-base-8")
>>> # training
>>> input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
>>> labels = tokenizer("<extra_id_0> cute dog <extra_id_1> the <extra_id_2>", return_tensors="pt").input_ids
>>> outputs = model(input_ids=input_ids, labels=labels)
>>> loss = outputs.loss
>>> logits = outputs.logits
>>> # inference
>>> input_ids = tokenizer(
... "summarize: studies have shown that owning a dog is good for you", return_tensors="pt"
... ).input_ids # Batch size 1
>>> outputs = model.generate(input_ids)
>>> # . To, let’s say you have a dog. To summarize:
>>> # Since the model has been trained on MLM, this will output gibberishclass transformers.SwitchTransformersEncoderModel( config: SwitchTransformersConfig )参数
config(SwitchTransformersConfig)— 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。SWITCH_TRANSFORMERS 模型的基本 transformer 输出编码器的原始隐藏状态,没有特定的头部。
SWITCH_TRANSFORMERS 模型是由William Fedus、Barret Zoph和Noam Shazeer在Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity中提出的。它是一种编码器-解码器 T5 样式的模型,具有稀疏的前馈,代表着专家混合(MoE)架构。
此模型继承自 PreTrainedModel。检查超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward( input_ids: Optional = None attention_mask: Optional = None head_mask: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None output_router_logits: Optional = True return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.MoEModelOutput or tuple(torch.FloatTensor)参数
input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。SWITCH_TRANSFORMERS 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
要了解有关如何为预训练准备input_ids的更多信息,请查看 SWITCH_TRANSFORMERS Training。
attention_mask (torch.FloatTensor,形状为(batch_size, sequence_length),可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选定在[0, 1]之间:
masked的标记,
masked的标记。
什么是注意力掩码?
head_mask (torch.FloatTensor,形状为(num_heads,)或(num_layers, num_heads),可选) — 用于使自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]之间:
masked,
masked。
inputs_embeds (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您希望更多地控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions。
output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。
output_router_logits (bool, 可选) — 是否返回所有路由器的 logits。它们对于计算路由器损失很有用,在推断期间不应返回。
return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通元组。
返回
transformers.modeling_outputs.MoEModelOutput或tuple(torch.FloatTensor)
一个transformers.modeling_outputs.MoEModelOutput或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包含根据配置(SwitchTransformersConfig)和输入而异的各种元素。
last_hidden_state (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层的隐藏状态序列。
hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出 + 每个层的输出)的形状为(batch_size, sequence_length, hidden_size)。
模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=True或config.output_attentions=True时返回) — torch.FloatTensor元组(每个层一个)的形状为(batch_size, num_heads, sequence_length, sequence_length)。
注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
router_probs (tuple(torch.FloatTensor), optional, 当传递output_router_probs=True和config.add_router_probs=True时返回或当config.output_router_probs=True时返回) — torch.FloatTensor元组(每个层一个)的形状为(batch_size, sequence_length, num_experts)。
由 MoE 路由器计算的原始路由器概率,这些术语用于计算混合专家模型的辅助损失和 z 损失。
SwitchTransformersEncoderModel 的前向方法,覆盖了__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, SwitchTransformersEncoderModel
>>> tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
>>> model = SwitchTransformersEncoderModel.from_pretrained("google/switch-base-8")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="pt"
... ).input_ids # Batch size 1
>>> outputs = model(input_ids=input_ids)
>>> last_hidden_states = outputs.last_hidden_state原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/t5
T5 模型在探索统一文本到文本转换器的迁移学习极限中由Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li、Peter J. Liu提出。
论文摘要如下:
迁移学习,即模型首先在数据丰富的任务上进行预训练,然后在下游任务上进行微调,已成为自然语言处理(NLP)中的一种强大技术。迁移学习的有效性催生了多种方法、方法论和实践。在本文中,我们通过引入一个将每个语言问题转换为文本到文本格式的统一框架,探索了 NLP 的迁移学习技术领域。我们的系统研究比较了数十个语言理解任务上的预训练目标、架构、无标签数据集、迁移方法和其他因素。通过将我们的探索见解与规模和我们的新“巨大干净爬取语料库”相结合,我们在许多涵盖摘要、问答、文本分类等方面的基准上取得了最先进的结果。为了促进未来关于 NLP 的迁移学习的工作,我们发布了我们的数据集、预训练模型和代码。
所有检查点都可以在hub上找到。
T5 有不同的尺寸:
基于原始 T5 模型,Google 发布了一些后续作品:
taskmaster2、djaym7/wiki_dialog、deepmind/code_contests、lambada、gsm8k、aqua_rat、esnli、quasc和qed。
T5 是一个编码器-解码器模型,将所有 NLP 问题转换为文本到文本的格式。它使用教师强制进行训练。这意味着在训练时,我们总是需要一个输入序列和一个相应的目标序列。输入序列通过input_ids馈送到模型。目标序列向右移动,即在前面加上一个起始序列标记,并通过decoder_input_ids馈送到解码器。在教师强制风格中,目标序列然后附加 EOS 标记,并对应于labels。在这里,PAD 标记被用作起始序列标记。T5 可以以监督和无监督的方式进行训练/微调。
可以使用 T5ForConditionalGeneration(或 Tensorflow/Flax 变体),它在解码器顶部包含了语言建模头。
在这种设置中,输入序列的片段被所谓的哨兵标记(又名唯一的掩码标记)屏蔽,输出序列由相同的哨兵标记和真实被屏蔽的标记的串联形成。每个哨兵标记代表这个句子的一个唯一的掩码标记,应该以<extra_id_0>、<extra_id_1>等形式开始,一直到<extra_id_99>。默认情况下,T5Tokenizer 中有 100 个哨兵标记可用。
例如,句子“The cute dog walks in the park”中的“cute dog”和“the”被屏蔽后应该被处理如下:
>>> from transformers import T5Tokenizer, T5ForConditionalGeneration
>>> tokenizer = T5Tokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
>>> labels = tokenizer("<extra_id_0> cute dog <extra_id_1> the <extra_id_2>", return_tensors="pt").input_ids
>>> # the forward function automatically creates the correct decoder_input_ids
>>> loss = model(input_ids=input_ids, labels=labels).loss
>>> loss.item()
3.7837如果您有兴趣在新语料库上预训练 T5,请查看 Examples 目录中的run_t5_mlm_flax.py脚本。
在这种设置中,输入序列和输出序列是标准的序列到序列的输入输出映射。假设我们想要为翻译调整模型,例如,我们有一个训练示例:输入序列“The house is wonderful.”和输出序列“Das Haus ist wunderbar.”,那么它们应该被准备为模型如下:
>>> from transformers import T5Tokenizer, T5ForConditionalGeneration
>>> tokenizer = T5Tokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> input_ids = tokenizer("translate English to German: The house is wonderful.", return_tensors="pt").input_ids
>>> labels = tokenizer("Das Haus ist wunderbar.", return_tensors="pt").input_ids
>>> # the forward function automatically creates the correct decoder_input_ids
>>> loss = model(input_ids=input_ids, labels=labels).loss
>>> loss.item()
0.2542如您所见,为了计算损失,模型只需要 2 个输入:input_ids(编码输入序列的input_ids)和labels(编码目标序列的input_ids)。模型将根据labels自动创建decoder_input_ids,将它们向右移动一个位置并在前面添加config.decoder_start_token_id,对于 T5 来说等于 0(即填充标记的 id)。还要注意任务前缀:我们在编码之前在输入序列前面添加了‘translate English to German: ’。这将有助于提高性能,因为这个任务前缀在 T5 的预训练中使用过。
然而,上面的示例只显示了一个训练示例。在实践中,我们通常批量训练深度学习模型。这意味着我们必须将示例填充/截断到相同的长度。对于编码器-解码器模型,通常定义max_source_length和max_target_length,分别确定输入和输出序列的最大长度(否则将被截断)。这些应根据任务仔细设置。
此外,我们必须确保labels的填充标记 ID 不被损失函数考虑。在 PyTorch 和 Tensorflow 中,可以通过用-100 替换它们来实现,-100 是CrossEntropyLoss的ignore_index。在 Flax 中,可以使用decoder_attention_mask来忽略损失中的填充标记(有关详细信息,请参阅Flax 摘要脚本)。我们还将attention_mask作为模型的附加输入传递,以确保忽略输入的填充标记。下面的代码示例说明了所有这些。
>>> from transformers import T5Tokenizer, T5ForConditionalGeneration
>>> import torch
>>> tokenizer = T5Tokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> # the following 2 hyperparameters are task-specific
>>> max_source_length = 512
>>> max_target_length = 128
>>> # Suppose we have the following 2 training examples:
>>> input_sequence_1 = "Welcome to NYC"
>>> output_sequence_1 = "Bienvenue à NYC"
>>> input_sequence_2 = "HuggingFace is a company"
>>> output_sequence_2 = "HuggingFace est une entreprise"
>>> # encode the inputs
>>> task_prefix = "translate English to French: "
>>> input_sequences = [input_sequence_1, input_sequence_2]
>>> encoding = tokenizer(
... [task_prefix + sequence for sequence in input_sequences],
... padding="longest",
... max_length=max_source_length,
... truncation=True,
... return_tensors="pt",
... )
>>> input_ids, attention_mask = encoding.input_ids, encoding.attention_mask
>>> # encode the targets
>>> target_encoding = tokenizer(
... [output_sequence_1, output_sequence_2],
... padding="longest",
... max_length=max_target_length,
... truncation=True,
... return_tensors="pt",
... )
>>> labels = target_encoding.input_ids
>>> # replace padding token id's of the labels by -100 so it's ignored by the loss
>>> labels[labels == tokenizer.pad_token_id] = -100
>>> # forward pass
>>> loss = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels).loss
>>> loss.item()
0.188额外的训练提示:
Trainer中设置的默认学习率略高。通常,对于大多数问题(分类、摘要、翻译、问答、问题生成),1e-4 和 3e-4 效果很好。请注意,T5 是使用 AdaFactor 优化器进行预训练的。根据这篇论坛帖子,任务前缀在(1)进行多任务训练时(2)您的任务与 T5 预训练混合中使用的监督任务之一类似或相关时很重要(请参阅论文的附录 D,了解使用的任务前缀)。
如果在 TPU 上训练,建议将数据集的所有示例填充到相同的长度,或者使用pad_to_multiple_of来使用少量预定义的桶大小以适应所有示例。在 TPU 上动态填充批次到最长示例不建议,因为它会在训练期间遇到的每个批次形状触发重新编译,从而显著减慢训练速度。只填充到批次中最长的示例会导致在 TPU 上训练非常缓慢。
在推理时,建议使用 generate()。这种方法负责对输入进行编码,并通过交叉注意力层将编码隐藏状态馈送到解码器,自回归地生成解码器输出。查看这篇博文了解使用 Transformers 生成文本的所有细节。还有这篇博文解释了编码器-解码器模型中生成的工作原理。
>>> from transformers import T5Tokenizer, T5ForConditionalGeneration
>>> tokenizer = T5Tokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> input_ids = tokenizer("translate English to German: The house is wonderful.", return_tensors="pt").input_ids
>>> outputs = model.generate(input_ids)
>>> print(tokenizer.decode(outputs[0], skip_special_tokens=True))
Das Haus ist wunderbar.请注意,T5 使用pad_token_id作为decoder_start_token_id,因此在生成时如果不使用 generate(),请确保以pad_token_id开头。
上面的示例只显示了一个单独的示例。您也可以进行批量推理,如下所示:
>>> from transformers import T5Tokenizer, T5ForConditionalGeneration
>>> tokenizer = T5Tokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> task_prefix = "translate English to German: "
>>> # use different length sentences to test batching
>>> sentences = ["The house is wonderful.", "I like to work in NYC."]
>>> inputs = tokenizer([task_prefix + sentence for sentence in sentences], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
... input_ids=inputs["input_ids"],
... attention_mask=inputs["attention_mask"],
... do_sample=False, # disable sampling to test if batching affects output
... )
>>> print(tokenizer.batch_decode(output_sequences, skip_special_tokens=True))
['Das Haus ist wunderbar.', 'Ich arbeite gerne in NYC.']由于 T5 已经使用了跨度掩码去噪目标进行训练,因此可以在推理过程中用于预测标记(被掩码的)标记。然后,预测的标记将被放置在标记之间。
>>> from transformers import T5Tokenizer, T5ForConditionalGeneration
>>> tokenizer = T5Tokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
>>> sequence_ids = model.generate(input_ids)
>>> sequences = tokenizer.batch_decode(sequence_ids)
>>> sequences
['<pad><extra_id_0> park offers<extra_id_1> the<extra_id_2> park.</s>']如果希望获得更快的训练和推理性能,请为 NVIDIA GPU 安装NVIDIA APEX,或为 AMD GPU 安装ROCm APEX,然后模型将自动使用apex.normalization.FusedRMSNorm而不是T5LayerNorm。前者使用优化的融合内核,比后者快几倍。
一个官方 Hugging Face 和社区资源(由🌎表示),帮助您开始使用 T5。如果您有兴趣提交资源以包含在此处,请随时打开一个 Pull Request,我们将进行审查!资源应该理想地展示一些新内容,而不是重复现有资源。
文本分类
标记分类
文本生成
摘要
填充掩码
翻译
问答
🚀 部署
class transformers.T5Config( vocab_size = 32128 d_model = 512 d_kv = 64 d_ff = 2048 num_layers = 6 num_decoder_layers = None num_heads = 8 relative_attention_num_buckets = 32 relative_attention_max_distance = 128 dropout_rate = 0.1 layer_norm_epsilon = 1e-06 initializer_factor = 1.0 feed_forward_proj = 'relu' is_encoder_decoder = True use_cache = True pad_token_id = 0 eos_token_id = 1 classifier_dropout = 0.0 **kwargs )参数
vocab_size (int, optional, defaults to 32128) — T5 模型的词汇量。定义了在调用 T5Model 或 TFT5Model 时可以表示的不同标记数量。
d_model (int, optional, defaults to 512) — 编码器层和池化层的大小。
d_kv (int, optional, defaults to 64) — 每个注意力头的键、查询、值投影的大小。投影层的inner_dim将被定义为num_heads * d_kv。
d_ff (int, optional, defaults to 2048) — 每个T5Block中间的前馈层的大小。
num_layers (int, optional, defaults to 6) — Transformer 编码器中隐藏层的数量。
num_decoder_layers (int, optional) — Transformer 解码器中隐藏层的数量。如果未设置,将使用与num_layers相同的值。
num_heads (int, optional, defaults to 8) — Transformer 编码器中每个注意力层的注意力头数。
relative_attention_num_buckets (int, optional, defaults to 32) — 每个注意力层使用的桶数量。
relative_attention_max_distance (int, optional, defaults to 128) — 较长序列的最大距离,用于桶分离。
dropout_rate (float, optional, defaults to 0.1) — 所有 dropout 层的比率。
classifier_dropout (float, optional, defaults to 0.0) — 分类器的 dropout 比率。
layer_norm_eps (float, optional, defaults to 1e-6) — 层归一化层使用的 epsilon。
initializer_factor (float, optional, defaults to 1) — 用于初始化所有权重矩阵的因子(应保持为 1,用于内部初始化测试)。
feed_forward_proj (string, optional, defaults to "relu") — 要使用的前馈层类型。应为"relu"或"gated-gelu"之一。T5v1.1 使用"gated-gelu"前馈投影。原始 T5 使用"relu"。
use_cache (bool, optional, defaults to True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。
这是用于存储 T5Model 或 TFT5Model 配置的配置类。它用于根据指定的参数实例化 T5 模型,定义模型架构。使用默认值实例化配置将产生类似于 T5 t5-small架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
class transformers.T5Tokenizer( vocab_file eos_token = '</s>' unk_token = '<unk>' pad_token = '<pad>' extra_ids = 100 additional_special_tokens = None sp_model_kwargs: Optional = None legacy = None **kwargs )参数
vocab_file(str)—包含实例化分词器所需词汇表的SentencePiece文件(通常具有*.spm*扩展名)。
eos_token(str,可选,默认为"</s>")—序列结束标记。
构建序列时使用特殊标记,这不是用于序列结束的标记。使用的标记是sep_token。
unk_token(str,可选,默认为"<unk>")—未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。
pad_token(str,可选,默认为"<pad>")—用于填充的标记,例如在批处理不同长度的序列时使用。
extra_ids(int,可选,默认为 100)—添加到词汇表中用作哨兵的额外 ID 数量。这些标记可通过调用 get_sentinel_tokens 方法访问为“id{%d}>”,其中”{%d}”是 0 到 extra_ids-1 之间的数字。这些标记可以通过调用 get_sentinel_token_ids 方法检索,额外的特殊标记(List[str],可选):分词器使用的其他特殊标记。
sp_model_kwargs(dict,可选)—将传递给SentencePieceProcessor.__init__()方法。SentencePiece 的 Python 包装器可用于设置:
enable_sampling:启用子词正则化。
nbest_size:unigram 的采样参数。对于 BPE-Dropout 无效。
nbest_size = {0,1}:不执行采样。
nbest_size > 1:从 nbest_size 结果中采样。
nbest_size < 0:假设 nbest_size 是无限的,并使用前向过滤和后向采样算法从所有假设(格)中采样。
alpha:unigram 采样的平滑参数,以及 BPE-dropout 的合并操作的丢弃概率。
legacy(bool,可选)—是否应使用分词器的legacy行为。Legacy 是在#24622 和#25224 合并之前,包括修复正确处理出现在特殊标记之后的标记的内容。一个简单的例子:
legacy=True:构建一个 T5 分词器。基于SentencePiece。
此分词器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]参数
token_ids_0(List[int])—要添加特殊标记的 ID 列表。
token_ids_1(List[int],可选)—用于序列对的可选第二个 ID 列表。
返回
List[int]
具有适当特殊标记的 input IDs 列表。
通过连接和添加特殊标记从序列或序列对构建用于序列分类任务的模型输入。序列的格式如下:
X </s>
A </s> B </s>
get_special_tokens_mask( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]参数
token_ids_0(List[int])— ID 列表。
token_ids_1(List[int],可选)— 可选的第二个 ID 列表,用于序列对。
already_has_special_tokens(bool,可选,默认为False)— 标记列表是否已经格式化为模型的特殊标记。
返回
List[int]
一个整数列表,范围为[0, 1]:1 表示特殊标记,0 表示序列标记。
从没有添加特殊标记的标记列表中检索序列 ID。当使用分词器的prepare_for_model方法添加特殊标记时,将调用此方法。
create_token_type_ids_from_sequences( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]参数
token_ids_0(List[int])— ID 列表。
token_ids_1(List[int],可选)— 可选的第二个 ID 列表,用于序列对。
返回
List[int]
零列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。T5 不使用标记类型 ID,因此返回一个零列表。
save_vocabulary( save_directory: str filename_prefix: Optional = None )class transformers.T5TokenizerFast( vocab_file = None tokenizer_file = None eos_token = '</s>' unk_token = '<unk>' pad_token = '<pad>' extra_ids = 100 additional_special_tokens = None **kwargs )参数
vocab_file(str)— 包含实例化分词器所需词汇的SentencePiece文件(通常具有*.spm*扩展名)。
eos_token(str,可选,默认为"</s>")— 序列结束标记。
在构建使用特殊标记的序列时,这不是用于序列结束的标记。使用的标记是sep_token。
unk_token(str,可选,默认为"<unk>")— 未知标记。词汇表中没有的标记无法转换为 ID,而是设置为此标记。
pad_token(str,可选,默认为"<pad>")— 用于填充的标记,例如在批处理不同长度的序列时使用。
extra_ids(int,可选,默认为 100)— 添加一些额外的 ID 到词汇表中,用作哨兵。这些标记可以作为“id{%d}>”访问,其中”{%d}”是 0 到 extra_ids-1 之间的数字。可以通过调用 get_sentinel_tokens 方法检索这些标记,通过调用 get_sentinel_token_ids 方法获取标记 ID
additional_special_tokens(List[str],可选)— 分词器使用的额外特殊标记。
构建一个“快速”T5 分词器(由 HuggingFace 的tokenizers库支持)。基于Unigram。
这个分词器继承自 PreTrainedTokenizerFast,其中包含大部分主要方法。用户应参考这个超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]参数
token_ids_0(List[int])— 将添加特殊标记的 ID 列表。
token_ids_1(List[int],可选)— 可选的第二个 ID 列表,用于序列对。
返回
List[int]
具有适当特殊标记的 input IDs 列表。
通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。序列的格式如下:
X </s>
A </s> B </s>
create_token_type_ids_from_sequences( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]参数
token_ids_0(List[int])- ID 列表。
token_ids_1(List[int],可选)- 序列对的第二个 ID 列表。
返回
List[int]
零的列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。T5 不使用 token type ids,因此返回一个零的列表。
PytorchHide Pytorch 内容
class transformers.T5Model( config: T5Config )参数
config(T5Config)- 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。裸的 T5 模型转换器输出原始隐藏状态,没有特定的头部。
T5 模型是由 Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li、Peter J. Liu 在探索统一文本到文本转换器的迁移学习极限中提出的。它是一个在文本到文本去噪生成设置中预训练的编码器解码器转换器。
这个模型继承自 PreTrainedModel。查看超类文档,了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
这个模型也是 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有内容。
forward( input_ids: Optional = None attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None head_mask: Optional = None decoder_head_mask: Optional = None cross_attn_head_mask: Optional = None encoder_outputs: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.Seq2SeqModelOutput or tuple(torch.FloatTensor)参数
input_ids(形状为(batch_size, sequence_length)的torch.LongTensor)- 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。查看 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()获取详细信息。
什么是 input IDs?
了解如何为预训练准备input_ids,请查看 T5 Training。
attention_mask(形状为(batch_size, sequence_length)的torch.FloatTensor,可选)- 避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]中:
masked的标记为 1。
masked的标记为 0。
什么是注意力掩码?
decoder_input_ids(形状为(batch_size, target_sequence_length)的torch.LongTensor,可选)- 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用了past_key_values,可以选择仅输入最后一个decoder_input_ids(参见past_key_values)。
要了解更多关于如何为预训练准备decoder_input_ids的信息,请查看 T5 Training。
decoder_attention_mask (torch.BoolTensor of shape (batch_size, target_sequence_length), optional) — 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 编码器中自注意力模块中选择性屏蔽头部的掩码。掩码值在 [0, 1] 中选择:
decoder_head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 解码器中自注意力模块中选择性屏蔽头部的掩码。掩码值在 [0, 1] 中选择:
cross_attn_head_mask (torch.Tensor of shape (num_heads,) or (num_layers, num_heads), optional) — 解码器中交叉注意力模块中选择性屏蔽头部的掩码。掩码值在 [0, 1] 中选择:
encoder_outputs (tuple(tuple(torch.FloatTensor), optional) — 元组包括(last_hidden_state,可选:hidden_states,可选:attentions)last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values (tuple(tuple(torch.FloatTensor)) of length config.n_layers with each tuple having 4 tensors of shape (batch_size, num_heads, sequence_length - 1, embed_size_per_head)) — 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用了past_key_values,用户可以选择仅输入最后一个decoder_input_ids(那些没有将其过去的键值状态提供给该模型的)的形状为(batch_size, 1),而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。
inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,可以直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将很有用。
decoder_inputs_embeds (torch.FloatTensor of shape (batch_size, target_sequence_length, hidden_size), optional) — 可选地,可以直接传递嵌入表示,而不是传递decoder_input_ids。如果使用了past_key_values,可以选择仅输入最后一个decoder_inputs_embeds(参见past_key_values)。如果您想要更多控制如何将decoder_input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将很有用。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache (bool, optional) — 如果设置为True,将返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
output_attentions(bool,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions。
output_hidden_states(bool,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。
return_dict(bool,可选)- 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_outputs.Seq2SeqModelOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Seq2SeqModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包括根据配置(T5Config)和输入的各种元素。
last_hidden_state(形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor)- 模型解码器最后一层的隐藏状态序列。
如果仅使用past_key_values,则输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。
past_key_values(tuple(tuple(torch.FloatTensor)),可选,当传递use_cache=True或config.use_cache=True时返回)- 长度为config.n_layers的元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。
decoder_hidden_states(tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)的每层的torch.FloatTensor元组。
解码器在每一层输出的隐藏状态以及可选的初始嵌入输出。
decoder_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)的每层的torch.FloatTensor元组。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
cross_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)的每层的torch.FloatTensor元组。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state(形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor,可选)- 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states(tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)的每层的torch.FloatTensor元组。
每层编码器的隐藏状态以及可选的初始嵌入输出。
encoder_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后使用,用于计算自注意力头中的加权平均值。
T5Model 的前向方法,覆盖了__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会负责运行前处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, T5Model
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = T5Model.from_pretrained("t5-small")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="pt"
... ).input_ids # Batch size 1
>>> decoder_input_ids = tokenizer("Studies show that", return_tensors="pt").input_ids # Batch size 1
>>> # preprocess: Prepend decoder_input_ids with start token which is pad token for T5Model.
>>> # This is not needed for torch's T5ForConditionalGeneration as it does this internally using labels arg.
>>> decoder_input_ids = model._shift_right(decoder_input_ids)
>>> # forward pass
>>> outputs = model(input_ids=input_ids, decoder_input_ids=decoder_input_ids)
>>> last_hidden_states = outputs.last_hidden_stateclass transformers.T5ForConditionalGeneration( config: T5Config )参数
config(T5Config)— 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。带有语言建模头部的 T5 模型。
T5 模型是由 Colin Raffel,Noam Shazeer,Adam Roberts,Katherine Lee,Sharan Narang,Michael Matena,Yanqi Zhou,Wei Li,Peter J. Liu 在探索统一文本到文本变换器的迁移学习极限中提出的。它是一个在文本到文本去噪生成设置中预训练的编码器解码器变换器。
这个模型继承自 PreTrainedModel。查看超类文档以了解库实现的通用方法(如下载或保存,调整输入嵌入大小,修剪头等)。
这个模型也是一个 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有事项。
forward( input_ids: Optional = None attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None head_mask: Optional = None decoder_head_mask: Optional = None cross_attn_head_mask: Optional = None encoder_outputs: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.Seq2SeqLMOutput or tuple(torch.FloatTensor)参数
input_ids(torch.LongTensor,形状为(batch_size, sequence_length))— 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。查看 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()以获取详细信息。
什么是输入 ID?
了解如何为预训练准备input_ids,请查看 T5 训练。
attention_mask(torch.FloatTensor,形状为(batch_size, sequence_length),可选)— 避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
masked的标记为 1,
masked的标记为 0。
什么是注意力掩码?
decoder_input_ids(torch.LongTensor,形状为(batch_size, target_sequence_length),可选)— 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用了past_key_values,则可能只需输入最后的decoder_input_ids(参见past_key_values)。
有关如何为预训练准备decoder_input_ids的更多信息,请查看 T5 Training。
decoder_attention_mask(形状为(batch_size, target_sequence_length)的torch.BoolTensor,可选)- 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.FloatTensor,可选)- 用于将编码器中自注意力模块的选定头部置零的掩码。掩码值在[0, 1]中选择:
masked,
masked。
decoder_head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.FloatTensor,可选)- 用于将解码器中自注意力模块的选定头部置零的掩码。掩码值在[0, 1]中选择:
masked,
masked。
cross_attn_head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.Tensor,可选)- 用于将解码器中交叉注意力模块的选定头部置零的掩码。掩码值在[0, 1]中选择:
masked,
masked。
encoder_outputs(元组(元组(torch.FloatTensor),可选)- 元组由(last_hidden_state,可选:hidden_states,可选:attentions)组成,last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values(长度为config.n_layers的元组(元组(torch.FloatTensor)),每个元组包含 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的张量)- 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用了past_key_values,用户可以选择仅输入最后的decoder_input_ids(这些未将其过去键值状态提供给此模型的 ID)的形状为(batch_size, 1)的张量,而不是所有形状为(batch_size, sequence_length)的decoder_input_ids。
inputs_embeds(torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选)- 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您希望更多地控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
decoder_inputs_embeds(torch.FloatTensor,形状为(batch_size, target_sequence_length, hidden_size),可选)- 可选地,您可以选择直接传递嵌入表示,而不是传递decoder_input_ids。如果使用了past_key_values,则可能只需输入最后的decoder_inputs_embeds(参见past_key_values)。如果您希望更多地控制如何将decoder_input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache(bool,可选)- 如果设置为True,将返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
output_attentions (bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions。
output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。
return_dict (bool,可选) — 是否返回 ModelOutput 而不是普通元组。
labels (torch.LongTensor of shape (batch_size,),可选) — 用于计算序列分类/回归损失的标签。索引应在[-100, 0, ..., config.vocab_size - 1]中。所有标签设置为-100都将被忽略(掩盖),损失仅计算标签在[0, ..., config.vocab_size]中的情况。
返回
transformers.modeling_outputs.Seq2SeqLMOutput 或tuple(torch.FloatTensor)
transformers.modeling_outputs.Seq2SeqLMOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包括各种元素,具体取决于配置(T5Config)和输入。
loss (torch.FloatTensor of shape (1,),可选,当提供labels时返回) — 语言建模损失。
logits (torch.FloatTensor of shape (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
past_key_values (tuple(tuple(torch.FloatTensor)),可选,当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(见past_key_values输入)。
decoder_hidden_states (tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的输出+每层的输出)。
每层解码器的隐藏状态加上初始嵌入输出。
decoder_attentions (tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的注意力权重,在注意力 SoftMax 之后,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 SoftMax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size),可选) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states(tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(一个用于嵌入的输出,如果模型有一个嵌入层,+ 一个用于每一层的输出)。
编码器在每一层输出的隐藏状态加上初始嵌入输出。
encoder_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
T5ForConditionalGeneration 的前向方法覆盖了__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, T5ForConditionalGeneration
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = T5ForConditionalGeneration.from_pretrained("t5-small")
>>> # training
>>> input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
>>> labels = tokenizer("<extra_id_0> cute dog <extra_id_1> the <extra_id_2>", return_tensors="pt").input_ids
>>> outputs = model(input_ids=input_ids, labels=labels)
>>> loss = outputs.loss
>>> logits = outputs.logits
>>> # inference
>>> input_ids = tokenizer(
... "summarize: studies have shown that owning a dog is good for you", return_tensors="pt"
... ).input_ids # Batch size 1
>>> outputs = model.generate(input_ids)
>>> print(tokenizer.decode(outputs[0], skip_special_tokens=True))
>>> # studies have shown that owning a dog is good for you.class transformers.T5EncoderModel( config: T5Config )参数
config(T5Config)— 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。裸的 T5 模型变换器输出编码器的原始隐藏状态,没有特定的头部在顶部。
T5 模型由 Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li、Peter J. Liu 在探索统一文本到文本转换的迁移学习极限中提出。它是一个在文本到文本去噪生成设置中预训练的编码器解码器变换器。
这个模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
这个模型也是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
forward( input_ids: Optional = None attention_mask: Optional = None head_mask: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutput or tuple(torch.FloatTensor)参数
input_ids(形状为(batch_size, sequence_length)的torch.LongTensor)— 输入序列标记在词汇表中的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。详细信息请参见 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
要了解有关如何为预训练准备input_ids的更多信息,请查看 T5 Training。
attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
masked的标记为 1,
masked的标记为 0。
什么是注意力掩码?
head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块中选择的头部失效的掩码。掩码值在[0, 1]中选择:
masked的头部为 1,
masked的头部为 0。
inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,可以直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions。
output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。
return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_outputs.BaseModelOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包含各种元素,取决于配置(T5Config)和输入。
last_hidden_state (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size)) — 模型最后一层的隐藏状态序列。
hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组。
模型在每一层的输出的隐藏状态加上可选的初始嵌入输出。
attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组。
在自注意力头中使用注意力 softmax 后的注意力权重,用于计算加权平均值。
T5EncoderModel 的前向方法,覆盖__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此之后调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, T5EncoderModel
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = T5EncoderModel.from_pretrained("t5-small")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="pt"
... ).input_ids # Batch size 1
>>> outputs = model(input_ids=input_ids)
>>> last_hidden_states = outputs.last_hidden_stateclass transformers.T5ForSequenceClassification( config: T5Config )参数
config(T5Config)- 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。T5 模型在顶部带有序列分类/头(汇聚输出的线性层),例如用于 GLUE 任务。
T5 模型由 Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li、Peter J. Liu 在探索统一文本到文本转换的迁移学习极限中提出。它是一个在文本到文本去噪生成设置中预训练的编码器解码器变压器。
此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般使用和行为相关的所有事项。
forward( input_ids: LongTensor = None attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None head_mask: Optional = None decoder_head_mask: Optional = None cross_attn_head_mask: Optional = None encoder_outputs: Optional = None inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.Seq2SeqSequenceClassifierOutput or tuple(torch.FloatTensor)参数
input_ids(形状为(batch_size, sequence_length)的torch.LongTensor)- 词汇表中输入序列标记的索引。T5 是一个带有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
索引可以使用 AutoTokenizer 获得。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是输入 ID?
要了解有关如何为预训练准备input_ids的更多信息,请查看 T5 训练。
attention_mask(形状为(batch_size, sequence_length)的torch.FloatTensor,可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]中:
什么是注意力掩码?
decoder_input_ids(形状为(batch_size, target_sequence_length)的torch.LongTensor,可选)- 词汇表中解码器输入序列标记的索引。
索引可以使用 AutoTokenizer 获得。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,则可选择仅输入最后的decoder_input_ids(请参阅past_key_values)。
要了解有关如何为预训练准备decoder_input_ids的更多信息,请查看 T5 训练。
decoder_attention_mask(形状为(batch_size, target_sequence_length)的torch.BoolTensor,可选)- 默认行为:生成一个忽略decoder_input_ids中填充标记的张量。因果掩码也将默认使用。
head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.FloatTensor,可选)- 用于在编码器中使自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]:
masked,
masked。
decoder_head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.FloatTensor,可选)- 用于在解码器中使自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]:
masked,
masked。
cross_attn_head_mask(形状为(num_heads,)或(num_layers, num_heads)的torch.Tensor,可选)- 用于在解码器中使交叉注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]:
masked,
masked。
encoder_outputs(tuple(tuple(torch.FloatTensor),可选)- 元组包括(last_hidden_state,可选:hidden_states,可选:attentions)last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values(长度为config.n_layers的tuple(tuple(torch.FloatTensor)),每个元组包含 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的张量)- 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用了past_key_values,用户可以选择仅输入最后的decoder_input_ids(这些未将其过去键值状态提供给此模型的输入)的形状为(batch_size, 1),而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。
inputs_embeds(形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor,可选)- 可选地,您可以直接传递嵌入表示,而不是传递input_ids。如果您希望更多地控制如何将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
decoder_inputs_embeds(形状为(batch_size, target_sequence_length, hidden_size)的torch.FloatTensor,可选)- 可选地,您可以直接传递嵌入表示,而不是传递decoder_input_ids。如果使用了past_key_values,可选地只需输入最后的decoder_inputs_embeds(参见past_key_values)。如果您希望更多地控制如何将decoder_input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache(bool,可选)- 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
output_attentions(bool,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions。
output_hidden_states(bool,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。
return_dict(bool,可选)- 是否返回 ModelOutput 而不是普通元组。
labels(形状为(batch_size,)的torch.LongTensor,可选)- 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]中。如果config.num_labels > 1,则计算分类损失(交叉熵)。
返回
transformers.modeling_outputs.Seq2SeqSequenceClassifierOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Seq2SeqSequenceClassifierOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False时)包含根据配置(T5Config)和输入的不同元素。
loss (torch.FloatTensor,形状为(1,),可选,当提供label时返回) — 分类(如果config.num_labels==1则为回归)损失。
logits (torch.FloatTensor,形状为(batch_size, config.num_labels)) — SoftMax 之前的分类(如果config.num_labels==1则为回归)得分。
past_key_values (tuple(tuple(torch.FloatTensor)),可选,当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
decoder_hidden_states (tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(如果模型有嵌入层,则为嵌入层的输出加上每层的输出)。
解码器在每一层的输出隐藏状态加上初始嵌入输出。
decoder_attentions (tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states (tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(如果模型有嵌入层,则为嵌入层的输出加上每层的输出)。
编码器在每一层的输出隐藏状态加上初始嵌入输出。
encoder_attentions (tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
T5ForSequenceClassification 的前向方法,覆盖了__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用 Module 实例,而不是在此处调用,因为前者会负责运行预处理和后处理步骤,而后者会默默地忽略它们。
class transformers.T5ForQuestionAnswering( config: T5Config )参数
config (T5Config) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained() 方法以加载模型权重。T5 模型在顶部具有用于提取式问答任务的跨度分类头,如 SQuAD(在隐藏状态输出的顶部进行线性层计算 span start logits 和 span end logits)。
T5 模型在 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer 一文中由 Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, Peter J. Liu 提出。它是一个在文本到文本去噪生成设置中预训练的编码器解码器变换器。
此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型也是 PyTorch torch.nn.Module 的子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
forward( input_ids: Optional = None attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None head_mask: Optional = None decoder_head_mask: Optional = None cross_attn_head_mask: Optional = None encoder_outputs: Optional = None start_positions: Optional = None end_positions: Optional = None inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.Seq2SeqQuestionAnsweringModelOutput or tuple(torch.FloatTensor)参数
input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
什么是输入 ID?
要了解如何为预训练准备 input_ids,请查看 T5 Training。
attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1] 之间:
1,
0。
什么是注意力掩码?
decoder_input_ids (torch.LongTensor of shape (batch_size, target_sequence_length), optional) — 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,可以选择仅输入最后一个decoder_input_ids(参见past_key_values)。
要了解有关如何为预训练准备decoder_input_ids的更多信息,请查看 T5 Training。
decoder_attention_mask (torch.BoolTensor,形状为(batch_size, target_sequence_length),optional) — 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
head_mask (torch.FloatTensor,形状为(num_heads,)或(num_layers, num_heads),optional) — 用于使编码器中的自注意力模块中的选定头部失效的掩码。选择的掩码值在[0, 1]中:
masked。
masked。
decoder_head_mask (torch.FloatTensor,形状为(num_heads,)或(num_layers, num_heads),optional) — 用于使解码器中的自注意力模块中的选定头部失效的掩码。选择的掩码值在[0, 1]中:
masked。
masked。
cross_attn_head_mask (torch.Tensor,形状为(num_heads,)或(num_layers, num_heads),optional) — 用于使解码器中的交叉注意力模块中的选定头部失效的掩码。选择的掩码值在[0, 1]中:
masked。
masked。
encoder_outputs (tuple(tuple(torch.FloatTensor),optional) — 元组包括(last_hidden_state,可选:hidden_states,可选:attentions)last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values (tuple(tuple(torch.FloatTensor)),长度为config.n_layers,每个元组包含形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的 4 个张量) — 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用past_key_values,用户可以选择仅输入最后一个decoder_input_ids(那些没有将其过去的键值状态提供给此模型的)的形状为(batch_size, 1),而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。
inputs_embeds (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),optional) — 可选地,可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
decoder_inputs_embeds (torch.FloatTensor,形状为(batch_size, target_sequence_length, hidden_size),optional) — 可选地,可以直接传递嵌入表示,而不是传递decoder_input_ids。如果使用past_key_values,可以选择仅输入最后一个decoder_inputs_embeds(参见past_key_values)。如果您想要更多控制如何将decoder_input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache (bool, optional) — 如果设置为True,则返回past_key_values键值状态,可以用于加速解码(参见past_key_values)。
output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions。
output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的hidden_states。
return_dict(bool,可选)- 是否返回一个 ModelOutput 而不是一个普通元组。
start_positions(形状为(batch_size,)的torch.LongTensor,可选)- 用于计算标记跨度的起始位置(索引)的标签。位置被夹在序列的长度(sequence_length)内。序列外的位置不会被考虑在内以计算损失。
end_positions(形状为(batch_size,)的torch.LongTensor,可选)- 用于计算标记跨度的结束位置(索引)的标签。位置被夹在序列的长度(sequence_length)内。序列外的位置不会被考虑在内以计算损失。
返回
transformers.modeling_outputs.Seq2SeqQuestionAnsweringModelOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Seq2SeqQuestionAnsweringModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包含根据配置(T5Config)和输入而异的各种元素。
loss(形状为(1,)的torch.FloatTensor,可选,当提供labels时返回)- 总跨度提取损失是起始和结束位置的交叉熵之和。
start_logits(形状为(batch_size, sequence_length)的torch.FloatTensor)- 跨度起始得分(SoftMax 之前)。
end_logits(形状为(batch_size, sequence_length)的torch.FloatTensor)- 跨度结束得分(SoftMax 之前)。
past_key_values(tuple(tuple(torch.FloatTensor)),可选,当传递use_cache=True或config.use_cache=True时返回)- 长度为config.n_layers的tuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
decoder_hidden_states(tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
解码器在每一层输出的隐藏状态加上初始嵌入输出。
decoder_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
cross_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state(形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor,可选)— 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states(tuple(torch.FloatTensor),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(如果模型有嵌入层的输出,+ 每层的输出)。
每层编码器的隐藏状态加上初始嵌入输出。
encoder_attentions(tuple(torch.FloatTensor),可选,当传递output_attentions=True或config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的torch.FloatTensor元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
T5ForQuestionAnswering 的前向方法,覆盖了__call__特殊方法。
尽管前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
TensorFlow 隐藏 TensorFlow 内容
class transformers.TFT5Model( config *inputs **kwargs )参数
config(T5Config)— 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。裸 T5 模型转换器输出原始隐藏状态,没有特定的头部。
T5 模型是由 Colin Raffel,Noam Shazeer,Adam Roberts,Katherine Lee,Sharan Narang,Michael Matena,Yanqi Zhou,Wei Li,Peter J. Liu 在探索统一文本到文本转换器的迁移学习极限中提出的。它是一个在文本到文本去噪生成设置中预训练的编码器解码器转换器。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档,了解与一般用法和行为相关的所有事项。
transformers中的 TensorFlow 模型和层接受两种格式的输入:
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用model.fit()等方法时,应该可以“正常工作” - 只需以model.fit()支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法之外使用第二种格式,例如在使用 KerasFunctional API 创建自己的层或模型时,有三种可能性可以用来收集第一个位置参数中的所有输入张量:
input_ids的单个张量,没有其他内容:model(input_ids)
model([input_ids, attention_mask])或model([input_ids, attention_mask, token_type_ids])
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,您无需担心任何这些内容,因为您可以像对待其他 Python 函数一样传递输入!
call( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None decoder_input_ids: np.ndarray | tf.Tensor | None = None decoder_attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None decoder_head_mask: np.ndarray | tf.Tensor | None = None encoder_outputs: np.ndarray | tf.Tensor | None = None past_key_values: Optional[Tuple[Tuple[Union[np.ndarray, tf.Tensor]]]] = None inputs_embeds: np.ndarray | tf.Tensor | None = None decoder_inputs_embeds: np.ndarray | tf.Tensor | None = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFSeq2SeqModelOutput or tuple(tf.Tensor)参数
input_ids(形状为(batch_size, sequence_length)的tf.Tensor)- 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧或左侧填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()。
什么是输入 ID?
了解如何为预训练准备inputs,请查看 T5 Training。
decoder_input_ids(形状为(batch_size, target_sequence_length)的tf.Tensor,可选)- 用于序列到序列训练。T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,则可能只需输入最后的decoder_input_ids(请参阅past_key_values)。
了解如何为预训练准备decoder_input_ids,请查看 T5 Training。
attention_mask(形状为(batch_size, sequence_length)的tf.Tensor,可选)- 用于避免在填充标记索引上执行注意力。选择的掩码值在[0, 1]中:
什么是注意力掩码?
decoder_attention_mask(形状为(batch_size, target_sequence_length)的tf.Tensor,可选)- 默认行为:生成一个忽略decoder_input_ids中填充标记的张量。因果掩码也将默认使用。
head_mask(形状为(num_heads,)或(num_layers, num_heads)的tf.Tensor,可选)- 用于在编码器中使自注意力模块中选择的头部失效的掩码。选择的掩码值在[0, 1]中:
decoder_head_mask(形状为(num_heads,)或(num_layers, num_heads)的tf.Tensor,可选)- 用于在解码器中使自注意力模块中选择的头部失效的掩码。选择的掩码值在[0, 1]中:
encoder_outputs(tuple(tuple(tf.FloatTensor),可选)- 元组包括(last_hidden_state,可选:hidden_states,可选:attentions)last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层的隐藏状态序列。用于解码器的交叉注意力。
past_key_values(长度为config.n_layers的tuple(tuple(tf.Tensor)),每个元组包含 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的张量)- 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用past_key_values,用户可以选择仅输入形状为(batch_size, 1)的最后一个decoder_input_ids(那些没有将它们的过去键值状态提供给该模型的)而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。
inputs_embeds(形状为(batch_size, sequence_length, hidden_size)的tf.Tensor,可选) — 可选地,您可以选择直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
decoder_inputs_embeds(形状为(batch_size, target_sequence_length, hidden_size)的tf.Tensor,可选) — 可选地,您可以选择直接传递嵌入表示而不是传递decoder_input_ids。如果使用past_key_values,则只需输入最后一个decoder_inputs_embeds(参见past_key_values)。如果您想要更多控制如何将decoder_input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
如果decoder_input_ids和decoder_inputs_embeds都未设置,则decoder_inputs_embeds取inputs_embeds的值。
use_cache(bool,可选,默认为True) — 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(请参见past_key_values)。
output_attentions(bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions。此参数仅可在急切模式下使用,在图模式下将使用配置中的值。
output_hidden_states(bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。此参数仅可在急切模式下使用,在图模式下将使用配置中的值。
return_dict(bool,可选) — 是否返回一个 ModelOutput 而不是一个普通元组。此参数可在急切模式下使用,在图模式下该值将始终设置为 True。
training(bool,可选,默认为False) — 是否在训练模式下使用模型(一些模块如 dropout 模块在训练和评估之间有不同的行为)。
返回
transformers.modeling_tf_outputs.TFSeq2SeqModelOutput 或tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFSeq2SeqModelOutput 或一个tf.Tensor元组(如果传递return_dict=False或当config.return_dict=False时)包括根据配置(T5Config)和输入的各种元素。
last_hidden_state(形状为(batch_size, sequence_length, hidden_size)的tf.Tensor) — 模型解码器最后一层的隐藏状态序列。
如果仅使用past_key_values,则输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。
past_key_values(List[tf.Tensor],可选,当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tf.Tensor列表,每个张量的形状为(2, batch_size, num_heads, sequence_length, embed_size_per_head)。
包含解码器的预计算隐藏状态(注意力块中的键和值),可用于加速顺序解码(请参见past_key_values输入)。
decoder_hidden_states (tuple(tf.Tensor), 可选, 当传递 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size) 的 tf.Tensor 元组(一个用于嵌入输出,一个用于每一层的输出)。
解码器在每一层输出的隐藏状态加上初始嵌入输出。
decoder_attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=True 或 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length) 的 tf.Tensor 元组(每层一个)。
解码器的注意力权重,在注意力 softmax 之后使用,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=True 或 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length) 的 tf.Tensor 元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后使用,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (tf.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states (tuple(tf.Tensor), 可选, 当传递 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size) 的 tf.Tensor 元组(一个用于嵌入输出,一个用于每一层的输出)。
编码器在每一层输出的隐藏状态加上初始嵌入输出。
encoder_attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=True 或 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length) 的 tf.Tensor 元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后使用,用于计算自注意力头中的加权平均值。
TFT5Model 的前向方法,覆盖了 __call__ 特殊方法。
虽然前向传递的方法需要在此函数内定义,但应该在此之后调用 Module 实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, TFT5Model
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = TFT5Model.from_pretrained("t5-small")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="tf"
... ).input_ids # Batch size 1
>>> decoder_input_ids = tokenizer("Studies show that", return_tensors="tf").input_ids # Batch size 1
>>> # preprocess: Prepend decoder_input_ids with start token which is pad token for T5Model.
>>> # This is not needed for torch's T5ForConditionalGeneration as it does this internally using labels arg.
>>> decoder_input_ids = model._shift_right(decoder_input_ids)
>>> # forward pass
>>> outputs = model(input_ids, decoder_input_ids=decoder_input_ids)
>>> last_hidden_states = outputs.last_hidden_statetransformers.TFT5ForConditionalGeneration 类
( config *inputs **kwargs )参数
config (T5Config) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。带有顶部 语言建模 头的 T5 模型。
T5 模型由 Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, Peter J. Liu 在 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer 中提出。它是一个在文本到文本去噪生成设置中预训练的编码器解码器 transformer。
该模型继承自 TFPreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取有关一般用法和行为的所有相关信息。
transformers中的 TensorFlow 模型和层接受两种格式的输入:
支持第二种格式的原因是,Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于有了这种支持,当使用model.fit()等方法时,应该可以“正常工作” - 只需以model.fit()支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法之外使用第二种格式,比如在使用 Keras 的Functional API 创建自己的层或模型时,有三种可能性可以用来收集所有输入张量放在第一个位置参数中:
input_ids的单个张量,没有其他内容:model(input_ids)
model([input_ids, attention_mask])或model([input_ids, attention_mask, token_type_ids])
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,在使用子类化创建模型和层时,您无需担心任何问题,因为您可以像对待任何其他 Python 函数一样传递输入!
call( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None decoder_input_ids: np.ndarray | tf.Tensor | None = None decoder_attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None decoder_head_mask: np.ndarray | tf.Tensor | None = None encoder_outputs: np.ndarray | tf.Tensor | None = None past_key_values: Optional[Tuple[Tuple[Union[np.ndarray, tf.Tensor]]]] = None inputs_embeds: np.ndarray | tf.Tensor | None = None decoder_inputs_embeds: np.ndarray | tf.Tensor | None = None labels: np.ndarray | tf.Tensor | None = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFSeq2SeqLMOutput or tuple(tf.Tensor)参数
input_ids(形状为(batch_size, sequence_length)的tf.Tensor) - 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧或左侧填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()。
什么是输入 ID?
要了解有关如何为预训练准备inputs的更多信息,请查看 T5 Training。
decoder_input_ids(形状为(batch_size, target_sequence_length)的tf.Tensor,可选) - 用于序列到序列训练。T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用了past_key_values,则只需选择最后的decoder_input_ids输入(参见past_key_values)。
要了解有关如何为预训练准备decoder_input_ids的更多信息,请查看 T5 Training。
attention_mask(形状为(batch_size, sequence_length)的tf.Tensor,可选) - 用于避免在填充标记索引上执行注意力。掩码值在[0, 1]中选择:
什么是注意力掩码?
decoder_attention_mask(形状为(batch_size, target_sequence_length)的tf.Tensor,可选) - 默认行为:生成一个忽略decoder_input_ids中填充标记的张量。因果掩码也将默认使用。
head_mask(形状为(num_heads,)或(num_layers, num_heads)的tf.Tensor,可选) - 用于在编码器的自注意力模块中使选定头部失效的掩码。掩码值在[0, 1]中选择:
decoder_head_mask (tf.Tensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于将解码器中自注意力模块的选定头部置零的掩码。掩码值选定在 [0, 1] 范围内:
encoder_outputs (tuple(tuple(tf.FloatTensor), optional) — 元组包含 (last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values (tuple(tuple(tf.Tensor)),长度为 config.n_layers,每个元组有 4 个形状为 (batch_size, num_heads, sequence_length - 1, embed_size_per_head) 的张量) — 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用了 past_key_values,用户可以选择仅输入最后一个形状为 (batch_size, 1) 的 decoder_input_ids(这些输入没有将它们的过去键值状态提供给此模型)而不是形状为 (batch_size, sequence_length) 的所有 decoder_input_ids。
inputs_embeds (tf.Tensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以直接传递嵌入表示,而不是传递 input_ids。如果您想要更多控制权,以便将 input_ids 索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
decoder_inputs_embeds (tf.Tensor of shape (batch_size, target_sequence_length, hidden_size), optional) — 可选地,您可以直接传递嵌入表示,而不是传递 decoder_input_ids。如果使用了 past_key_values,则只需输入最后一个 decoder_inputs_embeds(参见 past_key_values)。如果您想要更多控制权,以便将 decoder_input_ids 索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
如果 decoder_input_ids 和 decoder_inputs_embeds 都未设置,则 decoder_inputs_embeds 取 inputs_embeds 的值。
use_cache (bool, optional, 默认为 True) — 如果设置为 True,将返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的 attentions。此参数仅可在急切模式下使用,在图模式下,将使用配置中的值。
output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的 hidden_states。此参数仅可在急切模式下使用,在图模式下,将使用配置中的值。
return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。此参数可在急切模式下使用,在图模式下,该值将始终设置为 True。
training (bool, optional, 默认为 False) — 是否在训练模式下使用模型(某些模块,如丢弃模块,在训练和评估之间具有不同的行为)。
labels (tf.Tensor of shape (batch_size, sequence_length), optional) — 用于计算交叉熵分类损失的标签。索引应在 [0, ..., config.vocab_size - 1] 范围内。
返回
transformers.modeling_tf_outputs.TFSeq2SeqLMOutput 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFSeq2SeqLMOutput 或一个tf.Tensor元组(如果传递return_dict=False或config.return_dict=False)包含根据配置(T5Config)和输入的各种元素。
loss (tf.Tensor of shape (n,), optional, 当提供labels时返回,其中 n 是未屏蔽标签的数量) — 语言建模损失。
logits (tf.Tensor of shape (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
past_key_values (List[tf.Tensor], optional, 当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tf.Tensor列表,每个张量的形状为(2, batch_size, num_heads, sequence_length, embed_size_per_head)。
包含解码器的预计算隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
decoder_hidden_states (tuple(tf.Tensor), optional, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的tf.Tensor元组(一个用于嵌入输出,一个用于每一层的输出)。
解码器每一层的隐藏状态以及初始嵌入输出。
decoder_attentions (tuple(tf.Tensor), optional, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的tf.Tensor元组(每层一个)。
解码器的注意力权重,在注意力 SoftMax 之后,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(tf.Tensor), optional, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的tf.Tensor元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 SoftMax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (tf.Tensor of shape (batch_size, sequence_length, hidden_size), optional) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states (tuple(tf.Tensor), optional, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的tf.Tensor元组(一个用于嵌入输出,一个用于每一层的输出)。
编码器每一层的隐藏状态以及初始嵌入输出。
encoder_attentions (tuple(tf.Tensor), optional, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的tf.Tensor元组(每层一个)。
编码器的注意力权重,在注意力 SoftMax 之后,用于计算自注意力头中的加权平均值。
TFT5ForConditionalGeneration 的前向方法,覆盖了__call__特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, TFT5ForConditionalGeneration
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = TFT5ForConditionalGeneration.from_pretrained("t5-small")
>>> # training
>>> inputs = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="tf").input_ids
>>> labels = tokenizer("<extra_id_0> cute dog <extra_id_1> the <extra_id_2>", return_tensors="tf").input_ids
>>> outputs = model(inputs, labels=labels)
>>> loss = outputs.loss
>>> logits = outputs.logits
>>> # inference
>>> inputs = tokenizer(
... "summarize: studies have shown that owning a dog is good for you", return_tensors="tf"
... ).input_ids # Batch size 1
>>> outputs = model.generate(inputs)
>>> print(tokenizer.decode(outputs[0], skip_special_tokens=True))
>>> # studies have shown that owning a dog is good for youclass transformers.TFT5EncoderModel( config *inputs **kwargs )参数
config(T5Config) - 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。裸 T5 模型变换器输出编码器的原始隐藏状态,而没有特定的头部。
T5 模型是由 Colin Raffel,Noam Shazeer,Adam Roberts,Katherine Lee,Sharan Narang,Michael Matena,Yanqi Zhou,Wei Li,Peter J. Liu 在探索具有统一文本到文本变换器的迁移学习极限中提出的。它是一个在文本到文本去噪生成设置中进行预训练的编码器解码器变换器。
此模型继承自 TFPreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有内容。
transformers中的 TensorFlow 模型和层接受两种格式的输入:
第二种格式得到支持的原因是,当将输入传递给模型和层时,Keras 方法更喜欢这种格式。由于这种支持,在使用诸如model.fit()之类的方法时,对您来说应该“只需工作” - 只需以model.fit()支持的任何格式传递您的输入和标签!然而,如果您想在 Keras 方法之外使用第二种格式,比如在使用 KerasFunctional API 创建自己的层或模型时,有三种可能性可以用来收集所有输入张量在第一个位置参数中:
input_ids的单个张量,没有其他内容:model(input_ids)
model([input_ids, attention_mask])或model([input_ids, attention_mask, token_type_ids])
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,您不需要担心这些问题,因为您可以像将输入传递给任何其他 Python 函数一样传递输入!
call( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFBaseModelOutput or tuple(tf.Tensor)参数
inputs(形状为(batch_size, sequence_length)的tf.Tensor) - 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧或左侧填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()。
要了解有关如何为预训练准备inputs的更多信息,请查看 T5 Training。
attention_mask (tf.Tensor,形状为(batch_size, sequence_length),optional) — 避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
masked的标记,
masked的标记。
什么是注意力掩码?
inputs_embeds (tf.Tensor,形状为(batch_size, sequence_length, hidden_size),optional) — 可选地,您可以选择直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
head_mask (tf.Tensor,形状为(num_heads,)或(num_layers, num_heads),optional) — 用于使自注意力模块中的选定头部失效的掩码。掩码值在[0, 1]中选择:
masked,
masked。
output_attentions (bool,optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions。
output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。
return_dict (bool, optional) — 是否返回一个 ModelOutput 而不是一个普通的元组。
training (bool,optional,默认为False) — 是否在训练模式下使用模型(一些模块,如 dropout 模块,在训练和评估之间具有不同的行为)。
返回
transformers.modeling_tf_outputs.TFBaseModelOutput 或tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFBaseModelOutput 或一个tf.Tensor元组(如果传递return_dict=False或config.return_dict=False,则包括各种元素,具体取决于配置(T5Config)和输入。
last_hidden_state (tf.Tensor,形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层的隐藏状态序列。
hidden_states (tuple(tf.FloatTensor),optional,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的tf.Tensor元组(一个用于嵌入的输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态加上初始嵌入输出。
attentions (tuple(tf.Tensor),optional,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的tf.Tensor元组(每层一个)。
在自注意力头中用于计算加权平均值的注意力 softmax 之后的注意力权重。
TFT5EncoderModel 的前向方法,覆盖__call__特殊方法。
虽然前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, TFT5EncoderModel
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = TFT5EncoderModel.from_pretrained("t5-small")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="tf"
... ).input_ids # Batch size 1
>>> outputs = model(input_ids)JAXHide JAX 内容
class transformers.FlaxT5Model( config: T5Config input_shape: Tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True gradient_checkpointing: bool = False **kwargs )__call__( input_ids: Array attention_mask: Optional = None decoder_input_ids: Array = None decoder_attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None ) → export const metadata = 'undefined';transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput or tuple(torch.FloatTensor)参数
input_ids (jnp.ndarray of shape (batch_size, sequence_length)) — 输入序列标记在词汇表中的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧填充输入。
索引可以使用 AutoTokenizer 获得。详细信息请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
输入 ID 是什么?
要了解如何为预训练准备input_ids,请查看 T5 训练。
attention_mask (jnp.ndarray of shape (batch_size, sequence_length), optional) — 避免在填充标记索引上执行注意力的掩码。选择的掩码值为[0, 1]:
注意力掩码是什么?
decoder_input_ids (jnp.ndarray of shape (batch_size, target_sequence_length), optional) — 解码器输入序列标记在词汇表中的索引。
索引可以使用 AutoTokenizer 获得。详细信息请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
解码器输入 ID 是什么?
T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用了past_key_values,可以选择仅输入最后一个decoder_input_ids(参见past_key_values)。
要了解如何为预训练准备decoder_input_ids,请查看 T5 训练。
decoder_attention_mask (jnp.ndarray of shape (batch_size, target_sequence_length), optional) — 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
encoder_outputs (tuple(tuple(jnp.ndarray), optional) — 元组包括(last_hidden_state,可选:hidden_states,可选:attentions)last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values (tuple(tuple(jnp.ndarray)),长度为config.n_layers,每个元组有 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的张量) — 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用了past_key_values,用户可以选择仅输入最后一个形状为(batch_size, 1)的decoder_input_ids(这些没有将它们的过去键值状态提供给此模型)而不是所有形状为(batch_size, sequence_length)的decoder_input_ids。
返回
transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或一个torch.FloatTensor元组(如果传递了return_dict=False或config.return_dict=False时)包含根据配置(T5Config)和输入而异的各种元素。
logits (jnp.ndarray,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
past_key_values (tuple(tuple(jnp.ndarray)), 可选, 当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tuple(jnp.ndarray)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可以用于加速顺序解码(参见past_key_values输入)。
decoder_hidden_states (tuple(jnp.ndarray), 可选, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入输出,一个用于每一层的输出)。
解码器每一层输出的隐藏状态以及初始嵌入输出。
decoder_attentions (tuple(jnp.ndarray), 可选, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(jnp.ndarray), 可选, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (jnp.ndarray,形状为(batch_size, sequence_length, hidden_size),可选) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states (tuple(jnp.ndarray), 可选, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入输出,一个用于每一层的输出)。
编码器每一层输出的隐藏状态以及初始嵌入输出。
encoder_attentions (tuple(jnp.ndarray), 可选, 当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
FlaxT5PreTrainedModel的前向方法覆盖了__call__特殊方法。
虽然前向传递的步骤需要在这个函数内定义,但应该在之后调用Module实例,而不是这个函数,因为前者会处理前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, FlaxT5Model
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5Model.from_pretrained("t5-small")
>>> input_ids = tokenizer(
... "Studies have been shown that owning a dog is good for you", return_tensors="np"
... ).input_ids
>>> decoder_input_ids = tokenizer("Studies show that", return_tensors="np").input_ids
>>> # preprocess: Prepend decoder_input_ids with start token which is pad token for T5Model.
>>> # This is not needed for torch's T5ForConditionalGeneration as it does this internally using labels arg.
>>> decoder_input_ids = model._shift_right(decoder_input_ids)
>>> # forward pass
>>> outputs = model(input_ids=input_ids, decoder_input_ids=decoder_input_ids)
>>> last_hidden_states = outputs.last_hidden_stateencode( input_ids: Array attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None ) → export const metadata = 'undefined';transformers.modeling_flax_outputs.FlaxBaseModelOutput or tuple(torch.FloatTensor)参数
input_ids (jnp.ndarray,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
关于如何为预训练准备input_ids,请查看 T5 训练。
attention_mask (jnp.ndarray,形状为(batch_size, sequence_length),可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选在[0, 1]之间:
masked的标记为 1。
masked的标记为 0。
什么是注意力掩码?
output_attentions (bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions。
output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。
return_dict (bool,可选) — 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_flax_outputs.FlaxBaseModelOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxBaseModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包含根据配置(<class 'transformers.models.t5.configuration_t5.T5Config'>)和输入的不同元素。
last_hidden_state (jnp.ndarray,形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。
hidden_states (tuple(jnp.ndarray),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态加上初始嵌入输出。
attentions (tuple(jnp.ndarray), 可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
示例:
>>> from transformers import AutoTokenizer, FlaxT5ForConditionalGeneration
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5ForConditionalGeneration.from_pretrained("t5-small")
>>> text = "My friends are cool but they eat too many carbs."
>>> inputs = tokenizer(text, return_tensors="np")
>>> encoder_outputs = model.encode(**inputs)decode( decoder_input_ids encoder_outputs encoder_attention_mask: Optional = None decoder_attention_mask: Optional = None past_key_values: dict = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None ) → export const metadata = 'undefined';transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPastAndCrossAttentions or tuple(torch.FloatTensor)参数
decoder_input_ids (jnp.ndarray,形状为(batch_size, target_sequence_length)) — 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
在训练时,应提供decoder_input_ids。
encoder_outputs (tuple(tuple(jnp.ndarray)) — 元组包含 (last_hidden_state, optional: hidden_states, optional: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size),optional) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
encoder_attention_mask (jnp.ndarray of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1] 之间:
masked 的标记,值为 1。
masked 的标记,值为 0。
什么是注意力掩码?
decoder_attention_mask (jnp.ndarray of shape (batch_size, target_sequence_length), optional) — 默认行为:生成一个张量,忽略 decoder_input_ids 中的填充标记。因果掩码也将默认使用。
如果要更改填充行为,应根据需要进行修改。有关默认策略的更多信息,请参见 论文 中的图表 1。
past_key_values (Dict[str, np.ndarray], optional, 由 init_cache 返回或传递先前的 past_key_values 时返回) — 可用于快速自回归解码的预计算隐藏状态(注意力块中的键和值)的字典。预计算的键和值隐藏状态的形状为 [batch_size, max_length]。
output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的 attentions。
output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的 hidden_states。
return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPastAndCrossAttentions 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或 config.return_dict=False)包含根据配置 (<class 'transformers.models.t5.configuration_t5.T5Config'>) 和输入而异的各种元素。
last_hidden_state (jnp.ndarray of shape (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。
如果仅使用 past_key_values,则输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。
past_key_values (tuple(tuple(jnp.ndarray)), optional, 当传递 use_cache=True 或 config.use_cache=True 时返回) — 长度为 config.n_layers 的 tuple(jnp.ndarray) 元组,每个元组有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量,如果 config.is_encoder_decoder=True,还有 2 个额外的形状为 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head) 的张量。
包含预先计算的隐藏状态(自注意力块中的键和值以及在交叉注意力块中,如果 config.is_encoder_decoder=True,还包括)可用于加速顺序解码的(请参见 past_key_values 输入)。
hidden_states (tuple(jnp.ndarray), optional, 当传递 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size) 的 jnp.ndarray 元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
模型在每一层的输出的隐藏状态以及初始嵌入输出。
attentions (tuple(jnp.ndarray),可选,当传递output_attentions=True或当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
在注意力 softmax 之后使用的注意力权重,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(jnp.ndarray),可选,当传递output_attentions=True和config.add_cross_attention=True或当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后使用,用于计算交叉注意力头中的加权平均值。
示例:
>>> from transformers import AutoTokenizer, FlaxT5ForConditionalGeneration
>>> import jax.numpy as jnp
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5ForConditionalGeneration.from_pretrained("t5-small")
>>> text = "My friends are cool but they eat too many carbs."
>>> inputs = tokenizer(text, return_tensors="np")
>>> encoder_outputs = model.encode(**inputs)
>>> decoder_start_token_id = model.config.decoder_start_token_id
>>> decoder_input_ids = jnp.ones((inputs.input_ids.shape[0], 1), dtype="i4") * decoder_start_token_id
>>> outputs = model.decode(decoder_input_ids, encoder_outputs)
>>> logits = outputs.logitsclass transformers.FlaxT5ForConditionalGeneration( config: T5Config input_shape: Tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True gradient_checkpointing: bool = False **kwargs )__call__( input_ids: Array attention_mask: Optional = None decoder_input_ids: Array = None decoder_attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None ) → export const metadata = 'undefined';transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput or tuple(torch.FloatTensor)参数
input_ids (jnp.ndarray,形状为(batch_size, sequence_length)) — 输入序列标记在词汇表中的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都对输入进行填充。
可以使用 AutoTokenizer 获取索引。查看 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()获取详细信息。
什么是输入 ID?
要了解有关如何为预训练准备input_ids的更多信息,请查看 T5 训练。
attention_mask (jnp.ndarray,形状为(batch_size, sequence_length),可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
masked的标记。
masked的标记。
什么是注意力掩码?
decoder_input_ids (jnp.ndarray,形状为(batch_size, target_sequence_length),可选) — 解码器输入序列标记在词汇表中的索引。
可以使用 AutoTokenizer 获取索引。查看 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()获取详细信息。
什么是解码器输入 ID?
T5 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,则可以选择仅输入最后的decoder_input_ids(参见past_key_values)。
要了解有关如何为预训练准备decoder_input_ids的更多信息,请查看 T5 训练。
decoder_attention_mask (jnp.ndarray,形状为(batch_size, target_sequence_length),可选) — 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
encoder_outputs (tuple(tuple(jnp.ndarray),可选) — 元组包括(last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state的形状为(batch_size, sequence_length, hidden_size),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
past_key_values (tuple(tuple(jnp.ndarray)),长度为config.n_layers,每个元组有 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的张量) — 包含注意力块的预先计算的键和值隐藏状态。可用于加速解码。
如果使用past_key_values,用户可以选择只输入形状为(batch_size, 1)的最后一个decoder_input_ids(那些没有将其过去键值状态提供给此模型的)而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。
返回
transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或一个torch.FloatTensor元组(如果传递return_dict=False或config.return_dict=False)包含根据配置(T5Config)和输入的不同元素。
logits (jnp.ndarray,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
past_key_values (tuple(tuple(jnp.ndarray)), optional, 当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的tuple(jnp.ndarray)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。
decoder_hidden_states (tuple(jnp.ndarray), optional, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
解码器在每一层的输出的隐藏状态加上初始嵌入输出。
decoder_attentions (tuple(jnp.ndarray),optional,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
cross_attentions (tuple(jnp.ndarray),optional,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
encoder_last_hidden_state (jnp.ndarray,形状为(batch_size, sequence_length, hidden_size),optional) — 模型编码器最后一层的隐藏状态序列。
encoder_hidden_states (tuple(jnp.ndarray),optional,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
编码器在每一层的输出的隐藏状态加上初始嵌入输出。
encoder_attentions(tuple(jnp.ndarray),可选,当传递output_attentions=True或当config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
FlaxT5PreTrainedModel的前向方法,覆盖了__call__特殊方法。
尽管前向传递的步骤需要在此函数内定义,但应该在之后调用Module实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, FlaxT5ForConditionalGeneration
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5ForConditionalGeneration.from_pretrained("t5-small")
>>> ARTICLE_TO_SUMMARIZE = "summarize: My friends are cool but they eat too many carbs."
>>> inputs = tokenizer([ARTICLE_TO_SUMMARIZE], return_tensors="np")
>>> # Generate Summary
>>> summary_ids = model.generate(inputs["input_ids"]).sequences
>>> print(tokenizer.decode(summary_ids[0], skip_special_tokens=True, clean_up_tokenization_spaces=False))encode( input_ids: Array attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None ) → export const metadata = 'undefined';transformers.modeling_flax_outputs.FlaxBaseModelOutput or tuple(torch.FloatTensor)参数
input_ids(形状为(batch_size, sequence_length)的jnp.ndarray)— 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧都填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
了解如何为预训练准备input_ids,请查看 T5 训练。
attention_mask(形状为(batch_size, sequence_length)的jnp.ndarray,可选)— 用于避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]中:
masked的标记为 1,
masked的标记为 0。
什么是注意力掩码?
output_attentions(bool,可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量下的attentions。
output_hidden_states(bool,可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的hidden_states。
return_dict(bool,可选)— 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_flax_outputs.FlaxBaseModelOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxBaseModelOutput 或一个torch.FloatTensor元组(如果传递了return_dict=False或当config.return_dict=False时)包括各种元素,取决于配置(<class 'transformers.models.t5.configuration_t5.T5Config'>)和输入。
last_hidden_state(形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray)— 模型最后一层的隐藏状态序列的输出。
hidden_states(tuple(jnp.ndarray),可选,当传递output_hidden_states=True或当config.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态以及初始嵌入输出。
attentions(tuple(jnp.ndarray),可选,当传递output_attentions=True或当config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
在注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
示例:
>>> from transformers import AutoTokenizer, FlaxT5ForConditionalGeneration
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5ForConditionalGeneration.from_pretrained("t5-small")
>>> text = "My friends are cool but they eat too many carbs."
>>> inputs = tokenizer(text, return_tensors="np")
>>> encoder_outputs = model.encode(**inputs)decode( decoder_input_ids encoder_outputs encoder_attention_mask: Optional = None decoder_attention_mask: Optional = None past_key_values: dict = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None ) → export const metadata = 'undefined';transformers.modeling_flax_outputs.FlaxCausalLMOutputWithCrossAttentions or tuple(torch.FloatTensor)参数
decoder_input_ids (jnp.ndarray of shape (batch_size, target_sequence_length)) — 词汇表中解码器输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
什么是解码器输入 ID?
对于训练,应提供decoder_input_ids。
encoder_outputs (tuple(tuple(jnp.ndarray)) — 元组包括(last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size),可选) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
encoder_attention_mask (jnp.ndarray of shape (batch_size, sequence_length), 可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1] 之间:
什么是注意力掩码?
decoder_attention_mask (jnp.ndarray of shape (batch_size, target_sequence_length), 可选) — 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
如果要更改填充行为,应根据需要进行修改。有关默认策略的更多信息,请参见论文中的图表 1。
past_key_values (Dict[str, np.ndarray], 可选, 由init_cache返回或传递先前的past_key_values时返回) — 预先计算的隐藏状态字典(注意力块中的键和值),可用于快速自回归解码。预先计算的键和值隐藏状态的形状为 [batch_size, max_length]。
output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions。
output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的hidden_states。
return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.modeling_flax_outputs.FlaxCausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxCausalLMOutputWithCrossAttentions 或一个torch.FloatTensor元组(如果传递了return_dict=False或config.return_dict=False)包括根据配置(<class 'transformers.models.t5.configuration_t5.T5Config'>)和输入的不同元素。
logits (jnp.ndarray of shape (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
hidden_states(tuple(jnp.ndarray),可选,当传递output_hidden_states=True或config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的jnp.ndarray元组(一个用于嵌入的输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态以及初始嵌入输出。
attentions(tuple(jnp.ndarray),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
cross_attentions(tuple(jnp.ndarray),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
注意力 softmax 后的交叉注意力权重,用于计算交叉注意力头中的加权平均值。
past_key_values(tuple(tuple(jnp.ndarray)),可选,当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的jnp.ndarray元组的元组,每个元组包含自注意力和交叉注意力层的缓存键、值状态,如果模型用于编码器-解码器设置,则相关。仅在config.is_decoder = True时相关。
包含预先计算的隐藏状态(注意力块中的键和值),可以用于加速顺序解码(查看past_key_values输入)。
示例:
>>> from transformers import AutoTokenizer, FlaxT5ForConditionalGeneration
>>> import jax.numpy as jnp
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5ForConditionalGeneration.from_pretrained("t5-small")
>>> text = "summarize: My friends are cool but they eat too many carbs."
>>> inputs = tokenizer(text, return_tensors="np")
>>> encoder_outputs = model.encode(**inputs)
>>> decoder_start_token_id = model.config.decoder_start_token_id
>>> decoder_input_ids = jnp.ones((inputs.input_ids.shape[0], 1), dtype="i4") * decoder_start_token_id
>>> outputs = model.decode(decoder_input_ids, encoder_outputs)
>>> logits = outputs.logitsclass transformers.FlaxT5EncoderModel( config: T5Config input_shape: Tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True gradient_checkpointing: bool = False **kwargs )__call__( input_ids: Array attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None )参数
input_ids(形状为(batch_size, sequence_length)的jnp.ndarray) — 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
了解如何为预训练准备input_ids,请查看 T5 训练。
attention_mask(形状为(batch_size, sequence_length)的jnp.ndarray,可选) — 避免在填充标记索引上执行注意力的掩码。选择的掩码值为[0, 1]:
未被掩盖的标记,
被掩盖的标记。
什么是注意力遮罩?
output_attentions(bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回张量下的attentions。
output_hidden_states(bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请查看返回张量下的hidden_states。
return_dict(bool,可选) — 是否返回 ModelOutput 而不是普通元组。
FlaxT5EncoderModel 的前向方法,覆盖了__call__特殊方法。
尽管前向传播的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是调用此函数,因为前者负责运行预处理和后处理步骤,而后者则会默默地忽略它们。
力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
cross_attentions(tuple(jnp.ndarray),可选,当传递output_attentions=True或config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)的jnp.ndarray元组(每层一个)。
注意力 softmax 后的交叉注意力权重,用于计算交叉注意力头中的加权平均值。
past_key_values(tuple(tuple(jnp.ndarray)),可选,当传递use_cache=True或config.use_cache=True时返回) — 长度为config.n_layers的jnp.ndarray元组的元组,每个元组包含自注意力和交叉注意力层的缓存键、值状态,如果模型用于编码器-解码器设置,则相关。仅在config.is_decoder = True时相关。
包含预先计算的隐藏状态(注意力块中的键和值),可以用于加速顺序解码(查看past_key_values输入)。
示例:
>>> from transformers import AutoTokenizer, FlaxT5ForConditionalGeneration
>>> import jax.numpy as jnp
>>> tokenizer = AutoTokenizer.from_pretrained("t5-small")
>>> model = FlaxT5ForConditionalGeneration.from_pretrained("t5-small")
>>> text = "summarize: My friends are cool but they eat too many carbs."
>>> inputs = tokenizer(text, return_tensors="np")
>>> encoder_outputs = model.encode(**inputs)
>>> decoder_start_token_id = model.config.decoder_start_token_id
>>> decoder_input_ids = jnp.ones((inputs.input_ids.shape[0], 1), dtype="i4") * decoder_start_token_id
>>> outputs = model.decode(decoder_input_ids, encoder_outputs)
>>> logits = outputs.logitsclass transformers.FlaxT5EncoderModel( config: T5Config input_shape: Tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True gradient_checkpointing: bool = False **kwargs )__call__( input_ids: Array attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None train: bool = False params: dict = None dropout_rng: PRNGKey = None )参数
input_ids(形状为(batch_size, sequence_length)的jnp.ndarray) — 词汇表中输入序列标记的索引。T5 是一个具有相对位置嵌入的模型,因此您应该能够在右侧和左侧填充输入。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
了解如何为预训练准备input_ids,请查看 T5 训练。
attention_mask(形状为(batch_size, sequence_length)的jnp.ndarray,可选) — 避免在填充标记索引上执行注意力的掩码。选择的掩码值为[0, 1]:
未被掩盖的标记,
被掩盖的标记。
什么是注意力遮罩?
output_attentions(bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回张量下的attentions。
output_hidden_states(bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请查看返回张量下的hidden_states。
return_dict(bool,可选) — 是否返回 ModelOutput 而不是普通元组。
FlaxT5EncoderModel 的前向方法,覆盖了__call__特殊方法。
尽管前向传播的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是调用此函数,因为前者负责运行预处理和后处理步骤,而后者则会默默地忽略它们。