Transformers 文档

LXMERT

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

LXMERT

PyTorch TensorFlow

概述

LXMERT 模型由 Hao Tan 和 Mohit Bansal 在 LXMERT: Learning Cross-Modality Encoder Representations from Transformers 中提出。它是一系列双向 Transformer 编码器(一个用于视觉模态,一个用于语言模态,然后一个用于融合两种模态),通过结合掩码语言建模、视觉-语言文本对齐、ROI 特征回归、掩码视觉属性建模、掩码视觉对象建模和视觉问答目标进行预训练。预训练包括多个多模态数据集:MSCOCO、Visual-Genome + Visual-Genome 问答、VQA 2.0 和 GQA。

论文摘要如下:

视觉与语言推理需要理解视觉概念、语言语义,最重要的是,这两种模态之间的对齐和关系。因此,我们提出了 LXMERT(Learning Cross-Modality Encoder Representations from Transformers)框架来学习这些视觉与语言的连接。在 LXMERT 中,我们构建了一个大型 Transformer 模型,它包含三个编码器:一个对象关系编码器、一个语言编码器和一个跨模态编码器。接下来,为了使我们的模型能够连接视觉和语言语义,我们通过五种多样化的代表性预训练任务,使用大量的图像-句子对对模型进行预训练:掩码语言建模、掩码对象预测(特征回归和标签分类)、跨模态匹配和图像问答。这些任务有助于学习模态内和跨模态关系。在从我们的预训练参数进行微调后,我们的模型在两个视觉问答数据集(即 VQA 和 GQA)上取得了最先进的结果。我们还展示了我们的预训练跨模态模型通过将其适应到具有挑战性的视觉推理任务 NLVR 的泛化能力,并将之前的最佳结果提高了 22% 绝对值(从 54% 到 76%)。最后,我们详细展示了消融研究,以证明我们新颖的模型组件和预训练策略都对我们强大的结果做出了重大贡献;并展示了不同编码器的一些注意力可视化。

此模型由 eltoto1219 贡献。原始代码可在此处找到。

使用技巧

  • 视觉特征嵌入中无需使用边界框,任何类型的视觉空间特征都适用。
  • LXMERT 输出的语言隐藏状态和视觉隐藏状态都经过跨模态层,因此它们包含来自两种模态的信息。要访问仅关注自身的模态,请从元组的第一个输入中选择视觉/语言隐藏状态。
  • 双向跨模态编码器注意力仅在语言模态用作输入且视觉模态用作上下文向量时才返回注意力值。此外,虽然跨模态编码器包含各自模态的自注意力和交叉注意力,但仅返回交叉注意力,而两个自注意力输出都被忽略。

资源

LxmertConfig

class transformers.LxmertConfig

< >

( vocab_size = 30522 hidden_size = 768 num_attention_heads = 12 num_qa_labels = 9500 num_object_labels = 1600 num_attr_labels = 400 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 512 type_vocab_size = 2 initializer_range = 0.02 layer_norm_eps = 1e-12 l_layers = 9 x_layers = 5 r_layers = 5 visual_feat_dim = 2048 visual_pos_dim = 4 visual_loss_normalizer = 6.67 task_matched = True task_mask_lm = True task_obj_predict = True task_qa = True visual_obj_loss = True visual_attr_loss = True visual_feat_loss = True **kwargs )

