Nyströmformer
概述
Nyströmformer模型在Yunyang Xiong、Zhanpeng Zeng、Rudrasis Chakraborty、Mingxing Tan、Glenn Fung、Yin Li和Vikas Singh发表的《Nyströmformer: A Nyström-Based Algorithm for Approximating Self-Attention》论文中被提出。
论文的摘要如下
变压器已成为广泛自然语言处理任务的强大工具。推动Transformer表现出色性能的关键组件是自我注意力机制,该机制编码了其他标记对每个特定标记的影响或依赖关系。虽然有益,但自我注意力的输入序列长度的二次复杂度限制了其应用范围,这是社区中正在积极研究的话题。为了解决这一局限性,我们提出了Nyströmformer——一个展示良好可扩展性(作为序列长度的函数)的模型。我们的想法是基于将Nyström方法改编为近似标准自我注意力,具有O(n)复杂度。Nyströmformer的可扩展性使其能够应用于具有数千个标记的更长序列。我们在GLUE基准和IMDb评论的多个下游任务上进行了评估,并发现我们提出的Nyströmformer的性能与标准自我注意力相当,少数情况下甚至略有提升。在Long Range Arena (LRA)基准的更长序列任务中,Nyströmformer相对于其他高效自我注意力方法表现突出。我们的代码可在以下https URL中找到。
资源
NystromformerConfig
类 transformers.NystromformerConfig
< 来源 >( vocab_size = 30000 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu_new' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 510 type_vocab_size = 2 segment_means_seq_len = 64 num_landmarks = 64 conv_kernel_size = 65 inv_coeff_init_option = False initializer_range = 0.02 layer_norm_eps = 1e-05 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 30000) — Nystromformer 模型的词汇量。定义了在调用 NystromformerModel 时inputs_ids
可以代表的不同标记的数量。 - hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化器的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器的隐藏层数量。 - num_attention_heads (
int
, 可选,默认为12) — Transformer编码器中每个注意层注意头的数量。 - intermediate_size (
int
, 可选,默认为3072) — Transformer编码器中“中间”层(即前馈层)的维度。 - hidden_act (
str
或function
,可选,默认为"gelu"
) — 编码器和池子的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - hidden_dropout_prob (
float
, optional, 默认为 0.1) — 嵌入层、编码器和解码器的所有全连接层中的 dropout 概率。 - attention_probs_dropout_prob (
float
, optional, 默认为 0.1) — 注意力概率的 dropout 比率。 - max_position_embeddings (
int
, optional, 默认为 512) — 该模型可能用到的最大序列长度。通常设置得大一些以防万一(例如,512 或 1024 或 2048)。 - type_vocab_size (
int
, 可选, 默认为 2) — 在调用 NystromformerModel 时传入的token_type_ids
的词汇表大小。 - segment_means_seq_len (
int
, 可选, 默认为 64) — 在 segment-means 中使用的序列长度。 - num_landmarks (
int
, 可选, 默认为 64) — 在 Softmax 自注意力矩阵的 Nystrom 近似中使用地标(或 Nystrom)点的数量。 - conv_kernel_size (
int
, 可选, 默认为 65) — 在 Nystrom 近似中使用的深度卷积的核大小。 - inv_coeff_init_option (
bool
, 可选,默认为False
) — 是否为迭代计算矩阵摩尔-彭罗斯伪逆初始值时使用精确系数计算。 - initializer_range (
float
, 可选,默认为 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器标准偏差。 - layer_norm_eps (
float
, 可选,默认为 1e-12) — 层归一化层使用的 epsilon。
这是存储 NystromformerModel 配置的配置类。它用于根据指定的参数实例化一个 Nystromformer 模型,定义模型架构。使用默认值实例化配置将产生类似于 Nystromformer uw-madison/nystromformer-512 架构的配置。
配置对象继承自 PretrainedConfig 并可用于控制模型输出。有关更多信息,请参阅 PretrainedConfig 文档。
示例
>>> from transformers import NystromformerModel, NystromformerConfig
>>> # Initializing a Nystromformer uw-madison/nystromformer-512 style configuration
>>> configuration = NystromformerConfig()
>>> # Initializing a model from the uw-madison/nystromformer-512 style configuration
>>> model = NystromformerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
NystromformerModel
类 transformers.NystromformerModel
< source >( config )
参数
- config (NystromformerConfig) — 模型配置类,包含所有模型参数。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
一个裸的Nyströmformer模型转换器,输出原始隐藏状态而不在顶部添加任何特定头。这是一个PyTorch torch.nn.Module子类。将其用作常规PyTorch模块,并参考PyTorch文档以了解所有与通用用途和行为相关的内容。
forward
< source >( 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 ) → transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列令牌的词汇索引。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
的形状为(batch_size, sequence_length)
,可选) — 用于避免在填充token索引上执行注意力的掩码。掩码的值在[0, 1]
范围内选择:- 1 表示未被掩码的tokens,
- 0 表示被掩码的tokens。
- token_type_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 标识输入的两部分第一和第二部分的分词索引。索引在[0, 1]
范围内选择:- 0 对应于 句子 A 分词,
- 1 对应于 句子 B 分词。
- position_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 每个输入序列token在位置嵌入中的位置索引。选择的范围是[0, config.max_position_embeddings - 1]
。 - head_mask (形状为
torch.FloatTensor
,维度为(num_heads,)
或(num_layers, num_heads)
,可选)- 取消选择的self-attention模块的头部的掩码。掩码值选择在[0, 1]
:- 1 表示头部未被
- 0 表示头部被
- inputs_embeds (形状为
torch.FloatTensor
,维度为(batch_size, sequence_length, hidden_size)
,可选)- 可以选择直接传递嵌入表示,而不传递input_ids
。这样做可以更精确地控制如何将 input_ids 索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵。 - output_attentions (
bool
,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量的attentions
。 - output_hidden_states (
bool
, 可能的) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可能的) — 是否返回 ModelOutput 而不是普通的元组。
返回值
transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 torch.FloatTensor
的元组(如果 return_dict=False
被传递或者当 config.return_dict=False
时),根据配置(NystromformerConfig)和输入包含各种元素。
-
last_hidden_state (
形状为 (batch_size, sequence_length, hidden_size) 的 torch.FloatTensor
) — 模型最后一层的输出隐藏状态序列。如果使用了
past_key_values
,则只输出形状为(batch_size, 1, hidden_size)
的序列的最后一个隐藏状态。 -
past_key_values (
形状为 tuple(tuple(torch.FloatTensor))
的元组,可能的,当通过use_cache=True
传递或当config.use_cache=True
时返回)—— 包含预计算的隐藏状态(self-attention 块中的键和值以及可选地如果在config.is_encoder_decoder=True
的情况下也在交叉注意力块中)的元组,这些状态可以用于(见past_key_values
输入)以加快序列解码。包含用于(如果有的话,可在交叉注意力块中)预计算的隐藏状态(键和值)的元组,这些可以在后续的解码步骤中重用。
-
hidden_states (
形状为 tuple(torch.FloatTensor)
的元组,可能的,当通过output_hidden_states=True
传递或当config.output_hidden_states=True
时返回)—— 包含嵌入层输出来_archive/ exten1256993216 状态(如果模型有嵌入层)和每个层的输出来状态的元组。模型的每一层的输出隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
或配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力softmax后的注意力权重,用于在自注意力头中计算加权平均。
-
cross_attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
和配置参数config.add_cross_attention=True
时返回或当配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。解码器的交叉注意力层的注意力权重,在注意力softmax后,用于在交叉注意力头中计算加权平均。
NystromformerModel 前向方法覆盖了特殊方法 __call__
。
尽管前向传递的配方需要在这个函数中定义,但应该之后调用 Module
实例,而不是这个函数,因为前者会处理前处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, NystromformerModel
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerModel.from_pretrained("uw-madison/nystromformer-512")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
NystromformerForMaskedLM
类 transformers.NystromformerForMaskedLM
< 来源 >( config )
参数
- config (NystromformerConfig) ——包含所有模型参数的模型配置类。使用配置文件初始化时不会加载模型关联的权重,只有配置。请查看from_pretrained()方法来加载模型权重。
在顶部具有语言模型
头的Nyströmformer模型。这是一个PyTorch torch.nn.Module子类。将其作为常规PyTorch模块使用,并参考PyTorch文档以获取所有与通用使用和行为相关的问题。
forward
< 来源( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.modeling_outputs.MaskedLMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列令牌在词汇表中的索引。索引可以通过使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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 标记。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的索引。选择范围为[0, config.max_position_embeddings - 1]
。 - 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_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
,可选)— 是否返回所有层的隐藏状态。有关返回张量下的hidden_states
的更多详细信息,请参阅。 - return_dict (
bool
,可选)— 是否返回ModelOutput 而不是纯元组。 - labels (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选)— 用于计算带遮蔽语言建模损失的标签。索引应在[-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
时),包含根据配置(NystromformerConfig)和输入的不同元素。
-
loss (
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
时返回)—— 包含嵌入层输出来_archive/ exten1256993216 状态(如果模型有嵌入层)和每个层的输出来状态的元组。模型的每一层的输出隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
或配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力softmax后的注意力权重,用于在自注意力头中计算加权平均。
NystromformerForMaskedLM 的 forward 函数,重载了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数中定义,但应该之后调用 Module
实例,而不是这个函数,因为前者会处理前处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, NystromformerForMaskedLM
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerForMaskedLM.from_pretrained("uw-madison/nystromformer-512")
>>> 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)
NystromformerForSequenceClassification
类 transformers.NystromformerForSequenceClassification
< 源代码 >( config )
参数
- config (NystromformerConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只有配置。检查 from_pretrained() 方法加载模型权重。
Nystromformer 模型,顶部有一个序列分类/回归头(顶层池化输出的线性层),例如用于 GLUE 任务。
这是一个 PyTorch torch.nn.Module 子类。像常规 PyTorch 模块一样使用它,并参阅 PyTorch 文档以获取有关通用使用和行为的所有问题。
forward
< 来源 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
维度(batch_size, sequence_length)
) — 词汇表中的输入序列标记索引。可以使用AutoTokenizer来获取索引。有关详细信息,请参阅PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()。
- 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 标记。
- position_ids(形状为
(batch_size, sequence_length)
的torch.LongTensor
,可选)— 每个输入序列令牌在位置嵌入中的位置索引。选定的范围在[0, config.max_position_embeddings - 1]
内。 - head_mask(num_heads,) 或
(num_layers, num_heads)
的torch.FloatTensor
,可选)— 阻断自注意力模块中选定头部的掩码。掩码值选在[0, 1]
之间:- 1 表示头部未掩码
- 0 表示头部掩码
- 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 (
torch.LongTensor
的形状为(batch_size,)
,可选)
返回值
transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
A transformers.modeling_outputs.SequenceClassifierOutput 或一个包含 torch.FloatTensor
的元组(如果 return_dict=False
被传递或当 config.return_dict=False
),根据配置 (NystromformerConfig) 和输入包含各种元素。
-
loss (
torch.FloatTensor
的形状为(1,)
,可选,当提供labels
时返回) — 分类(或回归(如果 config.num_labels==1))损失。 -
logits (
torch.FloatTensor
的形状为(batch_size, config.num_labels)
) — 分类(或回归(如果 config.num_labels==1))分数(在 SoftMax 之前)。 -
hidden_states (
形状为 tuple(torch.FloatTensor)
的元组,可能的,当通过output_hidden_states=True
传递或当config.output_hidden_states=True
时返回)—— 包含嵌入层输出来_archive/ exten1256993216 状态(如果模型有嵌入层)和每个层的输出来状态的元组。模型的每一层的输出隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
或配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力softmax后的注意力权重,用于在自注意力头中计算加权平均。
NystromformerForSequenceClassification 的 forward 方法重写了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数中定义,但应该之后调用 Module
实例,而不是这个函数,因为前者会处理前处理和后处理步骤,而后者会静默忽略它们。
单标签分类的示例
>>> import torch
>>> from transformers import AutoTokenizer, NystromformerForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerForSequenceClassification.from_pretrained("uw-madison/nystromformer-512")
>>> 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 = NystromformerForSequenceClassification.from_pretrained("uw-madison/nystromformer-512", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
多标签分类的示例
>>> import torch
>>> from transformers import AutoTokenizer, NystromformerForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerForSequenceClassification.from_pretrained("uw-madison/nystromformer-512", 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 = NystromformerForSequenceClassification.from_pretrained(
... "uw-madison/nystromformer-512", 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
NystromformerForMultipleChoice
class transformers.NystromformerForMultipleChoice
< 源代码 >( config )
参数
- config (NystromformerConfig) — 包含模型所有参数的配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。请查看from_pretrained() 方法以加载模型权重。
Nyströmformer 模型,顶部带有多个选择分类头(池化输出之上的线性层和 softmax),例如用于 RocStories/SWAG 任务。
这是一个 PyTorch torch.nn.Module 子类。像常规 PyTorch 模块一样使用它,并参阅 PyTorch 文档以获取有关通用使用和行为的所有问题。
forward
< 源代码 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.modeling_outputs.MultipleChoiceModelOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
的形状为(batch_size, num_choices, sequence_length)
) — 词汇表中输入序列标记的索引。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask(形状为
(batch_size, num_choices, sequence_length)
的torch.FloatTensor
,可选)— 避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]
之间:- 对于 非掩码 标记的值为 1,
- 对于 掩码 标记的值为 0。
- token_type_ids(形状为
(batch_size, num_choices, sequence_length)
的torch.LongTensor
,可选)— 段标记索引,用于指示输入的第一句和第二句部分。索引在[0, 1]
之间:- 0 对应于 A 句的标记,
- 1 对应于 B 句的标记。
- position_ids(形状为
(batch_size, num_choices, sequence_length)
的torch.LongTensor
,可选)— 每个输入序列标记在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - head_mask (
torch.FloatTensor
形状为(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 索引到相关向量,这非常有用。 - output_attentions (
bool
,可选) - 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
,可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下方的hidden_states
。 - return_dict (
bool
,可选)— 是否返回 ModelOutput 而不是普通元组。 - labels (
torch.LongTensor
形状为(batch_size,)
,可选)— 用于计算多选分类损失的标签。索引应位于[0, ..., num_choices-1]
其中num_choices
是输入张量第二维的大小。 (见上方的input_ids
)
返回值
transformers.modeling_outputs.MultipleChoiceModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.MultipleChoiceModelOutput 或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
)。包含各种元素,具体取决于配置(NystromformerConfig)和输入。
-
loss (
torch.FloatTensor
形状为 (1,),可选,当提供labels
时返回)— 分类损失。 -
logits (
torch.FloatTensor
形状为(batch_size, num_choices)
)— num_choices 是输入张量的第二维。(见上方 input_ids)分类得分(SoftMax之前)。
-
hidden_states (
形状为 tuple(torch.FloatTensor)
的元组,可能的,当通过output_hidden_states=True
传递或当config.output_hidden_states=True
时返回)—— 包含嵌入层输出来_archive/ exten1256993216 状态(如果模型有嵌入层)和每个层的输出来状态的元组。模型的每一层的输出隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
或配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力softmax后的注意力权重,用于在自注意力头中计算加权平均。
《NystromformerForMultipleChoice》的前向方法,重写了__call__
特殊方法。
尽管前向传递的配方需要在这个函数中定义,但应该之后调用 Module
实例,而不是这个函数,因为前者会处理前处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, NystromformerForMultipleChoice
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerForMultipleChoice.from_pretrained("uw-madison/nystromformer-512")
>>> 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
NystromformerForTokenClassification
类 transformers.NystromformerForTokenClassification
< 源 >( config )
参数
- config (NystromformerConfig) — 包含所有模型参数的模型配置类。使用配置文件初始化不会加载模型相关联的权重,只会加载配置。请查看.from_pretrained()方法来加载模型权重。
在Nyströmformer模型顶部添加token分类头(隐藏状态输出之上的线性层),例如用于命名实体识别(NER)任务。
这是一个 PyTorch torch.nn.Module 子类。像常规 PyTorch 模块一样使用它,并参阅 PyTorch 文档以获取有关通用使用和行为的所有问题。
forward
< source >( 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 labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.TokenClassifierOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 序列中词汇的输入序列标记索引.索引可以通过使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call().
- attention_mask (
torch.FloatTensor
形状(batch_size, sequence_length)
, 可选) — 用于避免在填充token的索引上执行注意力的掩码。选定的掩码值在[0, 1]
范围内:- 1 表示未遮罩的 token,
- 0 表示遮罩的 token。
- token_type_ids (
torch.LongTensor
形状(batch_size, sequence_length)
, 可选) — 分段token索引,用于指示输入的两个部分。索引在[0, 1]
范围内:- 0 对应于句子 A 的 token,
- 1 对应于句子 B 的 token。
- position_ids (
torch.LongTensor
形状(batch_size, sequence_length)
, 可选) — 每个输入序列token在位置嵌入中的索引。在范围[0, config.max_position_embeddings - 1]
中选择。 - head_mask (选择隐藏层掩码的
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
,可选)—— 用于取消选择自注意力模块中的选择头部的掩码。掩码值在[0, 1]
之间选择:- 1 表示头部未被掩码,
- 0 表示头部被掩码。
- inputs_embeds (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可选)—— 可以选择直接传递内嵌表示而不是input_ids
。如果您想要比模型内部的嵌入查找矩阵有更多的控制权来转换input_ids索引关联的向量,这将是有用的。 - output_attentions (布尔值,可选)—— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的
attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多细节,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - labels (
torch.LongTensor
形状为(batch_size, sequence_length)
, 可选) — 用于计算标记分类损失的标签。索引应位于[0, ..., config.num_labels - 1]
范围内。
返回值
transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
A transformers.modeling_outputs.TokenClassifierOutput 或一个包含 torch.FloatTensor
元组的元组(如果传入 return_dict=False
或当 config.return_dict=False
)根据配置(NystromformerConfig)和输入确定。
-
loss (
torch.FloatTensor
形状为(1,)
, 可选, 当提供labels
时返回) — 分类损失。 -
logits (
torch.FloatTensor
形状为(batch_size, sequence_length, config.num_labels)
) — 分类分数(SoftMax 之前)。 -
hidden_states (
形状为 tuple(torch.FloatTensor)
的元组,可能的,当通过output_hidden_states=True
传递或当config.output_hidden_states=True
时返回)—— 包含嵌入层输出来_archive/ exten1256993216 状态(如果模型有嵌入层)和每个层的输出来状态的元组。模型的每一层的输出隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
或配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力softmax后的注意力权重,用于在自注意力头中计算加权平均。
NystromformerForTokenClassification 的 forward 方法,重载了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数中定义,但应该之后调用 Module
实例,而不是这个函数,因为前者会处理前处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, NystromformerForTokenClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerForTokenClassification.from_pretrained("uw-madison/nystromformer-512")
>>> 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]]
>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
NystromformerForQuestionAnswering
类 transformers.NystromformerForQuestionAnswering
< 源 >( config )
参数
- 配置 (NystromformerConfig) — 模型配置类,包含所有模型参数。使用配置文件初始化时不加载模型相关的权重,只有配置。检查from_pretrained() 方法加载模型权重。
Nyströmformer 模型,顶部带有跨度分类头,用于 SQuAD (等抽提式问答任务)。在隐藏状态输出之上添加线性层以计算 跨度开始对数
和 跨度结束对数
。
这是一个 PyTorch torch.nn.Module 子类。像常规 PyTorch 模块一样使用它,并参阅 PyTorch 文档以获取有关通用使用和行为的所有问题。
forward
参数
- input_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
) — 词汇表中的输入序列标记索引。索引可以通过使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()
- 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 标记。
- position_ids(《torch.LongTensor》形式,形状为
(batch_size, sequence_length)
,可选)——指代每个输入序列标记位置在位置嵌入中的索引。在选择范围内[0, config.max_position_embeddings - 1]
。 - 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_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。详见返回张量部分下的attentions
了解更多细节。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。详见返回张量部分下的hidden_states
了解更多细节。 - return_dict (
bool
, 可选) — 是否返回ModelOutput 而不是普通的元组。 - start_positions (
torch.LongTensor
of shape(batch_size,)
, 可选) — 标记跨度起始位置的标签,用于计算token分类损失。位置锁定到序列长度(sequence_length
)。序列之外的坐标在计算损失时不考虑。 - end_positions (
torch.LongTensor
of shape(batch_size,)
, 可选) — 标记跨度结束位置的标签,用于计算token分类损失。位置锁定到序列长度(sequence_length
)。序列之外的坐标在计算损失时不考虑。
返回值
transformers.modeling_outputs.QuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.QuestionAnsweringModelOutput 或一个由torch.FloatTensor
组成的元组(如果传递了return_dict=False
或当config.return_dict=False
时)根据配置(NystromformerConfig)和输入决定。
-
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
时返回)—— 包含嵌入层输出来_archive/ exten1256993216 状态(如果模型有嵌入层)和每个层的输出来状态的元组。模型的每一层的输出隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递参数output_attentions=True
或配置参数config.output_attentions=True
时返回) — 每一个层返回一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力softmax后的注意力权重,用于在自注意力头中计算加权平均。
NystromformerForQuestionAnswering 向前方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数中定义,但应该之后调用 Module
实例,而不是这个函数,因为前者会处理前处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, NystromformerForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("uw-madison/nystromformer-512")
>>> model = NystromformerForQuestionAnswering.from_pretrained("uw-madison/nystromformer-512")
>>> 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]
>>> # 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