Transformers 文档

MarianMT

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2018 年 4 月 1 日发表在 HF 论文中,并于 2020 年 11 月 16 日贡献给 Hugging Face Transformers。

FlashAttention SDPA

MarianMT

MarianMT 是一款使用 Marian 框架训练的机器翻译模型,该框架由纯 C++ 编写。该框架包含其自定义的自动微分引擎和高效的元算法,用于训练像 BART 这样的编码器-解码器模型。

所有的 MarianMT 模型都是 transformer 编码器-解码器,每个组件有 6 层,使用静态正弦位置嵌入,没有层归一化(layernorm)嵌入,并且模型开始生成时使用 pad_token_id 作为前缀,而不是 <s/>

你可以在 赫尔辛基大学语言技术研究小组 (Language Technology Research Group at the University of Helsinki) 组织下找到所有原始的 MarianMT 检查点。

该模型由 sshleifer 贡献。

点击右侧边栏中的 MarianMT 模型,查看更多将 MarianMT 应用于翻译任务的示例。

下面的示例展示了如何使用 PipelineAutoModel 类来翻译文本。

流水线
自动模型
from transformers import pipeline


pipeline = pipeline("translation_en_to_de", model="Helsinki-NLP/opus-mt-en-de", device=0)
pipeline("Hello, how are you?")

使用 AttentionMaskVisualizer 可以更好地了解模型可以关注哪些 token,不能关注哪些 token。

from transformers.utils.attention_visualizer import AttentionMaskVisualizer


visualizer = AttentionMaskVisualizer("Helsinki-NLP/opus-mt-en-de")
visualizer("Hello, how are you?")

注意事项

  • MarianMT 模型在磁盘上约占 298MB,且有超过 1000 个模型。查看此 列表 以了解支持的语言对。语言代码可能不一致。两位代码可以在 这里 找到,而三位代码可能需要进一步搜索。
  • 不支持需要 BPE 预处理的模型。
  • 所有模型名称均使用以下格式:Helsinki-NLP/opus-mt-{src}-{tgt}。格式如 es_AR 的语言代码通常指 code_{region}。例如,es_AR 指的是阿根廷的西班牙语。
  • 如果模型可以输出多种语言,请将所需的输出语言预置到 src_txt 中,如下所示。来自 Tatoeba-Challenge 的新型多语言模型需要 3 字符的语言代码。
from transformers import MarianMTModel, MarianTokenizer


# Model trained on multiple source languages → multiple target languages
# Example: multilingual to Arabic (arb)
model_name = "Helsinki-NLP/opus-mt-mul-mul"  # Tatoeba Challenge model
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name, device_map="auto")

# Prepend the desired output language code (3-letter ISO 639-3)
src_texts = ["arb>> Hello, how are you today?"]

# Tokenize and translate
inputs = tokenizer(src_texts, return_tensors="pt", padding=True, truncation=True).to(model.device)
translated = model.generate(**inputs)

# Decode and print result
translated_texts = tokenizer.batch_decode(translated, skip_special_tokens=True)
print(translated_texts[0])
  • 较旧的多语言模型使用 2 字符的语言代码。
from transformers import MarianMTModel, MarianTokenizer


# Example: older multilingual model (like en → many)
model_name = "Helsinki-NLP/opus-mt-en-ROMANCE"  # English → French, Spanish, Italian, etc.
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name, device_map="auto")

# Prepend the 2-letter ISO 639-1 target language code (older format)
src_texts = [">>fr<< Hello, how are you today?"]

# Tokenize and translate
inputs = tokenizer(src_texts, return_tensors="pt", padding=True, truncation=True).to(model.device)
translated = model.generate(**inputs)

# Decode and print result
translated_texts = tokenizer.batch_decode(translated, skip_special_tokens=True)
print(translated_texts[0])

MarianConfig

class transformers.MarianConfig

< >

( 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 = 58101 decoder_vocab_size: int | None = None 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.0 decoder_layerdrop: float | int = 0.0 use_cache: bool = True activation_function: str = 'gelu' d_model: int = 1024 dropout: float | int = 0.1 attention_dropout: float | int = 0.0 activation_dropout: float | int = 0.0 init_std: float = 0.02 decoder_start_token_id: int = 58100 scale_embedding: bool = False pad_token_id: int | None = 58100 eos_token_id: int | list[int] | None = 0 bos_token_id: int | None = None forced_eos_token_id: int | list[int] | None = 0 share_encoder_decoder_embeddings: bool = True is_decoder: bool = False tie_word_embeddings: bool = True )

