Transformers 4.37 中文文档(四十五)(3)https://developer.aliyun.com/article/1565214
MobileBERT
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/mobilebert
概述
MobileBERT 模型是由 Zhiqing Sun、Hongkun Yu、Xiaodan Song、Renjie Liu、Yiming Yang 和 Denny Zhou 在MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices中提出的。它是基于 BERT 模型的双向 transformer,使用了几种方法进行压缩和加速。
论文摘要如下:
最近,自然语言处理(NLP)通过使用具有数亿参数的巨大预训练模型取得了巨大成功。然而,这些模型存在着庞大的模型大小和高延迟的问题,因此无法部署到资源有限的移动设备上。在本文中,我们提出了 MobileBERT 来压缩和加速流行的 BERT 模型。与原始的 BERT 一样,MobileBERT 是任务不可知的,也就是说,它可以通过简单的微调通用地应用于各种下游 NLP 任务。基本上,MobileBERT 是 BERT_LARGE 的精简版本,同时配备了瓶颈结构和精心设计的自注意力和前馈网络之间的平衡。为了训练 MobileBERT,我们首先训练一个特别设计的教师模型,即一个包含倒置瓶颈的 BERT_LARGE 模型。然后,我们从这个教师模型向 MobileBERT 进行知识转移。实证研究表明,MobileBERT 比 BERT_BASE 小 4.3 倍,速度快 5.5 倍,同时在知名基准测试上取得了竞争性的结果。在 GLUE 的自然语言推理任务中,MobileBERT 获得了 77.7 的 GLUE 分数(比 BERT_BASE 低 0.6),在 Pixel 4 手机上的延迟为 62 毫秒。在 SQuAD v1.1/v2.0 问答任务中,MobileBERT 获得了 90.0/79.2 的开发 F1 分数(比 BERT_BASE 高 1.5/2.1)。
使用提示
- MobileBERT 是一个带有绝对位置嵌入的模型,因此通常建议在右侧而不是左侧填充输入。
- MobileBERT 类似于 BERT,因此依赖于掩码语言建模(MLM)目标。因此,它在预测掩码标记和 NLU 方面效率高,但不适用于文本生成。使用因果语言建模(CLM)目标训练的模型在这方面更好。
资源
- 文本分类任务指南
- 标记分类任务指南
- 问答任务指南
- 掩码语言建模任务指南
- 多项选择任务指南
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 模型的词汇量。定义了在调用 MobileBertModel 或 TFMobileBertModel 时可以表示的不同标记数量。hidden_size
(int
, 可选, 默认为 512) — 编码器层和池化层的维度。num_hidden_layers
(int
, 可选, 默认为 24) — Transformer 编码器中的隐藏层数量。num_attention_heads
(int
, 可选, 默认为 4) — Transformer 编码器中每个注意力层的注意力头数。intermediate_size
(int
, optional, defaults to 512) — Transformer 编码器中“中间”(通常称为前馈)层的维度。hidden_act
(str
orfunction
, optional, defaults to"relu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。hidden_dropout_prob
(float
, optional, defaults to 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。attention_probs_dropout_prob
(float
, optional, defaults to 0.1) — 注意力概率的 dropout 比率。max_position_embeddings
(int
, optional, defaults to 512) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如,512 或 1024 或 2048)。type_vocab_size
(int
, optional, defaults to 2) — 在调用 MobileBertModel 或 TFMobileBertModel 时传递的token_type_ids
的词汇表大小。initializer_range
(float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。layer_norm_eps
(float
, optional, defaults to 1e-12) — 层归一化层使用的 epsilon。pad_token_id
(int
, optional, defaults to 0) — 用作填充的词嵌入中的标记 ID。embedding_size
(int
, optional, defaults to 128) — 词嵌入向量的维度。trigram_input
(bool
, optional, defaults toTrue
) — 使用三元组卷积作为输入。use_bottleneck
(bool
, optional, defaults toTrue
) — 是否在 BERT 中使用瓶颈。intra_bottleneck_size
(int
, optional, defaults to 128) — 瓶颈层输出的大小。use_bottleneck_attention
(bool
, optional, defaults toFalse
) — 是否使用来自瓶颈变换的注意力输入。key_query_shared_bottleneck
(bool
, optional, defaults toTrue
) — 是否在瓶颈中使用相同的查询和键的线性变换。num_feedforward_networks
(int
, optional, defaults to 4) — 一个块中的 FFN 数量。normalization_type
(str
, optional, defaults to"no_norm"
) — MobileBERT 中的归一化类型。classifier_dropout
(float
, optional) — 分类头部的 dropout 比率。
这是用于存储 MobileBertModel 或 TFMobileBertModel 配置的类。根据指定的参数实例化一个 MobileBERT 模型,定义模型架构。使用默认值实例化配置将产生类似于 MobileBERT google/mobilebert-uncased 架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
Examples:
>>> 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
Attributes: pretrained_config_archive_map (Dict[str, str]): 包含所有可用预训练检查点的字典。
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 **kwargs )
Parameters
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 中的情况相同)。
构建一个 MobileBERT 标记生成器。基于 WordPiece。
此标记生成器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';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 )
将标记(字符串)序列转换为单个字符串。
create_token_type_ids_from_sequences
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — ID 列表。token_ids_1
(List[int]
, 可选) — 第二个序列对的 ID 列表。
返回
List[int]
根据给定序列的 标记类型 ID 列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。MobileBERT 序列
序列对掩码的格式如下:
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 | first sequence | second sequence |
如果 token_ids_1
为 None
,则此方法仅返回掩码的第一部分(0)。
get_special_tokens_mask
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
)— ID 列表。token_ids_1
(List[int]
,可选)— 序列对的第二个 ID 列表。already_has_special_tokens
(bool
,可选,默认为False
)— token 列表是否已经使用特殊 token 格式化为模型。
返回值
List[int]
一个整数列表,范围为[0, 1]:1 表示特殊 token,0 表示序列 token。
从没有添加特殊 token 的 token 列表中检索序列 ID。在使用分词器prepare_for_model
方法添加特殊 token 时调用此方法。
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]"
)— 未知 token。词汇表中不存在的 token 无法转换为 ID,而是设置为此 token。sep_token
(str
,可选,默认为"[SEP]"
)— 分隔符 token,用于从多个序列构建序列,例如用于序列分类的两个序列或用于文本和问题的问题回答。它还用作使用特殊 token 构建的序列的最后一个 token。pad_token
(str
,可选,默认为"[PAD]"
)— 用于填充的 token,例如在批处理不同长度的序列时使用。cls_token
(str
,可选,默认为"[CLS]"
)— 在进行序列分类(整个序列而不是每个 token 分类)时使用的分类器 token。构建带有特殊 token 的序列时,它是序列的第一个 token。mask_token
(str
,可选,默认为"[MASK]"
)— 用于掩盖值的 token。在使用掩盖语言建模训练此模型时使用的 token。这是模型将尝试预测的 token。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 ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
)— 将添加特殊 token 的 ID 列表。token_ids_1
(List[int]
,可选)— 序列对的第二个 ID 列表。
返回值
List[int]
具有适当特殊 token 的 input IDs 列表。
通过连接和添加特殊标记从序列或序列对构建用于序列分类任务的模型输入。MobileBERT 序列具有以下格式:
- 单个序列:
[CLS] X [SEP]
- 序列对:
[CLS] A [SEP] B [SEP]
create_token_type_ids_from_sequences
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — ID 列表。token_ids_1
(List[int]
, optional) — 序列对的可选第二个 ID 列表。
返回
List[int]
根据给定序列的 token 类型 ID 列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。MobileBERT 序列
序列对掩码具有以下格式:
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 | first sequence | second sequence |
如果token_ids_1
为None
,则此方法仅返回掩码的第一部分(0)。
MobileBert 特定的输出
class transformers.models.mobilebert.modeling_mobilebert.MobileBertForPreTrainingOutput
( loss: Optional = None prediction_logits: FloatTensor = None seq_relationship_logits: FloatTensor = None hidden_states: Optional = None attentions: Optional = None )
参数
loss
(optional, 当提供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)
, optional, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
模型在每个层的输出的隐藏状态加上初始嵌入输出。attentions
(tuple(torch.FloatTensor)
, optional, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每个层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
MobileBertForPreTraining 的输出类型。
class transformers.models.mobilebert.modeling_tf_mobilebert.TFMobileBertForPreTrainingOutput
( loss: tf.Tensor | None = None prediction_logits: tf.Tensor = None seq_relationship_logits: 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)
, optional, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的tf.Tensor
元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
模型在每个层的输出的隐藏状态加上初始嵌入输出。attentions
(tuple(tf.Tensor)
, optional, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的tf.Tensor
元组(每层一个)。
在自注意力头中用于计算加权平均值的注意力 softmax 后的注意力权重。
TFMobileBertForPreTraining 的输出类型。
PytorchHide Pytorch 内容
Transformers 4.37 中文文档(四十五)(5)https://developer.aliyun.com/article/1565218