参数

  • vocab_size (int, 可选, 默认为 30522) — LXMERT 词汇表大小。定义了调用 LxmertModelTFLxmertModel 时传入的 inputs_ids 可以表示的不同标记的数量。
  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化层的维度。
  • num_attention_heads (int, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数量。
  • num_qa_labels (int, 可选, 默认为 9500) — 这表示共有不同问答 (QA) 标签的总数。如果使用多个带有 QA 的数据集,用户需要考虑所有数据集拥有的标签总数。
  • num_object_labels (int, 可选, 默认为 1600) — 这表示 lxmert 将能够分类的语义上唯一的对象总数,作为池化对象特征的归属。
  • num_attr_labels (int, 可选, 默认为 400) — 这表示 lxmert 将能够分类为拥有的语义上唯一的属性总数,作为池化对象特征的归属。
  • intermediate_size (int, 可选, 默认为 3072) — Transformer 编码器中“中间”(通常称为前馈)层的维度。
  • hidden_act (strCallable, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持 "gelu""relu""silu""gelu_new"
  • hidden_dropout_prob (float, 可选, 默认为 0.1) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, 可选, 默认为 0.1) — 注意力概率的 dropout 比率。
  • max_position_embeddings (int, 可选, 默认为 512) — 此模型可能使用的最大序列长度。通常为了以防万一会将其设置为一个较大的值(例如 512 或 1024 或 2048)。
  • type_vocab_size (int, 可选, 默认为 2) — 传入 BertModeltoken_type_ids 的词汇表大小。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • l_layers (int, 可选, 默认为 9) — Transformer 语言编码器中的隐藏层数。
  • x_layers (int, 可选, 默认为 5) — Transformer 跨模态编码器中的隐藏层数。
  • r_layers (int, 可选, 默认为 5) — Transformer 视觉编码器中的隐藏层数。
  • visual_feat_dim (int, 可选, 默认为 2048) — 这表示用作模型输入的池化对象特征的最后一个维度,表示每个对象特征本身的大小。
  • visual_pos_dim (int, 可选, 默认为 4) — 这表示混入视觉特征中的空间特征的数量。默认设置为 4,因为这通常表示边界框的位置,即 (x, y, 宽度, 高度)。
  • visual_loss_normalizer (float, 可选, 默认为 6.67) — 这表示如果预训练期间决定使用多个基于视觉的损失目标进行训练,则每个视觉损失所乘的缩放因子。
  • task_matched (bool, 可选, 默认为 True) — 此任务用于句子-图像匹配。如果句子正确描述了图像,则标签为 1。如果句子未正确描述图像,则标签为 0。
  • task_mask_lm (bool, 可选, 默认为 True) — 是否将掩码语言建模(如 BERT 等预训练模型中使用的)添加到损失目标。
  • task_obj_predict (bool, 可选, 默认为 True) — 是否将对象预测、属性预测和特征回归添加到损失目标。
  • task_qa (bool, 可选, 默认为 True) — 是否将问答损失添加到目标函数中。
  • visual_obj_loss (bool, 可选, 默认为 True) — 是否计算对象预测损失目标。
  • visual_attr_loss (bool, 可选, 默认为 True) — 是否计算属性预测损失目标。
  • visual_feat_loss (bool, 可选, 默认为 True) — 是否计算特征回归损失目标。

这是配置类,用于存储 LxmertModelTFLxmertModel 的配置。它用于根据指定参数实例化 LXMERT 模型,定义模型架构。使用默认值实例化配置将生成与 Lxmert unc-nlp/lxmert-base-uncased 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PretrainedConfig 的文档。

LxmertTokenizer

class transformers.LxmertTokenizer

< >

( vocab_file do_lower_case = True do_basic_tokenize = True never_split = None unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None clean_up_tokenization_spaces = True **kwargs )

参数

  • vocab_file (str) — 包含词汇的文件。
  • do_lower_case (bool, 可选, 默认为 True) — 分词时是否将输入转换为小写。
  • do_basic_tokenize (bool, 可选, 默认为 True) — 在WordPiece之前是否进行基本分词。
  • never_split (Iterable, 可选) — 永远不会在分词期间拆分的标记集合。仅在 do_basic_tokenize=True 时有效。
  • unk_token (str, 可选, 默认为 "[UNK]") — 未知标记。不在词汇表中的标记不能转换为 ID,而是设置为此标记。
  • sep_token (str, 可选, 默认为 "[SEP]") — 分隔符标记,用于从多个序列构建序列时,例如用于序列分类的两个序列或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。
  • pad_token (str, 可选, 默认为 "[PAD]") — 用于填充的标记,例如在对不同长度的序列进行批处理时。
  • cls_token (str, 可选, 默认为 "[CLS]") — 分类器标记,用于进行序列分类(对整个序列进行分类而非按标记分类)时使用。当使用特殊标记构建序列时,它是序列的第一个标记。
  • mask_token (str, 可选, 默认为 "[MASK]") — 用于掩码值的标记。在使用掩码语言建模训练此模型时使用此标记。这是模型将尝试预测的标记。
  • tokenize_chinese_chars (bool, 可选, 默认为 True) — 是否对中文字符进行分词。

    对于日语应停用此功能(参见此问题)。

  • strip_accents (bool, 可选) — 是否去除所有重音。如果未指定此选项,则将由 lowercase 的值决定(与原始 Lxmert 中相同)。
  • clean_up_tokenization_spaces (bool, 可选, 默认为 True) — 解码后是否清理空格,清理包括移除额外的空格等潜在的“人工痕迹”。

构建 Lxmert 分词器。基于 WordPiece。

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

build_inputs_with_special_tokens

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) List[int]

参数

  • token_ids_0 (List[int]) — 将添加特殊标记的 ID 列表。
  • token_ids_1 (List[int], 可选) — 序列对的第二个 ID 列表(可选)。

返回

List[int]

带有适当特殊标记的输入ID列表。

通过连接和添加特殊标记,为序列分类任务从一个序列或一对序列构建模型输入。Lxmert 序列具有以下格式

  • 单个序列:[CLS] X [SEP]
  • 序列对:[CLS] A [SEP] B [SEP]

convert_tokens_to_string

< >

( tokens )

将标记序列(字符串)转换为单个字符串。

get_special_tokens_mask

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None already_has_special_tokens: bool = False ) List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], 可选) — 序列对的第二个 ID 列表(可选)。
  • already_has_special_tokens (bool, 可选, 默认为 False) — 标记列表是否已按模型特殊标记格式化。

