Transformers 文档
Longformer
并获取增强的文档体验
开始使用
Longformer
概述
Longformer 模型在 Longformer: The Long-Document Transformer 中被提出,作者是 Iz Beltagy、Matthew E. Peters 和 Arman Cohan。
该论文的摘要如下:
基于 Transformer 的模型由于其自注意力操作而无法处理长序列,自注意力操作的复杂度与序列长度成二次方增长。为了解决这个限制,我们引入了 Longformer,它采用的注意力机制的复杂度与序列长度成线性关系,从而可以轻松处理数千甚至更长 token 的文档。Longformer 的注意力机制是标准自注意力的直接替代品,它将局部窗口注意力与任务驱动的全局注意力相结合。与先前关于长序列 Transformer 的工作一致,我们在字符级语言建模上评估了 Longformer,并在 text8 和 enwik8 上取得了最先进的结果。与大多数先前工作不同,我们还预训练了 Longformer,并将其微调到各种下游任务中。我们的预训练 Longformer 在长文档任务中始终优于 RoBERTa,并在 WikiHop 和 TriviaQA 上创造了新的最先进结果。
使用技巧
- 由于 Longformer 是基于 RoBERTa 的,因此它没有
token_type_ids
。您无需指示哪个 token 属于哪个段。只需使用分隔 tokentokenizer.sep_token
(或</s>
) 分隔您的段即可。 - 一个通过稀疏矩阵替换注意力矩阵以加快速度的 Transformer 模型。通常,局部上下文(例如,左右两个 token 是什么?)足以对给定的 token 采取行动。一些预选的输入 token 仍然被赋予全局注意力,但注意力矩阵的参数要少得多,从而加快了速度。有关更多信息,请参阅局部注意力部分。
Longformer 自注意力
Longformer 自注意力在“局部”上下文和“全局”上下文中都采用了自注意力。大多数 token 仅“局部地”相互关注,这意味着每个 token 关注其之前的 token 和随后的 token,窗口长度为,窗口长度在 config.attention_window
中定义。请注意,config.attention_window
可以是 List
类型,以定义不同的每层窗口大小。选定的少数 token “全局地”关注所有其他 token,就像 BertSelfAttention
中所有 token 的常规做法一样。
请注意,“局部”和“全局”关注 token 由不同的查询、键和值矩阵投影。另请注意,每个“局部”关注 token 不仅关注其窗口内的 token,而且还关注所有“全局”关注 token,因此全局注意力是对称的。
用户可以通过在运行时适当设置 tensor global_attention_mask
来定义哪些 token “局部地”关注,哪些 token “全局地”关注。所有 Longformer 模型都对 global_attention_mask
采用以下逻辑
- 0:token “局部地”关注,
- 1:token “全局地”关注。
有关更多信息,请参阅 forward() 方法。
使用 Longformer 自注意力,查询-键矩阵乘法运算的内存和时间复杂度(通常代表内存和时间瓶颈)可以从降低到,其中是序列长度,是平均窗口大小。假设“全局”关注 token 的数量与“局部”关注 token 的数量相比微不足道。
有关更多信息,请参阅官方论文。
训练
LongformerForMaskedLM 的训练方式与 RobertaForMaskedLM 完全相同,应按如下方式使用
input_ids = tokenizer.encode("This is a sentence from [MASK] training data", return_tensors="pt")
mlm_labels = tokenizer.encode("This is a sentence from the training data", return_tensors="pt")
loss = model(input_ids, labels=input_ids, masked_lm_labels=mlm_labels)[0]
资源
LongformerConfig
class transformers.LongformerConfig
< source >( attention_window: typing.Union[typing.List[int], int] = 512 sep_token_id: int = 2 pad_token_id: int = 1 bos_token_id: int = 0 eos_token_id: int = 2 vocab_size: int = 30522 hidden_size: int = 768 num_hidden_layers: int = 12 num_attention_heads: int = 12 intermediate_size: int = 3072 hidden_act: str = 'gelu' hidden_dropout_prob: float = 0.1 attention_probs_dropout_prob: float = 0.1 max_position_embeddings: int = 512 type_vocab_size: int = 2 initializer_range: float = 0.02 layer_norm_eps: float = 1e-12 onnx_export: bool = False **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 30522) — Longformer 模型的词汇表大小。定义了在调用 LongformerModel 或 TFLongformerModel 时传递的inputs_ids
可以表示的不同 token 的数量。 - hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - intermediate_size (
int
, 可选, 默认为 3072) — Transformer 编码器中“中间”层(通常称为前馈层)的维度。 - hidden_act (
str
或Callable
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - hidden_dropout_prob (
float
, 可选, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, 可选, 默认为 0.1) — 注意力概率的 dropout 比率。 - max_position_embeddings (
int
, 可选, 默认为 512) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如,512 或 1024 或 2048)。 - type_vocab_size (
int
, 可选, 默认为 2) — 调用 LongformerModel 或 TFLongformerModel 时传递的token_type_ids
的词汇表大小。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float
, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。 - attention_window (
int
或List[int]
, 可选, 默认为 512) — 每个 token 周围的注意力窗口大小。如果为int
,则所有层使用相同的大小。要为每个层指定不同的窗口大小,请使用List[int]
,其中len(attention_window) == num_hidden_layers
。
这是用于存储 LongformerModel 或 TFLongformerModel 配置的配置类。它用于根据指定的参数实例化 Longformer 模型,定义模型架构。
这是用于存储 LongformerModel 配置的配置类。它用于根据指定的参数实例化 Longformer 模型,定义模型架构。使用默认值实例化配置将产生与 LongFormer allenai/longformer-base-4096 架构类似的配置,序列长度为 4,096。
配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。
示例
>>> from transformers import LongformerConfig, LongformerModel
>>> # Initializing a Longformer configuration
>>> configuration = LongformerConfig()
>>> # Initializing a model from the configuration
>>> model = LongformerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
LongformerTokenizer
class transformers.LongformerTokenizer
< source >( vocab_file merges_file errors = 'replace' bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' add_prefix_space = False **kwargs )
参数
- vocab_file (
str
) — 词汇表文件的路径。 - merges_file (
str
) — merges 文件的路径。 - errors (
str
, optional, defaults to"replace"
) — 将字节解码为 UTF-8 时遵循的范例。 有关更多信息,请参阅 bytes.decode。 - bos_token (
str
, optional, defaults to"<s>"
) — 序列开始标记,在预训练期间使用。可以用作序列分类器标记。当使用特殊标记构建序列时,这不是用于序列开始的标记。使用的标记是
cls_token
。 - eos_token (
str
, optional, defaults to"</s>"
) — 序列结束标记。当使用特殊标记构建序列时,这不是用于序列结束的标记。使用的标记是
sep_token
。 - sep_token (
str
, optional, defaults to"</s>"
) — 分隔符标记,用于从多个序列构建序列时,例如用于序列分类的两个序列,或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。 - cls_token (
str
, optional, defaults to"<s>"
) — 分类器标记,用于执行序列分类(对整个序列进行分类,而不是按标记分类)。当使用特殊标记构建序列时,它是序列的第一个标记。 - unk_token (
str
, optional, defaults to"<unk>"
) — 未知标记。词汇表中没有的标记无法转换为 ID,而是设置为此标记。 - pad_token (
str
, optional, defaults to"<pad>"
) — 用于填充的标记,例如在对不同长度的序列进行批处理时。 - mask_token (
str
, optional, defaults to"<mask>"
) — 用于掩码值的标记。这是使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。 - add_prefix_space (
bool
, optional, defaults toFalse
) — 是否在输入中添加前导空格。这允许像对待任何其他单词一样对待前导单词。(Longformer 分词器通过前导空格检测单词的开头)。
构建 Longformer 分词器,它从 GPT-2 分词器派生而来,使用字节级字节对编码(Byte-Pair-Encoding)。
此分词器经过训练,将空格视为标记的一部分(有点像 sentencepiece),因此一个单词将
在句子开头(没有空格)或不在句子开头时,编码方式会有所不同
>>> from transformers import LongformerTokenizer
>>> tokenizer = LongformerTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> tokenizer("Hello world")["input_ids"]
[0, 31414, 232, 2]
>>> tokenizer(" Hello world")["input_ids"]
[0, 20920, 232, 2]
您可以通过在实例化此分词器或在某些文本上调用它时传递 add_prefix_space=True
来绕过此行为,但由于模型不是以这种方式预训练的,因此可能会导致性能下降。
当与 is_split_into_words=True
一起使用时,此分词器将在每个单词(甚至是第一个单词)之前添加一个空格。
此分词器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
通过连接并添加特殊标记,从序列或序列对构建模型输入,用于序列分类任务。 Longformer 序列具有以下格式
- 单个序列:
<s> X </s>
- 序列对:
<s> A </s></s> B </s>
将标记(字符串)序列转换为单个字符串。
create_token_type_ids_from_sequences
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
从传递的两个序列创建一个掩码,用于序列对分类任务。 Longformer 不使用标记类型 ID,因此返回零列表。
get_special_tokens_mask
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None already_has_special_tokens: bool = False ) → List[int]
从没有添加特殊 token 的 token 列表中检索序列 ID。当使用 tokenizer 的 prepare_for_model
方法添加特殊 token 时,会调用此方法。
LongformerTokenizerFast
class transformers.LongformerTokenizerFast
< source >( vocab_file = None merges_file = None tokenizer_file = None errors = 'replace' bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' add_prefix_space = False trim_offsets = True **kwargs )
参数
- vocab_file (
str
) — 词汇表文件的路径。 - merges_file (
str
) — merges 文件的路径。 - errors (
str
, optional, defaults to"replace"
) — 将字节解码为 UTF-8 时遵循的范例。有关更多信息,请参阅 bytes.decode。默认为"replace"
。 - bos_token (
str
, optional, defaults to"<s>"
) — 序列开始 token,在预训练期间使用。可以用作序列分类 token。当使用特殊 token 构建序列时,这不是用于序列开始的 token。使用的 token 是
cls_token
。 - eos_token (
str
, optional, defaults to"</s>"
) — 序列结束 token。默认为"</s>"
。当使用特殊 token 构建序列时,这不是用于序列结束的 token。使用的 token 是
sep_token
。 - sep_token (
str
, optional, defaults to"</s>"
) — 分隔符 token,用于从多个序列构建序列时,例如用于序列分类的两个序列,或用于问答的文本和问题。它也用作使用特殊 token 构建的序列的最后一个 token。默认为"</s>"
。 - cls_token (
str
, optional, defaults to"<s>"
) — 分类器 token,用于进行序列分类(对整个序列而不是每个 token 进行分类)。当使用特殊 token 构建时,它是序列的第一个 token。默认为"<s>"
。 - unk_token (
str
, optional, defaults to"<unk>"
) — 未知 token。词汇表中不存在的 token 无法转换为 ID,而是设置为此 token。默认为"<unk>"
。 - pad_token (
str
, optional, defaults to"<pad>"
) — 用于填充的 token,例如在批处理不同长度的序列时。默认为"<pad>"
。 - mask_token (
str
, optional, defaults to"<mask>"
) — 用于掩码值的 token。这是使用掩码语言建模训练此模型时使用的 token。这是模型将尝试预测的 token。默认为"<mask>"
。 - add_prefix_space (
bool
, optional, defaults toFalse
) — 是否在输入中添加初始空格。这允许像对待任何其他单词一样对待前导词。(Longformer tokenizer 通过前导空格检测单词的开头)。默认为False
。 - trim_offsets (
bool
, optional, defaults toTrue
) — 后处理步骤是否应修剪偏移量以避免包含空格。默认为True
。
构建一个“快速” Longformer tokenizer(由 HuggingFace 的 tokenizers 库支持),它源自 GPT-2 tokenizer,使用字节级字节对编码 (Byte-Pair-Encoding)。
此分词器经过训练,将空格视为标记的一部分(有点像 sentencepiece),因此一个单词将
在句子开头(没有空格)或不在句子开头时,编码方式会有所不同
>>> from transformers import LongformerTokenizerFast
>>> tokenizer = LongformerTokenizerFast.from_pretrained("allenai/longformer-base-4096")
>>> tokenizer("Hello world")["input_ids"]
[0, 31414, 232, 2]
>>> tokenizer(" Hello world")["input_ids"]
[0, 20920, 232, 2]
您可以通过在实例化此分词器或在某些文本上调用它时传递 add_prefix_space=True
来绕过此行为,但由于模型不是以这种方式预训练的,因此可能会导致性能下降。
当与 is_split_into_words=True
一起使用时,此 tokenizer 需要使用 add_prefix_space=True
实例化。
此 tokenizer 继承自 PreTrainedTokenizerFast,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
create_token_type_ids_from_sequences
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
从传递的两个序列创建一个掩码,用于序列对分类任务。 Longformer 不使用标记类型 ID,因此返回零列表。
Longformer 特定输出
class transformers.models.longformer.modeling_longformer.LongformerBaseModelOutput
< source >( last_hidden_state: FloatTensor hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出处的隐藏状态序列。 - hidden_states (
tuple(torch.FloatTensor)
, optional, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(每个嵌入输出 + 每层输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出处的隐藏状态,加上初始嵌入输出。
- attentions (
tuple(torch.FloatTensor)
, optional, 当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是从序列中的每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中的每个 token(剩余的attention_window + 1
个值)的注意力权重。请注意,第一个x
值指的是文本中具有固定位置的 token,但剩余的attention_window + 1
值指的是具有相对位置的 token:token 对自身的注意力权重位于索引x + attention_window / 2
处,并且attention_window / 2
个前导(后继)值是到attention_window / 2
个前导(后继)token 的注意力权重。如果注意力窗口包含具有全局注意力的 token,则相应索引处的注意力权重设置为 0;该值应从前x
个注意力权重中访问。如果 token 具有全局注意力,则attentions
中所有其他 token 的注意力权重设置为 0,这些值应从global_attentions
中访问。
tuple(torch.FloatTensor)
, optional, 当传递 output_attentions=True
或 config.output_attentions=True
时返回) — torch.FloatTensor
的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, x)
,其中 x
是具有全局注意力掩码的 token 数量。 注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
Longformer 输出的基类,具有潜在的隐藏状态、局部和全局注意力。
class transformers.models.longformer.modeling_longformer.LongformerBaseModelOutputWithPooling
< source >( last_hidden_state: FloatTensor pooler_output: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出的隐藏状态序列。 - pooler_output (
torch.FloatTensor
,形状为(batch_size, hidden_size)
) — 序列的第一个 token (分类 token) 的最后一层隐藏状态,通过线性层和 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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是从序列中每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中的每个 token(剩余的 `attention_window- 1` 个值)的注意力权重。 请注意,前
x
个值指的是文本中位置固定的 token,但其余的attention_window + 1
个值指的是相对位置的 token:token 自身到自身的注意力权重位于索引x + attention_window / 2
,而attention_window / 2
个前序(后继)值是到attention_window / 2
个前序(后继)token 的注意力权重。 如果注意力窗口包含具有全局注意力的 token,则相应索引处的注意力权重设置为 0;该值应从前x
个注意力权重中访问。 如果 token 具有全局注意力,则attentions
中到所有其他 token 的注意力权重都设置为 0,这些值应从global_attentions
中访问。
- 1` 个值)的注意力权重。 请注意,前
- global_attentions (
tuple(torch.FloatTensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每一层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
Longformer 输出的基类,也包含最后一层隐藏状态的池化。
class transformers.models.longformer.modeling_longformer.LongformerMaskedLMOutput
< source >( loss: typing.Optional[torch.FloatTensor] = None logits: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- loss (
torch.FloatTensor
,形状为(1,)
,可选,当提供labels
时返回) — 掩码语言建模 (MLM) 损失。 - logits (
torch.FloatTensor
,形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(SoftMax 之前每个词汇 token 的分数)。 - 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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是从序列中每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中的每个 token(剩余的 `attention_window- 1` 个值)的注意力权重。 请注意,前
x
个值指的是文本中位置固定的 token,但其余的attention_window + 1
个值指的是相对位置的 token:token 自身到自身的注意力权重位于索引x + attention_window / 2
,而attention_window / 2
个前序(后继)值是到attention_window / 2
个前序(后继)token 的注意力权重。 如果注意力窗口包含具有全局注意力的 token,则相应索引处的注意力权重设置为 0;该值应从前x
个注意力权重中访问。 如果 token 具有全局注意力,则attentions
中到所有其他 token 的注意力权重都设置为 0,这些值应从global_attentions
中访问。
- 1` 个值)的注意力权重。 请注意,前
- global_attentions (
tuple(torch.FloatTensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每一层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
掩码语言模型输出的基类。
class transformers.models.longformer.modeling_longformer.LongformerQuestionAnsweringModelOutput
< source >( loss: typing.Optional[torch.FloatTensor] = None start_logits: FloatTensor = None end_logits: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- loss (
torch.FloatTensor
,形状为(1,)
,可选,当提供labels
时返回) — 总跨度抽取损失是起始位置和结束位置交叉熵损失的总和。 - start_logits (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — Span-start 分数 (SoftMax 之前)。 - end_logits (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — Span-end 分数 (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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是从序列中每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中的每个 token(剩余的 `attention_window- 1` 个值)的注意力权重。 请注意,前
x
个值指的是文本中位置固定的 token,但其余的attention_window + 1
个值指的是相对位置的 token:token 自身到自身的注意力权重位于索引x + attention_window / 2
,而attention_window / 2
个前序(后继)值是到attention_window / 2
个前序(后继)token 的注意力权重。 如果注意力窗口包含具有全局注意力的 token,则相应索引处的注意力权重设置为 0;该值应从前x
个注意力权重中访问。 如果 token 具有全局注意力,则attentions
中到所有其他 token 的注意力权重都设置为 0,这些值应从global_attentions
中访问。
- 1` 个值)的注意力权重。 请注意,前
- global_attentions (
tuple(torch.FloatTensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每一层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
问题回答 Longformer 模型输出的基类。
class transformers.models.longformer.modeling_longformer.LongformerSequenceClassifierOutput
< source >( loss: typing.Optional[torch.FloatTensor] = None logits: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- 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
时返回) —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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是序列中每个 token 到具有全局注意力的每个 token(前
x
个值)以及到注意力窗口中的每个 token(剩余 `attention_window - global_attentions (
tuple(torch.FloatTensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是具有全局注意力的每个 token 到序列中每个 token 的注意力权重。
句子分类模型输出的基类。
类 transformers.models.longformer.modeling_longformer.LongformerMultipleChoiceModelOutput
< 源码 >( loss: typing.Optional[torch.FloatTensor] = None logits: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- 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
时返回) —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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是序列中每个 token 到具有全局注意力的每个 token(前
x
个值)以及到注意力窗口中的每个 token(剩余 `attention_window - global_attentions (
tuple(torch.FloatTensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是具有全局注意力的每个 token 到序列中每个 token 的注意力权重。
多项选择 Longformer 模型输出的基类。
类 transformers.models.longformer.modeling_longformer.LongformerTokenClassifierOutput
< 源码 >( loss: typing.Optional[torch.FloatTensor] = None logits: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None global_attentions: typing.Optional[typing.Tuple[torch.FloatTensor, ...]] = None )
参数
- 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
时返回) —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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是序列中每个 token 到具有全局注意力的每个 token(前
x
个值)以及到注意力窗口中的每个 token(剩余 `attention_window - global_attentions (
tuple(torch.FloatTensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是具有全局注意力的每个 token 到序列中每个 token 的注意力权重。
Token 分类模型输出的基类。
类 transformers.models.longformer.modeling_tf_longformer.TFLongformerBaseModelOutput
< 源码 >( last_hidden_state: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- last_hidden_state (
tf.Tensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 - 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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的局部注意力权重,用于计算自注意力头中的加权平均值。这些是序列中每个 token 到具有全局注意力的每个 token(前
x
个值)以及到注意力窗口中的每个 token(剩余 `attention_window - global_attentions (
tuple(tf.Tensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 之后的全局注意力权重,用于计算自注意力头中的加权平均值。这些是具有全局注意力的每个 token 到序列中每个 token 的注意力权重。
Longformer 输出的基类,具有潜在的隐藏状态、局部和全局注意力。
类 transformers.models.longformer.modeling_tf_longformer.TFLongformerBaseModelOutputWithPooling
< 源码 >( last_hidden_state: tf.Tensor = None pooler_output: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- last_hidden_state (
tf.Tensor
,形状为(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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的标记数量。注意力 softmax 后的局部注意力权重,用于计算自注意力头中的加权平均值。 这些是从序列中每个标记到每个具有全局注意力的标记(前
x
个值)以及到注意力窗口中每个标记(剩余的attention_window
- 1
个值)的注意力权重。 请注意,前
x个值指的是文本中具有固定位置的标记,但剩余的
attention_window + 1个值指的是具有相对位置的标记:标记自身注意力权重位于索引
x + attention_window / 2,而
attention_window / 2个前置(后继)值是到
attention_window / 2个前置(后继)标记的注意力权重。 如果注意力窗口包含具有全局注意力的标记,则相应索引处的注意力权重设置为 0; 该值应从前
x个注意力权重访问。 如果标记具有全局注意力,则
attentions中到所有其他标记的注意力权重都设置为 0,这些值应从
global_attentions` 访问。
- 1
- global_attentions (
tuple(tf.Tensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的标记数量。注意力 softmax 后的全局注意力权重,用于计算自注意力头中的加权平均值。 这些是从每个具有全局注意力的标记到序列中每个标记的注意力权重。
Longformer 输出的基类,也包含最后一层隐藏状态的池化。
class transformers.models.longformer.modeling_tf_longformer.TFLongformerMaskedLMOutput
< source >( loss: tf.Tensor | None = None logits: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- loss (
tf.Tensor
,形状为(1,)
,可选,当提供labels
时返回) — 掩码语言建模 (MLM) 损失。 - logits (
tf.Tensor
,形状为(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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的标记数量。注意力 softmax 后的局部注意力权重,用于计算自注意力头中的加权平均值。 这些是从序列中每个标记到每个具有全局注意力的标记(前
x
个值)以及到注意力窗口中每个标记(剩余的attention_window
- 1
个值)的注意力权重。 请注意,前
x个值指的是文本中具有固定位置的标记,但剩余的
attention_window + 1个值指的是具有相对位置的标记:标记自身注意力权重位于索引
x + attention_window / 2,而
attention_window / 2个前置(后继)值是到
attention_window / 2个前置(后继)标记的注意力权重。 如果注意力窗口包含具有全局注意力的标记,则相应索引处的注意力权重设置为 0; 该值应从前
x个注意力权重访问。 如果标记具有全局注意力,则
attentions中到所有其他标记的注意力权重都设置为 0,这些值应从
global_attentions` 访问。
- 1
- global_attentions (
tuple(tf.Tensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的标记数量。注意力 softmax 后的全局注意力权重,用于计算自注意力头中的加权平均值。 这些是从每个具有全局注意力的标记到序列中每个标记的注意力权重。
掩码语言模型输出的基类。
class transformers.models.longformer.modeling_tf_longformer.TFLongformerQuestionAnsweringModelOutput
< source >( loss: tf.Tensor | None = None start_logits: tf.Tensor = None end_logits: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- loss (
tf.Tensor
,形状为(1,)
,可选,当提供labels
时返回) — 总跨度抽取损失是起始位置和结束位置的交叉熵损失之和。 - start_logits (
tf.Tensor
,形状为(batch_size, sequence_length)
) — 跨度起始位置分数(SoftMax 之前)。 - end_logits (
tf.Tensor
,形状为(batch_size, sequence_length)
) — 跨度结束位置分数(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, x + attention_window + 1)
,其中x
是具有全局注意力掩码的标记数量。注意力 softmax 后的局部注意力权重,用于计算自注意力头中的加权平均值。 这些是从序列中每个标记到每个具有全局注意力的标记(前
x
个值)以及到注意力窗口中每个标记(剩余的attention_window
- 1
个值)的注意力权重。 请注意,前
x个值指的是文本中具有固定位置的标记,但剩余的
attention_window + 1个值指的是具有相对位置的标记:标记自身注意力权重位于索引
x + attention_window / 2,而
attention_window / 2个前置(后继)值是到
attention_window / 2个前置(后继)标记的注意力权重。 如果注意力窗口包含具有全局注意力的标记,则相应索引处的注意力权重设置为 0; 该值应从前
x个注意力权重访问。 如果标记具有全局注意力,则
attentions中到所有其他标记的注意力权重都设置为 0,这些值应从
global_attentions` 访问。
- 1
- global_attentions (
tuple(tf.Tensor)
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局注意力掩码的标记数量。注意力 softmax 后的全局注意力权重,用于计算自注意力头中的加权平均值。 这些是从每个具有全局注意力的标记到序列中每个标记的注意力权重。
问题回答 Longformer 模型输出的基类。
class transformers.models.longformer.modeling_tf_longformer.TFLongformerSequenceClassifierOutput
< source >( loss: tf.Tensor | None = None logits: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- loss (
tf.Tensor
,形状为(1,)
,可选,当提供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
时返回) — 形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
的tf.Tensor
元组(每层一个),其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 后的局部注意力权重,用于计算自注意力头中的加权平均值。 这些是从序列中每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中每个 token(剩余的attention_window
- 1
个值)的注意力权重。 请注意,前
x个值指的是文本中固定位置的 token,但剩余的
attention_window + 1个值指的是相对位置的 token:token 自身注意力的权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)token 的注意力权重。 如果注意力窗口包含具有全局注意力的 token,则对应索引处的注意力权重设置为 0;该值应从前
x个注意力权重中访问。 如果 token 具有全局注意力,则
attentions中所有其他 token 的注意力权重都设置为 0,这些值应从
global_attentions` 中访问。
- 1
- global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, x)
的tf.Tensor
元组(每层一个),其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 后的全局注意力权重,用于计算自注意力头中的加权平均值。 这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
句子分类模型输出的基类。
类 transformers.models.longformer.modeling_tf_longformer.TFLongformerMultipleChoiceModelOutput
< 源代码 >( loss: tf.Tensor | None = None logits: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- loss (形状为 (1,) 的
tf.Tensor
, 可选, 当提供labels
时返回) — 分类损失。 - logits (形状为
(batch_size, num_choices)
的tf.Tensor
) — num_choices 是输入张量的第二个维度。(参见上面的 input_ids)。分类得分(SoftMax 之前)。
- hidden_states (
tuple(tf.Tensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的tf.Tensor
元组(对于嵌入的输出以及每一层的输出,各一个)。模型在每一层输出端的隐藏状态,加上初始嵌入输出。
- attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
的tf.Tensor
元组(每层一个),其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 后的局部注意力权重,用于计算自注意力头中的加权平均值。 这些是从序列中每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中每个 token(剩余的attention_window
- 1
个值)的注意力权重。 请注意,前
x个值指的是文本中固定位置的 token,但剩余的
attention_window + 1个值指的是相对位置的 token:token 自身注意力的权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)token 的注意力权重。 如果注意力窗口包含具有全局注意力的 token,则对应索引处的注意力权重设置为 0;该值应从前
x个注意力权重中访问。 如果 token 具有全局注意力,则
attentions中所有其他 token 的注意力权重都设置为 0,这些值应从
global_attentions` 中访问。
- 1
- global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, x)
的tf.Tensor
元组(每层一个),其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 后的全局注意力权重,用于计算自注意力头中的加权平均值。 这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
多项选择模型输出的基类。
类 transformers.models.longformer.modeling_tf_longformer.TFLongformerTokenClassifierOutput
< 源代码 >( loss: tf.Tensor | None = None logits: tf.Tensor = None hidden_states: Tuple[tf.Tensor, ...] | None = None attentions: Tuple[tf.Tensor, ...] | None = None global_attentions: Tuple[tf.Tensor, ...] | None = None )
参数
- loss (形状为
(1,)
的tf.Tensor
, 可选, 当提供labels
时返回) — 分类损失。 - logits (形状为
(batch_size, sequence_length, config.num_labels)
的tf.Tensor
) — 分类得分(SoftMax 之前)。 - hidden_states (
tuple(tf.Tensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的tf.Tensor
元组(对于嵌入的输出以及每一层的输出,各一个)。模型在每一层输出端的隐藏状态,加上初始嵌入输出。
- attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
的tf.Tensor
元组(每层一个),其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 后的局部注意力权重,用于计算自注意力头中的加权平均值。 这些是从序列中每个 token 到每个具有全局注意力的 token(前
x
个值)以及到注意力窗口中每个 token(剩余的attention_window
- 1
个值)的注意力权重。 请注意,前
x个值指的是文本中固定位置的 token,但剩余的
attention_window + 1个值指的是相对位置的 token:token 自身注意力的权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)token 的注意力权重。 如果注意力窗口包含具有全局注意力的 token,则对应索引处的注意力权重设置为 0;该值应从前
x个注意力权重中访问。 如果 token 具有全局注意力,则
attentions中所有其他 token 的注意力权重都设置为 0,这些值应从
global_attentions` 中访问。
- 1
- global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, x)
的tf.Tensor
元组(每层一个),其中x
是具有全局注意力掩码的 token 数量。注意力 softmax 后的全局注意力权重,用于计算自注意力头中的加权平均值。 这些是从每个具有全局注意力的 token 到序列中每个 token 的注意力权重。
Token 分类模型输出的基类。
LongformerModel
类 transformers.LongformerModel
< 源代码 >( config add_pooling_layer = True )
参数
- config (LongformerConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
裸 Longformer 模型,输出原始隐藏状态,顶部没有任何特定的 head。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
此类复制了 RobertaModel 中的代码,并使用 longformer 自注意力覆盖了标准自注意力,从而能够按照 Iz Beltagy、Matthew E. Peters 和 Arman Cohan 的 Longformer: the Long-Document Transformer 中描述的自注意力方法处理长序列。 Longformer 自注意力结合了局部(滑动窗口)和全局注意力,以扩展到长文档,而不会使内存和计算量呈 O(n^2) 增长。
此处实现的自注意力模块 LongformerSelfAttention
支持局部和全局注意力的组合,但它缺乏对自回归注意力和扩张注意力的支持。 自回归和扩张注意力更适用于自回归语言建模,而不是在下游任务上进行微调。 未来版本将增加对自回归注意力的支持,但对扩张注意力的支持需要自定义 CUDA 内核才能实现内存和计算效率。
forward
< 源代码 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None global_attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.longformer.modeling_longformer.LongformerBaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以使用 AutoTokenizer 获得。 详见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 获取详细信息。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding 令牌索引上执行 attention 的掩码。掩码值在[0, 1]
中选择:- 1 表示令牌未被掩码,
- 0 表示令牌已被掩码。
- global_attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于决定在每个令牌上给予的 attention 类型(局部 attention 或全局 attention)的掩码。具有全局 attention 的令牌会关注所有其他令牌,并且所有其他令牌也会关注它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更灵活。例如,对于分类,应为令牌提供全局 attention。对于问答,所有问题令牌也应具有全局 attention。有关更多详细信息,请参阅Longformer 论文。掩码值在[0, 1]
中选择:- 0 表示局部 attention(滑动窗口 attention),
- 1 表示全局 attention(关注所有其他令牌的令牌,以及所有其他令牌都关注它们的令牌)。
- head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
,可选) — 用于置空编码器中 attention 模块的选定头的掩码。掩码值在[0, 1]
中选择:- 1 表示头未被掩码,
- 0 表示头已被掩码。
- decoder_head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
,可选) — 用于置空解码器中 attention 模块的选定头的掩码。掩码值在[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]
中选择。 - inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — (可选)您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您希望比模型的内部嵌入查找矩阵更好地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - output_attentions (
bool
,可选) — 是否返回所有 attention 层的 attention 张量。 有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通的元组。
返回
transformers.models.longformer.modeling_longformer.LongformerBaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 transformers.models.longformer.modeling_longformer.LongformerBaseModelOutputWithPooling 或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含取决于配置 (LongformerConfig) 和输入的各种元素。
-
last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出处的隐藏状态序列。 -
pooler_output (
torch.FloatTensor
,形状为(batch_size, hidden_size)
) — 序列的第一个令牌(分类令牌)的最后一层隐藏状态,通过线性层和 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, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
LongformerModel 的 forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> import torch
>>> from transformers import LongformerModel, AutoTokenizer
>>> model = LongformerModel.from_pretrained("allenai/longformer-base-4096")
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> SAMPLE_TEXT = " ".join(["Hello world! "] * 1000) # long input document
>>> input_ids = torch.tensor(tokenizer.encode(SAMPLE_TEXT)).unsqueeze(0) # batch of size 1
>>> attention_mask = torch.ones(
... input_ids.shape, dtype=torch.long, device=input_ids.device
... ) # initialize to local attention
>>> global_attention_mask = torch.zeros(
... input_ids.shape, dtype=torch.long, device=input_ids.device
... ) # initialize to global attention to be deactivated for all tokens
>>> global_attention_mask[
... :,
... [
... 1,
... 4,
... 21,
... ],
... ] = 1 # Set global attention to random tokens for the sake of this example
>>> # Usually, set global attention based on the task. For example,
>>> # classification: the <s> token
>>> # QA: question tokens
>>> # LM: potentially on the beginning of sentences and paragraphs
>>> outputs = model(input_ids, attention_mask=attention_mask, global_attention_mask=global_attention_mask)
>>> sequence_output = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output
LongformerForMaskedLM
class transformers.LongformerForMaskedLM
< source >( config )
参数
- config (LongformerConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
Longformer 模型,顶部带有 language modeling
头。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None global_attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: 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.models.longformer.modeling_longformer.LongformerMaskedLMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以使用 AutoTokenizer 获得。 详见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 获取详细信息。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding 令牌索引上执行 attention 的掩码。掩码值在[0, 1]
中选择:- 1 表示令牌未被掩码,
- 0 表示令牌已被掩码。
- global_attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于决定在每个令牌上给予的 attention 类型(局部 attention 或全局 attention)的掩码。具有全局 attention 的令牌会关注所有其他令牌,并且所有其他令牌也会关注它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更灵活。例如,对于分类,应为令牌提供全局 attention。对于问答,所有问题令牌也应具有全局 attention。有关更多详细信息,请参阅Longformer 论文。掩码值在[0, 1]
中选择:- 0 表示局部 attention(滑动窗口 attention),
- 1 表示全局 attention(关注所有其他令牌的令牌,以及所有其他令牌都关注它们的令牌)。
- head_mask (
torch.Tensor
, 形状为(num_layers, num_heads)
, 可选) — 用于置空编码器中注意力模块所选 head 的掩码。掩码值在[0, 1]
中选择:- 1 表示 head 不被掩盖,
- 0 表示 head 被掩盖。
- decoder_head_mask (
torch.Tensor
, 形状为(num_layers, num_heads)
, 可选) — 用于置空解码器中注意力模块所选 head 的掩码。掩码值在[0, 1]
中选择:- 1 表示 head 不被掩盖,
- 0 表示 head 被掩盖。
- 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]
中选择。 - 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
的 token 将被忽略(掩码),损失仅针对标签在[0, ..., config.vocab_size]
中的 token 计算。 - kwargs (
Dict[str, any]
, 可选, 默认为{}
) — 用于隐藏已弃用的旧版参数。
返回
transformers.models.longformer.modeling_longformer.LongformerMaskedLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.longformer.modeling_longformer.LongformerMaskedLMOutput 或一个 torch.FloatTensor
元组 (如果传递了 return_dict=False
或者当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
torch.FloatTensor
, 形状为(1,)
, 可选, 当提供labels
时返回) — 掩码语言建模 (MLM) 损失。 -
logits (
torch.FloatTensor
, 形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(SoftMax 之前每个词汇 token 的分数)。 -
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, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
LongformerForMaskedLM forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
掩码填充示例
>>> from transformers import AutoTokenizer, LongformerForMaskedLM
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> model = LongformerForMaskedLM.from_pretrained("allenai/longformer-base-4096")
让我们尝试一个非常长的输入。
>>> TXT = (
... "My friends are <mask> but they eat too many carbs."
... + " That's why I decide not to eat with them." * 300
... )
>>> input_ids = tokenizer([TXT], return_tensors="pt")["input_ids"]
>>> logits = model(input_ids).logits
>>> masked_index = (input_ids[0] == tokenizer.mask_token_id).nonzero().item()
>>> probs = logits[0, masked_index].softmax(dim=0)
>>> values, predictions = probs.topk(5)
>>> tokenizer.decode(predictions).split()
['healthy', 'skinny', 'thin', 'good', 'vegetarian']
LongformerForSequenceClassification
class transformers.LongformerForSequenceClassification
< source >( config )
参数
- config (LongformerConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。
Longformer 模型转换器,顶部带有序列分类/回归头(池化输出顶部的线性层),例如用于 GLUE 任务。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None global_attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: 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.models.longformer.modeling_longformer.LongformerSequenceClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
, 形状为(batch_size, sequence_length)
) — 词汇表中输入序列 token 的索引。可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
, 形状为(batch_size, sequence_length)
, 可选) — 用于避免对 padding token 索引执行注意力的掩码。掩码值在[0, 1]
中选择:- 1 表示 token 不被掩盖,
- 0 表示 token 被掩盖。
- global_attention_mask (
torch.FloatTensor
, 形状为(batch_size, sequence_length)
, 可选) — 用于决定在每个 token 上给予的注意力类型(局部注意力或全局注意力)的掩码。具有全局注意力的 token 会关注所有其他 token,并且所有其他 token 也会关注它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更加灵活。例如,对于分类,应为token 提供全局注意力。对于 QA,所有问题 token 也应具有全局注意力。有关更多详细信息,请参阅 Longformer 论文。掩码值在[0, 1]
中选择:- 0 表示局部注意力(滑动窗口注意力),
- 1 表示全局注意力(关注所有其他 token 的 token,以及所有其他 token 关注它们的 token)。
- head_mask (
torch.Tensor
, 形状为(num_layers, num_heads)
, 可选) — 用于置空编码器中注意力模块所选 head 的掩码。掩码值在[0, 1]
中选择:- 1 表示 head 不被掩盖,
- 0 表示 head 被掩盖。
- decoder_head_mask (
torch.Tensor
, 形状为(num_layers, num_heads)
, 可选) — 用于置空解码器中注意力模块所选 head 的掩码。掩码值在[0, 1]
中选择:- 1 表示 head 不被掩盖,
- 0 表示 head 被掩盖。
- 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]
中选择。 - inputs_embeds (
torch.FloatTensor
, 形状为(batch_size, sequence_length, hidden_size)
, 可选) — 可选地,您可以选择直接传递嵌入表示而不是传递input_ids
。如果您想要比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为关联向量,这将非常有用。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 更多细节请查看返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回一个 ModelOutput 对象而不是一个普通的元组。 - labels (
torch.LongTensor
, 形状为(batch_size,)
, optional) — 用于计算序列分类/回归损失的标签。索引应该在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
,则计算回归损失(均方误差损失);如果config.num_labels > 1
,则计算分类损失(交叉熵损失)。
返回
transformers.models.longformer.modeling_longformer.LongformerSequenceClassifierOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.longformer.modeling_longformer.LongformerSequenceClassifierOutput 对象,或者一个 torch.FloatTensor
元组 (如果 return_dict=False
被传递,或者当 config.return_dict=False
时),包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
torch.FloatTensor
,形状为(1,)
, optional, 当提供了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
时返回) —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, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
LongformerForSequenceClassification
的前向传播方法,重写了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
单标签分类示例
>>> import torch
>>> from transformers import AutoTokenizer, LongformerForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("jpwahle/longformer-base-plagiarism-detection")
>>> model = LongformerForSequenceClassification.from_pretrained("jpwahle/longformer-base-plagiarism-detection")
>>> 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]
'ORIGINAL'
>>> # 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 = LongformerForSequenceClassification.from_pretrained("jpwahle/longformer-base-plagiarism-detection", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
5.44
多标签分类示例
>>> import torch
>>> from transformers import AutoTokenizer, LongformerForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("jpwahle/longformer-base-plagiarism-detection")
>>> model = LongformerForSequenceClassification.from_pretrained("jpwahle/longformer-base-plagiarism-detection", 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 = LongformerForSequenceClassification.from_pretrained(
... "jpwahle/longformer-base-plagiarism-detection", 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
LongformerForMultipleChoice
class transformers.LongformerForMultipleChoice
< source >( config )
参数
- config (LongformerConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
Longformer 模型,顶部带有一个多项选择分类头(池化输出之上的线性层和一个 softmax),例如用于 RocStories/SWAG 任务。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None global_attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.longformer.modeling_longformer.LongformerMultipleChoiceModelOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, num_choices, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以通过 AutoTokenizer 获得。 参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 获取详细信息。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, num_choices, sequence_length)
, optional) — 用于避免在 padding token 索引上执行 attention 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 tokens 不被 mask,
- 0 表示 tokens 被 mask。
- global_attention_mask (
torch.FloatTensor
,形状为(batch_size, num_choices, sequence_length)
, optional) — 用于决定在每个 token 上给予的 attention 类型(局部 attention 或全局 attention)的 Mask。 具有全局 attention 的 tokens 会 attend 到所有其他 tokens,并且所有其他 tokens 也会 attend 到它们。 这对于特定任务的微调非常重要,因为它使模型在表示任务时更灵活。 例如,对于分类,<s>
token 应该被赋予全局 attention。 对于问答,所有问题 tokens 也应该具有全局 attention。 请参阅 Longformer 论文 以获取更多详细信息。 Mask 值在[0, 1]
中选择:- 0 表示局部 attention (滑动窗口 attention),
- 1 表示全局 attention (attend 到所有其他 tokens 的 tokens,以及所有其他 tokens attend 到它们)。
- head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
, optional) — 用于 nullify encoder 中 attention 模块的选定 heads 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 head 不被 mask,
- 0 表示 head 被 mask。
- decoder_head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
, optional) — 用于 nullify decoder 中 attention 模块的选定 heads 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 head 不被 mask,
- 0 表示 head 被 mask。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, num_choices, sequence_length)
, optional) — Segment token 索引,用于指示输入的第一部分和第二部分。 索引在[0, 1]
中选择:- 0 对应于 sentence A token,
- 1 对应于 sentence B token。
- position_ids (
torch.LongTensor
,形状为(batch_size, num_choices, sequence_length)
, optional) — 每个输入序列 tokens 在位置嵌入中的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - inputs_embeds (
torch.FloatTensor
,形状为(batch_size, num_choices, sequence_length, hidden_size)
, optional) — (可选)您可以选择直接传递嵌入表示,而不是传递input_ids
。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为相关的向量,这将非常有用。 - output_attentions (
bool
, optional) — 是否返回所有 attention 层的 attention tensors。 更多细节请查看返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 更多细节请查看返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回一个 ModelOutput 对象而不是一个普通的元组。 - labels (
torch.LongTensor
,形状为(batch_size,)
, optional) — 用于计算多项选择分类损失的标签。 索引应该在[0, ..., num_choices-1]
范围内,其中num_choices
是输入张量第二个维度的大小。 (请参阅上面的input_ids
)
返回
transformers.models.longformer.modeling_longformer.LongformerMultipleChoiceModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.longformer.modeling_longformer.LongformerMultipleChoiceModelOutput 对象,或者一个 torch.FloatTensor
元组 (如果 return_dict=False
被传递,或者当 config.return_dict=False
时),包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
torch.FloatTensor
,形状为 (1,), optional, 当提供了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
时返回) —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, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
LongformerForMultipleChoice
的前向传播方法,重写了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, LongformerForMultipleChoice
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> model = LongformerForMultipleChoice.from_pretrained("allenai/longformer-base-4096")
>>> 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
LongformerForTokenClassification
class transformers.LongformerForTokenClassification
< source >( config )
参数
- config (LongformerConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
Longformer 模型,顶部带有一个 token 分类头(隐藏状态输出之上的线性层),例如用于命名实体识别 (NER) 任务。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None global_attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: 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.models.longformer.modeling_longformer.LongformerTokenClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以通过 AutoTokenizer 获得。 参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 获取详细信息。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding 令牌索引上执行 attention 的掩码。掩码值在[0, 1]
中选择:1
表示令牌未被掩码,0
表示令牌已被掩码。
- global_attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于决定在每个令牌上给予 attention 类型(局部 attention 或全局 attention)的掩码。具有全局 attention 的令牌会关注所有其他令牌,并且所有其他令牌也会关注它们。这对于特定于任务的微调非常重要,因为它使模型在表示任务时更加灵活。例如,对于分类任务,<s>
令牌应被赋予全局 attention。对于问答任务,所有问题令牌也应具有全局 attention。有关更多详细信息,请参阅 Longformer 论文。掩码值在[0, 1]
中选择:0
表示局部 attention(滑动窗口 attention),1
表示全局 attention(关注所有其他令牌的令牌,以及所有其他令牌关注它们的令牌)。
- head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
,可选) — 用于使编码器中 attention 模块的选定头无效的掩码。掩码值在[0, 1]
中选择:1
表示头未被掩码,0
表示头已被掩码。
- decoder_head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
,可选) — 用于使解码器中 attention 模块的选定头无效的掩码。掩码值在[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]
中选择。 - inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — (可选)您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您希望比模型的内部嵌入查找矩阵更好地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - output_attentions (
bool
,可选) — 是否返回所有 attention 层的 attention 张量。有关更多详细信息,请参见返回的张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回的张量下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。 - labels (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 用于计算令牌分类损失的标签。索引应在[0, ..., config.num_labels - 1]
中。
返回
transformers.models.longformer.modeling_longformer.LongformerTokenClassifierOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.longformer.modeling_longformer.LongformerTokenClassifierOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包括各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
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
时返回) —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, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
LongformerForTokenClassification forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, LongformerForTokenClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("brad1141/Longformer-finetuned-norm")
>>> model = LongformerForTokenClassification.from_pretrained("brad1141/Longformer-finetuned-norm")
>>> 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
['Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence', 'Evidence']
>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
0.63
LongformerForQuestionAnswering
class transformers.LongformerForQuestionAnswering
< source >( config )
参数
- config (LongformerConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
Longformer 模型,顶部带有 span 分类头,用于抽取式问答任务,如 SQuAD / TriviaQA(隐藏状态输出顶部的线性层,用于计算 span start logits
和 span end logits
)。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None global_attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: 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.models.longformer.modeling_longformer.LongformerQuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列令牌的索引。可以使用 AutoTokenizer 获取索引。 有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding 令牌索引上执行 attention 的掩码。掩码值在[0, 1]
中选择:1
表示令牌未被掩码,0
表示令牌已被掩码。
- global_attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于决定在每个令牌上给予 attention 类型(局部 attention 或全局 attention)的掩码。具有全局 attention 的令牌会关注所有其他令牌,并且所有其他令牌也会关注它们。这对于特定于任务的微调非常重要,因为它使模型在表示任务时更加灵活。例如,对于分类任务,<s>
令牌应被赋予全局 attention。对于问答任务,所有问题令牌也应具有全局 attention。有关更多详细信息,请参阅 Longformer 论文。掩码值在[0, 1]
中选择:0
表示局部 attention(滑动窗口 attention),1
表示全局 attention(关注所有其他令牌的令牌,以及所有其他令牌关注它们的令牌)。
- head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
,可选) — 用于使编码器中 attention 模块的选定头无效的掩码。掩码值在[0, 1]
中选择:1
表示头未被掩码,0
表示头已被掩码。
- decoder_head_mask (
torch.Tensor
,形状为(num_layers, num_heads)
,可选) — 用于使解码器中 attention 模块的选定头无效的掩码。掩码值在[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]
中选择。 - 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
,形状为(batch_size,)
,可选) — 用于计算 token 分类损失的标记跨度开始位置(索引)的标签。位置被限制在序列的长度 (sequence_length
) 内。序列之外的位置不计入损失计算。 - end_positions (
torch.LongTensor
,形状为(batch_size,)
,可选) — 用于计算 token 分类损失的标记跨度结束位置(索引)的标签。位置被限制在序列的长度 (sequence_length
) 内。序列之外的位置不计入损失计算。
返回
transformers.models.longformer.modeling_longformer.LongformerQuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.longformer.modeling_longformer.LongformerQuestionAnsweringModelOutput 或一个 torch.FloatTensor
元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
torch.FloatTensor
,形状为(1,)
,可选,当提供labels
时返回) — 总跨度提取损失是开始和结束位置的交叉熵损失之和。 -
start_logits (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — 跨度开始得分(在 SoftMax 之前)。 -
end_logits (
torch.FloatTensor
,形状为(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, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的令牌数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
LongformerForQuestionAnswering 前向方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, LongformerForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-large-4096-finetuned-triviaqa")
>>> model = LongformerForQuestionAnswering.from_pretrained("allenai/longformer-large-4096-finetuned-triviaqa")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> encoding = tokenizer(question, text, return_tensors="pt")
>>> input_ids = encoding["input_ids"]
>>> # default is local attention everywhere
>>> # the forward method will automatically set global attention on question tokens
>>> attention_mask = encoding["attention_mask"]
>>> outputs = model(input_ids, attention_mask=attention_mask)
>>> start_logits = outputs.start_logits
>>> end_logits = outputs.end_logits
>>> all_tokens = tokenizer.convert_ids_to_tokens(input_ids[0].tolist())
>>> answer_tokens = all_tokens[torch.argmax(start_logits) : torch.argmax(end_logits) + 1]
>>> answer = tokenizer.decode(
... tokenizer.convert_tokens_to_ids(answer_tokens)
... ) # remove space prepending space token
TFLongformerModel
class transformers.TFLongformerModel
< source >( config *inputs **kwargs )
参数
- config (LongformerConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。
裸 Longformer 模型,输出原始隐藏状态,顶部没有任何特定的 head。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作” - 只需以 model.fit()
支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
此类复制了 TFRobertaModel 中的代码,并使用 longformer 自注意力覆盖了标准自注意力,从而提供了处理长序列的能力,遵循 Iz Beltagy、Matthew E. Peters 和 Arman Cohan 在 Longformer: the Long-Document Transformer 中描述的自注意力方法。Longformer 自注意力结合了局部(滑动窗口)和全局注意力,以扩展到长文档,而不会使内存和计算量增加 O(n^2)。
此处实现的自注意力模块 TFLongformerSelfAttention
支持局部和全局注意力的组合,但它缺乏对自回归注意力和扩张注意力的支持。自回归和扩张注意力与自回归语言建模比微调下游任务更相关。未来的版本将增加对自回归注意力的支持,但对扩张注意力的支持需要自定义 CUDA 内核才能实现内存和计算效率。
call
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None global_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 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 )
参数
- input_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。可以使用 AutoTokenizer 获取索引。 有关详细信息,请参见 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 掩码,以避免对填充标记索引执行注意力机制。掩码值在[0, 1]
中选择:- 1 表示标记未被掩盖,
- 0 表示标记被掩盖。
- head_mask (
np.ndarray
或tf.Tensor
,形状为(encoder_layers, encoder_attention_heads)
,可选) — 掩码,用于使注意力模块的选定头无效。掩码值在[0, 1]
中选择:- 1 表示头未被掩盖,
- 0 表示头被掩盖。
- global_attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 掩码,用于决定在每个标记上给予的注意力类型,局部注意力或全局注意力。具有全局注意力的标记会关注所有其他标记,并且所有其他标记也会关注它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更灵活。例如,对于分类,应为标记赋予全局注意力。对于问答,所有问题标记也应具有全局注意力。有关更多详细信息,请参阅 Longformer 论文。掩码值在[0, 1]
中选择:- 0 表示局部注意力(滑动窗口注意力),
- 1 表示全局注意力(关注所有其他标记的标记,以及所有其他标记关注它们的标记)。
- token_type_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一个和第二个部分。索引在[0, 1]
中选择:- 0 对应于 句子 A 标记,
- 1 对应于 句子 B 标记。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 位置嵌入中每个输入序列标记的位置索引。在范围[0, config.max_position_embeddings - 1]
中选择。 - inputs_embeds (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — (可选) 您可以选择直接传入词嵌入表示,而不是传递input_ids
。如果您希望比模型的内部词嵌入查找矩阵更精细地控制如何将input_ids
索引转换为相关的向量,这将非常有用。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。此参数只能在 eager 模式下使用,在 graph 模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。此参数只能在 eager 模式下使用,在 graph 模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是纯元组。此参数可以在 eager 模式下使用,在 graph 模式下,该值将始终设置为 True。 - training (
bool
, 可选,默认为False
) — 是否在训练模式下使用模型(某些模块,如 dropout 模块,在训练和评估之间具有不同的行为)。
TFLongformerModel 前向方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
TFLongformerForMaskedLM
class transformers.TFLongformerForMaskedLM
< source >( config *inputs **kwargs )
参数
- config (LongformerConfig) — Model configuration class with all the parameters of the model. Initializing with a config file does not load the weights associated with the model, only the configuration. Check out the from_pretrained() method to load the model weights.
Longformer 模型,顶部带有 language modeling
头。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作” - 只需以 model.fit()
支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None global_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 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.models.longformer.modeling_tf_longformer.TFLongformerMaskedLMOutput or tuple(tf.Tensor)
参数
- input_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode() 以了解详情。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
, 可选) — 用于避免在 padding token 索引上执行 attention 的掩码。 掩码值在[0, 1]
中选择:- 1 表示 tokens 未被掩盖,
- 0 表示 tokens 被掩盖。
- head_mask (
np.ndarray
或tf.Tensor
,形状为(encoder_layers, encoder_attention_heads)
, 可选) — 用于 nullify attention 模块中选定 heads 的掩码。 掩码值在[0, 1]
中选择:- 1 表示 head 未被掩盖,
- 0 表示 head 被掩盖。
- global_attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
, 可选) — 用于决定在每个 token 上给予的 attention 类型(本地 attention 或全局 attention)的掩码。 具有全局 attention 的 Tokens 会关注所有其他 tokens,而所有其他 tokens 也会关注它们。 这对于特定任务的微调非常重要,因为它使模型在表示任务时更加灵活。 例如,对于分类,应该给token 全局 attention。 对于 QA,所有问题 tokens 也应该具有全局 attention。 请参阅 Longformer 论文 以了解更多详情。 掩码值在[0, 1]
中选择:- 0 表示本地 attention(滑动窗口 attention),
- 1 表示全局 attention(关注所有其他 tokens 的 tokens,以及所有其他 tokens 关注它们)。
- token_type_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
, 可选) — 段 token 索引,用于指示输入的第一部分和第二部分。 索引在[0, 1]
中选择:- 0 对应于 sentence A token,
- 1 对应于 sentence B token。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
, 可选) — 位置嵌入中每个输入序列 tokens 的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - inputs_embeds (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length, hidden_size)
, 可选) — (可选)您可以选择直接传递嵌入表示,而不是传递input_ids
。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - output_attentions (
bool
, 可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参阅返回 tensors 下的attentions
。 此参数只能在 eager 模式下使用,在 graph 模式下将使用 config 中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参阅返回 tensors 下的hidden_states
。 此参数只能在 eager 模式下使用,在 graph 模式下将使用 config 中的值。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通 tuple。 此参数可以在 eager 模式下使用,在 graph 模式下,该值将始终设置为 True。 - training (
bool
, 可选, 默认为False
) — 是否在训练模式下使用模型(某些模块,如 dropout 模块,在训练和评估之间具有不同的行为)。 - labels (
tf.Tensor
,形状为(batch_size, sequence_length)
, 可选) — 用于计算 masked language modeling loss 的标签。 索引应在[-100, 0, ..., config.vocab_size]
中(请参阅input_ids
文档字符串)。索引设置为-100
的 Tokens 将被忽略(掩盖),loss 仅针对标签在[0, ..., config.vocab_size]
中的 tokens 计算。
返回
transformers.models.longformer.modeling_tf_longformer.TFLongformerMaskedLMOutput 或 tuple(tf.Tensor)
一个 transformers.models.longformer.modeling_tf_longformer.TFLongformerMaskedLMOutput 或一个 tf.Tensor
的 tuple(如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
tf.Tensor
,形状为(1,)
, 可选, 当提供labels
时返回) — Masked language modeling (MLM) 损失。 -
logits (
tf.Tensor
,形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模 head 的预测分数(SoftMax 之前每个词汇表 token 的分数)。 -
hidden_states (
tuple(tf.Tensor)
, 可选, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —tf.Tensor
的 tuple(embeddings 的输出一个,每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出以及初始嵌入输出处的隐藏状态。
-
attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
TFLongformerForMaskedLM forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFLongformerForMaskedLM
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> model = TFLongformerForMaskedLM.from_pretrained("allenai/longformer-base-4096")
>>> 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'
TFLongformerForQuestionAnswering
class transformers.TFLongformerForQuestionAnswering
< source >( config *inputs **kwargs )
参数
- config (LongformerConfig) — 模型配置类,包含模型的所有参数。 使用配置文件初始化不会加载与模型关联的权重,只会加载配置。 查看 from_pretrained() 方法以加载模型权重。
Longformer 模型,顶部带有一个跨度分类 head,用于抽取式问答任务,如 SQuAD / TriviaQA(hidden-states 输出之上的一层线性层,用于计算 span start logits
和 span end logits
)。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作” - 只需以 model.fit()
支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None global_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 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.models.longformer.modeling_tf_longformer.TFLongformerQuestionAnsweringModelOutput 或 tuple(tf.Tensor)
参数
- input_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode() 以了解详情。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
, 可选) — 用于避免在 padding token 索引上执行 attention 的掩码。 掩码值在[0, 1]
中选择:- 1 表示 tokens 未被掩盖,
- 0 表示 tokens 被掩盖。
- head_mask (
np.ndarray
或tf.Tensor
,形状为(encoder_layers, encoder_attention_heads)
, 可选) — 用于 nullify attention 模块中选定 heads 的掩码。 掩码值在[0, 1]
中选择:- 1 表示 head 未被掩盖,
- 0 表示 head 被掩盖。
- global_attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于决定每个 token 的 attention 类型(局部 attention 或全局 attention)的 mask。具有全局 attention 的 token 会关注所有其他 token,并且所有其他 token 也会关注它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更加灵活。例如,对于分类任务,应为 <s> token 提供全局 attention。对于问答任务(QA),所有问题 token 也应具有全局 attention。有关更多详细信息,请参阅 Longformer 论文。Mask 值在[0, 1]
中选择:- 0 代表局部 attention(滑动窗口 attention),
- 1 代表全局 attention(关注所有其他 token 的 token,以及所有其他 token 关注的 token)。
- token_type_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,*可选*) — 用于指示输入的第一部分和第二部分的片段 token 索引。索引在[0, 1]
中选择:- 0 对应于 *句子 A* token,
- 1 对应于 *句子 B* token。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,*可选*) — 每个输入序列 token 在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - inputs_embeds (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length, hidden_size)
,*可选*) — (可选)除了传递input_ids
之外,您可以选择直接传递嵌入表示。如果您想比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - output_attentions (
bool
,*可选*) — 是否返回所有 attention 层的 attention tensors。有关更多详细信息,请参阅返回的 tensors 下的attentions
。此参数只能在 eager 模式下使用,在 graph 模式下将使用 config 中的值。 - output_hidden_states (
bool
,*可选*) — 是否返回所有层的 hidden states。有关更多详细信息,请参阅返回的 tensors 下的hidden_states
。此参数只能在 eager 模式下使用,在 graph 模式下将使用 config 中的值。 - return_dict (
bool
,*可选*) — 是否返回 ModelOutput 而不是普通的 tuple。此参数可以在 eager 模式下使用,在 graph 模式下,该值将始终设置为 True。 - training (
bool
,*可选*,默认为False
) — 是否在训练模式下使用模型(dropout 模块等某些模块在训练和评估之间具有不同的行为)。 - start_positions (
tf.Tensor
,形状为(batch_size,)
,*可选*) — 用于计算 token 分类损失的已标记跨度起点的标签位置(索引)。位置被限制在序列的长度(*sequence_length*)内。序列之外的位置不计入损失计算。 - end_positions (
tf.Tensor
,形状为(batch_size,)
,*可选*) — 用于计算 token 分类损失的已标记跨度终点的标签位置(索引)。位置被限制在序列的长度(*sequence_length*)内。序列之外的位置不计入损失计算。
返回
transformers.models.longformer.modeling_tf_longformer.TFLongformerQuestionAnsweringModelOutput or tuple(tf.Tensor)
一个 transformers.models.longformer.modeling_tf_longformer.TFLongformerQuestionAnsweringModelOutput 或一个 tf.Tensor
的 tuple(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
tf.Tensor
,形状为(1,)
,*可选*,当提供labels
时返回) — 总跨度提取损失是起始位置和结束位置的交叉熵之和。 -
start_logits (
tf.Tensor
,形状为(batch_size, sequence_length)
) — 跨度起始得分(SoftMax 之前)。 -
end_logits (
tf.Tensor
,形状为(batch_size, sequence_length)
) — 跨度结束得分(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
, 可选, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —tf.Tensor
的 tuple(embeddings 的输出一个,每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出以及初始嵌入输出处的隐藏状态。
-
attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
The TFLongformerForQuestionAnswering 的前向传播方法覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFLongformerForQuestionAnswering
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-large-4096-finetuned-triviaqa")
>>> model = TFLongformerForQuestionAnswering.from_pretrained("allenai/longformer-large-4096-finetuned-triviaqa")
>>> 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)
' puppet'
TFLongformerForSequenceClassification
class transformers.TFLongformerForSequenceClassification
< source >( config *inputs **kwargs )
参数
- config (LongformerConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
Longformer 模型转换器,顶部带有序列分类/回归头(池化输出顶部的线性层),例如用于 GLUE 任务。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作” - 只需以 model.fit()
支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None global_attention_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.models.longformer.modeling_tf_longformer.TFLongformerSequenceClassifierOutput or tuple(tf.Tensor)
参数
- input_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 输入序列 token 在词汇表中的索引。索引可以使用 AutoTokenizer 获得。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,*可选*) — 用于避免对 padding token 索引执行 attention 的 mask。Mask 值在[0, 1]
中选择:- 1 代表**未被 mask** 的 token,
- 0 代表**被 mask** 的 token。
- head_mask (
np.ndarray
或tf.Tensor
,形状为(encoder_layers, encoder_attention_heads)
,*可选*) — 用于使 attention 模块的选定 head 无效的 mask。Mask 值在[0, 1]
中选择:- 1 表示 head **未被 mask**,
- 0 表示 head **被 mask**。
- global_attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,*可选*) — 用于决定每个 token 的 attention 类型(局部 attention 或全局 attention)的 mask。具有全局 attention 的 token 会关注所有其他 token,并且所有其他 token 也会关注它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更加灵活。例如,对于分类任务,应为 <s> token 提供全局 attention。对于问答任务(QA),所有问题 token 也应具有全局 attention。有关更多详细信息,请参阅 Longformer 论文。Mask 值在[0, 1]
中选择:- 0 代表局部 attention(滑动窗口 attention),
- 1 代表全局 attention(关注所有其他 token 的 token,以及所有其他 token 关注的 token)。
- token_type_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,*可选*) — 用于指示输入的第一部分和第二部分的片段 token 索引。索引在[0, 1]
中选择:- 0 对应于 *句子 A* token,
- 1 对应于 *句子 B* token。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,*可选*) — 每个输入序列 token 在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - inputs_embeds (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length, hidden_size)
,*可选*) — (可选)除了传递input_ids
之外,您可以选择直接传递嵌入表示。如果您想比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - output_attentions (
bool
,*可选*) — 是否返回所有 attention 层的 attention tensors。有关更多详细信息,请参阅返回的 tensors 下的attentions
。此参数只能在 eager 模式下使用,在 graph 模式下将使用 config 中的值。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的hidden_states
。 此参数只能在 eager 模式下使用,在 graph 模式下将使用配置中的值。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是普通的元组。 此参数可以在 eager 模式下使用,在 graph 模式下该值将始终设置为 True。 - training (
bool
, optional, defaults toFalse
) — 是否在训练模式下使用模型(dropout 模块等某些模块在训练和评估之间具有不同的行为)。
返回
transformers.models.longformer.modeling_tf_longformer.TFLongformerSequenceClassifierOutput 或 tuple(tf.Tensor)
一个 transformers.models.longformer.modeling_tf_longformer.TFLongformerSequenceClassifierOutput 或一个 tf.Tensor
元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
tf.Tensor
,形状为(1,)
,可选,当提供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
的 tuple(embeddings 的输出一个,每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出以及初始嵌入输出处的隐藏状态。
-
attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
TFLongformerForSequenceClassification 前向方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFLongformerForSequenceClassification
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> model = TFLongformerForSequenceClassification.from_pretrained("allenai/longformer-base-4096")
>>> 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])
>>> # 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 = TFLongformerForSequenceClassification.from_pretrained("allenai/longformer-base-4096", num_labels=num_labels)
>>> labels = tf.constant(1)
>>> loss = model(**inputs, labels=labels).loss
TFLongformerForTokenClassification
class transformers.TFLongformerForTokenClassification
< source >( config *inputs **kwargs )
参数
- config (LongformerConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
Longformer 模型,顶部带有一个 token 分类头(隐藏状态输出之上的线性层),例如用于命名实体识别 (NER) 任务。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作” - 只需以 model.fit()
支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None global_attention_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: Optional[Union[np.array, tf.Tensor]] = None training: Optional[bool] = False ) → transformers.models.longformer.modeling_tf_longformer.TFLongformerTokenClassifierOutput 或 tuple(tf.Tensor)
参数
- input_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding 标记索引上执行注意力的掩码。 在[0, 1]
中选择的掩码值:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
- head_mask (
np.ndarray
或tf.Tensor
,形状为(encoder_layers, encoder_attention_heads)
,可选) — 用于使注意力模块的选定头无效的掩码。 在[0, 1]
中选择的掩码值:- 1 表示头未被掩码,
- 0 表示头被掩码。
- global_attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于决定在每个标记上给予的注意力(局部注意力或全局注意力)的掩码。 具有全局注意力的标记关注所有其他标记,所有其他标记也关注它们。 这对于特定于任务的微调非常重要,因为它使模型在表示任务时更加灵活。 例如,对于分类,应为标记赋予全局注意力。 对于 QA,所有问题标记也应具有全局注意力。 有关更多详细信息,请参阅 Longformer 论文。 在[0, 1]
中选择的掩码值:- 0 表示局部注意力(滑动窗口注意力),
- 1 表示全局注意力(关注所有其他标记的标记,以及所有其他标记关注它们的标记)。
- token_type_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一个和第二个部分。 在[0, 1]
中选择索引:- 0 对应于句子 A 标记,
- 1 对应于句子 B 标记。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。 在[0, config.max_position_embeddings - 1]
范围内选择。 - inputs_embeds (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递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 toFalse
) — 是否在训练模式下使用模型(dropout 模块等某些模块在训练和评估之间具有不同的行为)。 - labels (
tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于计算标记分类损失的标签。 索引应在[0, ..., config.num_labels - 1]
中。
返回
transformers.models.longformer.modeling_tf_longformer.TFLongformerTokenClassifierOutput 或 tuple(tf.Tensor)
一个 transformers.models.longformer.modeling_tf_longformer.TFLongformerTokenClassifierOutput 或一个 tf.Tensor
元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
tf.Tensor
,形状为(1,)
,可选,当提供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
的 tuple(embeddings 的输出一个,每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出以及初始嵌入输出处的隐藏状态。
-
attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
TFLongformerForTokenClassification 前向方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFLongformerForTokenClassification
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> model = TFLongformerForTokenClassification.from_pretrained("allenai/longformer-base-4096")
>>> 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()]
TFLongformerForMultipleChoice
class transformers.TFLongformerForMultipleChoice
< source >( config *inputs **kwargs )
参数
- config (LongformerConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
Longformer 模型,顶部带有一个多项选择分类头(池化输出之上的线性层和一个 softmax),例如用于 RocStories/SWAG 任务。
此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作” - 只需以 model.fit()
支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None global_attention_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.models.longformer.modeling_tf_longformer.TFLongformerMultipleChoiceModelOutput 或 tuple(tf.Tensor)
参数
- input_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, num_choices, sequence_length)
) — 词汇表中输入序列 tokens 的索引。索引可以通过 AutoTokenizer 获得。 详见 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode() 获取详细信息。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, num_choices, sequence_length)
, 可选) — 用于避免在 padding token 索引上执行 attention 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 tokens 未被 mask,
- 0 表示 tokens 已被 mask。
- head_mask (
np.ndarray
或tf.Tensor
,形状为(encoder_layers, encoder_attention_heads)
, 可选) — 用于 nullify 所选 attention 模块的 heads 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 head 未被 mask,
- 0 表示 head 已被 mask。
- global_attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, num_choices, sequence_length)
, 可选) — Mask 用于决定在每个 token 上给予的 attention 类型,local attention 或 global attention。具有 global attention 的 tokens 会 attention 到所有其他 tokens,并且所有其他 tokens 也会 attention 到它们。这对于特定任务的微调非常重要,因为它使模型在表示任务时更灵活。例如,对于分类,token 应该被赋予 global attention。对于 QA,所有问题 tokens 也应该具有 global attention。请参阅 Longformer 论文 以获取更多详细信息。 Mask 值在[0, 1]
中选择:- 0 表示 local attention (滑动窗口 attention),
- 1 表示 global attention (attention 到所有其他 tokens 的 tokens,以及所有其他 tokens attention 到它们)。
- token_type_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, num_choices, sequence_length)
, 可选) — Segment token 索引,用于指示输入的第一部分和第二部分。 索引在[0, 1]
中选择:- 0 对应于 sentence A token,
- 1 对应于 sentence B token。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, num_choices, sequence_length)
, 可选) — 每个输入序列 tokens 在 position embeddings 中的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - inputs_embeds (
np.ndarray
或tf.Tensor
,形状为(batch_size, num_choices, sequence_length, hidden_size)
, 可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - output_attentions (
bool
, 可选) — 是否返回所有 attention 层的 attentions tensors。 有关更多详细信息,请参阅返回的 tensors 下的attentions
。 此参数只能在 eager mode 中使用,在 graph mode 中将使用 config 中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参阅返回的 tensors 下的hidden_states
。 此参数只能在 eager mode 中使用,在 graph mode 中将使用 config 中的值。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 此参数可以在 eager mode 中使用,在 graph mode 中该值将始终设置为 True。 - training (
bool
, 可选, 默认为False
) — 是否在 training mode 中使用模型 (某些模块(如 dropout 模块)在 training 和 evaluation 之间具有不同的行为)。 - labels (
tf.Tensor
,形状为(batch_size,)
, 可选) — 用于计算多项选择分类损失的标签。 索引应在[0, ..., num_choices]
中,其中num_choices
是输入 tensors 的第二个维度的大小。(请参阅上面的input_ids
)
返回
transformers.models.longformer.modeling_tf_longformer.TFLongformerMultipleChoiceModelOutput 或 tuple(tf.Tensor)
一个 transformers.models.longformer.modeling_tf_longformer.TFLongformerMultipleChoiceModelOutput 或 tf.Tensor
的元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种元素,具体取决于配置 (LongformerConfig) 和输入。
-
loss (
tf.Tensor
,形状为 (1,), 可选, 当提供labels
时返回) — 分类损失。 -
logits (
tf.Tensor
,形状为(batch_size, num_choices)
) — num_choices 是输入 tensors 的第二个维度。(参见上面的 input_ids)。分类得分(在 SoftMax 之前)。
-
hidden_states (
tuple(tf.Tensor)
, 可选, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —tf.Tensor
的 tuple(embeddings 的输出一个,每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出以及初始嵌入输出处的隐藏状态。
-
attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x + attention_window + 1)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的局部 attention 权重,用于计算自 attention 头中的加权平均值。这些是序列中每个令牌到每个具有全局 attention 的令牌(前
x
个值)以及到 attention 窗口中的每个令牌(剩余的attention_window
- 1
值)的 attention 权重。请注意,前
x个值指的是文本中具有固定位置的令牌,但剩余的
attention_window + 1值指的是具有相对位置的令牌:令牌自身 attention 权重位于索引
x + attention_window / 2,而
attention_window / 2个前导(后继)值是到
attention_window / 2个前导(后继)令牌的 attention 权重。如果 attention 窗口包含具有全局 attention 的令牌,则相应索引处的 attention 权重设置为 0;该值应从前
x个 attention 权重访问。如果令牌具有全局 attention,则
attentions中到所有其他令牌的 attention 权重设置为 0,这些值应从
global_attentions` 访问。
- 1
-
global_attentions (
tuple(tf.Tensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —tf.Tensor
的 tuple(每层一个),形状为(batch_size, num_heads, sequence_length, x)
,其中x
是具有全局 attention 掩码的 tokens 数量。attention softmax 之后的全局 attention 权重,用于计算自 attention 头中的加权平均值。这些是从每个具有全局 attention 的令牌到序列中每个令牌的 attention 权重。
TFLongformerForMultipleChoice forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFLongformerForMultipleChoice
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/longformer-base-4096")
>>> model = TFLongformerForMultipleChoice.from_pretrained("allenai/longformer-base-4096")
>>> 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