Transformers 4.37 中文文档(四十二)(2)

本文涉及的产品
图片翻译,图片翻译 100张
NLP自然语言处理_高级版,每接口累计50万次
语种识别,语种识别 100万字符
简介: Transformers 4.37 中文文档(四十二)

Transformers 4.37 中文文档(四十二)(1)https://developer.aliyun.com/article/1565015


MarianMT

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/marian

概述

一个用于翻译模型的框架,使用与 BART 相同的模型。翻译应该与每个模型卡链接的测试集中的输出类似,但不完全相同。此模型由sshleifer贡献。

实施说明

  • 每个模型在磁盘上约为 298 MB,共有 1000 多个模型。
  • 支持的语言对列表可以在这里找到。
  • 模型最初由Jörg Tiedemann使用Marian C++库进行训练,该库支持快速训练和翻译。
  • 所有模型都是具有 6 层的 transformer 编码器-解码器。每个模型的性能都记录在模型卡中。
  • 不支持需要 BPE 预处理的 80 个 opus 模型。
  • 建模代码与 BartForConditionalGeneration 相同,只有一些小修改:
  • 静态(正弦)位置嵌入(MarianConfig.static_position_embeddings=True
  • 没有 layernorm_embedding(MarianConfig.normalize_embedding=False
  • 模型从pad_token_id(其 token_embedding 为 0)作为前缀开始生成(Bart 使用),
  • 可以在convert_marian_to_pytorch.py中找到批量转换模型的代码。

命名

  • 所有模型名称都采用以下格式:Helsinki-NLP/opus-mt-{src}-{tgt}
  • 用于命名模型的语言代码不一致。两位代码通常可以在这里找到,三位代码需要搜索“language code {code}”。
  • 格式为es_AR的代码通常是code_{region}。那个是来自阿根廷的西班牙语。
  • 这些模型分两个阶段转换。前 1000 个模型使用 ISO-639-2 代码标识语言,第二组使用 ISO-639-5 代码和 ISO-639-2 代码的组合。

示例

  • 由于 Marian 模型比库中其他许多翻译模型更小,因此它们可以用于微调实验和集成测试。
  • 在 GPU 上微调

多语言模型

  • 所有模型名称都采用以下格式:Helsinki-NLP/opus-mt-{src}-{tgt}
  • 如果模型可以输出多种语言,则应通过在src_text前添加所需的输出语言来指定语言代码。
  • 您可以在模型卡中查看模型支持的语言代码,如opus-mt-en-roa中的目标成分。
  • 请注意,如果模型仅在源端是多语言的,例如Helsinki-NLP/opus-mt-roa-en,则不需要语言代码。

来自Tatoeba-Challenge 存储库的新多语言模型需要 3 个字符的语言代码:

>>> from transformers import MarianMTModel, MarianTokenizer
>>> src_text = [
...     ">>fra<< this is a sentence in english that we want to translate to french",
...     ">>por<< This should go to portuguese",
...     ">>esp<< And this to Spanish",
... ]
>>> model_name = "Helsinki-NLP/opus-mt-en-roa"
>>> tokenizer = MarianTokenizer.from_pretrained(model_name)
>>> print(tokenizer.supported_language_codes)
['>>zlm_Latn<<', '>>mfe<<', '>>hat<<', '>>pap<<', '>>ast<<', '>>cat<<', '>>ind<<', '>>glg<<', '>>wln<<', '>>spa<<', '>>fra<<', '>>ron<<', '>>por<<', '>>ita<<', '>>oci<<', '>>arg<<', '>>min<<']
>>> model = MarianMTModel.from_pretrained(model_name)
>>> translated = model.generate(**tokenizer(src_text, return_tensors="pt", padding=True))
>>> [tokenizer.decode(t, skip_special_tokens=True) for t in translated]
["c'est une phrase en anglais que nous voulons traduire en français",
 'Isto deve ir para o português.',
 'Y esto al español']

以下是查看 hub 上所有可用预训练模型的代码:

from huggingface_hub import list_models
model_list = list_models()
org = "Helsinki-NLP"
model_ids = [x.modelId for x in model_list if x.modelId.startswith(org)]
suffix = [x.split("/")[1] for x in model_ids]
old_style_multi_models = [f"{org}/{s}" for s in suffix if s != s.lower()]

旧风格多语言模型

这些是从 OPUS-MT-Train 存储库移植的旧风格多语言模型:以及每个语言组的成员:

['Helsinki-NLP/opus-mt-NORTH_EU-NORTH_EU',
 'Helsinki-NLP/opus-mt-ROMANCE-en',
 'Helsinki-NLP/opus-mt-SCANDINAVIA-SCANDINAVIA',
 'Helsinki-NLP/opus-mt-de-ZH',
 'Helsinki-NLP/opus-mt-en-CELTIC',
 'Helsinki-NLP/opus-mt-en-ROMANCE',
 'Helsinki-NLP/opus-mt-es-NORWAY',
 'Helsinki-NLP/opus-mt-fi-NORWAY',
 'Helsinki-NLP/opus-mt-fi-ZH',
 'Helsinki-NLP/opus-mt-fi_nb_no_nn_ru_sv_en-SAMI',
 'Helsinki-NLP/opus-mt-sv-NORWAY',
 'Helsinki-NLP/opus-mt-sv-ZH']
GROUP_MEMBERS = {
 'ZH': ['cmn', 'cn', 'yue', 'ze_zh', 'zh_cn', 'zh_CN', 'zh_HK', 'zh_tw', 'zh_TW', 'zh_yue', 'zhs', 'zht', 'zh'],
 'ROMANCE': ['fr', 'fr_BE', 'fr_CA', 'fr_FR', 'wa', 'frp', 'oc', 'ca', 'rm', 'lld', 'fur', 'lij', 'lmo', 'es', 'es_AR', 'es_CL', 'es_CO', 'es_CR', 'es_DO', 'es_EC', 'es_ES', 'es_GT', 'es_HN', 'es_MX', 'es_NI', 'es_PA', 'es_PE', 'es_PR', 'es_SV', 'es_UY', 'es_VE', 'pt', 'pt_br', 'pt_BR', 'pt_PT', 'gl', 'lad', 'an', 'mwl', 'it', 'it_IT', 'co', 'nap', 'scn', 'vec', 'sc', 'ro', 'la'],
 'NORTH_EU': ['de', 'nl', 'fy', 'af', 'da', 'fo', 'is', 'no', 'nb', 'nn', 'sv'],
 'SCANDINAVIA': ['da', 'fo', 'is', 'no', 'nb', 'nn', 'sv'],
 'SAMI': ['se', 'sma', 'smj', 'smn', 'sms'],
 'NORWAY': ['nb_NO', 'nb', 'nn_NO', 'nn', 'nog', 'no_nb', 'no'],
 'CELTIC': ['ga', 'cy', 'br', 'gd', 'kw', 'gv']
}

将英语翻译成多种罗曼语言的示例,使用旧风格的 2 字符语言代码

>>> from transformers import MarianMTModel, MarianTokenizer
>>> src_text = [
...     ">>fr<< this is a sentence in english that we want to translate to french",
...     ">>pt<< This should go to portuguese",
...     ">>es<< And this to Spanish",
... ]
>>> model_name = "Helsinki-NLP/opus-mt-en-ROMANCE"
>>> tokenizer = MarianTokenizer.from_pretrained(model_name)
>>> model = MarianMTModel.from_pretrained(model_name)
>>> translated = model.generate(**tokenizer(src_text, return_tensors="pt", padding=True))
>>> tgt_text = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]
["c'est une phrase en anglais que nous voulons traduire en français", 
 'Isto deve ir para o português.',
 'Y esto al español']

资源

  • 翻译任务指南
  • 总结任务指南
  • 因果语言建模任务指南

MarianConfig

class transformers.MarianConfig

<来源>

( vocab_size = 58101 decoder_vocab_size = None 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.0 decoder_layerdrop = 0.0 use_cache = True is_encoder_decoder = True activation_function = 'gelu' d_model = 1024 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 init_std = 0.02 decoder_start_token_id = 58100 scale_embedding = False pad_token_id = 58100 eos_token_id = 0 forced_eos_token_id = 0 share_encoder_decoder_embeddings = True **kwargs )

参数

  • vocab_size (int, optional, defaults to 58101) — Marian 模型的词汇量。定义了在调用 MarianModel 或 TFMarianModel 时可以由inputs_ids表示的不同标记数量。
  • 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 (str or function, 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 比率。
  • max_position_embeddings (int, optional, defaults to 1024) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如 512、1024 或 2048)。
  • init_std (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • encoder_layerdrop (float, optional, defaults to 0.0) — 编码器的 LayerDrop 概率。有关更多详细信息,请参阅 LayerDrop paper)。
  • decoder_layerdrop (float, optional, defaults to 0.0) — 解码器的 LayerDrop 概率。有关更多详细信息,请参阅 LayerDrop paper)。
  • scale_embedding (bool, optional, defaults to False) — 通过除以 sqrt(d_model)来缩放嵌入。
  • use_cache (bool, optional, defaults to True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)
  • forced_eos_token_id (int, optional, defaults to 0) — 当达到max_length时,强制作为最后生成的标记的标记 id。通常设置为eos_token_id

