Transformers 文档

MobileBERT

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

PyTorch TensorFlow

MobileBERT

MobileBERT 是 BERT 的一种轻量级、高效的变体,专为手机等资源受限的设备设计。它保留了 BERT 的架构,但在显著减小模型大小和推理延迟的同时,在自然语言处理任务上保持了强大的性能。MobileBERT 通过瓶颈结构以及精心平衡的自注意力和前馈网络实现了这一点。该模型通过从具有倒置瓶颈结构的大型 BERT 模型中进行知识迁移来训练。

你可以在 Google 组织下找到原始的 MobileBERT 检查点。

点击右侧边栏中的 MobileBERT 模型,查看更多关于如何将 MobileBERT 应用于不同语言任务的示例。

以下示例演示了如何使用 PipelineAutoModel 以及从命令行预测 [MASK] 词元。

流水线
自动模型
Transformers CLI
import torch
from transformers import pipeline

pipeline = pipeline(
    task="fill-mask",
    model="google/mobilebert-uncased",
    torch_dtype=torch.float16,
    device=0
)
pipeline("The capital of France is [MASK].")

注释

  • 输入应在右侧进行填充,因为 BERT 使用绝对位置嵌入。

MobileBertConfig

class transformers.MobileBertConfig

< >

( vocab_size = 30522 hidden_size = 512 num_hidden_layers = 24 num_attention_heads = 4 intermediate_size = 512 hidden_act = 'relu' hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.1 max_position_embeddings = 512 type_vocab_size = 2 initializer_range = 0.02 layer_norm_eps = 1e-12 pad_token_id = 0 embedding_size = 128 trigram_input = True use_bottleneck = True intra_bottleneck_size = 128 use_bottleneck_attention = False key_query_shared_bottleneck = True num_feedforward_networks = 4 normalization_type = 'no_norm' classifier_activation = True classifier_dropout = None **kwargs )

参数

  • vocab_size (int, 可选, 默认为 30522) — MobileBERT 模型的词汇表大小。定义了在调用 MobileBertModelTFMobileBertModel 时,可以通过 inputs_ids 传递的不同词元的数量。
  • hidden_size (int, 可选, 默认为 512) — 编码器层和池化层的维度。
  • num_hidden_layers (int, 可选, 默认为 24) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 4) — Transformer 编码器中每个注意力层的注意力头数量。
  • intermediate_size (int, 可选, 默认为 512) — Transformer 编码器中“中间”(通常称为前馈)层的维度。
  • hidden_act (strfunction, 可选, 默认为 "relu") — 编码器和池化层中的非线性激活函数(函数或字符串)。如果为字符串,支持 "gelu""relu""silu""gelu_new"
  • hidden_dropout_prob (float, 可选, 默认为 0.0) — 嵌入层、编码器和池化层中所有全连接层的丢弃概率。
  • attention_probs_dropout_prob (float, 可选, 默认为 0.1) — 注意力概率的丢弃率。
  • max_position_embeddings (int, 可选, 默认为 512) — 此模型可能使用的最大序列长度。通常,为防止意外情况,应设置一个较大的值(例如 512、1024 或 2048)。
  • type_vocab_size (int, 可选, 默认为 2) — 在调用 MobileBertModelTFMobileBertModel 时传递的 token_type_ids 的词汇表大小。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • pad_token_id (int, 可选, 默认为 0) — 词嵌入中用作填充的词元 ID。
  • embedding_size (int, 可选, 默认为 128) — 词嵌入向量的维度。
  • trigram_input (bool, 可选, 默认为 True) — 是否使用三元组的卷积作为输入。
  • use_bottleneck (bool, 可选, 默认为 True) — 是否在 BERT 中使用瓶颈层。
  • intra_bottleneck_size (int, 可选, 默认为 128) — 瓶颈层输出的大小。
  • use_bottleneck_attention (bool, 可选, 默认为 False) — 是否使用来自瓶颈变换的注意力输入。
  • key_query_shared_bottleneck (bool, 可选, 默认为 True) — 是否在瓶颈层中为查询和键使用相同的线性变换。
  • num_feedforward_networks (int, 可选, 默认为 4) — 一个块中前馈网络(FFN)的数量。
  • normalization_type (str, 可选, 默认为 "no_norm") — MobileBERT 中的归一化类型。
  • classifier_dropout (float, 可选) — 分类头的丢弃率。

这是一个配置类,用于存储 MobileBertModelTFMobileBertModel 的配置。它用于根据指定的参数实例化一个 MobileBERT 模型,并定义模型架构。使用默认值实例化一个配置将产生一个与 MobileBERT google/mobilebert-uncased 架构相似的配置。

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

示例

>>> from transformers import MobileBertConfig, MobileBertModel

>>> # Initializing a MobileBERT configuration
>>> configuration = MobileBertConfig()

>>> # Initializing a model (with random weights) from the configuration above
>>> model = MobileBertModel(configuration)

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

MobileBertTokenizer

class transformers.MobileBertTokenizer

< >

