Transformers 文档

NLLB-MOE

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

此模型于 2022-07-11 发布在 HF 论文中,并于 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 和 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 的实现。
  • 其分词器(tokenizer)与 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", device_map="auto")

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").to(model.device)

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", device_map="auto")

article = "Şeful ONU spune că nu există o soluţie militară în Siria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)

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

< >

( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None is_encoder_decoder: bool = True vocab_size: int = 128112 max_position_embeddings: int = 1024 encoder_layers: int = 12 encoder_ffn_dim: int = 4096 encoder_attention_heads: int = 16 decoder_layers: int = 12 decoder_ffn_dim: int = 4096 decoder_attention_heads: int = 16 encoder_layerdrop: float | int = 0.05 decoder_layerdrop: float | int = 0.05 use_cache: bool = True activation_function: str = 'relu' d_model: int = 1024 dropout: float | int = 0.1 attention_dropout: float | int = 0.1 activation_dropout: float | int = 0.0 init_std: float = 0.02 decoder_start_token_id: int | None = 2 scale_embedding: bool = True router_bias: bool = False router_dtype: typing.Literal['float32', 'float16', 'bfloat16'] = 'float32' router_ignore_padding_tokens: bool = False num_experts: int = 128 expert_capacity: int = 64 encoder_sparse_step: int = 4 decoder_sparse_step: int = 4 router_z_loss_coef: float = 0.001 router_aux_loss_coef: float = 0.001 second_expert_policy: str = 'all' normalize_router_prob_before_dropping: bool = False batch_prioritized_routing: bool = False moe_eval_capacity_token_fraction: float = 1.0 moe_token_dropout: float | int = 0.2 pad_token_id: int | None = 1 bos_token_id: int | None = 0 eos_token_id: int | list[int] | None = 2 tie_word_embeddings: bool = True output_router_logits: bool = False )