这是用于存储 MarianModel 配置的配置类。根据指定的参数实例化一个 Marian 模型,定义模型架构。使用默认值实例化配置将产生类似于 MarianHelsinki-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 >

( 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: Optional = None separate_vocabs = False **kwargs )

参数

  • source_spm (str) — SentencePiece 文件(通常具有 .spm 扩展名),其中包含源语言的词汇。
  • target_spm (str) — SentencePiece 文件(通常具有 .spm 扩展名),其中包含目标语言的词汇。
  • source_lang (str, optional) — 表示源语言的字符串。
  • target_lang (str, optional) — 表示目标语言的字符串。
  • unk_token (str, optional, 默认为 "") — 未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。
  • eos_token (str, optional, 默认为 "") — 序列结束标记。
  • pad_token (str, optional, 默认为 "") — 用于填充的标记,例如在批处理不同长度的序列时使用。
  • model_max_length (int, optional, 默认为 512) — 模型接受的最大句子长度。
  • additional_special_tokens (List[str], optional, 默认为 ["", ""]) — 分词器使用的额外特殊标记。
  • sp_model_kwargs (dict, optional) — 将传递给 SentencePieceProcessor.__init__() 方法。SentencePiece 的 Python 包装器 可以用于设置:
  • enable_sampling: 启用子词正则化。
  • nbest_size: 单字采样参数。对于 BPE-Dropout 无效。
  • nbest_size = {0,1}: 不执行抽样。
  • nbest_size > 1: 从 nbest_size 结果中抽样。
  • nbest_size < 0: 假设 nbest_size 是无限的,并使用前向过滤和后向抽样算法从所有假设(格子)中抽样。
  • alpha: 用于单字采样的平滑参数,以及用于 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