( 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` 的值决定(与原始 MobileBERT 中一样)。
  • clean_up_tokenization_spaces (bool, 可选, 默认为 True) — 是否在解码后清理空格,清理工作包括移除可能的多余空格等伪影。

构建一个 MobileBERT 分词器。基于 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列表。

通过连接并添加特殊词元,从一个序列或一对序列为序列分类任务构建模型输入。一个 MobileBERT 序列具有以下格式:

  • 单个序列:[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方法添加特殊标记时调用。

MobileBertTokenizerFast

class transformers.MobileBertTokenizerFast

< >

( 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` 的值决定(与原始 MobileBERT 中一样)。
  • wordpieces_prefix (str, 可选, 默认为 `"##"`) — 子词的前缀。

构建一个“快速”的 MobileBERT 分词器(由 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列表。

通过连接并添加特殊词元,从一个序列或一对序列为序列分类任务构建模型输入。一个 MobileBERT 序列具有以下格式:

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

MobileBert 特定输出

class transformers.models.mobilebert.modeling_mobilebert.MobileBertForPreTrainingOutput

< >

( loss: typing.Optional[torch.FloatTensor] = None prediction_logits: typing.Optional[torch.FloatTensor] = None seq_relationship_logits: typing.Optional[torch.FloatTensor] = None hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None )

参数

  • loss (`*可选*`, 在提供 `labels` 时返回, `torch.FloatTensor` 类型,形状为 `(1,)`) — 掩码语言建模损失和下一句预测(分类)损失之和的总损失。
  • prediction_logits (`torch.FloatTensor` 类型,形状为 `(batch_size, sequence_length, config.vocab_size)`) — 语言建模头的预测分数(SoftMax 之前每个词汇表词元的分数)。
  • seq_relationship_logits (`torch.FloatTensor` 类型,形状为 `(batch_size, 2)`) — 下一句预测(分类)头的预测分数(SoftMax 之前 True/False 连续的分数)。
  • hidden_states (`tuple[torch.FloatTensor]`, *可选*, 在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则一个用于嵌入层的输出,外加每个层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每层输出处的隐藏状态以及可选的初始嵌入输出。

  • attentions (`tuple[torch.FloatTensor]`, *可选*, 在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForPreTraining 的输出类型。

class transformers.models.mobilebert.modeling_tf_mobilebert.TFMobileBertForPreTrainingOutput

< >

( loss: tf.Tensor | None = None prediction_logits: Optional[tf.Tensor] = None seq_relationship_logits: Optional[tf.Tensor] = None hidden_states: tuple[tf.Tensor] | None = None attentions: tuple[tf.Tensor] | None = None )

参数

  • prediction_logits (`tf.Tensor` 类型,形状为 `(batch_size, sequence_length, config.vocab_size)`) — 语言建模头的预测分数(SoftMax 之前每个词汇表词元的分数)。
  • seq_relationship_logits (`tf.Tensor` 类型,形状为 `(batch_size, 2)`) — 下一句预测(分类)头的预测分数(SoftMax 之前 True/False 连续的分数)。
  • hidden_states (`tuple(tf.Tensor)`, *可选*, 在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入层的输出,外加每个层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每层输出处的隐藏状态以及初始嵌入输出。

  • attentions (`tuple(tf.Tensor)`, *可选*, 在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForPreTraining 的输出类型。

Pytorch
隐藏 Pytorch 内容

MobileBertModel

class transformers.MobileBertModel

< >

( config add_pooling_layer = True )

参数

  • config (MobileBertModel) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。请查阅 from_pretrained() 方法来加载模型权重。
  • add_pooling_layer (bool, 可选, 默认为 True) — 是否添加池化层。

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

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None output_hidden_states: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • attention_mask (`torch.FloatTensor` 类型,形状为 `(batch_size, sequence_length)`,*可选*) — 用于避免在填充词元索引上执行注意力的掩码。掩码值选自 `[0, 1]`:

    • 1 表示**未被掩码**的词元,
    • 0 表示**被掩码**的词元。

    什么是注意力掩码?

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

    • 0 对应于 句子 A 的词元,
    • 1 对应于 句子 B 的词元。

    什么是词元类型 ID?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列词元在位置嵌入中的位置索引。在 `[0, config.n_positions - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 `[0, 1]` 中选择:

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

返回

transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入,包含各种元素。

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

  • pooler_output (torch.FloatTensor,形状为 (batch_size, hidden_size)) — 序列的第一个词元(分类词元)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后的结果。例如,对于 BERT 家族模型,这返回分类词元经过一个线性层和一个 tanh 激活函数处理后的结果。线性层的权重是在预训练期间从下一句预测(分类)目标中训练得到的。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertModel 的前向方法覆盖了 `__call__` 特殊方法。

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

MobileBertForPreTraining

class transformers.MobileBertForPreTraining

< >

( config )

参数

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

MobileBert 模型在顶部带有两个头,如同预训练时一样:一个“掩码语言建模”头和一个“下一句预测(分类)”头。

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None next_sentence_label: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[torch.FloatTensor] = None output_hidden_states: typing.Optional[torch.FloatTensor] = None return_dict: typing.Optional[torch.FloatTensor] = None ) transformers.models.mobilebert.modeling_mobilebert.MobileBertForPreTrainingOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示词元未被掩码
    • 0 表示词元被掩码

    什么是注意力掩码?

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

    • 0 对应于 句子 A 的词元,
    • 1 对应于 句子 B 的词元。

    什么是词元类型 ID?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列词元在位置嵌入中的位置索引。在 `[0, config.n_positions - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 `[0, 1]` 中选择:

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 `input_ids` 索引转换为相关联的向量,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算掩码语言建模损失的标签。索引应在 `[-100, 0, ..., config.vocab_size]` 中(请参阅 `input_ids` 文档字符串)。索引设置为 `-100` 的词元将被忽略(掩码),损失仅对标签在 `[0, ..., config.vocab_size]` 中的词元计算。
  • next_sentence_label (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算下一序列预测(分类)损失的标签。输入应该是一个序列对(请参阅 `input_ids` 文档字符串)。索引应在 `[0, 1]` 中:

    • 0 表示序列 B 是序列 A 的延续,
    • 1 表示序列 B 是一个随机序列。
  • output_attentions (torch.FloatTensor可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (torch.FloatTensor可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (torch.FloatTensor可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.models.mobilebert.modeling_mobilebert.MobileBertForPreTrainingOutputtuple(torch.FloatTensor)

一个 transformers.models.mobilebert.modeling_mobilebert.MobileBertForPreTrainingOutput 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (*可选*,当提供了 `labels` 时返回,torch.FloatTensor,形状为 (1,)) — 总损失,是掩码语言建模损失和下一序列预测(分类)损失的和。

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

  • seq_relationship_logits (torch.FloatTensor 形状为 (batch_size, 2)) — 下一序列预测(分类)头的预测分数(SoftMax 之前的 True/False 延续分数)。

  • hidden_states (tuple[torch.FloatTensor]可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple[torch.FloatTensor]可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForPreTraining 的前向方法覆盖了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, MobileBertForPreTraining
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForPreTraining.from_pretrained("google/mobilebert-uncased")

>>> input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)
>>> # Batch size 1
>>> outputs = model(input_ids)

>>> prediction_logits = outputs.prediction_logits
>>> seq_relationship_logits = outputs.seq_relationship_logits

MobileBertForMaskedLM

class transformers.MobileBertForMaskedLM

< >

( config )

参数

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

带有一个“语言建模”头的 Mobilebert 模型。”

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示词元未被掩码
    • 0 表示词元被掩码

    什么是注意力掩码?

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

    • 0 对应于 句子 A 的词元,
    • 1 对应于 句子 B 的词元。

    什么是词元类型 ID?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列词元在位置嵌入中的位置索引。在 `[0, config.n_positions - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 `[0, 1]` 中选择:

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 `input_ids` 索引转换为相关联的向量,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算掩码语言建模损失的标签。索引应在 `[-100, 0, ..., config.vocab_size]` 中(请参阅 `input_ids` 文档字符串)。索引设置为 `-100` 的词元将被忽略(掩码),损失仅对标签在 `[0, ..., config.vocab_size]` 中的词元计算。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.MaskedLMOutput 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入,包含各种元素。

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

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

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForMaskedLM 的前向方法覆盖了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, MobileBertForMaskedLM
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForMaskedLM.from_pretrained("google/mobilebert-uncased")

>>> inputs = tokenizer("The capital of France is <mask>.", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # retrieve index of <mask>
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]

>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> tokenizer.decode(predicted_token_id)
...

>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-<mask> tokens
>>> labels = torch.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)

>>> outputs = model(**inputs, labels=labels)
>>> round(outputs.loss.item(), 2)
...

MobileBertForNextSentencePrediction

class transformers.MobileBertForNextSentencePrediction

< >

( config )

参数

带有一个“下一句预测(分类)”头的 MobileBert 模型。

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) transformers.modeling_outputs.NextSentencePredictorOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示词元未被掩码
    • 0 表示词元被掩码

    什么是注意力掩码?

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

    • 0 对应于 句子 A 的词元,
    • 1 对应于 句子 B 的词元。

    什么是词元类型 ID?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列词元在位置嵌入中的位置索引。在 `[0, config.n_positions - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 `[0, 1]` 中选择:

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 `input_ids` 索引转换为相关联的向量,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算下一序列预测(分类)损失的标签。输入应该是一个序列对(请参阅 `input_ids` 文档字符串)。索引应在 `[0, 1]` 中。

    • 0 表示序列 B 是序列 A 的延续,
    • 1 表示序列 B 是一个随机序列。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.NextSentencePredictorOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.NextSentencePredictorOutput 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 next_sentence_label 时返回) — 下一个序列预测(分类)损失。

  • logits (torch.FloatTensor,形状为 (batch_size, 2)) — 下一个序列预测(分类)头的预测分数(SoftMax 之前的真/假延续分数)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForNextSentencePrediction 的前向方法覆盖了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, MobileBertForNextSentencePrediction
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForNextSentencePrediction.from_pretrained("google/mobilebert-uncased")

>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> next_sentence = "The sky is blue due to the shorter wavelength of blue light."
>>> encoding = tokenizer(prompt, next_sentence, return_tensors="pt")

>>> outputs = model(**encoding, labels=torch.LongTensor([1]))
>>> loss = outputs.loss
>>> logits = outputs.logits

MobileBertForSequenceClassification

class transformers.MobileBertForSequenceClassification

< >

( config )

参数

MobileBert 模型转换器,其顶部带有一个序列分类/回归头(在池化输出之上是一个线性层),例如用于 GLUE 任务。

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = 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.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示标记未被遮盖
    • 0 表示标记被遮盖

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

  • position_ids (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块的选定头无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你希望比模型的内部嵌入查找矩阵更多地控制如何将 `input_ids` 索引转换为关联向量,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 范围内。如果 config.num_labels == 1,则计算回归损失(均方损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

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

  • loss (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。

  • logits (形状为 (batch_size, config.num_labels)torch.FloatTensor) — 分类(如果 config.num_labels==1,则为回归)分数(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForSequenceClassification 的 forward 方法重写了 `__call__` 特殊方法。

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

单标签分类示例

>>> import torch
>>> from transformers import AutoTokenizer, MobileBertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForSequenceClassification.from_pretrained("google/mobilebert-uncased")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = MobileBertForSequenceClassification.from_pretrained("google/mobilebert-uncased", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

多标签分类示例

>>> import torch
>>> from transformers import AutoTokenizer, MobileBertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForSequenceClassification.from_pretrained("google/mobilebert-uncased", problem_type="multi_label_classification")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = MobileBertForSequenceClassification.from_pretrained(
...     "google/mobilebert-uncased", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss

MobileBertForMultipleChoice

class transformers.MobileBertForMultipleChoice

< >

( config )

参数

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

Mobilebert 模型,其顶部带有多项选择分类头(在池化输出之上是一个线性层和一个 softmax),例如用于 RocStories/SWAG 任务。

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = 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.modeling_outputs.MultipleChoiceModelOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示标记未被遮盖
    • 0 表示标记被遮盖

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

  • position_ids (torch.LongTensor,形状为 (batch_size, num_choices, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.max_position_embeddings - 1]

    什么是位置 ID?

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块的选定头无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, num_choices, sequence_length, hidden_size)可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你希望比模型的内部嵌入查找矩阵更多地控制如何将 `input_ids` 索引转换为关联向量,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算多项选择分类损失的标签。索引应在 [0, ..., num_choices-1] 范围内,其中 num_choices 是输入张量第二维的大小。(见上文的 input_ids
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.MultipleChoiceModelOutputtuple(torch.FloatTensor)

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

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

  • logits (形状为 (batch_size, num_choices)torch.FloatTensor) — num_choices 是输入张量的第二维大小。(请参阅上面的 input_ids)。

    分类分数(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForMultipleChoice 的 forward 方法重写了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, MobileBertForMultipleChoice
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForMultipleChoice.from_pretrained("google/mobilebert-uncased")

>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> choice0 = "It is eaten with a fork and a knife."
>>> choice1 = "It is eaten while held in the hand."
>>> labels = torch.tensor(0).unsqueeze(0)  # choice0 is correct (according to Wikipedia ;)), batch size 1

>>> encoding = tokenizer([prompt, prompt], [choice0, choice1], return_tensors="pt", padding=True)
>>> outputs = model(**{k: v.unsqueeze(0) for k, v in encoding.items()}, labels=labels)  # batch size is 1

>>> # the linear classifier still needs to be trained
>>> loss = outputs.loss
>>> logits = outputs.logits

MobileBertForTokenClassification

class transformers.MobileBertForTokenClassification

< >

( config )

参数

Mobilebert 转换器,其顶部带有一个标记分类头(在隐藏状态输出之上是一个线性层),例如用于命名实体识别(NER)任务。

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = 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.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示标记未被遮盖
    • 0 表示标记被遮盖

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

  • position_ids (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块的选定头无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你希望比模型的内部嵌入查找矩阵更多地控制如何将 `input_ids` 索引转换为关联向量,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算标记分类损失的标签。索引应在 [0, ..., config.num_labels - 1] 范围内。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

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

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

  • logits (形状为 (batch_size, sequence_length, config.num_labels)torch.FloatTensor) — 分类分数(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForTokenClassification 的 forward 方法重写了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, MobileBertForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForTokenClassification.from_pretrained("google/mobilebert-uncased")

>>> inputs = tokenizer(
...     "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_token_class_ids = logits.argmax(-1)

>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> predicted_tokens_classes
...

>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

MobileBertForQuestionAnswering

class transformers.MobileBertForQuestionAnswering

< >

( config )

参数

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

Mobilebert Transformer 模型,其顶部带有一个用于抽取式问答任务(如SQuAD)的片段分类头(一个位于隐藏状态输出之上的线性层,用于计算`span start logits`和`span end logits`)。

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

该模型也是 PyTorch 的 torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None start_positions: typing.Optional[torch.Tensor] = None end_positions: 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.modeling_outputs.QuestionAnsweringModelOutputtuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示标记未被掩码
    • 0 表示标记已被掩码

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

  • position_ids (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。值在 `[0, config.n_positions - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零自注意力模块中选定头的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头未被掩码
    • 0 表示头已被掩码
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果你想比模型内部嵌入查找矩阵更多地控制如何将 `input_ids` 索引转换为关联向量,这会很有用。
  • start_positions (torch.Tensor,形状为 (batch_size,)可选) — 标记片段开始位置(索引)的标签,用于计算标记分类损失。位置被限制在序列长度(`sequence_length`)内。序列之外的位置在计算损失时不被考虑。
  • end_positions (torch.Tensor,形状为 (batch_size,)可选) — 标记片段结束位置(索引)的标签,用于计算标记分类损失。位置被限制在序列长度(`sequence_length`)内。序列之外的位置在计算损失时不被考虑。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.modeling_outputs.QuestionAnsweringModelOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.QuestionAnsweringModelOutput 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入的不同,包含不同的元素。

  • loss (torch.FloatTensor of shape (1,), 可选, 当提供 labels 时返回) — 总范围提取损失是起始位置和结束位置的交叉熵之和。

  • start_logits (torch.FloatTensor of shape (batch_size, sequence_length)) — 范围起始分数(SoftMax 之前)。

  • end_logits (torch.FloatTensor of shape (batch_size, sequence_length)) — 范围结束分数(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `torch.FloatTensor` 的元组(如果模型有嵌入层,则第一个是嵌入层的输出,然后是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `torch.FloatTensor` 的元组(每层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

MobileBertForQuestionAnswering 的 forward 方法重写了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, MobileBertForQuestionAnswering
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = MobileBertForQuestionAnswering.from_pretrained("google/mobilebert-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 内容

TFMobileBertModel

class transformers.TFMobileBertModel

< >

( config *inputs **kwargs )

参数

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

基础的 MobileBert Transformer 模型,输出原始的隐藏状态,顶部没有任何特定的头。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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: Optional[bool] = False ) transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingtuple(tf.Tensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示标记未被掩码
    • 0 表示标记已被掩码

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

  • position_ids (Numpy arraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。值在 `[0, config.max_position_embeddings - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零自注意力模块中选定头的掩码。掩码值在 [0, 1] 中选择:

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

返回

transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFBaseModelOutputWithPooling 或一个 `tf.Tensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入的不同,包含不同的元素。

  • last_hidden_state (tf.Tensor of shape (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。

  • pooler_output (tf.Tensor,形状为 (batch_size, hidden_size)) — 序列第一个标记(分类标记)的最后一层隐藏状态,经过一个线性层和一个 Tanh 激活函数进一步处理。线性层的权重是在预训练期间从下一句预测(分类)目标中训练的。

    此输出通常不是输入语义内容的良好摘要,通常最好对整个输入序列的隐藏状态进行平均或池化。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertModel 的 forward 方法重写了 `__call__` 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = TFMobileBertModel.from_pretrained("google/mobilebert-uncased")

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

>>> last_hidden_states = outputs.last_hidden_state

TFMobileBertForPreTraining

class transformers.TFMobileBertForPreTraining

< >

( config *inputs **kwargs )

参数

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

MobileBert 模型在顶部带有两个头,如同预训练时一样:一个“掩码语言建模”头和一个“下一句预测(分类)”头。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 labels: np.ndarray | tf.Tensor | None = None next_sentence_label: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.models.mobilebert.modeling_tf_mobilebert.TFMobileBertForPreTrainingOutputtuple(tf.Tensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示标记未被掩码
    • 0 表示标记已被掩码

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

  • position_ids (Numpy arraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。值在 `[0, config.max_position_embeddings - 1]` 范围内选择。

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零自注意力模块中选定头的掩码。掩码值在 [0, 1] 中选择:

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

返回

transformers.models.mobilebert.modeling_tf_mobilebert.TFMobileBertForPreTrainingOutputtuple(tf.Tensor)

一个 transformers.models.mobilebert.modeling_tf_mobilebert.TFMobileBertForPreTrainingOutput 或一个 `tf.Tensor` 的元组(如果传递了 `return_dict=False` 或者 `config.return_dict=False`),根据配置(MobileBertConfig)和输入的不同,包含不同的元素。

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

  • seq_relationship_logits (tf.Tensor,形状为 (batch_size, 2)) — 下一句预测(分类)头的预测分数(SoftMax 前的 True/False 连续性分数)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForPreTraining 的 forward 方法重写了 `__call__` 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = TFMobileBertForPreTraining.from_pretrained("google/mobilebert-uncased")
>>> input_ids = tf.constant(tokenizer.encode("Hello, my dog is cute"))[None, :]  # Batch size 1
>>> outputs = model(input_ids)
>>> prediction_scores, seq_relationship_scores = outputs[:2]

TFMobileBertForMaskedLM

class transformers.TFMobileBertForMaskedLM

< >

( config *inputs **kwargs )

参数

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

MobileBert 模型,顶部带有一个“语言建模”头。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFMaskedLMOutputtuple(tf.Tensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示词元未被屏蔽
    • 0 表示词元已被屏蔽

    什么是注意力掩码?

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

    • 0 对应于 *A 句* 词元,
    • 1 对应于 *B 句* 词元。

    什么是词元类型 ID?

  • position_ids (Numpy arraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列词元的位置索引。在 [0, config.max_position_embeddings - 1] 范围内选择。

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头未被屏蔽
    • 0 表示头已被屏蔽
  • inputs_embeds (tf.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — (可选)不传递 input_ids,而是直接传递嵌入表示。如果你想比模型的内部嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量,这会很有用。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量下的 attentions。此参数只能在即时模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的 hidden_states。此参数只能在即时模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在即时模式下使用,在图模式下该值将始终设置为 True。
  • training (bool可选,默认为 False) — 是否在训练模式下使用模型(某些模块如 dropout 模块在训练和评估之间有不同的行为)。
  • labels (tf.Tensor,形状为 (batch_size, sequence_length)可选) — 用于计算掩码语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size] 中(请参阅 input_ids 文档字符串)。索引设置为 -100 的词元将被忽略(屏蔽),仅对有标签的词元计算损失。

返回

transformers.modeling_tf_outputs.TFMaskedLMOutputtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFMaskedLMOutput 或一个 tf.Tensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (tf.Tensor of shape (n,), 可选, 其中 n 是非掩码标签的数量,当提供 labels 时返回) — 掩码语言模型 (MLM) 损失。

  • logits (tf.Tensor of shape (batch_size, sequence_length, config.vocab_size)) — 语言模型头部的预测分数(SoftMax 之前每个词汇标记的分数)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForMaskedLM 的前向方法,重写了 __call__ 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = TFMobileBertForMaskedLM.from_pretrained("google/mobilebert-uncased")

>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="tf")
>>> logits = model(**inputs).logits

>>> # retrieve index of [MASK]
>>> mask_token_index = tf.where((inputs.input_ids == tokenizer.mask_token_id)[0])
>>> selected_logits = tf.gather_nd(logits[0], indices=mask_token_index)

>>> predicted_token_id = tf.math.argmax(selected_logits, axis=-1)
>>> tokenizer.decode(predicted_token_id)
'paris'
>>> labels = tokenizer("The capital of France is Paris.", return_tensors="tf")["input_ids"]
>>> # mask labels of non-[MASK] tokens
>>> labels = tf.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)

>>> outputs = model(**inputs, labels=labels)
>>> round(float(outputs.loss), 2)
0.57

TFMobileBertForNextSentencePrediction

class transformers.TFMobileBertForNextSentencePrediction

< >

( config *inputs **kwargs )

参数

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

带有一个“下一句预测(分类)”头的 MobileBert 模型。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 next_sentence_label: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFNextSentencePredictorOutputtuple(tf.Tensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示词元未被屏蔽
    • 0 表示词元已被屏蔽

    什么是注意力掩码?

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

    • 0 对应于 *A 句* 词元,
    • 1 对应于 *B 句* 词元。

    什么是词元类型 ID?

  • position_ids (Numpy arraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列词元的位置索引。在 [0, config.max_position_embeddings - 1] 范围内选择。

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 [0, 1] 中选择:

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

返回

transformers.modeling_tf_outputs.TFNextSentencePredictorOutputtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFNextSentencePredictorOutput 或一个 tf.Tensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (tf.Tensor,形状为 (n,)可选,其中 n 是非屏蔽标签的数量,当提供了 next_sentence_label 时返回) — 下一句预测损失。

  • logits (tf.Tensor,形状为 (batch_size, 2)) — 下一句序列预测(分类)头的预测分数(SoftMax 之前的 True/False 连续性分数)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForNextSentencePrediction 的前向方法,重写了 __call__ 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = TFMobileBertForNextSentencePrediction.from_pretrained("google/mobilebert-uncased")

>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> next_sentence = "The sky is blue due to the shorter wavelength of blue light."
>>> encoding = tokenizer(prompt, next_sentence, return_tensors="tf")

>>> logits = model(encoding["input_ids"], token_type_ids=encoding["token_type_ids"])[0]

TFMobileBertForSequenceClassification

class transformers.TFMobileBertForSequenceClassification

< >

( config *inputs **kwargs )

参数

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

MobileBert 模型转换器,其顶部带有一个序列分类/回归头(在池化输出之上是一个线性层),例如用于 GLUE 任务。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFSequenceClassifierOutputtuple(tf.Tensor)

参数

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

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

    什么是输入 ID?

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

    • 1 表示词元未被屏蔽
    • 0 表示词元已被屏蔽

    什么是注意力掩码?

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

    • 0 对应于 *A 句* 词元,
    • 1 对应于 *B 句* 词元。

    什么是词元类型 ID?

  • position_ids (Numpy arraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列词元的位置索引。在 [0, config.max_position_embeddings - 1] 范围内选择。

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选定的头无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头未被屏蔽
    • 0 表示头已被屏蔽
  • inputs_embeds (tf.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — (可选)不传递 input_ids,而是直接传递嵌入表示。如果你想比模型的内部嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量,这会很有用。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量下的 attentions。此参数只能在即时模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的 hidden_states。此参数只能在即时模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在即时模式下使用,在图模式下该值将始终设置为 True。
  • training (bool可选,默认为 False) — 是否在训练模式下使用模型(某些模块如 dropout 模块在训练和评估之间有不同的行为)。
  • labels (tf.Tensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。

返回

transformers.modeling_tf_outputs.TFSequenceClassifierOutputtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或一个 tf.Tensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (tf.Tensor,形状为 (batch_size, )可选,当提供 labels 时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。

  • logits (tf.Tensor,形状为 (batch_size, config.num_labels)) — 分类(或回归,如果 config.num_labels==1)分数(SoftMax 之前)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForSequenceClassification 的前向方法,重写了 __call__ 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("vumichien/emo-mobilebert")
>>> model = TFMobileBertForSequenceClassification.from_pretrained("vumichien/emo-mobilebert")

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

>>> logits = model(**inputs).logits

>>> predicted_class_id = int(tf.math.argmax(logits, axis=-1)[0])
>>> model.config.id2label[predicted_class_id]
'others'
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = TFMobileBertForSequenceClassification.from_pretrained("vumichien/emo-mobilebert", num_labels=num_labels)

>>> labels = tf.constant(1)
>>> loss = model(**inputs, labels=labels).loss
>>> round(float(loss), 2)
4.72

TFMobileBertForMultipleChoice

class transformers.TFMobileBertForMultipleChoice

< >

( config *inputs **kwargs )

参数

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

MobileBert 模型,顶部带有一个多项选择分类头(在池化输出之上是一个线性层和一个 softmax),例如用于 RocStories/SWAG 任务。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFMultipleChoiceModelOutputtuple(tf.Tensor)

参数

  • input_ids (Numpy arraytf.Tensor,形状为 (batch_size, num_choices, sequence_length)) — 词汇表中输入序列词元的索引。

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

    什么是输入 ID?

  • attention_mask (Numpy array or tf.Tensor of shape (batch_size, num_choices, sequence_length), optional) — 用于避免对填充标记索引执行注意力操作的掩码。掩码值选自 [0, 1]

    • 1 表示标记未被掩码
    • 0 表示标记已被掩码

    什么是注意力掩码?

  • token_type_ids (Numpy array or tf.Tensor of shape (batch_size, num_choices, sequence_length), optional) — 片段标记索引,用于指示输入的第一和第二部分。索引选自 [0, 1]

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

    什么是标记类型 ID?

  • position_ids (Numpy array or tf.Tensor of shape (batch_size, num_choices, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。选自范围 [0, config.max_position_embeddings - 1]

    什么是位置 ID?

  • head_mask (Numpy array or tf.Tensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块中选定的头无效的掩码。掩码值选自 [0, 1]

    • 1 表示该头未被掩码
    • 0 表示该头已被掩码
  • inputs_embeds (tf.Tensor of shape (batch_size, num_choices, sequence_length, hidden_size), optional) — 可选地,你可以选择直接传递嵌入表示,而不是传递 input_ids。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 input_ids 索引转换为相关向量,这会非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions。此参数只能在 Eager 模式下使用,在 Graph 模式下将使用配置中的值。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states。此参数只能在 Eager 模式下使用,在 Graph 模式下将使用配置中的值。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通的元组。此参数可在 Eager 模式下使用,在 Graph 模式下该值将始终设置为 True。
  • training (bool, optional, defaults to False) — 是否以训练模式使用模型(某些模块,如 dropout 模块,在训练和评估之间有不同的行为)。
  • labels (tf.Tensor of shape (batch_size,), optional) — 用于计算多项选择分类损失的标签。索引应在 [0, ..., num_choices] 范围内,其中 num_choices 是输入张量第二维的大小。(参见上面的 input_ids

返回

transformers.modeling_tf_outputs.TFMultipleChoiceModelOutputtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFMultipleChoiceModelOutput 或一个 tf.Tensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (tf.Tensor,形状为 (batch_size, )可选,当提供 labels 时返回) — 分类损失。

  • logits (tf.Tensor,形状为 (batch_size, num_choices)) — num_choices 是输入张量的第二维。(参见上面的 input_ids)。

    分类分数(SoftMax 之前)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForMultipleChoice 的前向方法,重写了 __call__ 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
>>> model = TFMobileBertForMultipleChoice.from_pretrained("google/mobilebert-uncased")

>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> choice0 = "It is eaten with a fork and a knife."
>>> choice1 = "It is eaten while held in the hand."

>>> encoding = tokenizer([prompt, prompt], [choice0, choice1], return_tensors="tf", padding=True)
>>> inputs = {k: tf.expand_dims(v, 0) for k, v in encoding.items()}
>>> outputs = model(inputs)  # batch size is 1

>>> # the linear classifier still needs to be trained
>>> logits = outputs.logits

TFMobileBertForTokenClassification

class transformers.TFMobileBertForTokenClassification

< >

( config *inputs **kwargs )

参数

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

MobileBert 模型,其顶部带有一个标记分类头(一个在隐藏状态输出之上的线性层),例如用于命名实体识别(NER)任务。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFTokenClassifierOutputtuple(tf.Tensor)

参数

  • input_ids (Numpy arraytf.Tensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

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

    什么是输入 ID?

  • attention_mask (Numpy arraytf.Tensor of shape (batch_size, sequence_length), optional) — 用于避免对填充标记索引执行注意力操作的掩码。掩码值选自 [0, 1]

    • 1 表示标记未被掩码
    • 0 表示标记已被掩码

    什么是注意力掩码?

  • token_type_ids (Numpy arraytf.Tensor of shape (batch_size, sequence_length), optional) — 片段标记索引,用于指示输入的第一和第二部分。索引选自 [0, 1]

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

    什么是标记类型 ID?

  • position_ids (Numpy arraytf.Tensor of shape (batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。选自范围 [0, config.max_position_embeddings - 1]

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块中选定的头无效的掩码。掩码值选自 [0, 1]

    • 1 表示该头未被掩码
    • 0 表示该头已被掩码
  • inputs_embeds (tf.Tensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,你可以选择直接传递嵌入表示,而不是传递 input_ids。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 input_ids 索引转换为相关向量,这会非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions。此参数只能在 Eager 模式下使用,在 Graph 模式下将使用配置中的值。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states。此参数只能在 Eager 模式下使用,在 Graph 模式下将使用配置中的值。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通的元组。此参数可在 Eager 模式下使用,在 Graph 模式下该值将始终设置为 True。
  • training (bool, optional, defaults to False) — 是否以训练模式使用模型(某些模块,如 dropout 模块,在训练和评估之间有不同的行为)。
  • labels (tf.Tensor of shape (batch_size, sequence_length), optional) — 用于计算标记分类损失的标签。索引应在 [0, ..., config.num_labels - 1] 范围内。

返回

transformers.modeling_tf_outputs.TFTokenClassifierOutputtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFTokenClassifierOutput 或一个 tf.Tensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (tf.Tensor,形状为 (n,)可选,其中 n 是未被掩盖的标签数量,当提供 labels 时返回) — 分类损失。

  • logits (tf.Tensor,形状为 (batch_size, sequence_length, config.num_labels)) — 分类分数(SoftMax 之前)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForTokenClassification 的前向方法,重写了 __call__ 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("vumichien/mobilebert-finetuned-ner")
>>> model = TFMobileBertForTokenClassification.from_pretrained("vumichien/mobilebert-finetuned-ner")

>>> inputs = tokenizer(
...     "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="tf"
... )

>>> logits = model(**inputs).logits
>>> predicted_token_class_ids = tf.math.argmax(logits, axis=-1)

>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t] for t in predicted_token_class_ids[0].numpy().tolist()]
>>> predicted_tokens_classes
['I-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'I-LOC', 'O', 'I-LOC', 'I-LOC']
>>> labels = predicted_token_class_ids
>>> loss = tf.math.reduce_mean(model(**inputs, labels=labels).loss)
>>> round(float(loss), 2)
0.03

TFMobileBertForQuestionAnswering

class transformers.TFMobileBertForQuestionAnswering

< >

( config *inputs **kwargs )

参数

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

MobileBert 模型,其顶部带有一个片段分类头,用于像 SQuAD 这样的抽取式问答任务(在隐藏状态输出之上有一层线性层,用于计算 `片段开始 logits` 和 `片段结束 logits`)。

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

该模型也是一个 keras.Model 的子类。可以像使用常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与通用用法和行为相关的事项。

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

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

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

  • 只有一个 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 attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: 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 start_positions: np.ndarray | tf.Tensor | None = None end_positions: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutputtuple(tf.Tensor)

参数

  • input_ids (Numpy arraytf.Tensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。

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

    什么是输入 ID?

  • attention_mask (Numpy arraytf.Tensor of shape (batch_size, sequence_length), optional) — 用于避免对填充标记索引执行注意力操作的掩码。掩码值选自 [0, 1]

    • 1 表示标记未被掩码
    • 0 表示标记已被掩码

    什么是注意力掩码?

  • token_type_ids (Numpy arraytf.Tensor of shape (batch_size, sequence_length), optional) — 片段标记索引,用于指示输入的第一和第二部分。索引选自 [0, 1]

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

    什么是标记类型 ID?

  • position_ids (Numpy arraytf.Tensor of shape (batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。选自范围 [0, config.max_position_embeddings - 1]

    什么是位置 ID?

  • head_mask (Numpy arraytf.Tensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块中选定的头无效的掩码。掩码值选自 [0, 1]

    • 1 表示该头未被掩码
    • 0 表示该头已被掩码
  • inputs_embeds (tf.Tensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,你可以选择直接传递嵌入表示,而不是传递 input_ids。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 input_ids 索引转换为相关向量,这会非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions。此参数只能在 Eager 模式下使用,在 Graph 模式下将使用配置中的值。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states。此参数只能在 Eager 模式下使用,在 Graph 模式下将使用配置中的值。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通的元组。此参数可在 Eager 模式下使用,在 Graph 模式下该值将始终设置为 True。
  • training (bool, optional, defaults to False) — 是否以训练模式使用模型(某些模块,如 dropout 模块,在训练和评估之间有不同的行为)。
  • start_positions (tf.Tensor of shape (batch_size,), optional) — 用于计算标记分类损失的标签片段开始位置(索引)的标签。位置被限制在序列长度(sequence_length)内。序列之外的位置不计入损失计算。
  • end_positions (tf.Tensor of shape (batch_size,), optional) — 用于计算标记分类损失的标签片段结束位置(索引)的标签。位置被限制在序列长度(sequence_length)内。序列之外的位置不计入损失计算。

返回

transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutputtuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或一个 tf.Tensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(MobileBertConfig)和输入,包含各种元素。

  • loss (tf.Tensor of shape (batch_size, ), optional, returned when start_positions and end_positions are provided) — 总片段抽取损失是开始位置和结束位置的交叉熵损失之和。

  • start_logits (形状为 (batch_size, sequence_length)tf.Tensor) — 跨度起始分数(SoftMax 之前)。

  • end_logits (形状为 (batch_size, sequence_length)tf.Tensor) — 跨度结束分数(SoftMax 之前)。

  • hidden_states (tuple(tf.Tensor)可选,在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个用于嵌入的输出 + 一个用于每层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态加上初始嵌入输出。

  • attentions (tuple(tf.Tensor)可选,在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFMobileBertForQuestionAnswering 的前向方法,重写了 __call__ 特殊方法。

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

示例

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

>>> tokenizer = AutoTokenizer.from_pretrained("vumichien/mobilebert-uncased-squad-v2")
>>> model = TFMobileBertForQuestionAnswering.from_pretrained("vumichien/mobilebert-uncased-squad-v2")

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

>>> inputs = tokenizer(question, text, return_tensors="tf")
>>> outputs = model(**inputs)

>>> answer_start_index = int(tf.math.argmax(outputs.start_logits, axis=-1)[0])
>>> answer_end_index = int(tf.math.argmax(outputs.end_logits, axis=-1)[0])

>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens)
'a nice puppet'
>>> # target is "nice puppet"
>>> target_start_index = tf.constant([12])
>>> target_end_index = tf.constant([13])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = tf.math.reduce_mean(outputs.loss)
>>> round(float(loss), 2)
3.98
< > 在 GitHub 上更新