Transformers 文档
NLLB-MOE
并获得增强的文档体验
开始使用
此模型于 2022-07-11 发布,并于 2023-03-27 添加到 Hugging Face Transformers。
NLLB-MOE
概述
NLLB 模型在 No Language Left Behind: Scaling Human-Centered Machine Translation 中提出,作者包括 Marta R. Costa-jussà, James Cross, Onur Çelebi, Maha Elbayad, Kenneth Heafield, Kevin Heffernan, Elahe Kalbassi, Janice Lam, Daniel Licht, Jean Maillard, Anna Sun, Skyler Wang, Guillaume Wenzek, Al Youngblood, Bapi Akula, Loic Barrault, Gabriel Mejia Gonzalez, Prangthip Hansanti, John Hoffman, Semarley Jarrett, Kaushik Ram Sadagopan, Dirk Rowe, Shannon Spruit, Chau Tran, Pierre Andrews, Necip Fazil Ayan, Shruti Bhosale, Sergey Edunov, Angela Fan, Cynthia Gao, Vedanuj Goswami, Francisco Guzmán, Philipp Koehn, Alexandre Mourachko, Christophe Ropers, Safiyyah Saleem, Holger Schwenk, and Jeff Wang。
论文摘要如下:
为了消除全球范围内的语言障碍,机器翻译已成为当今人工智能研究的重点。然而,这类研究集中在少数几种语言上,忽略了绝大多数低资源语言。要突破 200 种语言的障碍,同时确保安全、高质量的结果,并考虑到伦理问题,需要具备哪些条件?在“No Language Left Behind”一文中,我们通过对母语者的访谈,首先探讨了低资源语言翻译支持的必要性,然后着手解决这一挑战。随后,我们创建了旨在缩小低资源语言和高资源语言之间性能差距的数据集和模型。更具体地说,我们开发了一种基于稀疏门控专家混合 (Sparsely Gated Mixture of Experts) 的条件计算模型,该模型使用针对低资源语言量身定制的新颖有效的数据挖掘技术获得的数据进行训练。我们提出了多种架构和训练改进措施,以应对在数千个任务上训练时出现的过拟合问题。至关重要的是,我们使用人类翻译的基准测试 Flores-200 评估了超过 40,000 种不同的翻译方向的性能,并结合了人工评估和覆盖 Flores-200 中所有语言的新型毒性基准测试,以评估翻译安全性。我们的模型在 BLEU 分数上比之前的最先进技术提高了 44%,为实现通用翻译系统奠定了重要的基础。
该模型由 Arthur Zucker 贡献。原始代码可以在 这里找到。
使用技巧
- M2M100ForConditionalGeneration 是 NLLB 和 NLLB MoE 的基础模型。
- NLLB-MoE 模型与 NLLB 模型非常相似,但其前馈层基于 SwitchTransformers 的实现。
- 分词器与 NLLB 模型相同。
与 SwitchTransformers 的实现差异
最大的区别在于 token 的路由方式。NLLB-MoE 使用 top-2-gate,这意味着对于每个输入,只根据门控网络预测的最高概率选择前两个专家,而忽略其余专家。在 SwitchTransformers 中,只计算 top-1 概率,这意味着 token 被转发的概率较低。此外,如果一个 token 没有被路由到任何专家,SwitchTransformers 仍然会添加其未修改的隐藏状态(类似于残差连接),而在 NLLB 的 top-2 路由机制中,这些隐藏状态会被掩码。
使用 NLLB-MOE 生成
可用的检查点需要大约 350GB 的存储空间。如果您的机器内存不足,请务必使用 accelerate。
在生成目标文本时,将 forced_bos_token_id 设置为目标语言 ID。以下示例展示了如何使用 facebook/nllb-200-distilled-600M 模型将英语翻译成法语。
请注意,我们使用的是法语的 BCP-47 代码 fra_Latn。有关 Flores 200 数据集中所有 BCP-47 代码的列表,请参见 此处。
>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-moe-54b")
>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b")
>>> article = "Previously, Ring's CEO, Jamie Siminoff, remarked the company started when his doorbell wasn't audible from his shop in his garage."
>>> inputs = tokenizer(article, return_tensors="pt")
>>> translated_tokens = model.generate(
... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["fra_Latn"], max_length=50
... )
>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
"Auparavant, le PDG de Ring, Jamie Siminoff, a fait remarquer que la société avait commencé lorsque sa sonnette n'était pas audible depuis son magasin dans son garage."从英语以外的其他语言生成
英语 (eng_Latn) 被设置为默认的翻译语言。为了指定您想从其他语言进行翻译,您应该在初始化分词器时在 src_lang 关键字参数中指定 BCP-47 代码。
以下示例展示了如何将罗马尼亚语翻译成德语。
>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-moe-54b", src_lang="ron_Latn")
>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b")
>>> article = "Şeful ONU spune că nu există o soluţie militară în Siria"
>>> inputs = tokenizer(article, return_tensors="pt")
>>> translated_tokens = model.generate(
... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["deu_Latn"], max_length=30
... )
>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]资源
NllbMoeConfig
class transformers.NllbMoeConfig
< source >( vocab_size = 128112 max_position_embeddings = 1024 encoder_layers = 12 encoder_ffn_dim = 4096 encoder_attention_heads = 16 decoder_layers = 12 decoder_ffn_dim = 4096 decoder_attention_heads = 16 encoder_layerdrop = 0.05 decoder_layerdrop = 0.05 use_cache = True is_encoder_decoder = True activation_function = 'relu' d_model = 1024 dropout = 0.1 attention_dropout = 0.1 activation_dropout = 0.0 init_std = 0.02 decoder_start_token_id = 2 scale_embedding = True router_bias = False router_dtype = 'float32' router_ignore_padding_tokens = False num_experts = 128 expert_capacity = 64 encoder_sparse_step = 4 decoder_sparse_step = 4 router_z_loss_coef = 0.001 router_aux_loss_coef = 0.001 second_expert_policy = 'all' normalize_router_prob_before_dropping = False batch_prioritized_routing = False moe_eval_capacity_token_fraction = 1.0 moe_token_dropout = 0.2 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 tie_word_embeddings = True output_router_logits = False **kwargs )
参数
- vocab_size (
int, optional, defaults to 50265) — NllbMoe 模型的词汇表大小。定义了在调用 NllbMoeModel 时传递的inputs_ids可以表示的不同 token 的数量,或者 - d_model (
int, optional, defaults to 1024) — 层和池化层的维度。 - encoder_layers (
int, optional, defaults to 12) — 编码器层数。 - decoder_layers (
int, optional, defaults to 12) — 解码器层数。 - encoder_attention_heads (
int, optional, defaults to 16) — Transformer 编码器中每个注意力层的注意力头数。 - decoder_attention_heads (
int, optional, defaults to 16) — Transformer 解码器中每个注意力层的注意力头数。 - decoder_ffn_dim (
int, optional, defaults to 4096) — 解码器中“中间”(通常称为前馈)层的维度。 - encoder_ffn_dim (
int, optional, defaults to 4096) — 编码器中“中间”(通常称为前馈)层的维度。 - activation_function (
strorfunction, optional, defaults to"gelu") — 编码器和池化层中的非线性激活函数(函数或字符串)。如果为字符串,支持"gelu"、"relu"、"silu"和"gelu_new"。 - dropout (
float, optional, defaults to 0.1) — 嵌入层、编码器和池化层中所有全连接层的 dropout 概率。 - attention_dropout (
float, optional, defaults to 0.0) — 注意力概率的 dropout 比率。 - activation_dropout (
float, optional, defaults to 0.0) — 全连接层内部激活值的 dropout 比率。 - classifier_dropout (
float, optional, defaults to 0.0) — 分类器的 dropout 比率。 - max_position_embeddings (
int, optional, defaults to 1024) — 此模型可能被使用的最大序列长度。通常设置为一个较大的值以防万一(例如,512、1024 或 2048)。 - init_std (
float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - encoder_layerdrop (
float, 可选, 默认为 0.0) — 编码器的 LayerDrop 概率。有关更多详细信息,请参阅 [LayerDrop 论文](see https://huggingface.co/papers/1909.11556)。 - decoder_layerdrop (
float, 可选, 默认为 0.0) — 解码器的 LayerDrop 概率。有关更多详细信息,请参阅 [LayerDrop 论文](see https://huggingface.co/papers/1909.11556)。 - second_expert_policy (
str, 可选, 默认为"all") — 用于对每个 token 被路由到第二个专家的概率进行采样的策略。 - normalize_router_prob_before_dropping (
bool, 可选, 默认为True) — 在应用基于专家容量的掩码(容量下降)之前是否对路由器概率进行归一化。 - batch_prioritized_routing (
bool, 可选, 默认为True) — 在容量下降之前是否按路由概率对 token 进行排序。这意味着概率最高的 token 将先于序列中其他 token 进行路由。 - moe_eval_capacity_token_fraction (
float, 可选, 默认为 1.0) — 验证期间的 token 容量分数,如果设置为负数,则使用训练时的值。应在范围内:(0.0, 1.0]。 - num_experts (
int, 可选, 默认为 128) — 每个 NllbMoeSparseMlp 层的专家数量。 - expert_capacity (
int, 可选, 默认为 64) — 每个专家可以存储的 token 数量。 - encoder_sparse_step (
int, 可选, 默认为 4) — 编码器中稀疏层的频率。4 表示 4 个层中有一个是稀疏的。 - decoder_sparse_step (
int, 可选, 默认为 4) — 解码器中稀疏层的频率。4 表示 4 个层中有一个是稀疏的。 - router_dtype (
str, 可选, 默认为"float32") — 路由器的dtype。根据论文中的“选择性精度”讨论,最好将dtype保留为"float32"。 - router_ignore_padding_tokens (
bool, 可选, 默认为False) — 路由时是否忽略 padding token。如果为False,则 padding token 不会被路由到任何专家。 - router_bias (
bool, 可选, 默认为False) — 路由器分类器是否应具有偏置。 - moe_token_dropout (
float, 可选, 默认为 0.2) — MoE 专家输出掩码 (EOM) 的掩码速率,通过对专家输出应用 Dropout2d 实现。 - output_router_logits (
bool, 可选, 默认为False) — 是否返回路由器 logits。仅在训练时设置为True以获得辅助损失。 - use_cache (
bool, 可选, 默认为True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。
这是用于存储 NllbMoeModel 配置的类。它用于根据指定的参数实例化 NLLB-MoE 模型,定义了模型的架构。使用默认值实例化一个配置将产生一个与 NLLB-MoE facebook/nllb-moe-54b 架构类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PreTrainedConfig 的文档。
示例
>>> from transformers import NllbMoeModel, NllbMoeConfig
>>> # Initializing a NllbMoe facebook/nllb-moe-54b style configuration
>>> configuration = NllbMoeConfig()
>>> # Initializing a model from the facebook/nllb-moe-54b style configuration
>>> model = NllbMoeModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configNllbMoeTop2Router
使用 token 选择 top-2 专家分配的路由器。
此路由器使用与 fairseq 存储库中的 NLLB-MoE 相同的机制。项目按 router_probs 排序,然后路由到它们选择的专家,直到达到专家的 expert_capacity。不保证每个 token 都会被一个专家处理,也不会保证每个专家至少收到一个 token。
路由器组合权重也会被返回,以确保未更新的状态会被掩码。
route_tokens
< source >( router_logits: Tensor input_dtype: dtype = torch.float32 padding_mask: torch.LongTensor | None = None )
计算每个专家的 dispatch_mask 和 dispatch_weights。掩码已根据专家容量进行了调整。
forward
< source >( hidden_states: Tensor padding_mask: torch.LongTensor | None = None ) → top_1_mask (torch.Tensor of shape (batch_size, sequence_length))
参数
- hidden_states (
torch.Tensor) — (batch_size, sequence_length, hidden_dim) 用于计算路由器概率。
返回
top_1_mask (torch.Tensor of shape (batch_size, sequence_length))
形状为 [batch_size, sequence_length] 的索引张量,对应于使用 top1 路由器概率为每个 token 选择的专家。router_probabilities (torch.Tensor of shape (batch_size, sequence_length, nump_experts)): 形状为 (batch_size, sequence_length, num_experts) 的张量,对应于每个 token 和专家的概率。用于将 token 路由到专家。router_logits (torch.Tensor of shape (batch_size, sequence_length))): 形状为 (batch_size, sequence_length, num_experts) 的 logits 张量,对应于原始路由器 logits。稍后用于计算路由器 z-loss。
隐藏状态被重塑,以简化路由器概率(每个专家的组合权重)的计算。
NllbMoeSparseMLP
NLLB-MoE 稀疏 MLP 模块的实现。
NllbMoeModel
class transformers.NllbMoeModel
< source >( config: NllbMoeConfig )
参数
- config (NllbMoeConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
Nllb Moe 的裸模型,输出原始的隐藏状态,没有任何特定的顶部头部。
此模型继承自 PreTrainedModel。查看其父类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None decoder_input_ids: torch.LongTensor | None = None decoder_attention_mask: torch.LongTensor | None = None encoder_outputs: tuple[tuple[torch.FloatTensor]] | None = None past_key_values: transformers.cache_utils.Cache | None = None inputs_embeds: torch.FloatTensor | None = None decoder_inputs_embeds: torch.FloatTensor | None = None use_cache: bool | None = None cache_position: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → transformers.modeling_outputs.Seq2SeqMoEModelOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor, 形状为(batch_size, sequence_length), 可选) — 词汇表中输入序列 token 的索引。默认情况下将忽略填充。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor, 形状为(batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行 attention 的掩码。掩码值选择在[0, 1]中:- 1 代表未被掩码的 token,
- 0 代表被掩码的 token。
- decoder_input_ids (
torch.LongTensor, 形状为(batch_size, target_sequence_length), 可选) — 解码器输入序列 token 在词汇表中的索引。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- decoder_attention_mask (
torch.LongTensor, 形状为(batch_size, target_sequence_length), 可选) — 用于避免对某些 token 索引执行 attention 的掩码。默认情况下,将使用因果掩码,以确保模型只能查看之前的输入来预测未来。 - encoder_outputs (
tuple, 可选) — 由 (last_hidden_state, 可选:hidden_states, 可选:attentions) 组成的元组。last_hidden_state的形状为(batch_size, sequence_length, hidden_size),可选) 是编码器最后一层的输出隐藏状态序列。用于解码器的交叉 attention。 - past_key_values (
~cache_utils.Cache, 可选) — 预计算的隐藏状态(自 attention 块和交叉 attention 块中的键和值),可用于加速顺序解码。这通常由解码阶段的 DynamicCache 在use_cache=True或config.use_cache=True时返回。只允许输入 Cache 实例,请参阅我们的 kv cache 指南。如果未传递
past_key_values,则默认初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,则用户需要只输入未处理的input_ids(即没有其 past key value 状态已提供给此模型的那些),形状为(batch_size, unprocessed_length),而不是所有input_ids,形状为(batch_size, sequence_length)。 - 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)。 - cache_position (
torch.Tensor, 形状为(sequence_length), 可选) — 指示输入序列 token 在序列中位置的索引。与position_ids相反,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。
返回
transformers.modeling_outputs.Seq2SeqMoEModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Seq2SeqMoEModelOutput 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(None)和输入包含各种元素。
-
last_hidden_state (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)) — 模型解码器最后一层输出的隐藏状态序列。如果使用了
past_key_values,则只输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。 -
past_key_values (
EncoderDecoderCache, optional, 当传入use_cache=True或当config.use_cache=True时返回) — 这是一个 EncoderDecoderCache 实例。有关更多详细信息,请参阅我们的 kv 缓存指南。包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。 -
decoder_hidden_states (
tuple(torch.FloatTensor), optional, 当传入output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。解码器在每个层输出的隐藏状态,加上可选的初始嵌入输出。
-
decoder_attentions (
tuple(torch.FloatTensor), optional, 当传入output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。解码器的注意力权重,在注意力 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,有助于计算 Mixture of Experts 模型的辅助损失。
-
cross_attentions (
tuple(torch.FloatTensor), optional, returned whenoutput_attentions=Trueis passed or whenconfig.output_attentions=True) — Tuple oftorch.FloatTensor(one for each layer) of shape(batch_size, num_heads, sequence_length, sequence_length).解码器交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均。
-
encoder_last_hidden_state (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 模型编码器最后一层输出的隐藏状态序列。 -
encoder_hidden_states (
tuple(torch.FloatTensor), optional, 当传入output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。编码器在每个层输出的隐藏状态,加上可选的初始嵌入输出。
-
encoder_attentions (
tuple(torch.FloatTensor), optional, 当传入output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。编码器的注意力权重,在注意力 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。
transformers.NllbMoeModel 的 forward 方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
NllbMoeForConditionalGeneration
class transformers.NllbMoeForConditionalGeneration
< source >( config: NllbMoeConfig )
参数
- config (NllbMoeConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
带有语言建模头的 NllbMoe 模型。可用于摘要。
此模型继承自 PreTrainedModel。查看其父类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None decoder_input_ids: torch.LongTensor | None = None decoder_attention_mask: torch.LongTensor | None = None encoder_outputs: tuple[tuple[torch.FloatTensor]] | None = None past_key_values: transformers.cache_utils.Cache | None = None inputs_embeds: torch.FloatTensor | None = None decoder_inputs_embeds: torch.FloatTensor | None = None labels: torch.LongTensor | None = None use_cache: bool | None = None output_router_logits: bool | None = None cache_position: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → transformers.modeling_outputs.Seq2SeqMoEOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor, 形状为(batch_size, sequence_length), 可选) — 词汇表中输入序列 token 的索引。默认情况下将忽略填充。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor, 形状为(batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行 attention 的掩码。掩码值选择在[0, 1]中:- 1 代表未被掩码的 token,
- 0 代表被掩码的 token。
- decoder_input_ids (
torch.LongTensorof shape(batch_size, target_sequence_length), optional) — 解码器输入序列 token 在词汇表中的索引。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- decoder_attention_mask (
torch.LongTensorof shape(batch_size, target_sequence_length), optional) — Mask to avoid performing attention on certain token indices. By default, a causal mask will be used, to make sure the model can only look at previous inputs in order to predict the future. - encoder_outputs (
tuple, optional) — Tuple consists of (last_hidden_state, optional:hidden_states, optional:attentions)last_hidden_stateof shape(batch_size, sequence_length, hidden_size), optional) is a sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention of the decoder. - past_key_values (
~cache_utils.Cache, optional) — Pre-computed hidden-states (key and values in the self-attention blocks and in the cross-attention blocks) that can be used to speed up sequential decoding. This typically consists in thepast_key_valuesreturned by the model at a previous stage of decoding, whenuse_cache=Trueorconfig.use_cache=True.Only Cache instance is allowed as input, see our kv cache guide. If no
past_key_valuesare passed, DynamicCache will be initialized by default.The model will output the same cache format that is fed as input.
If
past_key_valuesare used, the user is expected to input only unprocessedinput_ids(those that don’t have their past key value states given to this model) of shape(batch_size, unprocessed_length)instead of allinput_idsof shape(batch_size, sequence_length). - inputs_embeds (
torch.FloatTensorof shape(batch_size, sequence_length, hidden_size), optional) — Optionally, instead of passinginput_idsyou can choose to directly pass an embedded representation. This is useful if you want more control over how to convertinput_idsindices into associated vectors than the model’s internal embedding lookup matrix. - decoder_inputs_embeds (
torch.FloatTensorof shape(batch_size, target_sequence_length, hidden_size), optional) — Optionally, instead of passingdecoder_input_idsyou can choose to directly pass an embedded representation. Ifpast_key_valuesis used, optionally only the lastdecoder_inputs_embedshave to be input (seepast_key_values). This is useful if you want more control over how to convertdecoder_input_idsindices into associated vectors than the model’s internal embedding lookup matrix.If
decoder_input_idsanddecoder_inputs_embedsare both unset,decoder_inputs_embedstakes the value ofinputs_embeds. - labels (
torch.LongTensorof shape(batch_size, sequence_length), optional) — Labels for computing the masked language modeling loss. Indices should either be in[0, ..., config.vocab_size]or -100 (seeinput_idsdocstring). Tokens with indices set to-100are ignored (masked), the loss is only computed for the tokens with labels in[0, ..., config.vocab_size]. - use_cache (
bool, optional) — If set toTrue,past_key_valueskey value states are returned and can be used to speed up decoding (seepast_key_values). - output_router_logits (
bool, optional) — Whether or not to return the logits of all the routers. They are useful for computing the router loss, and should not be returned during inference. - cache_position (
torch.Tensorof shape(sequence_length), optional) — Indices depicting the position of the input sequence tokens in the sequence. Contrarily toposition_ids, this tensor is not affected by padding. It is used to update the cache in the correct position and to infer the complete sequence length.
返回
transformers.modeling_outputs.Seq2SeqMoEOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Seq2SeqMoEOutput 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置(NllbMoeConfig)和输入。
-
loss (
torch.FloatTensor,形状为(1,),可选,当提供labels时返回) — 语言建模损失。 -
logits (形状为
(batch_size, sequence_length, config.vocab_size)的torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。 -
past_key_values (
EncoderDecoderCache, optional, 当传入use_cache=True或当config.use_cache=True时返回) — 这是一个 EncoderDecoderCache 实例。有关更多详细信息,请参阅我们的 kv 缓存指南。包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。 -
decoder_hidden_states (
tuple(torch.FloatTensor), optional, 当传入output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。解码器在每一层输出时的隐藏状态以及初始嵌入输出。
-
decoder_attentions (
tuple(torch.FloatTensor), optional, 当传入output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。解码器的注意力权重,在注意力 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,有助于计算 Mixture of Experts 模型的辅助损失。
-
cross_attentions (
tuple(torch.FloatTensor), optional, returned whenoutput_attentions=Trueis passed or whenconfig.output_attentions=True) — Tuple oftorch.FloatTensor(one for each layer) of shape(batch_size, num_heads, sequence_length, sequence_length).解码器交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均。
-
encoder_last_hidden_state (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 模型编码器最后一层输出的隐藏状态序列。 -
encoder_hidden_states (
tuple(torch.FloatTensor), optional, 当传入output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。编码器在每一层输出时的隐藏状态以及初始嵌入输出。
-
encoder_attentions (
tuple(torch.FloatTensor), optional, 当传入output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。编码器的注意力权重,在注意力 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。
transformers.NllbMoeForConditionalGeneration 的 forward 方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。