< source >

( token_ids_0 token_ids_1 = None )

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

PytorchHide Pytorch content

MarianModel

class transformers.MarianModel

< source >

( config: MarianConfig )

参数

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

裸的 Marian 模型输出原始隐藏状态,没有特定的头部。这个模型继承自 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: Union = 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 (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。默认情况下,如果提供填充标记,则将忽略它。
    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
    什么是输入 ID?
  • attention_mask (torch.Tensor 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?
    Marian 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,则只需输入最后的decoder_input_ids(参见past_key_values)。
  • decoder_attention_mask (torch.LongTensor of shape (batch_size, target_sequence_length), optional) — 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。因果掩码也将默认使用。
  • head_mask (torch.Tensor of shape (encoder_layers, encoder_attention_heads), optional) — 在编码器中用于使注意力模块中的选定头部失效的掩码。掩码值在[0, 1]之间选择:
  • 1 表示头部未被掩码
  • 0 表示头部被掩码
  • decoder_head_mask (torch.Tensor of shape (decoder_layers, decoder_attention_heads), optional) — 在解码器中用于使注意力模块中的选定头部失效的掩码。掩码值在[0, 1]之间选择:
  • 1 表示头部未被掩码
  • 0 表示头部被掩码
  • cross_attn_head_mask (torch.Tensor of shape (decoder_layers, decoder_attention_heads), optional) — 在解码器中用于使交叉注意力模块中的选定头部失效的掩码。掩码值在[0, 1]之间选择:
  • 1 表示头部未被掩码
  • 0 表示头部被掩码
  • encoder_outputstuple(tuple(torch.FloatTensor)可选)— 元组包括(last_hidden_state可选hidden_states可选attentions) last_hidden_state的形状为(batch_size, sequence_length, hidden_size)可选)是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
  • past_key_valuestuple(tuple(torch.FloatTensor))可选,当传递use_cache=Trueconfig.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)的张量。
    包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
    如果使用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_idsdecoder_inputs_embeds都未设置,则decoder_inputs_embedsinputs_embeds的值。
  • use_cachebool可选)— 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dictbool可选)— 是否返回 ModelOutput 而不是普通元组。

