Transformers 4.37 中文文档(三十四)(2)https://developer.aliyun.com/article/1564746
Funnel Transformer
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/funnel
概述
Funnel Transformer 模型是在论文Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing中提出的。它是一个双向变压器模型,类似于 BERT,但在每个层块之后进行池化操作,有点像传统卷积神经网络(CNN)在计算机视觉中的操作。
该论文的摘要如下:
随着语言预训练的成功,开发更高效且具有良好可扩展性的架构以更低成本利用丰富的未标记数据变得非常可取。为了提高效率,我们研究了在维护完整长度的令牌级表示中常被忽视的冗余,特别是对于只需要序列的单向量表示的任务。基于这种直觉,我们提出了漏斗变压器(Funnel-Transformer),逐渐压缩隐藏状态序列至更短的序列,从而降低计算成本。更重要的是,通过将长度减少所节省的 FLOPs 重新投资于构建更深或更宽的模型,我们进一步提高了模型容量。此外,为了执行常见预训练目标所需的令牌级预测,Funnel-Transformer 能够通过解码器从减少的隐藏序列中恢复每个令牌的深度表示。经验上,使用可比较或更少的 FLOPs,Funnel-Transformer 在各种序列级预测任务上优于标准变压器,包括文本分类、语言理解和阅读理解。
使用提示
- 由于 Funnel Transformer 使用了池化,隐藏状态的序列长度在每个层块之后发生变化。这样,它们的长度被除以 2,加快了下一个隐藏状态的计算。因此,基础模型最终的序列长度是原始长度的四分之一。该模型可以直接用于只需要句子摘要的任务(如序列分类或多项选择)。对于其他任务,使用完整模型;这个完整模型具有一个解码器,将最终的隐藏状态上采样到与输入相同的序列长度。
- 对于分类等任务,这不是问题,但对于像掩码语言建模或令牌分类这样的任务,我们需要一个与原始输入具有相同序列长度的隐藏状态。在这些情况下,最终的隐藏状态被上采样到输入序列长度,并经过两个额外的层。这就是为什么每个检查点有两个版本的原因。带有“-base”后缀的版本仅包含三个块,而没有该后缀的版本包含三个块和上采样头以及其额外的层。
- Funnel Transformer 的检查点都有完整版本和基础版本。第一个应该用于 FunnelModel、FunnelForPreTraining、FunnelForMaskedLM、FunnelForTokenClassification 和 FunnelForQuestionAnswering。第二个应该用于 FunnelBaseModel、FunnelForSequenceClassification 和 FunnelForMultipleChoice。
资源
- 文本分类任务指南
- 令牌分类任务指南
- 问答任务指南
- 掩码语言建模任务指南
- 多选任务指南
FunnelConfig
class transformers.FunnelConfig
( vocab_size = 30522 block_sizes = [4, 4, 4] block_repeats = None num_decoder_layers = 2 d_model = 768 n_head = 12 d_head = 64 d_inner = 3072 hidden_act = 'gelu_new' hidden_dropout = 0.1 attention_dropout = 0.1 activation_dropout = 0.0 initializer_range = 0.1 initializer_std = None layer_norm_eps = 1e-09 pooling_type = 'mean' attention_type = 'relative_shift' separate_cls = True truncate_seq = True pool_q_only = True **kwargs )
参数
vocab_size
(int
, optional, defaults to 30522) — Funnel transformer 的词汇大小。定义了在调用 FunnelModel 或 TFFunnelModel 时可以表示的不同令牌数量。block_sizes
(List[int]
, optional, defaults to[4, 4, 4]
) — 模型中使用的块的大小。block_repeats
(List[int]
, optional) — 如果传递,每个块的每一层将重复指定次数。num_decoder_layers
(int
, optional, defaults to 2) — 解码器中的层数(当不使用基础模型时)。d_model
(int
, optional, defaults to 768) — 模型隐藏状态的维度。n_head
(int
, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。d_head
(int
, optional, defaults to 64) — 模型头部的维度。d_inner
(int
, optional, defaults to 3072) — 前馈块中的内部维度。hidden_act
(str
orcallable
, optional, defaults to"gelu_new"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。hidden_dropout
(float
, optional, defaults to 0.1) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。attention_dropout
(float
, optional, defaults to 0.1) — 注意力概率的 dropout 概率。activation_dropout
(float
, optional, defaults to 0.0) — 在前馈块的两层之间使用的 dropout 概率。initializer_range
(float
, optional, defaults to 0.1) — 初始化所有注意力层中的权重矩阵的均匀初始化器的上界。initializer_std
(float
, optional) — 用于初始化嵌入矩阵和线性层权重的正态初始化器的标准差。对于嵌入矩阵,默认为 1,对于线性层,默认为 Xavier 初始化给定的值。layer_norm_eps
(float
, optional, defaults to 1e-09) — 层归一化层使用的 epsilon。pooling_type
(str
, optional, defaults to"mean"
) — 可能的值为"mean"
或"max"
。在每个块的开头执行池化的方式。attention_type
(str
, optional, defaults to"relative_shift"
) — 可能的值为"relative_shift"
或"factorized"
。前者在 CPU/GPU 上更快,而后者在 TPU 上更快。separate_cls
(bool
, optional, defaults toTrue
) — 是否在应用池化时分离 cls 标记。truncate_seq
(bool
, optional, defaults toTrue
) — 当使用separate_cls
时,是否截断最后一个标记以避免获得不是 2 的倍数的序列长度。pool_q_only
(bool
, optional, defaults toTrue
) — 是否仅将池化应用于查询或用于查询、键和值的注意力层。
这是用于存储 FunnelModel 或 TFBertModel 配置的配置类。根据指定的参数实例化 Funnel Transformer 模型,定义模型架构。使用默认值实例化配置将产生类似于 Funnel Transformer funnel-transformer/small架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
FunnelTokenizer
class transformers.FunnelTokenizer
( 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>' bos_token = '<s>' eos_token = '</s>' tokenize_chinese_chars = True strip_accents = None **kwargs )
参数
vocab_file
(str
) — 包含词汇表的文件。do_lower_case
(bool
, optional, defaults toTrue
) — 在标记化时是否将输入转换为小写。do_basic_tokenize
(bool
, optional, defaults toTrue
) — 在 WordPiece 之前是否进行基本标记化。never_split
(Iterable
, optional) — 在标记化期间永远不会分割的标记集合。仅在do_basic_tokenize=True
时生效unk_token
(str
, optional, defaults to""
) — 未知标记。词汇表中没有的标记无法转换为 ID,而是设置为此标记。sep_token
(str
, optional, defaults to""
) — 分隔符标记,用于从多个序列构建序列,例如用于序列分类的两个序列或用于文本和问题的问题回答。它还用作使用特殊标记构建的序列的最后一个标记。pad_token
(str
, optional, defaults to""
) — 用于填充的标记,例如在批处理不同长度的序列时使用。cls_token
(str
, optional, defaults to""
) — 在进行序列分类(对整个序列而不是每个标记进行分类)时使用的分类器标记。当使用特殊标记构建序列时,它是序列的第一个标记。mask_token
(str
, optional, defaults to""
) — 用于屏蔽值的标记。在使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。bos_token
(str
, optional, defaults to"
") — 句子开头的标记。eos_token
(str
, optional, defaults to"
"
) — 句子结尾的标记。tokenize_chinese_chars
(bool
, optional, defaults toTrue
) — 是否对中文字符进行标记化。
这可能需要在日语中停用(请参阅此问题)。strip_accents
(bool
, 可选) — 是否去除所有重音符号。如果未指定此选项,则将由lowercase
的值决定(与原始 BERT 相同)。
构建一个漏斗 Transformer 分词器。基于 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]
具有适当特殊标记的 input IDs 列表。
通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。一个 BERT 序列的格式如下:
- 单个序列:
[CLS] X [SEP]
- 序列对:
[CLS] A [SEP] B [SEP]
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
) — 标记列表是否已经格式化为模型的特殊标记。
返回
List[int]
一个整数列表,范围为[0, 1]:特殊标记为 1,序列标记为 0。
从没有添加特殊标记的标记列表中检索序列 ID。当使用分词器的 prepare_for_model
方法添加特殊标记时,将调用此方法。
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]
根据给定序列的 token type IDs 列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。一个漏斗
Transformer 序列对掩码的格式如下:
2 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
,则此方法仅返回掩码的第一部分(0s)。
save_vocabulary
( save_directory: str filename_prefix: Optional = None )
FunnelTokenizerFast
class transformers.FunnelTokenizerFast
( 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>' bos_token = '<s>' eos_token = '</s>' clean_text = True tokenize_chinese_chars = True strip_accents = None wordpieces_prefix = '##' **kwargs )
参数
vocab_file
(str
) — 包含词汇表的文件。do_lower_case
(bool
, 可选, 默认为True
) — 在分词化时是否将输入转换为小写。unk_token
(str
, 可选, 默认为""
) — 未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。sep_token
(str
, 可选, 默认为""
) — 分隔符标记,在构建来自多个序列的序列时使用,例如用于序列分类的两个序列或用于文本和问题的问题回答。它还用作使用特殊标记构建的序列的最后一个标记。pad_token
(str
, 可选, 默认为""
) — 用于填充的标记,例如在批处理不同长度的序列时使用。cls_token
(str
,可选,默认为""
)- 在进行序列分类(对整个序列而不是每个标记进行分类)时使用的分类器标记。当使用特殊标记构建序列时,它是序列的第一个标记。mask_token
(str
,可选,默认为""
)- 用于屏蔽值的标记。这是在使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。clean_text
(bool
,可选,默认为True
)- 是否在分词之前清理文本,通过删除所有控制字符并用经典字符替换所有空格。tokenize_chinese_chars
(bool
,可选,默认为True
)- 是否对中文字符进行分词。这对于日语可能需要停用(参见此问题)。bos_token
(str
,可选
,默认为"
")- 句子开头标记。eos_token
(str
,可选
,默认为"
"
)- 句子结束标记。strip_accents
(bool
,可选)- 是否去除所有重音符号。如果未指定此选项,则将由lowercase
的值确定(与原始 BERT 中的情况相同)。wordpieces_prefix
(str
,可选,默认为"##"
)- 子词的前缀。
构建一个“快速”Funnel Transformer 分词器(由 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]
)- 将添加特殊标记的 ID 列表。token_ids_1
(List[int]
,可选)- 序列对的可选第二个 ID 列表。
返回
List[int]
具有适当特殊标记的输入 ID 列表。
通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。Funnel 序列的格式如下:
- 单个序列:
[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]
,可选)- 序列对的可选第二个 ID 列表。
返回
List[int]
根据给定序列的标记类型 ID 列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。一个 Funnel
Transformer 序列对掩码的格式如下:
2 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)。
Funnel 特定输出
class transformers.models.funnel.modeling_funnel.FunnelForPreTrainingOutput
( loss: Optional = None logits: FloatTensor = None hidden_states: Optional = None attentions: Optional = None )
参数
loss
(可选,在提供labels
时返回,形状为(1,)
的torch.FloatTensor
)- ELECTRA 风格目标的总损失。logits
(形状为(batch_size, sequence_length)
的torch.FloatTensor
)- 头部的预测分数(SoftMax 之前每个标记的分数)。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 后的注意力权重。
FunnelForPreTraining 的输出类型。
class transformers.models.funnel.modeling_tf_funnel.TFFunnelForPreTrainingOutput
( logits: tf.Tensor = None hidden_states: Tuple[tf.Tensor] | None = None attentions: Tuple[tf.Tensor] | None = None )
参数
logits
(tf.Tensor
,形状为(batch_size, sequence_length)
) — 头部的预测分数(SoftMax 之前每个标记的分数)。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 后的注意力权重。
FunnelForPreTraining 的输出类型。
Pytorch 隐藏内容
FunnelBaseModel
class transformers.FunnelBaseModel
( config: FunnelConfig )
参数
config
(FunnelConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。
基本的 Funnel Transformer 模型,输出原始隐藏状态,没有上采样头(也称为解码器)或任何特定任务头在顶部。
Funnel Transformer 模型由 Zihang Dai、Guokun Lai、Yiming Yang、Quoc V. Le 在Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing中提出。
此模型继承自 PreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有信息。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutput or tuple(torch.FloatTensor)
参数
input_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
)- 词汇表中输入序列标记的索引。
可以使用 AutoTokenizer 来获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call
()。
什么是输入 ID?attention_mask
(形状为(batch_size, sequence_length)
的torch.FloatTensor
,可选)- 避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]
中选择:
- 1 表示
未被掩盖
的标记, - 0 表示
被掩盖
的标记。
- 什么是注意力掩码?
token_type_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)- 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]
中选择:
- 0 对应于句子 A的标记,
- 1 对应于句子 B的标记。
- 什么是标记类型 ID?
inputs_embeds
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可选)- 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想要更多控制如何将input_ids
索引转换为关联向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。output_attentions
(bool
,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions
。output_hidden_states
(bool
,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states
。return_dict
(bool
,可选)- 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_outputs.BaseModelOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或一个torch.FloatTensor
元组(如果传递return_dict=False
或config.return_dict=False
时)包括根据配置(FunnelConfig)和输入的不同元素。
last_hidden_state
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
)- 模型最后一层的隐藏状态序列。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)- 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(如果模型有嵌入层,则为嵌入的输出+每一层的输出)。
模型在每一层的输出隐藏状态加上可选的初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
在自注意力头中用于计算加权平均值的注意力 softmax 之后的注意力权重。
FunnelBaseModel 的前向方法,覆盖了__call__
特殊方法。
尽管前向传递的步骤需要在此函数内定义,但应该在此之后调用Module
实例,而不是在此处调用,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, FunnelBaseModel >>> import torch >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small-base") >>> model = FunnelBaseModel.from_pretrained("funnel-transformer/small-base") >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") >>> outputs = model(**inputs) >>> last_hidden_states = outputs.last_hidden_state
FunnelModel
class transformers.FunnelModel
( config: FunnelConfig )
参数
config
(FunnelConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
裸的 Funnel Transformer 模型,输出原始隐藏状态,没有特定的顶部头。
Funnel Transformer 模型是由 Zihang Dai,Guokun Lai,Yiming Yang,Quoc V. Le 在Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing中提出的。
此模型继承自 PreTrainedModel。检查超类文档以获取库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。
此模型还是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有事项。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutput or tuple(torch.FloatTensor)
参数
input_ids
(torch.LongTensor
of shape(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call
()。
什么是输入 ID?attention_mask
(torch.FloatTensor
of shape(batch_size, sequence_length)
, optional) — 避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]
中:
- 1 表示
未屏蔽
的标记, - 0 表示
屏蔽
的标记。
- 什么是注意力蒙版?
token_type_ids
(torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]
中选择:
- 0 对应于句子 A标记,
- 1 对应于句子 B标记。
- 什么是标记类型 ID?
inputs_embeds
(torch.FloatTensor
of shape(batch_size, sequence_length, hidden_size)
, optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想要更多控制如何将input_ids
索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这很有用。output_attentions
(bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量中的attentions
。output_hidden_states
(bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量中的hidden_states
。return_dict
(bool
,可选)- 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或 torch.FloatTensor
元组(如果传递 return_dict=False
或 config.return_dict=False
)包含根据配置(FunnelConfig)和输入的不同元素。
last_hidden_state
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
)- 模型最后一层的隐藏状态序列。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)- 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每个层的输出)。
模型在每一层输出的隐藏状态以及可选的初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
FunnelModel 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传递的方法需要在此函数内定义,但应该在此之后调用 Module
实例,而不是这个,因为前者会负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, FunnelModel >>> import torch >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small") >>> model = FunnelModel.from_pretrained("funnel-transformer/small") >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") >>> outputs = model(**inputs) >>> last_hidden_states = outputs.last_hidden_state
FunnelModelForPreTraining
class transformers.FunnelForPreTraining
( config: FunnelConfig )
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None inputs_embeds: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.funnel.modeling_funnel.FunnelForPreTrainingOutput or tuple(torch.FloatTensor)
参数
input_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
)- 词汇表中输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call
()。
输入 ID 是什么?attention_mask
(形状为(batch_size, sequence_length)
的torch.FloatTensor
,可选)- 避免在填充标记索引上执行注意力的蒙版。蒙版值在[0, 1]
中选择:
- 1 用于未被
masked
的标记, - 0 用于被
masked
的标记。
- 注意力蒙版是什么?
token_type_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)- 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]
中选择:
- 0 对应于 句子 A 标记,
- 1 对应于 句子 B 标记。
- 令牌类型 ID 是什么?
inputs_embeds
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想要更多控制权,以便将input_ids
索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。output_attentions
(bool
,可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。output_hidden_states
(bool
,可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。return_dict
(bool
,可选)— 是否返回 ModelOutput 而不是普通元组。labels
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)— 用于计算 ELECTRA 风格损失的标签。输入应为一系列标记(参见input_ids
文档字符串)。索引应在[0, 1]
之间:
- 0 表示标记是原始标记,
- 1 表示标记已被替换。
返回
transformers.models.funnel.modeling_funnel.FunnelForPreTrainingOutput 或tuple(torch.FloatTensor)
transformers.models.funnel.modeling_funnel.FunnelForPreTrainingOutput 或一个torch.FloatTensor
元组(如果传递return_dict=False
或config.return_dict=False
时)包括根据配置(FunnelConfig)和输入的不同元素。
loss
(可选,当提供labels
时返回,形状为(1,)
的torch.FloatTensor
)— ELECTRA 风格目标的总损失。logits
(形状为(batch_size, sequence_length)
的torch.FloatTensor
)— 头部的预测分数(SoftMax 之前每个标记的分数)。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)— 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
模型在每个层的输出的隐藏状态加上初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
FunnelForPreTraining 的前向方法,覆盖了__call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module
实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, FunnelForPreTraining >>> import torch >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small") >>> model = FunnelForPreTraining.from_pretrained("funnel-transformer/small") >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") >>> logits = model(**inputs).logits
FunnelForMaskedLM
class transformers.FunnelForMaskedLM
( config: FunnelConfig )
参数
config
(FunnelConfig)— 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
在顶部带有 语言建模
头的 Funnel Transformer 模型。
Funnel Transformer 模型是由 Zihang Dai、Guokun Lai、Yiming Yang、Quoc V. Le 在 Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing 中提出的。
此模型继承自 PreTrainedModel。检查超类文档以获取库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。
此模型也是 PyTorch torch.nn.Module 的子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None inputs_embeds: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.MaskedLMOutput or tuple(torch.FloatTensor)
参数
input_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
)— 词汇表中输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call
()。
什么是输入 ID?attention_mask
(形状为(batch_size, sequence_length)
的torch.FloatTensor
,可选)— 避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]
中:
- 对于
未屏蔽
的标记, - 0 对于
被屏蔽
的标记。
- 什么是注意力掩码?
token_type_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)— 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]
中选择:
- 0 对应于 句子 A 标记,
- 1 对应于 句子 B 标记。
- 什么是标记类型 ID?
inputs_embeds
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想要更多控制如何将input_ids
索引转换为关联向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。output_attentions
(bool
,可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。output_hidden_states
(bool
,可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。return_dict
(bool
,可选)— 是否返回 ModelOutput 而不是普通元组。labels
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)— 用于计算被屏蔽语言建模损失的标签。索引应在[-100, 0, ..., config.vocab_size]
中(参见input_ids
文档字符串)。索引设置为-100
的标记将被忽略(被屏蔽),损失仅计算具有标签在[0, ..., config.vocab_size]
中的标记。
返回
transformers.modeling_outputs.MaskedLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.MaskedLMOutput 或一个torch.FloatTensor
元组(如果传递return_dict=False
或config.return_dict=False
)包含根据配置(FunnelConfig)和输入的各种元素。
损失
(torch.FloatTensor
,形状为(1,)
,可选,当提供labels
时返回) — 掩码语言建模(MLM)损失。logits
(torch.FloatTensor
,形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
模型在每一层输出处的隐藏状态以及可选的初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
FunnelForMaskedLM 的前向方法,覆盖了__call__
特殊方法。
虽然前向传递的方法需要在此函数内定义,但应该在此之后调用Module
实例,而不是这个,因为前者会负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoTokenizer, FunnelForMaskedLM >>> import torch >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small") >>> model = FunnelForMaskedLM.from_pretrained("funnel-transformer/small") >>> 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) >>> 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)
FunnelForSequenceClassification
class transformers.FunnelForSequenceClassification
( config: FunnelConfig )
参数
config
(FunnelConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
Funnel Transformer 模型,顶部带有一个序列分类/回归头(在最后隐藏状态的第一个时间步之上有两个线性层),例如用于 GLUE 任务。
Funnel Transformer 模型由 Zihang Dai、Guokun Lai、Yiming Yang、Quoc V. Le 在 Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing 中提出。
该模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
该模型也是一个 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有信息。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None inputs_embeds: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.SequenceClassifierOutput or tuple(torch.FloatTensor)
参数
input_ids
(torch.LongTensor
of shape(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call
()。
什么是输入 ID?attention_mask
(torch.FloatTensor
of shape(batch_size, sequence_length)
, optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]
中选择:
- 1 用于
未被掩码
的标记, - 0 用于
被掩码
的标记。
- 什么是注意力掩码?
token_type_ids
(torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — 段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]
中选择:
- 0 对应于句子 A的标记,
- 1 对应于句子 B的标记。
- 什么是标记类型 ID?
inputs_embeds
(torch.FloatTensor
of shape(batch_size, sequence_length, hidden_size)
, optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想要更多控制如何将input_ids
索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。output_attentions
(bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。output_hidden_states
(bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。return_dict
(bool
, optional) — 是否返回 ModelOutput 而不是普通元组。labels
(torch.LongTensor
of shape(batch_size,)
, optional) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]
中。如果config.num_labels == 1
,则计算回归损失(均方损失),如果config.num_labels > 1
,则计算分类损失(交叉熵)。
返回
transformers.modeling_outputs.SequenceClassifierOutput 或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.SequenceClassifierOutput 或一个torch.FloatTensor
元组(如果传递return_dict=False
或config.return_dict=False
)包含各种元素,具体取决于配置(FunnelConfig)和输入。
loss
(torch.FloatTensor
of shape(1,)
, optional, 当提供labels
时返回) — 分类(如果 config.num_labels==1 则为回归)损失。logits
(torch.FloatTensor
of shape(batch_size, config.num_labels)
) — 分类(如果 config.num_labels==1 则为回归)分数(SoftMax 之前)。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)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
FunnelForSequenceClassification 的前向方法,覆盖了__call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module
实例,而不是在此处调用,因为前者负责运行前后处理步骤,而后者会默默地忽略它们。
单标签分类示例:
>>> import torch >>> from transformers import AutoTokenizer, FunnelForSequenceClassification >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small-base") >>> model = FunnelForSequenceClassification.from_pretrained("funnel-transformer/small-base") >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") >>> with torch.no_grad(): ... logits = model(**inputs).logits >>> predicted_class_id = logits.argmax().item() >>> # 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 = FunnelForSequenceClassification.from_pretrained("funnel-transformer/small-base", num_labels=num_labels) >>> labels = torch.tensor([1]) >>> loss = model(**inputs, labels=labels).loss
多标签分类示例:
>>> import torch >>> from transformers import AutoTokenizer, FunnelForSequenceClassification >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small-base") >>> model = FunnelForSequenceClassification.from_pretrained("funnel-transformer/small-base", 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 = FunnelForSequenceClassification.from_pretrained( ... "funnel-transformer/small-base", 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
Transformers 4.37 中文文档(三十四)(4)https://developer.aliyun.com/article/1564748