参数

  • is_encoder_decoder (bool, optional, 默认为 True) — 模型是否用作编码器-解码器架构。
  • vocab_size (int, optional, 默认为 128112) — 模型词汇表大小。定义了 input_ids 可表示的不同 token 的数量。
  • max_position_embeddings (int, optional, 默认为 1024) — 该模型可能使用的最大序列长度。
  • encoder_layers (int, optional, 默认为 12) — Transformer 编码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • encoder_ffn_dim (int, optional, 默认为 4096) — 编码器中“中间”(通常称为前馈)层的维度。
  • encoder_attention_heads (int, optional, 默认为 16) — Transformer 编码器中每个注意力层的注意力头数。
  • decoder_layers (int, optional, 默认为 12) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • decoder_ffn_dim (int, optional, 默认为 4096) — 解码器中“中间”(通常称为前馈)层的维度。
  • decoder_attention_heads (int, optional, 默认为 16) — Transformer 解码器中每个注意力层的注意力头数。
  • encoder_layerdrop (Union[float, int], optional, 默认为 0.05) — 编码器的 LayerDrop 概率。详情请参阅 [LayerDrop 论文](https://huggingface.co/papers/1909.11556)。
  • decoder_layerdrop (Union[float, int], optional, 默认为 0.05) — 解码器的 LayerDrop 概率。详情请参阅 [LayerDrop 论文](https://huggingface.co/papers/1909.11556)。
  • use_cache (bool, optional, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在 config.is_decoder=True 时或模型为仅解码器的生成模型时相关。
  • activation_function (str, optional, 默认为 relu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu", "relu", "silu" 等。
  • d_model (int, optional, 默认为 1024) — 编码器层和池化层的尺寸。
  • dropout (Union[float, int], optional, 默认为 0.1) — 所有 dropout 层的比率。
  • attention_dropout (Union[float, int], optional, 默认为 0.1) — 注意力概率的 dropout 比率。
  • activation_dropout (Union[float, int], optional, 默认为 0.0) — 全连接层内激活函数的 dropout 比率。
  • init_std (float, optional, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • decoder_start_token_id (int, optional, 默认为 2) — 如果编码器-解码器模型以与 bos 不同的 token 开始解码,则为该 token 的 ID。
  • scale_embedding (bool, optional, 默认为 True) — 是否通过除以 sqrt(d_model) 来缩放嵌入。
  • router_bias (bool, optional, 默认为 False) — 路由器的分类器是否应具有偏置项。
  • router_dtype (str, optional, 默认为 "float32") — 用于路由器的 dtype。正如该论文中关于选择性精度(selective precision)的讨论所建议,最好将 dtype 保持为 "float32"
  • router_ignore_padding_tokens (bool, optional, 默认为 False) — 路由时是否忽略填充 token。如果为 False,则填充 token 不会路由到任何专家。
  • num_experts (int, optional, 默认为 128) — MoE 层中路由专家的数量。
  • expert_capacity (int, optional, 默认为 64) — 每个专家可以存储的 token 数量。
  • encoder_sparse_step (int, optional, 默认为 4) — 编码器中稀疏层的频率。4 表示每 4 层中有一层是稀疏的。
  • decoder_sparse_step (int, optional, 默认为 4) — 解码器中稀疏层的频率。4 表示每 4 层中有一层是稀疏的。
  • router_z_loss_coef (float, optional, 默认为 0.001) — 路由器 z-loss 的系数,用于惩罚大的路由器 logits,以提高训练稳定性。
  • router_aux_loss_coef (float, optional, 默认为 0.001) — 辅助负载均衡损失系数。用于惩罚 MoE 模型中不均匀的专家路由。
  • second_expert_policy (str, optional, 默认为 "all") — 用于为每个 token 采样被选中进入第二个专家的概率的策略。
  • normalize_router_prob_before_dropping (bool, optional, 默认为 True) — 在应用基于专家容量的掩码(容量丢弃)之前,是否对路由器概率进行归一化。
  • batch_prioritized_routing (bool, optional, 默认为 True) — 在容量丢弃之前,是否按路由器概率对 token 进行排序。这意味着具有最高概率的 token 将在序列中可能更靠后的其他 token 之前被路由。
  • moe_eval_capacity_token_fraction (float, optional, 默认为 1.0) — 验证期间作为容量的 token 分数,如果设置为负数,则使用与训练相同的值。应在 (0.0, 1.0] 范围内。
  • moe_token_dropout (float, optional, 默认为 0.2) — MoE 专家输出掩码(EOM)的遮蔽率,通过专家输出上的 Dropout2d 实现。
  • pad_token_id (int, optional, 默认为 1) — 词汇表中用于填充的 token ID。
  • bos_token_id (int, optional, 默认为 0) — 词汇表中用于流起始(beginning-of-stream)的 token ID。
  • eos_token_id (Union[int, list[int]], optional, 默认为 2) — 词汇表中用于流结束(end-of-stream)的 token ID。
  • tie_word_embeddings (bool, optional, 默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。
  • output_router_logits (bool, optional, 默认为 False) — 模型是否应返回路由器 logits。启用此功能还将允许模型输出辅助损失,包括负载均衡损失和路由器 z-loss。

这是用于存储 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.config

NllbMoeTop2Router

class transformers.NllbMoeTop2Router

< >

( config: NllbMoeConfig )

使用 Token 选择 Top-2 专家分配的路由器。

该路由器使用与 fairseq 仓库中 NLLB-MoE 相同的机制。各项按 router_probs 排序,然后路由至其选择的专家,直到达到专家的 expert_capacity 为止。不保证每个 Token 都由专家处理,也不保证每个专家至少收到一个 Token。

同时返回路由器组合权重,以确保未更新的状态会被遮蔽(masked)。

route_tokens

< >

( router_logits: Tensor input_dtype: dtype = torch.float32 padding_mask: torch.LongTensor | None = None )

计算每个专家的 dispatch_maskdispatch_weights。掩码(mask)会根据专家容量进行调整。

forward

< >

( hidden_states: Tensor padding_mask: torch.LongTensor | None = None ) top_1_mask (形状为 (batch_size, sequence_length) 的 torch.Tensor)

参数

  • hidden_states (torch.Tensor) — (batch_size, sequence_length, hidden_dim),从中计算路由器概率。

返回

top_1_mask (形状为 (batch_size, sequence_length) 的 torch.Tensor)

形状为 [batch_size, sequence_length] 的索引张量,对应于使用路由器 top1 概率为每个 Token 选择的专家。router_probabilities (形状为 (batch_size, sequence_length, num_experts) 的 torch.Tensor):对应于每个 Token 和每个专家的概率。用于将 Token 路由至专家。router_logits (形状为 (batch_size, sequence_length, num_experts) 的 torch.Tensor):对应于原始路由器 Logits 的张量。随后用于计算路由器 z-loss。

隐藏状态会被重塑以简化路由器概率(每个专家的组合权重)的计算。

NllbMoeSparseMLP

class transformers.NllbMoeSparseMLP

< >

( config: NllbMoeConfig ffn_dim: int )

NLLB-MoE 稀疏 MLP 模块的实现。

forward

< >

( hidden_states: Tensor padding_mask: torch.Tensor | None = None )

NllbMoeModel

class transformers.NllbMoeModel

< >

( config: NllbMoeConfig )

参数

  • config (NllbMoeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

裸的 Nllb Moe 模型,输出原始隐藏状态,顶部没有任何特定头部。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( 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 **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) Seq2SeqMoEModelOutputtuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 词汇表中输入序列 Token 的索引。默认情况下会忽略填充(Padding)。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor可选) — 用于避免对填充 Token 索引执行注意力操作的掩码。掩码值选自 [0, 1]

    • 1 表示未遮蔽的 Token,
    • 0 表示被遮蔽的 Token。

    什么是注意力掩码?

  • decoder_input_ids (形状为 (batch_size, target_sequence_length)torch.LongTensor可选) — 解码器输入序列 Token 在词汇表中的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是解码器输入 ID?

  • decoder_attention_mask (形状为 (batch_size, target_sequence_length)torch.LongTensor可选) — 用于避免对特定 Token 索引执行注意力操作的掩码。默认情况下将使用因果掩码(causal mask),以确保模型在预测未来时只能查看先前的输入。
  • encoder_outputs (tuple[tuple[torch.FloatTensor]]可选) — 元组包含 (last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size)可选) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制。
  • past_key_values (~cache_utils.Cache可选) — 预计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可用于加速顺序解码。这通常包含模型在解码的先前阶段返回的 past_key_values(当 use_cache=Trueconfig.use_cache=True 时)。

    仅允许 Cache 实例作为输入,请参阅我们的 kv 缓存指南。如果未传递 past_key_values,则默认初始化 DynamicCache

    模型将输出与输入时相同格式的缓存。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即没有向模型提供先前键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的所有 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_idsdecoder_inputs_embeds 均未设置,decoder_inputs_embeds 将采用 inputs_embeds 的值。

  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(见 past_key_values)。

返回

Seq2SeqMoEModelOutputtuple(torch.FloatTensor)

一个 Seq2SeqMoEModelOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(None)和输入包含各种元素。

NllbMoeModel 前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • last_hidden_state (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)) — 模型解码器最后一层输出的隐藏状态序列。

    如果使用了 past_key_values,则只输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

  • past_key_values (EncoderDecoderCache可选,在传递了 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=Trueconfig.add_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts)torch.FloatTensor 元组(每一层一个)。

    解码器模型的路由器 Logits,有助于计算专家混合模型的辅助损失。

  • cross_attentions (tuple(torch.FloatTensor), optional, returned when output_attentions=True is passed or when config.output_attentions=True) — Tuple of torch.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=Trueconfig.add_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts)torch.FloatTensor 元组(每一层一个)。

    编码器模型的路由器 Logits,有助于计算辅助损失和稀疏模块的 z_loss。

NllbMoeForConditionalGeneration

class transformers.NllbMoeForConditionalGeneration

< >

( config: NllbMoeConfig )

参数

  • config (NllbMoeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

带有语言建模头部的 NllbMoe 模型。可用于文本摘要。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( 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 **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) Seq2SeqMoEOutputtuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 词汇表中输入序列 Token 的索引。默认情况下会忽略填充(Padding)。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor可选) — 用于避免对填充 Token 索引执行注意力操作的掩码。掩码值选自 [0, 1]

    • 1 表示未遮蔽的 Token,
    • 0 表示被遮蔽的 Token。

    什么是注意力掩码?

  • decoder_input_ids (形状为 (batch_size, target_sequence_length)torch.LongTensor可选) — 解码器输入序列 Token 在词汇表中的索引。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是解码器输入 ID?

  • decoder_attention_mask (形状为 (batch_size, target_sequence_length)torch.LongTensor可选) — 用于避免对特定 Token 索引执行注意力操作的掩码。默认情况下将使用因果掩码(causal mask),以确保模型在预测未来时只能查看先前的输入。
  • encoder_outputs (tuple[tuple[torch.FloatTensor]]可选) — 元组包含 (last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size)可选) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制。
  • past_key_values (~cache_utils.Cache可选) — 预计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可用于加速顺序解码。这通常包含模型在解码的先前阶段返回的 past_key_values(当 use_cache=Trueconfig.use_cache=True 时)。

    仅允许 Cache 实例作为输入,请参阅我们的 kv 缓存指南。如果未传递 past_key_values,则默认初始化 DynamicCache

    模型将输出与输入时相同格式的缓存。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即没有向模型提供先前键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的所有 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_idsdecoder_inputs_embeds 均未设置,decoder_inputs_embeds 将采用 inputs_embeds 的值。

  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算掩码语言建模损失的标签。索引应在 [0, ..., config.vocab_size] 范围内或为 -100(请参阅 input_ids 文档字符串)。索引设置为 -100 的 Token 将被忽略(遮蔽),损失仅针对标签在 [0, ..., config.vocab_size] 范围内的 Token 进行计算。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(见 past_key_values)。
  • output_router_logits (bool可选) — 是否返回所有路由器的 Logits。它们对于计算路由器损失非常有用,且不应在推理期间返回。

返回

Seq2SeqMoEOutputtuple(torch.FloatTensor)

一个 Seq2SeqMoEOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(NllbMoeConfig)和输入包含各种元素。

NllbMoeForConditionalGeneration 前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。

  • past_key_values (EncoderDecoderCache可选,在传递了 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=Trueconfig.add_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts)torch.FloatTensor 元组(每一层一个)。

    解码器模型的路由器 Logits,有助于计算专家混合模型的辅助损失。

  • cross_attentions (tuple(torch.FloatTensor), optional, returned when output_attentions=True is passed or when config.output_attentions=True) — Tuple of torch.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=Trueconfig.add_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts)torch.FloatTensor 元组(每一层一个)。

    编码器模型的路由器 Logits,有助于计算专家混合模型的辅助损失和 z_loss。

示例

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.