返回

transformers.modeling_outputs.Seq2SeqModelOutput 或tuple(torch.FloatTensor)

transformers.modeling_outputs.Seq2SeqModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=Falseconfig.return_dict=False)包括根据配置(MarianConfig)和输入的不同元素。

  • 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)), optional, returned when use_cache=True is passed or when config.use_cache=True) — 长度为 config.n_layerstuple(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), optional, returned when output_hidden_states=True is passed or when config.output_hidden_states=True) — torch.FloatTensor 元组(如果模型有嵌入层,则为嵌入层的输出 + 每一层的输出),形状为 (batch_size, sequence_length, hidden_size)
    解码器在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • decoder_attentions (tuple(torch.FloatTensor), optional, returned when output_attentions=True is passed or when 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) — 每一层的 torch.FloatTensor 元组,形状为 (batch_size, num_heads, sequence_length, sequence_length)
    解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
  • encoder_last_hidden_state (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)optional) — 模型编码器最后一层的隐藏状态序列。
  • encoder_hidden_states (tuple(torch.FloatTensor), optional, returned when output_hidden_states=True is passed or when config.output_hidden_states=True) — torch.FloatTensor 元组(如果模型有嵌入层,则为嵌入层的输出 + 每一层的输出),形状为 (batch_size, sequence_length, hidden_size)
    编码器在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • encoder_attentions (tuple(torch.FloatTensor), optional, returned when output_attentions=True is passed or when config.output_attentions=True) — 每一层的 torch.FloatTensor 元组,形状为 (batch_size, num_heads, sequence_length, sequence_length)
    编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。

MarianModel 的前向方法,覆盖了 __call__ 特殊方法。

虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用 Module 实例,而不是在此处调用,因为前者会处理运行前后的处理步骤,而后者会默默地忽略它们。

示例:

>>> 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

< source >

( config: MarianConfig )

参数

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

具有语言建模头部的 Marian 模型。可用于摘要。该模型继承自 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: Union = 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(形状为(batch_size, sequence_length)torch.LongTensor)— 输入序列标记在词汇表中的索引。默认情况下将忽略填充。
    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
    什么是输入 ID?
  • attention_mask(形状为(batch_size, sequence_length)torch.Tensor可选)— 用于避免在填充标记索引上执行注意力的掩码。掩码值选定在[0, 1]
  • 1 表示未被掩盖的标记,
  • 0 表示被掩盖的标记。
  • 什么是注意力掩码?
  • decoder_input_ids(形状为(batch_size, target_sequence_length)torch.LongTensor可选)— 解码器输入序列标记在词汇表中的索引。
    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
    什么是解码器输入 ID?
    Marian 使用pad_token_id作为decoder_input_ids生成的起始标记。如果使用past_key_values,则只需选择最后的decoder_input_ids输入(参见past_key_values)。
  • decoder_attention_mask(形状为(batch_size, target_sequence_length)torch.LongTensor可选)— 默认行为:生成一个张量,忽略decoder_input_ids中的填充标记。默认情况下还将使用因果掩码。
  • head_mask(形状为(encoder_layers, encoder_attention_heads)torch.Tensor可选)— 用于使编码器中注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]
  • 1 表示头部未被掩盖
  • 0 表示头部被掩盖
  • decoder_head_mask(形状为(decoder_layers, decoder_attention_heads)torch.Tensor可选)— 用于使解码器中注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]
  • 1 表示头部未被掩盖
  • 0 表示头部被掩盖
  • cross_attn_head_mask (torch.Tensor of shape (decoder_layers, decoder_attention_heads), optional) — 用于在解码器中使交叉注意力模块的特定头部失效的掩码。掩码值选在[0, 1]之间:
  • 1 表示头部未被掩码,
  • 0 表示头部被掩码。
  • encoder_outputs (tuple(tuple(torch.FloatTensor), optional) — 元组包含(last_hidden_state, optional: hidden_states, optional: attentions) last_hidden_state的形状为(batch_size, sequence_length, hidden_size)optional)是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
  • past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当传递use_cache=Trueconfig.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)的张量。
    包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
    如果使用了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_idsdecoder_inputs_embeds都未设置,则decoder_inputs_embedsinputs_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, optional) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor of shape (batch_size, sequence_length), optional) — 用于计算掩码语言建模损失的标签。索引应该在[0, ..., config.vocab_size]或-100 之间(参见input_ids文档字符串)。将索引设置为-100的标记将被忽略(掩码),损失仅计算具有标签在[0, ..., config.vocab_size]中的标记。