参数

  • is_encoder_decoder (bool, 可选, 默认为 True) — 模型是否用作编码器/解码器。
  • vocab_size (int, 可选, 默认为 58101) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 的数量。
  • decoder_vocab_size (int, 可选) — 解码器层嵌入的词汇表大小。
  • max_position_embeddings (int, 可选, 默认为 1024) — 该模型可能使用的最大序列长度。
  • encoder_layers (int, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • encoder_ffn_dim (int, 可选, 默认为 4096) — 编码器中“中间”(通常称为前馈)层的维度。
  • encoder_attention_heads (int, 可选, 默认为 16) — Transformer 编码器中每个注意力层的注意力头数量。
  • decoder_layers (int, 可选, 默认为 12) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • decoder_ffn_dim (int, 可选, 默认为 4096) — 解码器中“中间”(通常称为前馈)层的维度。
  • decoder_attention_heads (int, 可选, 默认为 16) — Transformer 解码器中每个注意力层的注意力头数量。
  • encoder_layerdrop (Union[float, int], 可选, 默认为 0.0) — 编码器的 LayerDrop 概率。有关详细信息,请参阅 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。
  • decoder_layerdrop (Union[float, int], 可选, 默认为 0.0) — 解码器的 LayerDrop 概率。有关详细信息,请参阅 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 或模型是仅解码器的生成模型时才相关。
  • activation_function (str, 可选, 默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如 "gelu", "relu", "silu" 等。
  • d_model (int, 可选, 默认为 1024) — 编码器层和池化层的尺寸。
  • dropout (Union[float, int], 可选, 默认为 0.1) — 所有 dropout 层的比率。
  • attention_dropout (Union[float, int], 可选, 默认为 0.0) — 注意力概率的 dropout 比率。
  • activation_dropout (Union[float, int], 可选, 默认为 0.0) — 全连接层内部激活函数的 dropout 比率。
  • init_std (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • decoder_start_token_id (int, 可选, 默认为 58100) — 如果编码器-解码器模型以与 bos 不同的 token 开始解码,则为该 token 的 ID。
  • scale_embedding (bool, 可选, 默认为 False) — 是否通过除以 sqrt(d_model) 来缩放嵌入。
  • pad_token_id (int, 可选, 默认为 58100) — 词汇表中用于填充的 token ID。
  • eos_token_id (Union[int, list[int]], 可选, 默认为 0) — 词汇表中用于表示流结束(end-of-stream)的标记 ID。
  • bos_token_id (int, 可选) — 词汇表中用于表示流开始(beginning-of-stream)的标记 ID。
  • forced_eos_token_id (Union[int, list[int]], 可选, 默认为 0) — 当达到 max_length 时,强制作为最后一个生成的标记的 ID。通常设置为 eos_token_id
  • share_encoder_decoder_embeddings (bool, 可选, 默认为 True) — 是否绑定并共享编码器和解码器的嵌入层。
  • is_decoder (bool, 可选, 默认为 False) — 模型是否用作解码器。如果为 False,则模型用作编码器。
  • tie_word_embeddings (bool, 可选, 默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。

这是用于存储 MarianModel 配置的配置类。它根据指定的参数实例化 Marian 模型,从而定义模型架构。使用默认值实例化配置将产生与 Helsinki-NLP/opus-mt-en-de 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。

示例

>>> from transformers import MarianModel, MarianConfig

>>> # Initializing a Marian Helsinki-NLP/opus-mt-en-de style configuration
>>> configuration = MarianConfig()

>>> # Initializing a model from the Helsinki-NLP/opus-mt-en-de style configuration
>>> model = MarianModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

MarianTokenizer

class transformers.MarianTokenizer

< >

( source_spm target_spm vocab target_vocab_file = None source_lang = None target_lang = None unk_token = '<unk>' eos_token = '</s>' pad_token = '<pad>' model_max_length = 512 sp_model_kwargs: dict[str, typing.Any] | None = None separate_vocabs = False **kwargs )

参数

  • source_spm (str) — 包含源语言词汇表的 SentencePiece 文件(通常具有 .spm 扩展名)。
  • target_spm (str) — 包含目标语言词汇表的 SentencePiece 文件(通常具有 .spm 扩展名)。
  • source_lang (str, 可选) — 表示源语言的字符串。
  • target_lang (str, 可选) — 表示目标语言的字符串。
  • unk_token (str, 可选, 默认为 "<unk>") — 未知标记。不在词汇表中的标记无法转换为 ID,会被设置为此标记。
  • eos_token (str, 可选, 默认为 "</s>") — 序列结束标记。
  • pad_token (str, 可选, 默认为 "<pad>") — 用于填充的标记,例如在对不同长度的序列进行批处理时使用。
  • model_max_length (int, 可选, 默认为 512) — 模型可接受的最大句子长度。
  • additional_special_tokens (list[str], 可选, 默认为 ["<eop>", "<eod>"]) — 分词器使用的其他特殊标记。
  • 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 中合并操作的丢弃概率。

构建一个 Marian 分词器。基于 SentencePiece

该分词器继承自 PreTrainedTokenizer,其中包含大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

示例

>>> from transformers import MarianForCausalLM, MarianTokenizer

>>> model = MarianForCausalLM.from_pretrained("Helsinki-NLP/opus-mt-en-de")
>>> tokenizer = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-de")
>>> src_texts = ["I am a small frog.", "Tom asked his teacher for advice."]
>>> tgt_texts = ["Ich bin ein kleiner Frosch.", "Tom bat seinen Lehrer um Rat."]  # optional
>>> inputs = tokenizer(src_texts, text_target=tgt_texts, return_tensors="pt", padding=True)

>>> outputs = model(**inputs)  # should work

build_inputs_with_special_tokens

< >

( token_ids_0 token_ids_1 = None )

通过追加 eos_token_id 从序列构建模型输入。

MarianModel

class transformers.MarianModel

< >

( config: MarianConfig )

参数

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

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

该模型继承自 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.Tensor | None = None encoder_outputs: tuple[torch.Tensor] | transformers.modeling_outputs.BaseModelOutput | 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] ) Seq2SeqModelOutputtuple(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?

    Marian 使用 pad_token_id 作为 decoder_input_ids 生成的起始 token。如果使用了 past_key_values,则可以选择仅输入最后的 decoder_input_ids(请参阅 past_key_values)。

  • decoder_attention_mask (形状为 (batch_size, target_sequence_length)torch.LongTensor可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充 token 的张量。默认情况下也会使用因果掩码(causal mask)。
  • encoder_outputs (Union[tuple[torch.Tensor], ~modeling_outputs.BaseModelOutput]可选) — 元组包含 (last_hidden_state, 可选: hidden_states, 可选: attentions)。形状为 (batch_size, sequence_length, hidden_size)last_hidden_state可选)是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制中。
  • past_key_values (~cache_utils.Cache可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括当 use_cache=Trueconfig.use_cache=True 时,模型在前一个解码阶段返回的 past_key_values

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

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

    如果使用了 past_key_values,用户应仅输入形状为 (batch_size, unprocessed_length) 的未处理 input_ids(即其过去键值状态尚未提供给此模型的那些),而不是所有形状为 (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)。

返回

Seq2SeqModelOutputtuple(torch.FloatTensor)

一个 Seq2SeqModelOutputtorch.FloatTensor 元组(如果传递了 return_dict=Falseconfig.return_dict=False 时),根据配置(MarianConfig)和输入包含各种元素。

MarianModel 的 forward 方法,重写了 __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 之后,用于计算自注意力头中的加权平均。

  • 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 之后,用于计算自注意力头中的加权平均。

示例

>>> from transformers import AutoTokenizer, MarianModel

>>> tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-de")
>>> model = MarianModel.from_pretrained("Helsinki-NLP/opus-mt-en-de")

>>> inputs = tokenizer("Studies have been shown that owning a dog is good for you", return_tensors="pt")
>>> decoder_inputs = tokenizer(
...     "<pad> Studien haben gezeigt dass es hilfreich ist einen Hund zu besitzen",
...     return_tensors="pt",
...     add_special_tokens=False,
... )
>>> outputs = model(input_ids=inputs.input_ids, decoder_input_ids=decoder_inputs.input_ids)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 26, 512]

MarianMTModel

class transformers.MarianMTModel

< >

( config: MarianConfig )

参数

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

具有语言建模头的 Marian 模型。可用于摘要生成。

该模型继承自 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.Tensor | None = None encoder_outputs: tuple[torch.Tensor] | transformers.modeling_outputs.BaseModelOutput | 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 **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) Seq2SeqLMOutputtuple(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?

    Marian 使用 pad_token_id 作为 decoder_input_ids 生成的起始 token。如果使用了 past_key_values,则可以选择仅输入最后的 decoder_input_ids(请参阅 past_key_values)。

  • decoder_attention_mask (形状为 (batch_size, target_sequence_length)torch.LongTensor可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充 token 的张量。默认情况下也会使用因果掩码(causal mask)。
  • encoder_outputs (Union[tuple[torch.Tensor], ~modeling_outputs.BaseModelOutput]可选) — 元组包含 (last_hidden_state, 可选: hidden_states, 可选: attentions)。形状为 (batch_size, sequence_length, hidden_size)last_hidden_state可选)是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制中。
  • past_key_values (~cache_utils.Cache可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括当 use_cache=Trueconfig.use_cache=True 时,模型在前一个解码阶段返回的 past_key_values

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

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

    如果使用了 past_key_values,用户应仅输入形状为 (batch_size, unprocessed_length) 的未处理 input_ids(即其过去键值状态尚未提供给此模型的那些),而不是所有形状为 (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)。

返回

Seq2SeqLMOutputtuple(torch.FloatTensor)

一个 Seq2SeqLMOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=Falseconfig.return_dict=False 时),根据配置(MarianConfig)和输入包含不同的元素。

MarianMTModel 的前向传播方法,覆盖了 __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 之后,用于计算自注意力头中的加权平均。

  • 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 之后,用于计算自注意力头中的加权平均。

示例

>>> from transformers import AutoTokenizer, MarianMTModel

>>> src = "fr"  # source language
>>> trg = "en"  # target language

>>> model_name = f"Helsinki-NLP/opus-mt-{src}-{trg}"
>>> model = MarianMTModel.from_pretrained(model_name)
>>> tokenizer = AutoTokenizer.from_pretrained(model_name)

>>> sample_text = "où est l'arrêt de bus ?"
>>> batch = tokenizer([sample_text], return_tensors="pt")

>>> generated_ids = model.generate(**batch)
>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
"Where's the bus stop?"

MarianForCausalLM

class transformers.MarianForCausalLM

< >

( config )

forward

< >

( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None encoder_hidden_states: torch.FloatTensor | None = None encoder_attention_mask: torch.FloatTensor | None = None past_key_values: transformers.cache_utils.Cache | None = None inputs_embeds: torch.FloatTensor | None = None labels: torch.LongTensor | None = None use_cache: bool | None = None logits_to_keep: int | torch.Tensor = 0 **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示未掩码的标记,
    • 0 表示已掩码的标记。

    什么是注意力掩码?

  • encoder_hidden_states (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选) — 编码器最后一层输出的隐藏状态序列。如果模型配置为解码器,则用于交叉注意力。
  • encoder_attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 用于避免对编码器输入的填充标记索引执行注意力的掩码。如果模型配置为解码器,该掩码将用于交叉注意力。掩码值在 [0, 1] 中选择:

    • 1 表示未掩码的标记,
    • 0 表示已掩码的标记。
  • past_key_values (~cache_utils.Cache可选) — 预先计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可用于加速顺序解码。这通常包含模型在之前解码阶段返回的 past_key_values(当 use_cache=Trueconfig.use_cache=True 时)。

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

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

    如果使用 past_key_values,用户应仅输入形状为 (batch_size, unprocessed_length) 的未处理 input_ids(即其过去键值状态未提供给该模型的标记),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选) — 可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望比模型内置的嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联向量,这将非常有用。
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算掩码语言模型损失的标签。索引应位于 [0, ..., config.vocab_size] 或为 -100(参见 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(掩码),损失仅针对标签位于 [0, ..., config.vocab_size] 中的标记计算。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,并可用于加速解码(参见 past_key_values)。
  • logits_to_keep (Union[int, torch.Tensor]可选,默认为 0) — 如果是 int,则计算最后 logits_to_keep 个标记的对数几率(logits)。如果为 0,则计算所有 input_ids 的对数几率(特殊情况)。生成时仅需要最后一个标记的对数几率,仅针对该标记进行计算可以节省显存,这对于长序列或大词汇量的情况尤为显著。如果为 torch.Tensor,则必须是一维的,对应于序列长度维度中要保留的索引。当使用打包张量格式(batch 和序列长度单一维度)时,此功能非常有用。

返回

CausalLMOutputWithCrossAttentions or tuple(torch.FloatTensor)

一个 CausalLMOutputWithCrossAttentions 或一个 torch.FloatTensor 元组(如果传入 return_dict=Falseconfig.return_dict=False 时),根据配置(MarianConfig)和输入包含不同的元素。

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

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

  • loss (torch.FloatTensor 形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

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

  • 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 后的注意力权重,用于计算自注意力头中的加权平均值。

  • 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 后的交叉注意力权重,用于计算交叉注意力头中的加权平均。

  • past_key_values (Cache,*可选*,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 这是一个 Cache 实例。欲了解更多细节,请参阅我们的 KV 缓存指南

    包含预先计算的隐藏状态(注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

示例

>>> from transformers import AutoTokenizer, MarianForCausalLM

>>> tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-fr-en")
>>> model = MarianForCausalLM.from_pretrained("Helsinki-NLP/opus-mt-fr-en")
>>> assert model.config.is_decoder, f"{model.__class__} has to be configured as a decoder."
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs)

>>> logits = outputs.logits
>>> expected_shape = [1, inputs.input_ids.shape[-1], model.config.vocab_size]
>>> list(logits.shape) == expected_shape
True
在 GitHub 上更新

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