返回

List[int]

一个范围为 [0, 1] 的整数列表:1 表示特殊标记,0 表示序列标记。

从没有添加特殊标记的标记列表中检索序列ID。此方法在使用分词器prepare_for_model方法添加特殊标记时调用。

LxmertTokenizerFast

class transformers.LxmertTokenizerFast

< >

( vocab_file = None tokenizer_file = None do_lower_case = True unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None **kwargs )

参数

  • vocab_file (str) — 包含词汇的文件。
  • do_lower_case (bool, 可选, 默认为 True) — 分词时是否将输入转换为小写。
  • unk_token (str, 可选, 默认为 "[UNK]") — 未知标记。不在词汇表中的标记不能转换为 ID,而是设置为此标记。
  • sep_token (str, 可选, 默认为 "[SEP]") — 分隔符标记,用于从多个序列构建序列时,例如用于序列分类的两个序列或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。
  • pad_token (str, 可选, 默认为 "[PAD]") — 用于填充的标记,例如在对不同长度的序列进行批处理时。
  • cls_token (str, 可选, 默认为 "[CLS]") — 分类器标记,用于进行序列分类(对整个序列进行分类而非按标记分类)时使用。当使用特殊标记构建序列时,它是序列的第一个标记。
  • mask_token (str, 可选, 默认为 "[MASK]") — 用于掩码值的标记。在使用掩码语言建模训练此模型时使用此标记。这是模型将尝试预测的标记。
  • clean_text (bool, 可选, 默认为 True) — 在分词前是否清理文本,通过移除任何控制字符并将所有空格替换为经典空格。
  • tokenize_chinese_chars (bool, 可选, 默认为 True) — 是否对中文字符进行分词。对于日语应停用此功能(参见此问题)。
  • strip_accents (bool, 可选) — 是否去除所有重音。如果未指定此选项,则将由 lowercase 的值决定(与原始 Lxmert 中相同)。
  • wordpieces_prefix (str, 可选, 默认为 "##") — 子词的前缀。

构建一个“快速”Lxmert 分词器(由 HuggingFace 的 tokenizers 库支持)。基于 WordPiece。

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

build_inputs_with_special_tokens

< >

( token_ids_0 token_ids_1 = None ) List[int]

参数

  • token_ids_0 (List[int]) — 将添加特殊标记的 ID 列表。
  • token_ids_1 (List[int], 可选) — 序列对的第二个 ID 列表(可选)。

返回

List[int]

带有适当特殊标记的输入ID列表。

通过连接和添加特殊标记,为序列分类任务从一个序列或一对序列构建模型输入。Lxmert 序列具有以下格式

  • 单个序列:[CLS] X [SEP]
  • 序列对:[CLS] A [SEP] B [SEP]

Lxmert 特定的输出

class transformers.models.lxmert.modeling_lxmert.LxmertModelOutput

< >

( language_output: typing.Optional[torch.FloatTensor] = None vision_output: typing.Optional[torch.FloatTensor] = None pooled_output: typing.Optional[torch.FloatTensor] = None language_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None vision_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None language_attentions: typing.Optional[tuple[torch.FloatTensor]] = None vision_attentions: typing.Optional[tuple[torch.FloatTensor]] = None cross_encoder_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )

参数

  • language_output (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor) — 语言编码器最后一层输出的隐藏状态序列。
  • vision_output (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor) — 视觉编码器最后一层输出的隐藏状态序列。
  • pooled_output (形状为 (batch_size, hidden_size)torch.FloatTensor) — 序列第一个标记(分类、CLS、标记)的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。
  • language_hidden_states (tuple(torch.FloatTensor), 可选, 当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(torch.FloatTensor), 可选, 当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(torch.FloatTensor), 可选, 当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
  • vision_attentions (tuple(torch.FloatTensor), 可选, 当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_encoder_attentions (tuple(torch.FloatTensor), 可选, 当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

Lxmert 的输出,包含语言、视觉和跨模态编码器的最后隐藏状态、池化输出和注意力概率。(注意:Lxmert 中的视觉编码器被称为“关系”编码器)

class transformers.models.lxmert.modeling_lxmert.LxmertForPreTrainingOutput

< >

( loss: typing.Optional[torch.FloatTensor] = None prediction_logits: typing.Optional[torch.FloatTensor] = None cross_relationship_score: typing.Optional[torch.FloatTensor] = None question_answering_score: typing.Optional[torch.FloatTensor] = None language_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None vision_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None language_attentions: typing.Optional[tuple[torch.FloatTensor]] = None vision_attentions: typing.Optional[tuple[torch.FloatTensor]] = None cross_encoder_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )

参数

  • loss (*可选*, 当提供 labels 时返回, 形状为 (1,)torch.FloatTensor) — 总损失,是掩码语言建模损失和下一个序列预测(分类)损失的总和。
  • prediction_logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数(SoftMax 之前的每个词汇标记的分数)。
  • cross_relationship_score (形状为 (batch_size, 2)torch.FloatTensor) — 文本匹配目标(分类)头的预测分数(SoftMax 之前的 True/False 延续分数)。
  • question_answering_score (形状为 (batch_size, n_qa_answers)torch.FloatTensor) — 问答目标(分类)的预测分数。
  • language_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

的输出类型 LxmertForPreTraining

transformers.models.lxmert.modeling_lxmert.LxmertForQuestionAnsweringOutput

< >

( loss: typing.Optional[torch.FloatTensor] = None question_answering_score: typing.Optional[torch.FloatTensor] = None language_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None vision_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None language_attentions: typing.Optional[tuple[torch.FloatTensor]] = None vision_attentions: typing.Optional[tuple[torch.FloatTensor]] = None cross_encoder_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )

参数

  • loss (*可选*,当提供 labels 时返回,形状为 (1,)torch.FloatTensor) — 总损失,是掩码语言建模损失和下一序列预测(分类)损失的总和。
  • question_answering_score (形状为 (batch_size, n_qa_answers)torch.FloatTensor, 可选) — 问答目标(分类)的预测分数。
  • language_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

的输出类型 LxmertForQuestionAnswering

transformers.models.lxmert.modeling_tf_lxmert.TFLxmertModelOutput

< >

( language_output: tf.Tensor | None = None vision_output: tf.Tensor | None = None pooled_output: tf.Tensor | None = None language_hidden_states: tuple[tf.Tensor] | None = None vision_hidden_states: tuple[tf.Tensor] | None = None language_attentions: tuple[tf.Tensor] | None = None vision_attentions: tuple[tf.Tensor] | None = None cross_encoder_attentions: tuple[tf.Tensor] | None = None )

参数

  • language_output (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor) — 语言编码器最后一层输出的隐藏状态序列。
  • vision_output (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor) — 视觉编码器最后一层输出的隐藏状态序列。
  • pooled_output (形状为 (batch_size, hidden_size)tf.Tensor) — 序列中第一个 token(分类、CLS token)的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。
  • language_hidden_states (tuple(tf.Tensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(tf.Tensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(tf.Tensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(tf.Tensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(tf.Tensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

Lxmert 的输出,包含语言、视觉和跨模态编码器的最后隐藏状态、池化输出和注意力概率。(注意:Lxmert 中的视觉编码器被称为“关系”编码器)

transformers.models.lxmert.modeling_tf_lxmert.TFLxmertForPreTrainingOutput

< >

( loss: tf.Tensor | None = None prediction_logits: tf.Tensor | None = None cross_relationship_score: tf.Tensor | None = None question_answering_score: tf.Tensor | None = None language_hidden_states: tuple[tf.Tensor] | None = None vision_hidden_states: tuple[tf.Tensor] | None = None language_attentions: tuple[tf.Tensor] | None = None vision_attentions: tuple[tf.Tensor] | None = None cross_encoder_attentions: tuple[tf.Tensor] | None = None )

参数

  • loss (可选,当提供 labels 时返回,形状为 (1,)tf.Tensor) — 总损失,是掩码语言建模损失和下一序列预测(分类)损失的总和。
  • prediction_logits (形状为 (batch_size, sequence_length, config.vocab_size)tf.Tensor) — 语言建模头的预测分数(SoftMax 之前每个词汇 token 的分数)。
  • cross_relationship_score (形状为 (batch_size, 2)tf.Tensor) — 文本匹配目标(分类)头的预测分数(SoftMax 之前的 True/False 延续分数)。
  • question_answering_score (形状为 (batch_size, n_qa_answers)tf.Tensor) — 问答目标(分类)的预测分数。
  • language_hidden_states (tuple(tf.Tensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(tf.Tensor), 可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(tf.Tensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(tf.Tensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(tf.Tensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

的输出类型 LxmertForPreTraining

Pytorch
隐藏 Pytorch 内容

LxmertModel

transformers.LxmertModel

< >

( config )

参数

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

Lxmert 裸模型,输出原始隐藏状态,顶部无任何特定头部。

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

此模型也是 PyTorch torch.nn.Module 子类。将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档了解所有与一般用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None visual_feats: typing.Optional[torch.FloatTensor] = None visual_pos: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None visual_attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.lxmert.modeling_lxmert.LxmertModelOutputtuple(torch.FloatTensor)

参数

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

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • visual_feats (形状为 (batch_size, num_visual_features, visual_feat_dim)torch.FloatTensor) — 此输入表示视觉特征。它们是使用 faster-RCNN 模型从边界框中 ROI 池化的对象特征。

    transformers 库目前不提供这些。

  • visual_pos (形状为 (batch_size, num_visual_features, visual_pos_dim)torch.FloatTensor) — 此输入表示与其相对(通过索引)视觉特征对应的空间特征。预训练的 LXMERT 模型期望这些空间特征是 0 到 1 之间归一化的边界框。

    transformers 库目前不提供这些。

  • attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor, 可选) — 遮罩,用于避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 中:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • visual_attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor, 可选) — 遮罩,用于避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 中:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • token_type_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 分段 token 索引,用于指示输入的第一部分和第二部分。索引选择在 [0, 1] 中:

    • 0 对应于**句子 A** 的 token,
    • 1 对应于**句子 B** 的 token。

    什么是 token 类型 ID?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — 可选地,你可以选择直接传入嵌入表示,而不是传入 input_ids。如果你想对如何将 input_ids 索引转换为相关向量有比模型内部嵌入查找矩阵更多的控制,这将非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.lxmert.modeling_lxmert.LxmertModelOutputtuple(torch.FloatTensor)

一个 transformers.models.lxmert.modeling_lxmert.LxmertModelOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (LxmertConfig) 和输入。

  • language_output (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor) — 语言编码器最后一层输出的隐藏状态序列。
  • vision_output (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor) — 视觉编码器最后一层输出的隐藏状态序列。
  • pooled_output (形状为 (batch_size, hidden_size)torch.FloatTensor) — 序列中第一个 token(分类、CLS token)的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。线性层
  • language_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

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

尽管前向传播的配方需要在此函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

LxmertForPreTraining

transformers.LxmertForPreTraining

< >

( config )

参数

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

Lxmert 模型,顶部带有指定的预训练头。

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

此模型也是 PyTorch torch.nn.Module 子类。将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档了解所有与一般用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None visual_feats: typing.Optional[torch.FloatTensor] = None visual_pos: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None visual_attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None obj_labels: typing.Optional[dict[str, tuple[torch.FloatTensor, torch.FloatTensor]]] = None matched_label: typing.Optional[torch.LongTensor] = None ans: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) transformers.models.lxmert.modeling_lxmert.LxmertForPreTrainingOutputtuple(torch.FloatTensor)

参数

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

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是 input ID?

  • visual_feats (形状为 (batch_size, num_visual_features, visual_feat_dim)torch.FloatTensor) — 此输入表示视觉特征。它们是使用 faster-RCNN 模型从边界框中 ROI 池化的对象特征)

    Transformers 库目前不提供这些。

  • visual_pos (形状为 (batch_size, num_visual_features, visual_pos_dim)torch.FloatTensor) — 此输入表示与其(通过索引)视觉特征相对应的空间特征。预训练的 LXMERT 模型期望这些空间特征是 0 到 1 范围内的归一化边界框。

    Transformers 库目前不提供这些。

  • attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 遮罩以避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 之间:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • visual_attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 遮罩以避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 之间:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • token_type_ids (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 分段 token 索引,用于指示输入的第一个和第二个部分。索引选择在 [0, 1] 之间:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 ID?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选) — 可选地,除了传递 input_ids,你也可以直接传递嵌入表示。如果你想比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为相关向量,这会很有用。
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算遮罩语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size] 之间(参见 input_ids 文档字符串)。索引设置为 -100 的 token 将被忽略(遮罩),损失只针对标签在 [0, ..., config.vocab_size] 之间的 token 计算。
  • obj_labels (dict[Str -- tuple[Torch.FloatTensor, Torch.FloatTensor]], 可选): 每个键都以每个视觉损失命名,元组的每个元素分别以形状 (batch_size, num_features)(batch_size, num_features, visual_feature_dim) 表示标签 ID 和标签分数。
  • matched_label (形状为 (batch_size,)torch.LongTensor可选) — 用于计算文本输入是否匹配图像(分类)损失的标签。输入应为序列对(参见 input_ids 文档字符串),索引应在 [0, 1] 之间:

    • 0 表示句子与图像不匹配,
    • 1 表示句子与图像匹配。
  • ans (形状为 (batch_size)Torch.Tensor可选) — 正确答案的独热表示 可选
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.lxmert.modeling_lxmert.LxmertForPreTrainingOutputtuple(torch.FloatTensor)

一个 transformers.models.lxmert.modeling_lxmert.LxmertForPreTrainingOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(LxmertConfig)和输入的不同元素。

  • loss (*可选*,当提供 labels 时返回,形状为 (1,)torch.FloatTensor) — 总损失,作为遮罩语言建模损失和下一个序列预测(分类)损失的总和。
  • prediction_logits (torch.FloatTensor 形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前的每个词汇 token 的分数)。
  • cross_relationship_score (形状为 (batch_size, 2)torch.FloatTensor) — 文本匹配目标(分类)头部的预测分数(SoftMax 之前的 True/False 延续分数)。
  • question_answering_score (形状为 (batch_size, n_qa_answers)torch.FloatTensor) — 问答目标(分类)的预测分数。
  • language_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

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

尽管前向传播的配方需要在此函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

示例

LxmertForQuestionAnswering

transformers.LxmertForQuestionAnswering

< >

( config )

参数

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

Lxmert 模型,顶部带有视觉问答头,用于下游问答任务。

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

此模型也是 PyTorch torch.nn.Module 子类。将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档了解所有与一般用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None visual_feats: typing.Optional[torch.FloatTensor] = None visual_pos: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None visual_attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.lxmert.modeling_lxmert.LxmertForQuestionAnsweringOutputtuple(torch.FloatTensor)

参数

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

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是 input ID?

  • visual_feats (形状为 (batch_size, num_visual_features, visual_feat_dim)torch.FloatTensor) — 此输入表示视觉特征。它们是使用 faster-RCNN 模型从边界框中 ROI 池化的对象特征)

    Transformers 库目前不提供这些。

  • visual_pos (形状为 (batch_size, num_visual_features, visual_pos_dim)torch.FloatTensor) — 此输入表示与其(通过索引)视觉特征相对应的空间特征。预训练的 LXMERT 模型期望这些空间特征是 0 到 1 范围内的归一化边界框。

    Transformers 库目前不提供这些。

  • attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 遮罩以避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 之间:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • visual_attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 遮罩以避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 之间:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • token_type_ids (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 分段 token 索引,用于指示输入的第一个和第二个部分。索引选择在 [0, 1] 之间:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 ID?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选) — 可选地,除了传递 input_ids,你也可以直接传递嵌入表示。如果你想比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为相关向量,这会很有用。
  • labels (形状为 (batch_size)Torch.Tensor可选) — 正确答案的独热表示
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.lxmert.modeling_lxmert.LxmertForQuestionAnsweringOutputtuple(torch.FloatTensor)

一个 transformers.models.lxmert.modeling_lxmert.LxmertForQuestionAnsweringOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(LxmertConfig)和输入的不同元素。

  • loss (*可选*,当提供 labels 时返回,形状为 (1,)torch.FloatTensor) — 总损失,作为遮罩语言建模损失和下一个序列预测(分类)损失的总和。
  • question_answering_score (形状为 (batch_size, n_qa_answers)torch.FloatTensor可选) — 问答目标(分类)的预测分数。
  • language_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(torch.FloatTensor), 可选,当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(torch.FloatTensor), 可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

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

尽管前向传播的配方需要在此函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

示例

>>> from transformers import AutoTokenizer, LxmertForQuestionAnswering
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("unc-nlp/lxmert-base-uncased")
>>> model = LxmertForQuestionAnswering.from_pretrained("unc-nlp/lxmert-base-uncased")

>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"

>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()

>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...

>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...
TensorFlow
隐藏 TensorFlow 内容

TFLxmertModel

transformers.TFLxmertModel

< >

( config *inputs **kwargs )

参数

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

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

LXMERT 模型由 Hao Tan 和 Mohit Bansal 在 LXMERT: Learning Cross-Modality Encoder Representations from Transformers 中提出。它是一个视觉和语言 Transformer 模型,在包含 GQA、VQAv2.0、MCSCOCO 标题和 Visual Genome 等多种多模态数据集上进行预训练,采用遮罩语言建模、感兴趣区域特征回归、用于问答属性预测的交叉熵损失以及对象标签预测相结合的方式。

此模型也是一个 keras.Model 子类。将其作为常规 TF 2.0 Keras 模型使用,并参考 TF 2.0 文档了解所有与一般用法和行为相关的事项。

transformers 中的 TensorFlow 模型和层接受两种输入格式

  • 所有输入作为关键字参数(如 PyTorch 模型),或
  • 所有输入作为第一个位置参数中的列表、元组或字典。

支持第二种格式的原因是 Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这种支持,当使用 model.fit() 等方法时,一切都应该“正常工作”——只需以 model.fit() 支持的任何格式传递你的输入和标签即可!但是,如果你想在 Keras 方法(如 fit()predict())之外使用第二种格式,例如在使用 Keras Functional API 创建自己的层或模型时,你可以使用三种可能的方式来将所有输入 Tensor 收集到第一个位置参数中。

  • 只有一个 input_ids 的单个张量,没有其他:model(input_ids)
  • 长度可变的列表,包含一个或多个输入张量,按文档字符串中给出的顺序:model([input_ids, attention_mask])model([input_ids, attention_mask, token_type_ids])
  • 一个字典,其中包含一个或多个与文档字符串中给出的输入名称关联的输入张量:model({"input_ids": input_ids, "token_type_ids": token_type_ids})

请注意,当使用子类化创建模型和层时,你无需担心这些,因为你可以像传递给任何其他 Python 函数一样传递输入!

调用

< >

( input_ids: TFModelInputType | None = None visual_feats: tf.Tensor | None = None visual_pos: tf.Tensor | None = None attention_mask: np.ndarray | tf.Tensor | None = None visual_attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) transformers.models.lxmert.modeling_tf_lxmert.TFLxmertModelOutputtuple(tf.Tensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)np.ndarraytf.Tensor) — 词汇表中输入序列 token 的索引。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call()PreTrainedTokenizer.encode()

    什么是 input ID?

  • visual_feats (形状为 (batch_size, num_visual_features, visual_feat_dim)tf.Tensor) — 此输入表示视觉特征。它们是使用 faster-RCNN 模型从边界框中 ROI 池化的对象特征)

    Transformers 库目前不提供这些。

  • visual_pos (形状为 (batch_size, num_visual_features, visual_feat_dim)tf.Tensor) — 此输入表示与其(通过索引)视觉特征相对应的空间特征。预训练的 LXMERT 模型期望这些空间特征是 0 到 1 范围内的归一化边界框。

    Transformers 库目前不提供这些。

  • attention_mask (形状为 (batch_size, sequence_length)tf.Tensor可选) — 遮罩以避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 之间:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • visual_attention_mask (形状为 (batch_size, sequence_length)tf.Tensor可选) — 遮罩以避免对填充 token 索引执行注意力。遮罩值选择在 [0, 1] 之间:

    • 1 表示**未遮罩**的 token,
    • 0 表示**已遮罩**的 token。

    什么是注意力遮罩?

  • token_type_ids (形状为 (batch_size, sequence_length)tf.Tensor可选) — 分段 token 索引,用于指示输入的第一个和第二个部分。索引选择在 [0, 1] 之间:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 ID?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor可选) — 可选地,除了传递 input_ids,你也可以直接传递嵌入表示。如果你想比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为相关向量,这会很有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在 eager 模式下使用,在图模式下该值将始终设置为 True。
  • training (bool, 可选,默认为 False) — 是否在训练模式下使用模型(某些模块,如 dropout 模块,在训练和评估之间的行为不同)。

返回

transformers.models.lxmert.modeling_tf_lxmert.TFLxmertModelOutputtuple(tf.Tensor)

一个 transformers.models.lxmert.modeling_tf_lxmert.TFLxmertModelOutput 或一个 tf.Tensor 的元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(LxmertConfig)和输入的不同元素。

  • language_output (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor) — 语言编码器最后一层输出的隐藏状态序列。
  • vision_output (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor) — 视觉编码器最后一层输出的隐藏状态序列。
  • pooled_output (形状为 (batch_size, hidden_size)tf.Tensor) — 序列中第一个标记(分类、CLS 标记)的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。线性
  • language_hidden_states (tuple(tf.Tensor), 可选, 当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(tf.Tensor), 可选, 当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(tf.Tensor), 可选, 当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(tf.Tensor), 可选, 当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(tf.Tensor), 可选, 当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

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

尽管前向传播的配方需要在此函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

示例

>>> from transformers import AutoTokenizer, TFLxmertModel
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("unc-nlp/lxmert-base-uncased")
>>> model = TFLxmertModel.from_pretrained("unc-nlp/lxmert-base-uncased")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> outputs = model(inputs)

>>> last_hidden_states = outputs.last_hidden_state

TFLxmertForPreTraining

class transformers.TFLxmertForPreTraining

< >

( config *inputs **kwargs )

参数

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

Lxmert 模型,顶部带有 语言建模 头。

LXMERT 模型由 Hao Tan 和 Mohit Bansal 在 LXMERT: Learning Cross-Modality Encoder Representations from Transformers 中提出。它是一个视觉和语言 Transformer 模型,在包含 GQA、VQAv2.0、MCSCOCO 标题和 Visual Genome 等多种多模态数据集上进行预训练,采用遮罩语言建模、感兴趣区域特征回归、用于问答属性预测的交叉熵损失以及对象标签预测相结合的方式。

此模型也是一个 keras.Model 子类。将其作为常规 TF 2.0 Keras 模型使用,并参考 TF 2.0 文档了解所有与一般用法和行为相关的事项。

transformers 中的 TensorFlow 模型和层接受两种输入格式

  • 所有输入作为关键字参数(如 PyTorch 模型),或
  • 所有输入作为第一个位置参数中的列表、元组或字典。

支持第二种格式的原因是 Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这种支持,当使用 model.fit() 等方法时,一切都应该“正常工作”——只需以 model.fit() 支持的任何格式传递你的输入和标签即可!但是,如果你想在 Keras 方法(如 fit()predict())之外使用第二种格式,例如在使用 Keras Functional API 创建自己的层或模型时,你可以使用三种可能的方式来将所有输入 Tensor 收集到第一个位置参数中。

  • 只有一个 input_ids 的单个张量,没有其他:model(input_ids)
  • 长度可变的列表,包含一个或多个输入张量,按文档字符串中给出的顺序:model([input_ids, attention_mask])model([input_ids, attention_mask, token_type_ids])
  • 一个字典,其中包含一个或多个与文档字符串中给出的输入名称关联的输入张量:model({"input_ids": input_ids, "token_type_ids": token_type_ids})

请注意,当使用子类化创建模型和层时,你无需担心这些,因为你可以像传递给任何其他 Python 函数一样传递输入!

调用

< >

( input_ids: TFModelInputType | None = None visual_feats: tf.Tensor | None = None visual_pos: tf.Tensor | None = None attention_mask: tf.Tensor | None = None visual_attention_mask: tf.Tensor | None = None token_type_ids: tf.Tensor | None = None inputs_embeds: tf.Tensor | None = None masked_lm_labels: tf.Tensor | None = None obj_labels: dict[str, tuple[tf.Tensor, tf.Tensor]] | None = None matched_label: tf.Tensor | None = None ans: tf.Tensor | None = None output_attentions: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None training: bool = False ) transformers.models.lxmert.modeling_tf_lxmert.TFLxmertForPreTrainingOutputtuple(tf.Tensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)np.ndarraytf.Tensor) — 词汇表中输入序列标记的索引。

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

    什么是 input IDs?

  • visual_feats (形状为 (batch_size, num_visual_features, visual_feat_dim)tf.Tensor) — 此输入表示视觉特征。它们是通过 Faster-RCNN 模型从边界框中 ROI 池化的对象特征。

    transformers 库目前不提供这些特征。

  • visual_pos (形状为 (batch_size, num_visual_features, visual_feat_dim)tf.Tensor) — 此输入表示与其相对(通过索引)视觉特征对应的空间特征。预训练的 LXMERT 模型期望这些空间特征在 0 到 1 的范围内进行标准化边界框。

    这些特征目前不被 transformers 库提供。

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

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

    什么是注意力掩码?

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

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

    什么是注意力掩码?

  • token_type_ids (形状为 (batch_size, sequence_length)tf.Tensor, 可选) — 分段标记索引,指示输入的第一个和第二个部分。索引选择在 [0, 1] 中:

    • 0 对应于句子 A 标记,
    • 1 对应于句子 B 标记。

    什么是标记类型 ID?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor, 可选) — 可选地,你可以选择直接传入嵌入表示,而不是传入 input_ids。如果你想更精细地控制如何将 input_ids 索引转换为关联向量,而不是模型的内部嵌入查找矩阵,这将很有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。更多详情请参阅返回张量下的 attentions。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。更多详情请参阅返回张量下的 hidden_states。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在 eager 模式下使用,在图模式下该值将始终设置为 True。
  • training (bool, 可选, 默认为 False) — 是否在训练模式下使用模型(某些模块,如 dropout 模块在训练和评估之间有不同的行为)。
  • masked_lm_labels (形状为 (batch_size, sequence_length)tf.Tensor, 可选) — 用于计算掩码语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size] 范围内(参见 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(被掩码),损失仅针对标签在 [0, ..., config.vocab_size] 范围内的标记计算。
  • obj_labels (dict[Str -- tuple[tf.Tensor, tf.Tensor]], 可选, 默认为 None): 每个键以各个视觉损失命名,元组的每个元素形状分别为 (batch_size, num_features)(batch_size, num_features, visual_feature_dim),分别表示标签 ID 和标签分数。
  • matched_label (形状为 (batch_size,)tf.Tensor, 可选) — 用于计算文本输入是否与图像匹配(分类)损失的标签。输入应为序列对(参见 input_ids 文档字符串)。索引应在 [0, 1] 范围内:

    • 0 表示句子不匹配图像,
    • 1 表示句子匹配图像。
  • ans (形状为 (batch_size)tf.Tensor, 可选, 默认为 None) — 正确答案的独热表示 可选

返回

transformers.models.lxmert.modeling_tf_lxmert.TFLxmertForPreTrainingOutputtuple(tf.Tensor)

一个 transformers.models.lxmert.modeling_tf_lxmert.TFLxmertForPreTrainingOutput 或一个 tf.Tensor 的元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(LxmertConfig)和输入的不同元素。

  • loss (可选, 当提供 labels 时返回, 形状为 (1,)tf.Tensor) — 总损失,是掩码语言建模损失和下一序列预测(分类)损失之和。
  • prediction_logits (tf.Tensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言模型头部的预测分数(SoftMax 之前的每个词汇标记的分数)。
  • cross_relationship_score (形状为 (batch_size, 2)tf.Tensor) — 文本匹配目标(分类)头的预测分数(SoftMax 之前真/假延续的分数)。
  • question_answering_score (形状为 (batch_size, n_qa_answers)tf.Tensor) — 问答目标(分类)的预测分数。
  • language_hidden_states (tuple(tf.Tensor), 可选, 当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • vision_hidden_states (tuple(tf.Tensor), 可选, 当传入 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于输入特征 + 一个用于每个跨模态层的输出)。
  • language_attentions (tuple(tf.Tensor), 可选, 当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • vision_attentions (tuple(tf.Tensor), 可选, 当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
  • cross_encoder_attentions (tuple(tf.Tensor), 可选, 当传入 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。

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

尽管前向传播的配方需要在此函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

< > 在 GitHub 上更新