返回

transformers.modeling_outputs.Seq2SeqLMOutput 或 tuple(torch.FloatTensor)

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

  • loss (torch.FloatTensor,形状为(1,)optional, 当提供labels时返回) — 语言建模损失。
  • logits (torch.FloatTensor,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当传递use_cache=Trueconfig.use_cache=True时返回) — 长度为config.n_layerstuple(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)的张量。
    包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。
  • decoder_hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出)。
    解码器在每个层的输出的隐藏状态加上初始嵌入输出。
  • decoder_attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每个层一个)。
    解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.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)optional) — 模型编码器最后一层的隐藏状态序列。
  • encoder_hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出)。
    编码器在每个层的输出的隐藏状态加上初始嵌入输出。
  • encoder_attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每个层一个)。
    编码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。

MarianMTModel 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的步骤需要在此函数中定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。

Marian-nmt 的 transformer.h(c++)的 Pytorch 版本。设计用于 OPUS-NMT 翻译检查点。可用模型列在这里

示例:

>>> 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?"


Transformers 4.37 中文文档(四十二)(3)https://developer.aliyun.com/article/1565018

相关文章
|
4月前
|
PyTorch 算法框架/工具 索引
Transformers 4.37 中文文档(四十二)(6)
Transformers 4.37 中文文档(四十二)
34 5
|
4月前
|
PyTorch TensorFlow 算法框架/工具
Transformers 4.37 中文文档(四十二)(5)
Transformers 4.37 中文文档(四十二)
44 4
|
4月前
|
存储 自然语言处理 PyTorch
Transformers 4.37 中文文档(四十六)(1)
Transformers 4.37 中文文档(四十六)
20 2
|
4月前
|
缓存 自然语言处理 PyTorch
Transformers 4.37 中文文档(四十六)(5)
Transformers 4.37 中文文档(四十六)
40 7
|
4月前
|
XML 测试技术 数据格式
Transformers 4.37 中文文档(四十二)(4)
Transformers 4.37 中文文档(四十二)
34 3
|
4月前
|
PyTorch TensorFlow API
Transformers 4.37 中文文档(四十二)(3)
Transformers 4.37 中文文档(四十二)
21 2
|
4月前
|
PyTorch TensorFlow 算法框架/工具
Transformers 4.37 中文文档(四十六)(3)
Transformers 4.37 中文文档(四十六)
16 2
|
4月前
|
自然语言处理 PyTorch 区块链
Transformers 4.37 中文文档(四十二)(1)
Transformers 4.37 中文文档(四十二)
73 1
|
4月前
|
自然语言处理 PyTorch TensorFlow
Transformers 4.37 中文文档(四十六)(2)
Transformers 4.37 中文文档(四十六)
33 1
|
4月前
|
存储 PyTorch 算法框架/工具
Transformers 4.37 中文文档(四十六)(4)
Transformers 4.37 中文文档(四十六)
24 1