Transformers 4.37 中文文档(五十四)

2024-06-26 16:42:08 浏览数 (2)

原文:huggingface.co/docs/transformers

REALM

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/realm

概述

REALM 模型是由 Kelvin Guu、Kenton Lee、Zora Tung、Panupong Pasupat 和 Ming-Wei Chang 在REALM: Retrieval-Augmented Language Model Pre-Training中提出的。这是一个检索增强语言模型,首先从文本知识语料库中检索文档,然后利用检索到的文档来处理问答任务。

该论文的摘要如下:

语言模型预训练已被证明可以捕获大量世界知识,对于诸如问答等 NLP 任务至关重要。然而,这些知识隐式存储在神经网络的参数中,需要越来越大的网络来涵盖更多事实。为了以更模块化和可解释的方式捕获知识,我们通过潜在知识检索器增强了语言模型预训练,使模型能够从大型语料库(如维基百科)中检索和关注文档,这些文档在预训练、微调和推理过程中使用。我们首次展示了如何以无监督方式预训练这样一个知识检索器,使用掩码语言建模作为学习信号,并通过考虑数百万文档的检索步骤进行反向传播。我们通过在具有挑战性的开放域问答(Open-QA)任务上微调来展示检索增强语言模型预训练(REALM)的有效性。我们在三个流行的开放域问答基准上与最先进的显式和隐式知识存储模型进行比较,发现我们在绝对准确率上表现优异(4-16%),同时还提供了诸如可解释性和模块化等质量优势。

该模型由qqaatw贡献。原始代码可在此处找到。

RealmConfig

class transformers.RealmConfig

< source >

代码语言:javascript复制
( vocab_size = 30522 hidden_size = 768 retriever_proj_size = 128 num_hidden_layers = 12 num_attention_heads = 12 num_candidates = 8 intermediate_size = 3072 hidden_act = 'gelu_new' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 512 type_vocab_size = 2 initializer_range = 0.02 layer_norm_eps = 1e-12 span_hidden_size = 256 max_span_width = 10 reader_layer_norm_eps = 0.001 reader_beam_size = 5 reader_seq_len = 320 num_block_records = 13353718 searcher_beam_size = 5000 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 **kwargs )

参数

  • vocab_size (int, optional, 默认为 30522) — REALM 模型的词汇量。定义了在调用 RealmEmbedder、RealmScorer、RealmKnowledgeAugEncoder 或 RealmReader 时可以表示的不同标记数量。
  • hidden_size (int, optional, 默认为 768) — 编码器层和池化器层的维度。
  • retriever_proj_size (int, optional, 默认为 128) — 检索器(嵌入器)投影的维度。
  • num_hidden_layers (int, optional, 默认为 12) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, optional, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。
  • num_candidates (int, optional, 默认为 8) — 输入到 RealmScorer 或 RealmKnowledgeAugEncoder 的候选项数量。
  • intermediate_size (int, optional, 默认为 3072) — Transformer 编码器中“中间”(即前馈)层的维度。
  • hidden_act (strfunction, optional, 默认为"gelu_new") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu""relu""selu""gelu_new"
  • hidden_dropout_prob (float, optional, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的丢失概率。
  • attention_probs_dropout_prob (float, optional, defaults to 0.1) — 注意力概率的丢弃比率。
  • max_position_embeddings (int, optional, defaults to 512) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如,512 或 1024 或 2048)。
  • type_vocab_size (int, optional, defaults to 2) — 在调用 RealmEmbedder、RealmScorer、RealmKnowledgeAugEncoder 或 RealmReader 时传递的token_type_ids的词汇表大小。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • layer_norm_eps (float, optional, defaults to 1e-12) — 层归一化层使用的 epsilon。
  • span_hidden_size (int, optional, defaults to 256) — 读者跨度的维度。
  • max_span_width (int, optional, defaults to 10) — 读者的最大跨度宽度。
  • reader_layer_norm_eps (float, optional, defaults to 1e-3) — 读者的层归一化层使用的 epsilon。
  • reader_beam_size (int, optional, defaults to 5) — 读者的波束大小。
  • reader_seq_len (int, optional, defaults to 288 32) — 读者的最大序列长度。
  • num_block_records (int, optional, defaults to 13353718) — 区块记录的数量。
  • searcher_beam_size (int, optional, defaults to 5000) — 搜索器的波束大小。请注意,当启用评估模式时,searcher_beam_size将与reader_beam_size相同。

这是用于存储配置的配置类

  1. RealmEmbedder
  2. RealmScorer
  3. RealmKnowledgeAugEncoder
  4. RealmRetriever
  5. RealmReader
  6. RealmForOpenQA

它用于根据指定的参数实例化一个 REALM 模型,定义模型架构。使用默认值实例化配置将产生类似于 REALM google/realm-cc-news-pretrained-embedder 架构的配置。

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

示例:

代码语言:javascript复制
>>> from transformers import RealmConfig, RealmEmbedder

>>> # Initializing a REALM realm-cc-news-pretrained-* style configuration
>>> configuration = RealmConfig()

>>> # Initializing a model (with random weights) from the google/realm-cc-news-pretrained-embedder style configuration
>>> model = RealmEmbedder(configuration)

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

RealmTokenizer

class transformers.RealmTokenizer

< source >

代码语言:javascript复制
( vocab_file do_lower_case = True do_basic_tokenize = True never_split = None unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None **kwargs )

参数

  • vocab_file (str) — 包含词汇表的文件。
  • do_lower_case (bool, optional, defaults to True) — 在标记化时是否将输入转换为小写。
  • do_basic_tokenize (bool, optional, defaults to True) — 在 WordPiece 之前是否进行基本标记化。
  • never_split (Iterable, optional) — 在标记化过程中永远不会拆分的标记集合。仅在do_basic_tokenize=True时有效
  • unk_token (str, optional, defaults to "[UNK]") — 未知标记。词汇表中没有的标记无法转换为 ID,而是设置为此标记。
  • sep_token (str, 可选, 默认为 "[SEP]") — 分隔符标记,在从多个序列构建序列时使用,例如用于序列分类的两个序列,或用于文本和问题的问题回答。它还用作使用特殊标记构建的序列的最后一个标记。
  • pad_token (str, 可选, 默认为 "[PAD]") — 用于填充的标记,例如在批处理不同长度的序列时使用。
  • cls_token (str, 可选, 默认为 "[CLS]") — 分类器标记,用于进行序列分类(对整个序列进行分类,而不是每个标记进行分类)。它是使用特殊标记构建时的序列的第一个标记。
  • mask_token (str, 可选, 默认为 "[MASK]") — 用于屏蔽值的标记。这是在使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。
  • tokenize_chinese_chars (bool, 可选, 默认为 True) — 是否对中文字符进行分词。 这可能应该在日语中停用(请参阅此问题)。
  • strip_accents (bool, 可选) — 是否去除所有重音符号。如果未指定此选项,则将由 lowercase 的值确定(与原始 BERT 相同)。

构建一个 REALM 分词器。

RealmTokenizer 与 BertTokenizer 相同,并进行端到端的分词:标点符号拆分和词片段。

此分词器继承自 PreTrainedTokenizer,其中包含大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

build_inputs_with_special_tokens

源代码

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — 要添加特殊标记的 ID 列表。
  • token_ids_1 (List[int], 可选) — 序列对的可选第二个 ID 列表。

返回

List[int]

带有适当特殊标记的输入 ID 列表。

通过连接和添加特殊标记,为序列分类任务构建模型输入,可以从序列或序列对中构建。REALM 序列的格式如下:

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

源代码

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], 可选) — 序列对的可选第二个 ID 列表。
  • already_has_special_tokens (bool, 可选, 默认为 False) — 标记列表是否已经格式化为模型的特殊标记。

返回

List[int]

一个整数列表,范围为 [0, 1]:1 表示特殊标记,0 表示序列标记。

从没有添加特殊标记的标记列表中检索序列 ID。在使用分词器的 prepare_for_model 方法添加特殊标记时调用此方法。

create_token_type_ids_from_sequences

源代码

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], 可选) — 序列对的可选第二个 ID 列表。

返回

List[int]

根据给定序列的标记类型 ID 列表。

从传递的两个序列创建一个用于序列对分类任务的掩码。一个 REALM 序列

pair mask 的格式如下:

代码语言:javascript复制
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
| first sequence    | second sequence |

如果token_ids_1None,则此方法仅返回掩码的第一部分(0s)。

save_vocabulary

<来源>

代码语言:javascript复制
( save_directory: str filename_prefix: Optional = None )
batch_encode_candidates

<来源>

代码语言:javascript复制
( text **kwargs ) → export const metadata = 'undefined';BatchEncoding

参数

  • text (List[List[str]]) — 要编码的序列批次。每个序列必须以此格式呈现:(批次大小,候选项数,文本)。
  • text_pair (List[List[str]]可选) — 要编码的序列批次。每个序列必须以此格式呈现:(批次大小,候选项数,文本)。**kwargs — call方法的关键字参数。

返回

BatchEncoding

编码的文本或文本对。

编码一批文本或文本对。此方法类似于常规call方法,但具有以下区别:

  1. 处理额外的候选项轴。(批次大小,候选项数,文本)
  2. 始终将序列填充到max_length
  3. 必须指定max_length以将候选项堆叠成批次。
  • 单个序列:[CLS] X [SEP]
  • 序列对:[CLS] A [SEP] B [SEP]

示例:

代码语言:javascript复制
>>> from transformers import RealmTokenizer

>>> # batch_size = 2, num_candidates = 2
>>> text = [["Hello world!", "Nice to meet you!"], ["The cute cat.", "The adorable dog."]]

>>> tokenizer = RealmTokenizer.from_pretrained("google/realm-cc-news-pretrained-encoder")
>>> tokenized_text = tokenizer.batch_encode_candidates(text, max_length=10, return_tensors="pt")

RealmTokenizerFast

class transformers.RealmTokenizerFast

<来源>

代码语言:javascript复制
( vocab_file = None tokenizer_file = None do_lower_case = True unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None **kwargs )

参数

  • vocab_file (str) — 包含词汇表的文件。
  • do_lower_case (bool可选,默认为True) — 在标记化时是否将输入转换为小写。
  • unk_token (str可选,默认为"[UNK]") — 未知标记。词汇表中没有的标记无法转换为 ID,而是设置为此标记。
  • sep_token (str可选,默认为"[SEP]") — 分隔符标记,在从多个序列构建序列时使用,例如用于序列分类的两个序列或用于文本和问题的问题回答。它还用作使用特殊标记构建的序列的最后一个标记。
  • pad_token (str可选,默认为"[PAD]") — 用于填充的标记,例如在批处理不同长度的序列时使用。
  • cls_token (str可选,默认为"[CLS]") — 在进行序列分类(对整个序列而不是每个标记的分类)时使用的分类器标记。这是构建具有特殊标记的序列时的第一个标记。
  • mask_token (str可选,默认为"[MASK]") — 用于屏蔽值的标记。这是在使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。
  • clean_text (bool可选,默认为True) — 是否在标记化之前清理文本,通过删除任何控制字符并将所有空格替换为经典空格。
  • tokenize_chinese_chars (bool可选,默认为True) — 是否对中文字符进行标记化。这可能应该在日语中停用(参见此问题)。
  • strip_accents (bool可选) — 是否去除所有重音符号。如果未指定此选项,则将由lowercase的值确定(与原始 BERT 相同)。
  • wordpieces_prefix (str可选,默认为"##") — 子词的前缀。

构建一个“快速”REALM 标记器(由 HuggingFace 的tokenizers库支持)。基于 WordPiece。

RealmTokenizerFast 与 BertTokenizerFast 相同,并且运行端到端的标记化:标点符号拆分和 wordpiece。

此分词器继承自 PreTrainedTokenizerFast,其中包含大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

batch_encode_candidates

<来源>

代码语言:javascript复制
( text **kwargs ) → export const metadata = 'undefined';BatchEncoding

参数

  • text (List[List[str]]) — 要编码的序列批次。每个序列必须采用以下格式:(batch_size, num_candidates, text)。
  • text_pair (List[List[str]], 可选) — 要编码的序列批次。每个序列必须采用以下格式:(batch_size, num_candidates, text)。**kwargs — call方法的关键字参数。

返回

BatchEncoding

编码的文本或文本对。

编码一批文本或文本对。此方法类似于常规的call方法,但具有以下区别:

  1. 处理额外的 num_candidate 轴。(batch_size, num_candidates, text)
  2. 始终将序列填充到max_length
  3. 必须指定max_length以将候选项堆叠成批次。
  • 单个序列:[CLS] X [SEP]
  • 序列对:[CLS] A [SEP] B [SEP]

示例:

代码语言:javascript复制
>>> from transformers import RealmTokenizerFast

>>> # batch_size = 2, num_candidates = 2
>>> text = [["Hello world!", "Nice to meet you!"], ["The cute cat.", "The adorable dog."]]

>>> tokenizer = RealmTokenizerFast.from_pretrained("google/realm-cc-news-pretrained-encoder")
>>> tokenized_text = tokenizer.batch_encode_candidates(text, max_length=10, return_tensors="pt")

RealmRetriever

class transformers.RealmRetriever

<来源>

代码语言:javascript复制
( block_records tokenizer )

参数

  • block_records (np.ndarray) — 包含证据文本的 numpy 数组。
  • tokenizer (RealmTokenizer) — 用于编码检索文本的分词器。

REALM 的检索器输出检索到的证据块以及该块是否有答案以及答案位置。

block_has_answer

<来源>

代码语言:javascript复制
( concat_inputs answer_ids )

检查 retrieved_blocks 是否有答案。

RealmEmbedder

class transformers.RealmEmbedder

<来源>

代码语言:javascript复制
( config )

参数

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

REALM 的嵌入器输出投影分数,将用于计算相关性分数。该模型是 PyTorch 的torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.realm.modeling_realm.RealmEmbedderOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor,形状为(batch_size, sequence_length)可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 对于未被遮蔽的标记,为 1,
    • 对于被masked的标记为 0。

    注意力掩码是什么?

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

    什么是标记类型 ID?

  • position_ids (torch.LongTensor,形状为(batch_size, sequence_length)optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor,形状为(num_heads,)(num_layers, num_heads)optional) — 用于使自注意力模块的选定头部失效的掩码。在[0, 1]中选择的掩码值:
    • 1 表示头部未被masked
    • 0 表示头部被masked
  • inputs_embeds (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)optional) — 可选地,可以直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回一个 ModelOutput 而不是一个普通元组。

返回

transformers.models.realm.modeling_realm.RealmEmbedderOutputtuple(torch.FloatTensor)

一个transformers.models.realm.modeling_realm.RealmEmbedderOutput或一个torch.FloatTensor元组(如果传递return_dict=Falseconfig.return_dict=False)包含根据配置(RealmConfig)和输入的不同元素。

  • projected_score (torch.FloatTensor,形状为(batch_size, config.retriever_proj_size)) — 投影得分。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个用于嵌入的输出 一个用于每个层的输出)。 模型在每个层的输出以及初始嵌入输出的隐藏状态。
  • attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每个层一个)。 在自注意力头中用于计算加权平均值的注意力 softmax 之后的注意力权重。

RealmEmbedder 前向方法,覆盖__call__特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RealmEmbedder
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/realm-cc-news-pretrained-embedder")
>>> model = RealmEmbedder.from_pretrained("google/realm-cc-news-pretrained-embedder")

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

>>> projected_score = outputs.projected_score

RealmScorer

class transformers.RealmScorer

<来源>

代码语言:javascript复制
( config query_embedder = None )

参数

  • config (RealmConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
  • query_embedder (RealmEmbedder) — 用于输入序列的嵌入器。如果未指定,将使用与候选序列相同的嵌入器。

REALM 的评分器输出代表文档候选项得分(softmax 之前)的相关性分数。这个模型是 PyTorch torch.nn.Module的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有内容。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None candidate_input_ids: Optional = None candidate_attention_mask: Optional = None candidate_token_type_ids: Optional = None candidate_inputs_embeds: Optional = None head_mask: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.realm.modeling_realm.RealmScorerOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 1 表示未被掩码的标记,
    • 0 表示被掩码的标记。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 指示输入的第一部分和第二部分的段标记索引。索引选择在[0, 1]之间:
    • 0 对应于句子 A标记。
    • 1 对应于句子 B标记。

    什么是标记类型 ID?

  • position_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块的选定头部失效的掩码。掩码值选择在[0, 1]之间:
    • 1 表示头部是未被掩码的
    • 0 表示头部是被掩码的
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,可以直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • candidate_input_ids (torch.LongTensor of shape (batch_size, num_candidates, sequence_length)) — 词汇表中候选输入序列标记的索引。 可以使用 AutoTokenizer 来获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是 input IDs?
  • candidate_attention_mask(形状为(batch_size, num_candidates, sequence_length)torch.FloatTensor可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值选在[0, 1]之间:
    • 1 表示未被 mask的标记,
    • 0 表示被masked的标记。

    什么是注意力掩码?

  • candidate_token_type_ids(形状为(batch_size, num_candidates, sequence_length)torch.LongTensor可选)- 段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于句子 A标记,
    • 1 对应于句子 B标记。

    什么是 token type IDs?

  • candidate_inputs_embeds(形状为(batch_size * num_candidates, sequence_length, hidden_size)torch.FloatTensor可选)- 可选地,您可以选择直接传递嵌入表示,而不是传递candidate_input_ids。如果您想要更多控制权,以便将candidate_input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。

返回

transformers.models.realm.modeling_realm.RealmScorerOutputtuple(torch.FloatTensor)

一个transformers.models.realm.modeling_realm.RealmScorerOutput或一个torch.FloatTensor元组(如果传递了return_dict=False或当config.return_dict=False时),包括根据配置(RealmConfig)和输入的不同元素。

  • relevance_score(形状为(batch_size, config.num_candidates)torch.FloatTensor)- 文档候选项的相关性分数(softmax 之前)。
  • query_score(形状为(batch_size, config.retriever_proj_size)torch.FloatTensor)- 从查询嵌入器派生的查询分数。
  • candidate_score(形状为(batch_size, config.num_candidates, config.retriever_proj_size)torch.FloatTensor)- 从嵌入器派生的候选分数。

RealmScorer 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者负责运行前处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, RealmScorer

>>> tokenizer = AutoTokenizer.from_pretrained("google/realm-cc-news-pretrained-scorer")
>>> model = RealmScorer.from_pretrained("google/realm-cc-news-pretrained-scorer", num_candidates=2)

>>> # batch_size = 2, num_candidates = 2
>>> input_texts = ["How are you?", "What is the item in the picture?"]
>>> candidates_texts = [["Hello world!", "Nice to meet you!"], ["A cute cat.", "An adorable dog."]]

>>> inputs = tokenizer(input_texts, return_tensors="pt")
>>> candidates_inputs = tokenizer.batch_encode_candidates(candidates_texts, max_length=10, return_tensors="pt")

>>> outputs = model(
...     **inputs,
...     candidate_input_ids=candidates_inputs.input_ids,
...     candidate_attention_mask=candidates_inputs.attention_mask,
...     candidate_token_type_ids=candidates_inputs.token_type_ids,
... )
>>> relevance_score = outputs.relevance_score

RealmKnowledgeAugEncoder

class transformers.RealmKnowledgeAugEncoder

<来源>

代码语言:javascript复制
( config )

参数

  • config(RealmConfig)- 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。

REALM 的知识增强编码器输出掩码语言模型对数和边际对数似然损失。这个模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None relevance_score: Optional = None labels: Optional = None mlm_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.MaskedLMOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, num_candidates, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, num_candidates, sequence_length), optional) — 用于避免在填充令牌索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 1 表示未被掩码的标记,
    • 0 表示被掩码的标记。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor of shape (batch_size, num_candidates, sequence_length), optional) — 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于句子 A标记。
    • 1 对应于句子 B标记。

    什么是标记类型 ID?

  • position_ids (torch.LongTensor of shape (batch_size, num_candidates, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在[0, 1]中:
    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • inputs_embeds (torch.FloatTensor of shape (batch_size, num_candidates, sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制权来将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • relevance_score (torch.FloatTensor of shape (batch_size, num_candidates), optional) — 从 RealmScorer 派生的相关性分数,如果要计算掩码语言建模损失,必须指定。
  • labels (torch.LongTensor of shape (batch_size, sequence_length), optional) — 用于计算掩码语言建模损失的标签。索引应在[-100, 0, ..., config.vocab_size]中(请参阅input_ids文档字符串)。索引设置为-100的标记将被忽略(掩码),损失仅计算具有标签在[0, ..., config.vocab_size]中的标记。
  • mlm_mask (torch.LongTensor of shape (batch_size, sequence_length), optional) — 用于避免在某些位置计算联合损失的掩码。如果未指定,损失将不会被掩码。掩码值选择在[0, 1]中:
    • 1 表示未被掩码的标记,
    • 0 表示被掩码的标记。

返回

transformers.modeling_outputs.MaskedLMOutput 或tuple(torch.FloatTensor)

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

  • loss(形状为(1,)torch.FloatTensor可选,当提供labels时返回)- 掩码语言建模(MLM)损失。
  • logits(形状为(batch_size, sequence_length, config.vocab_size)torch.FloatTensor)- 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出和每一层的输出)。 模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

RealmKnowledgeAugEncoder 的前向方法,覆盖__call__特殊方法。

虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, RealmKnowledgeAugEncoder

>>> tokenizer = AutoTokenizer.from_pretrained("google/realm-cc-news-pretrained-encoder")
>>> model = RealmKnowledgeAugEncoder.from_pretrained(
...     "google/realm-cc-news-pretrained-encoder", num_candidates=2
... )

>>> # batch_size = 2, num_candidates = 2
>>> text = [["Hello world!", "Nice to meet you!"], ["The cute cat.", "The adorable dog."]]

>>> inputs = tokenizer.batch_encode_candidates(text, max_length=10, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits

RealmReader

class transformers.RealmReader

<来源>

代码语言:javascript复制
( config )

参数

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

REALM 的读取器。这个模型是 PyTorch 的torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有信息。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None relevance_score: Optional = None block_mask: Optional = None start_positions: Optional = None end_positions: Optional = None has_answers: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.realm.modeling_realm.RealmReaderOutput or tuple(torch.FloatTensor)

参数

  • input_ids(形状为(reader_beam_size, sequence_length)torch.LongTensor)- 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 输入 ID 是什么?
  • attention_mask(形状为(reader_beam_size, sequence_length)torch.FloatTensor可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 对于“未屏蔽”的标记为 1,
    • 对于被“屏蔽”的标记为 0。

    注意力掩码是什么?

  • token_type_ids (torch.LongTensor of shape (reader_beam_size, sequence_length), optional) — 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于一个sentence A token,
    • 1 对应于一个sentence B token。

    什么是 token type IDs?

  • position_ids (torch.LongTensor of shape (reader_beam_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是 position IDs?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]之间:
    • 1 表示头部未被屏蔽,
    • 0 表示头部被屏蔽。
  • inputs_embeds (torch.FloatTensor of shape (reader_beam_size, sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制权来将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回一个 ModelOutput 而不是一个普通的元组。
  • relevance_score (torch.FloatTensor of shape (searcher_beam_size,), optional) — 相关性分数,如果要计算 logits 和边际对数损失,则必须指定。
  • block_mask (torch.BoolTensor of shape (searcher_beam_size, sequence_length), optional) — 如果要计算 logits 和边际对数损失,则必须指定证据块的掩码。
  • start_positions (torch.LongTensor of shape (searcher_beam_size,), optional) — 用于计算标记跨度开始位置的位置(索引)的标签。位置被夹紧到序列的长度(sequence_length)。超出序列范围的位置不会计入损失计算。
  • end_positions (torch.LongTensor of shape (searcher_beam_size,), optional) — 用于计算标记跨度结束位置的位置(索引)的标签。位置被夹紧到序列的长度(sequence_length)。超出序列范围的位置不会计入损失计算。
  • has_answers (torch.BoolTensor of shape (searcher_beam_size,), optional) — 证据块是否有答案。

返回

transformers.models.realm.modeling_realm.RealmReaderOutputtuple(torch.FloatTensor)

一个transformers.models.realm.modeling_realm.RealmReaderOutput或一个torch.FloatTensor元组(如果传递了return_dict=Falseconfig.return_dict=False时)包含根据配置(RealmConfig)和输入的不同元素。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供start_positionsend_positionshas_answers时返回) — 总损失。
  • retriever_loss (torch.FloatTensor of shape (1,), optional, 当提供start_positionsend_positionshas_answers时返回) — 检索器损失。
  • reader_loss (torch.FloatTensor of shape (1,), optional, 当提供start_positionsend_positionshas_answers时返回) — 读者损失。
  • retriever_correct(形状为(config.searcher_beam_size,)torch.BoolTensor可选)- 证据块是否包含答案。
  • reader_correct(形状为(config.reader_beam_size, num_candidates)torch.BoolTensor可选)- 跨度候选是否包含答案。
  • block_idx(形状为()torch.LongTensor)- 预测答案最有可能出现的检索证据块的索引。
  • candidate(形状为()torch.LongTensor)- 预测答案最有可能出现的检索范围候选的索引。
  • start_pos(形状为()torch.IntTensor)- RealmReader输入中预测答案的起始位置。
  • end_pos(形状为()torch.IntTensor)- RealmReader输入中预测答案的结束位置。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个用于嵌入的输出 一个用于每一层的输出)。 模型在每一层输出的隐藏状态以及初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

RealmReader 的前向方法,覆盖了__call__特殊方法。

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

RealmForOpenQA

class transformers.RealmForOpenQA

<来源>

代码语言:javascript复制
( config retriever = None )

参数

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

用于端到端开放域问答的RealmForOpenQA。该模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有信息。

block_embedding_to

<来源>

代码语言:javascript复制
( device )

参数

  • devicestrtorch.device)- 将self.block_emb发送到的设备。

self.block_emb发送到特定设备。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional attention_mask: Optional = None token_type_ids: Optional = None answer_ids: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.realm.modeling_realm.RealmForOpenQAOutput or tuple(torch.FloatTensor)

参数

  • input_ids(形状为(1, sequence_length)torch.LongTensor)- 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 来获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask(形状为(1, sequence_length)torch.FloatTensor可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
    • 对于未被屏蔽的令牌为 1,
    • 对于被屏蔽的令牌为 0。

    注意力掩码是什么?

  • token_type_ids(形状为(1, sequence_length)torch.LongTensor可选)- 段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于句子 A标记,
    • 1 对应于句子 B标记(按设计不应在此模型中使用)。

    令牌类型 ID 是什么?

  • answer_ids(形状为(num_answers, answer_length)list可选)- 用于计算边际对数似然损失的答案 ID。索引应在[-1, 0, ..., config.vocab_size]中(参见input_ids文档字符串)索引设置为-1的令牌将被忽略(屏蔽),损失仅计算具有标签在[0, ..., config.vocab_size]中的令牌
  • return_dictbool可选)- 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.realm.modeling_realm.RealmForOpenQAOutputtuple(torch.FloatTensor)

一个transformers.models.realm.modeling_realm.RealmForOpenQAOutput或一个torch.FloatTensor元组(如果传递了return_dict=False或当config.return_dict=False时)包含根据配置(RealmConfig)和输入的不同元素。

  • reader_outputdict)- 读者输出。
  • predicted_answer_ids(形状为(answer_sequence_length)torch.LongTensor)- 预测的答案 ID。

RealmForOpenQA 的前向方法,覆盖__call__特殊方法。

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

示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import RealmForOpenQA, RealmRetriever, AutoTokenizer

>>> retriever = RealmRetriever.from_pretrained("google/realm-orqa-nq-openqa")
>>> tokenizer = AutoTokenizer.from_pretrained("google/realm-orqa-nq-openqa")
>>> model = RealmForOpenQA.from_pretrained("google/realm-orqa-nq-openqa", retriever=retriever)

>>> question = "Who is the pioneer in modern computer science?"
>>> question_ids = tokenizer([question], return_tensors="pt")
>>> answer_ids = tokenizer(
...     ["alan mathison turing"],
...     add_special_tokens=False,
...     return_token_type_ids=False,
...     return_attention_mask=False,
... ).input_ids

>>> reader_output, predicted_answer_ids = model(**question_ids, answer_ids=answer_ids, return_dict=False)
>>> predicted_answer = tokenizer.decode(predicted_answer_ids)
>>> loss = reader_output.loss

Reformer

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/reformer

概述

Reformer 模型是由 Nikita Kitaev,Łukasz Kaiser,Anselm Levskaya 在论文Reformer: The Efficient Transformer中提出的。

论文的摘要如下:

大型 Transformer 模型通常在许多任务上取得最先进的结果,但训练这些模型可能成本过高,特别是在长序列上。我们引入了两种技术来提高 Transformer 的效率。首先,我们通过使用局部敏感哈希来替换点积注意力,将其复杂度从 O(L²)改为 O(Llog(L)),其中 L 是序列的长度。此外,我们使用可逆残差层而不是标准残差,这允许在训练过程中仅存储激活一次,而不是 N 次,其中 N 是层数。结果模型 Reformer 在与 Transformer 模型相媲美的同时,内存效率更高,在长序列上速度更快。

此模型由patrickvonplaten贡献。作者的代码可以在这里找到。

使用提示

  • 由于 PyTorch 中的一个错误,Reformer 不与 torch.nn.DataParallel 一起工作,请参阅问题#36035。
  • 使用轴向位置编码(有关更多详细信息,请参见下文)。这是一种通过将其分解为较小的矩阵来避免具有巨大位置编码矩阵(当序列长度非常大时)的机制。
  • 通过 LSH(局部敏感哈希)注意力替换传统的注意力(有关更多详细信息,请参见下文)。这是一种避免在注意力层中计算完整的查询-键乘积的技术。
  • 通过使用可逆 Transformer 层避免存储每层的中间结果,可以在反向传播过程中获取这些结果(从下一层的输入中减去残差即可获得它们),或者在给定层内重新计算结果(不如存储它们高效,但可以节省内存)。
  • 按块计算前向操作,而不是整个批次。
轴向位置编码

轴向位置编码首次在 Google 的 trax 库中实现,并由该模型论文的作者开发。在处理非常长的输入序列的模型中,传统的位置 id 编码会为每个位置 i,…,ns​存储一个大小为 d 的嵌入向量,其中 ns​为 config.max_embedding_size。这意味着当序列长度为 ns​=219≈0.5M,而 config.hidden_size 为 d=210≈1000 时,将得到一个位置编码矩阵:Xi,j​,其中 i∈[1,…,d],j∈[1,…,ns​]

其中单独有超过 500M 个参数需要存储。轴向位置编码将 Xi,j 分解为两个矩阵:Xi,j1​,其中 i∈[1,…,d1],j∈[1,…,ns1​]

和 Xi,j2​,其中 i∈[1,…,d2],且 j∈[1,…,ns2​]

因此,以下成立:

Xi,j = {Xi,k1​,如果 i < d1,且 k = j mod ns1​Xi−d1,l2​,如果 i ≥ d1,且 l = ⌊j/ns1​⌋}

直观地,这意味着位置嵌入向量 xj∈Rd 现在是两个分解嵌入向量的组合:xk,l1 xl,k2,其中config.max_embedding_size维度 j 被分解为 k 和 l。这种设计确保每个位置嵌入向量 xj 是唯一的。

再次使用上面的示例,轴向位置编码与 d1=29,d2=29,ns1=29,ns2=210 可以将参数数量从 500,000,000 大幅减少到 218 219≈780,000 个参数,这意味着内存使用减少了 85%。

在实践中,参数config.axial_pos_embds_dim设置为一个元组(d1, d2),其总和必须等于config.hidden_size,而config.axial_pos_shape设置为一个元组(ns1, ns2),其乘积必须等于config.max_embedding_size,在训练期间必须等于input_ids序列长度

LSH 自注意力

在局部敏感哈希(LSH)自注意力中,键和查询投影权重是绑定的。因此,键查询嵌入向量也是绑定的。LSH 自注意力使用了角距离的实用和最优 LSH中提出的局部敏感哈希机制,将这些绑定的键查询嵌入向量分配给config.num_buckets可能的桶之一。前提是,键查询嵌入向量(按余弦相似度)越“相似”,它们被分配到同一个桶的可能性就越大。

LSH 机制的准确性可以通过增加config.num_hashes或直接增加前向函数的参数num_hashes来提高,以便 LSH 自注意力的输出更好地逼近“正常”完全自注意力的输出。然后桶被排序并分块成查询键嵌入向量块,每个块的长度为config.lsh_chunk_length。对于每个块,查询嵌入向量会关注其键向量(它们与自身相连)以及config.lsh_num_chunks_before之前相邻块和config.lsh_num_chunks_after之后相邻块的键嵌入向量。

有关更多信息,请参阅原始论文或这篇很棒的博客文章。

请注意,config.num_buckets也可以分解为一个列表(nbuckets1,nbuckets2)(n_{text{buckets}}¹, n_{text{buckets}}²)(nbuckets1​,nbuckets2​)。这样,与其将查询键嵌入向量分配给(1,…,nbuckets)(1,ldots, n_{text{buckets}})(1,…,nbuckets​)中的一个,它们被分配给(1−1,…,nbuckets1−1,…,1−nbuckets2,…,nbuckets1−nbuckets2)(1-1,ldots, n_{text{buckets}}¹-1, ldots, 1-n_{text{buckets}}², ldots, n_{text{buckets}}¹-n_{text{buckets}}²)(1−1,…,nbuckets1​−1,…,1−nbuckets2​,…,nbuckets1​−nbuckets2​)。这对于非常长的序列来说非常重要,可以节省内存。

在从头开始训练模型时,建议将config.num_buckets=None,这样根据序列长度会动态计算出一个好的num_buckets值。然后这个值会自动保存在配置中,并应该在推断中重复使用。

使用 LSH 自注意力,查询-键乘法操作的内存和时间复杂度可以从O(ns×ns)mathcal{O}(n_s times n_s)O(ns​×ns​)减少到O(ns×log⁡(ns))mathcal{O}(n_s times log(n_s))O(ns​×log(ns​)),这通常代表了变压器模型中的内存和时间瓶颈,其中nsn_sns​是序列长度。

本地自注意力

局部自注意力本质上是一个“普通”的自注意力层,具有键、查询和值投影,但被分块处理,以便在每个长度为config.local_chunk_length的块中,查询嵌入向量只关注其块中的键嵌入向量以及config.local_num_chunks_before之前相邻块和config.local_num_chunks_after之后相邻块的键嵌入向量。

使用局部自注意力,查询-键乘法操作的内存和时间复杂度可以从O(ns×ns)mathcal{O}(n_s times n_s)O(ns​×ns​)减少到O(ns×log⁡(ns))mathcal{O}(n_s times log(n_s))O(ns​×log(ns​),这通常代表了变压器模型中的内存和时间瓶颈,其中nsn_sns​是序列长度。

训练

在训练过程中,我们必须确保序列长度设置为可以被config.lsh_chunk_lengthconfig.local_chunk_length的最小公倍数整除,并且 Axial Positional Encodings 的参数设置正确如上所述。Reformer 非常节省内存,因此模型可以轻松地在长达 64000 个标记的序列上进行训练。

在训练时,应该使用 ReformerModelWithLMHead 如下所示:

代码语言:javascript复制
input_ids = tokenizer.encode("This is a sentence from the training data", return_tensors="pt")
loss = model(input_ids, labels=input_ids)[0]

资源

  • 文本分类任务指南
  • 问答任务指南
  • 因果语言建模任务指南
  • 掩码语言建模任务指南

ReformerConfig

class transformers.ReformerConfig

< source >

代码语言:javascript复制
( attention_head_size = 64 attn_layers = ['local', 'lsh', 'local', 'lsh', 'local', 'lsh'] axial_norm_std = 1.0 axial_pos_embds = True axial_pos_shape = [64, 64] axial_pos_embds_dim = [64, 192] chunk_size_lm_head = 0 eos_token_id = 2 feed_forward_size = 512 hash_seed = None hidden_act = 'relu' hidden_dropout_prob = 0.05 hidden_size = 256 initializer_range = 0.02 is_decoder = False layer_norm_eps = 1e-12 local_num_chunks_before = 1 local_num_chunks_after = 0 local_attention_probs_dropout_prob = 0.05 local_attn_chunk_length = 64 lsh_attn_chunk_length = 64 lsh_attention_probs_dropout_prob = 0.0 lsh_num_chunks_before = 1 lsh_num_chunks_after = 0 max_position_embeddings = 4096 num_attention_heads = 12 num_buckets = None num_hashes = 1 pad_token_id = 0 vocab_size = 320 tie_word_embeddings = False use_cache = True classifier_dropout = None **kwargs )

参数

  • attention_head_size (int, 可选, 默认为 64) — 投影键、查询和值向量的维度
  • attn_layers (List[str], 可选, 默认为["local", "lsh", "local", "lsh", "local", "lsh"]) — 按升序排列的注意力层类型列表。可以在 LSHSelfAttention 层("lsh")和 LocalSelfAttention 层("local")之间进行选择。 有关 LSHSelfAttention 层的更多信息,请参阅 LSH Self Attention。有关 LocalSelfAttention 层的更多信息,请参阅 Local Self Attention。
  • axial_pos_embds (bool, 可选, 默认为True) — 是否使用轴向位置嵌入。有关轴向位置嵌入工作原理的更多信息,请参阅 Axial Position Encodings。
  • axial_norm_std (float, 可选, 默认为 1.0) — 用于初始化轴向位置编码的权重矩阵的正态初始化器的标准差。
  • axial_pos_shape (List[int], 可选, 默认为[64, 64]) — 轴向位置编码的位置维度。在训练过程中,位置维度的乘积必须等于序列长度。 有关轴向位置编码工作原理的更多信息,请参阅 Axial Position Encodings。
  • axial_pos_embds_dim (List[int], optional, defaults to [64, 192]) — 轴向位置编码的嵌入维度。嵌入维度之和必须等于隐藏大小。 有关轴向位置编码的更多信息,请参阅 Axial Position Encodings。
  • chunk_size_lm_head (int, optional, defaults to 0) — 最终语言模型前馈头层的块大小。块大小为 0 表示前馈层未分块。块大小为 n 表示前馈层一次处理 n < 序列长度的嵌入。 有关前馈分块的更多信息,请参阅 How does Feed Forward Chunking work?。
  • eos_token_id (int, optional, defaults to 2) — 句子结束标记的标记 ID。
  • feed_forward_size (int, optional, defaults to 512) — 残差注意力块中前馈层的维度。
  • hash_seed (int, optional) — 可用于使 LSHSelfAttention 中的局部敏感哈希确定性的种子。这仅应用于测试目的。在评估和训练过程中,应将 hash_seed 设置为 None,以确保局部敏感哈希方案中完全随机的旋转。
  • hidden_act (str or Callable, optional, defaults to "relu") — 残差注意力块中前馈层的非线性激活函数(函数或字符串)。如果是字符串,支持 "gelu", "relu", "silu""gelu_new"
  • hidden_dropout_prob (float, optional, defaults to 0.05) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。
  • hidden_size (int, optional, defaults to 256) — 残差注意力块的输出隐藏状态的维度。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • is_decoder (bool, optional, defaults to False) — 是否在 ReformerModel 中使用因果掩码。在使用 Reformer 进行因果语言建模时,此参数应设置为 True
  • layer_norm_eps (float, optional, defaults to 1e-12) — 层归一化层使用的 epsilon。
  • local_chunk_length (int, optional, defaults to 64) — 在 LocalSelfAttention 中自身关注的块的长度。分块可将内存复杂度从序列长度 x 序列长度(自注意力)降低到块长度 x 块长度 x 序列长度 / 块长度(分块自注意力)。
  • local_num_chunks_before (int, optional, defaults to 1) — 在 LocalSelfAttention 层中要关注的前面相邻块的数量。
  • local_num_chunks_after (int, optional, defaults to 0) — 在 LocalSelfAttention 层中除自身外要关注的后续相邻块的数量。
  • local_attention_probs_dropout_prob (float, optional, defaults to 0.1) — LocalSelfAttention 中注意力概率的 dropout 比例。
  • lsh_attn_chunk_length (int, optional, defaults to 64) — 在 LSHSelfAttention 中自身关注的块的长度。分块可将内存复杂度从序列长度 x 序列长度(自注意力)降低到块长度 x 块长度 x 序列长度 / 块长度(分块自注意力)。
  • lsh_num_chunks_before (int, optional, defaults to 1) — 在 LSHSelfAttention 层中要关注的前面相邻块的数量。
  • lsh_num_chunks_after (int, optional, defaults to 0) — 在 LSHSelfAttention 层中自身关注的后续相邻块的数量。
  • lsh_attention_probs_dropout_prob (float, optional, defaults to 0.1) — LSHSelfAttention 中注意力概率的 dropout 比例。
  • max_position_embeddings (int, optional, defaults to 4096) — 此模型可能会使用的最大序列长度。通常将其设置为一个较大的值以防万一(例如,512 或 1024 或 2048)。
  • num_attention_heads (int, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。
  • num_buckets (int or List[int], optional) — 桶的数量,可以使用局部敏感哈希方案将查询向量“哈希”到其中。每个查询键向量被哈希到1, ..., num_buckets中的一个哈希值。桶的数量也可以分解为一个列表,以提高内存复杂度。在这种情况下,如果num_buckets分解为两个因子,则每个查询键向量被哈希到1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1]中的一个哈希值。桶的数量(或因子的乘积)应大致等于序列长度/ lsh_chunk_length。如果未设置num_buckets,则会动态计算一个良好的值。
  • num_hashes (int, optional, defaults to 1) — 局部敏感哈希方案中的哈希轮数(例如,随机旋转的次数)。num_hashes越高,LSHSelfAttention越准确,但哈希变得更加耗费内存和时间。
  • pad_token_id (int, optional, defaults to 0) — 用于填充标记的标记 ID。
  • vocab_size (int, optional, defaults to 320) — Reformer 模型的词汇大小。定义了在调用 ReformerModel 时可以表示的不同标记的数量。
  • tie_word_embeddings (bool, optional, defaults to False) — 是否绑定输入和输出嵌入。
  • use_cache (bool, optional, defaults to True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。
  • classifier_dropout (float, optional) — 分类头的丢失比率。

这是用于存储 ReformerModel 配置的配置类。根据指定的参数实例化 Reformer 模型,定义模型架构。使用默认值实例化配置将产生与 ReFormer google/reformer-crime-and-punishment架构类似的配置。

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

示例:

代码语言:javascript复制
>>> from transformers import ReformerConfig, ReformerModel

>>> # Initializing a Reformer configuration
>>> configuration = ReformerConfig()

>>> # Initializing a Reformer model (with random weights)
>>> model = ReformerModel(configuration)

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

ReformerTokenizer

class transformers.ReformerTokenizer

<来源>

代码语言:javascript复制
( vocab_file eos_token = '</s>' unk_token = '<unk>' additional_special_tokens = [] sp_model_kwargs: Optional = None **kwargs )

参数

  • vocab_file (str) — 包含实例化分词器所需词汇表的SentencePiece文件(通常具有*.spm*扩展名)。
  • eos_token (str, optional, defaults to "</s>") — 序列结束标记。 在构建使用特殊标记的序列时,这不是用于序列结束的标记。使用的标记是sep_token
  • unk_token (str, optional, defaults to "<unk>") — 未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。
  • additional_special_tokens (List[str], optional, defaults to []) — 分词器使用的额外特殊标记。
  • sp_model_kwargsdict可选)— 将传递给 SentencePieceProcessor.__init__() 方法。SentencePiece 的 Python 包装器 可以用于设置:
    • enable_sampling:启用子词正则化。
    • nbest_size:unigram 的抽样参数。对于 BPE-Dropout 无效。
      • nbest_size = {0,1}:不执行抽样。
      • nbest_size > 1:从 nbest_size 结果中抽样。
      • nbest_size < 0: 假设 nbest_size 是无限的,并使用前向过滤和后向抽样算法从所有假设(格子)中抽样。
    • alpha:unigram 抽样的平滑参数,以及 BPE-dropout 合并操作的丢弃概率。

构建一个 Reformer 分词器。基于 SentencePiece。

此分词器继承自 PreTrainedTokenizer,其中包含大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

save_vocabulary

< source >

代码语言:javascript复制
( save_directory: str filename_prefix: Optional = None )

ReformerTokenizerFast

class transformers.ReformerTokenizerFast

< source >

代码语言:javascript复制
( vocab_file = None tokenizer_file = None eos_token = '</s>' unk_token = '<unk>' additional_special_tokens = [] **kwargs )

参数

  • vocab_filestr)— 包含实例化分词器所需词汇表的 SentencePiece 文件(通常具有 .spm 扩展名)。
  • eos_tokenstr可选,默认为 "</s>")— 序列结束标记。 在使用特殊标记构建序列时,这不是用于序列结尾的标记。使用的标记是 sep_token
  • unk_tokenstr可选,默认为 "<unk>")— 未知标记。词汇表中不存在的标记无法转换为 ID,并被设置为此标记。
  • pad_tokenstr可选,默认为 "<pad>")— 用于填充的标记,例如在批处理不同长度的序列时使用。
  • additional_special_tokensList[str]可选)— 分词器使用的其他特殊标记。

构建一个“快速” Reformer 分词器(由 HuggingFace 的 tokenizers 库支持)。基于 Unigram。

此分词器继承自 PreTrainedTokenizerFast,其中包含大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

ReformerModel

class transformers.ReformerModel

< source >

代码语言:javascript复制
( config )

参数

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

裸的 Reformer 模型变压器输出原始隐藏状态,没有特定的头部。Reformer 是由 Nikita Kitaev、Łukasz Kaiser、Anselm Levskaya 在 Reformer: The Efficient Transformer 中提出的。

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

此模型还是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None num_hashes: Optional = None past_buckets_states: Optional = None use_cache: Optional = None output_hidden_states: Optional = None output_attentions: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.reformer.modeling_reformer.ReformerModelOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 输入序列标记在词汇表中的索引。在训练期间,input_ids 的 sequence_length 必须是相关模型块长度(lsh 的、local 的或两者的)的倍数。在评估期间,这些索引会自动填充为块长度的倍数。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), 可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 1 表示未被掩盖的标记,
    • 0 表示被掩盖的标记。

    什么是注意力掩码?

  • position_ids (torch.LongTensor of shape (batch_size, sequence_length), 可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), 可选) — 用于使自注意力模块中选择的头部失效的掩码。掩码值选择在[0, 1]之间:
    • 1 表示头部未被掩盖,
    • 0 表示头部被掩盖。
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), 可选) — 可选地,您可以选择直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,这将很有用,而不是使用模型的内部嵌入查找矩阵。
  • num_hashes (int, 可选) — 在分桶期间应执行的哈希轮数。设置此参数会覆盖config.num_hashes中定义的默认值。 有关更多信息,请参阅 ReformerConfig 中的num_hashes
  • past_buckets_states (List[Tuple(torch.LongTensor, torch.FloatTensor)], 可选) — 长度为config.n_layersTuple(torch.LongTensor, torch.FloatTensor)列表,第一个元素是先前的的形状为(batch_size, num_heads, num_hashes, sequence_length),第二个元素是先前的隐藏状态的形状为(batch_size, sequence_length, hidden_size)。 包含预先计算的隐藏状态和桶(仅与 LSH 自注意力相关)。可用于加速顺序解码。
  • use_cache (bool, 可选) — 如果设置为True,则返回past_key_values键值状态,可用于加速解码(参见past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.reformer.modeling_reformer.ReformerModelOutputtuple(torch.FloatTensor)

一个 transformers.models.reformer.modeling_reformer.ReformerModelOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=Falseconfig.return_dict=False)包含根据配置 (ReformerConfig) 和输入而异的各种元素。

  • last_hidden_state (torch.FloatTensor,形状为 (batch_size, num_predict, hidden_size)) — 模型最后一层的隐藏状态序列。 num_predict 对应于 target_mapping.shape[1]。如果 target_mappingNone,则 num_predict 对应于 sequence_length
  • past_buckets_states (ListTuple(torch.LongTensor, torch.FloatTensor)可选,当传递 use_cache=Trueconfig.use_cache=True 时返回) — 长度为 config.n_layersTuple(torch.LongTensor, torch.FloatTensor 列表,第一个元素是形状为 (batch_size, num_heads, num_hashes, sequence_length) 的先前 ,第二个元素是形状为 (batch_size, sequence_length, hidden_size) 的先前 隐藏状态)。 包含预先计算的桶和隐藏状态,可用于加速顺序解码(参见 past_buckets_states 输入)。
  • hidden_states (tuple(torch.FloatTensor)可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于嵌入的输出,一个用于每层的输出)。 模型在每一层输出的隐藏状态以及初始嵌入输出。
  • attentions (tuple(torch.FloatTensor)可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

[ReformerModel 的前向方法,覆盖了 __call__ 特殊方法。

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

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, ReformerModel
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerModel.from_pretrained("google/reformer-crime-and-punishment")

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

>>> last_hidden_states = outputs.last_hidden_state

ReformerModelWithLMHead

class transformers.ReformerModelWithLMHead

<来源>

代码语言:javascript复制
( config )

参数

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

在顶部带有 语言建模 头的 Reformer 模型。Reformer 是由 Nikita Kitaev、Łukasz Kaiser、Anselm Levskaya 在 Reformer: The Efficient Transformer 中提出的。

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

此模型还是一个 PyTorch torch.nn.Module 子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None position_ids: Optional = None attention_mask: Optional = None head_mask: Optional = None inputs_embeds: Optional = None num_hashes: Optional = None past_buckets_states: Optional = None use_cache: Optional = None output_hidden_states: Optional = None output_attentions: Optional = None return_dict: Optional = None labels: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.CausalLMOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。在训练期间,input_ids 的 sequence_length 必须是相关模型的块长度(lsh 的、local 的或两者的)的倍数。在评估期间,这些索引会自动填充为块长度的倍数。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor,形状为(batch_size, sequence_length)optional) — 避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
    • 对于未被屏蔽的标记为 1,
    • 对于被屏蔽的标记为 0。

    什么是注意力掩码?

  • position_ids (torch.LongTensor,形状为(batch_size, sequence_length)optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor,形状为(num_heads,)(num_layers, num_heads)optional) — 用于使自注意力模块的选定头部失效的掩码。掩码值在[0, 1]中选择:
    • 1 表示头部未被屏蔽,
    • 0 表示头部被屏蔽。
  • inputs_embeds (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)optional) — 可选地,您可以选择直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • num_hashes (int, optional) — 在分桶过程中应执行的哈希轮数。设置此参数会覆盖config.num_hashes中定义的默认值。 有关更多信息,请参阅 ReformerConfig 中的num_hashes
  • past_buckets_states (List[Tuple(torch.LongTensor, torch.FloatTensor)], optional) — 长度为config.n_layersTuple(torch.LongTensor, torch.FloatTensor列表,第一个元素是形状为(batch_size, num_heads, num_hashes, sequence_length)的先前,第二个元素是形状为(batch_size, sequence_length, hidden_size)的先前隐藏状态)。 包含预先计算的隐藏状态和桶(仅与 LSH 自注意力相关)。可用于加速顺序解码。
  • use_cache (bool, optional) — 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor of shape (batch_size,), optional) — 用于计算序列分类/回归损失的标签。索引应在[-100, 0, ..., config.vocab_size - 1]范围内。所有设置为-100的标签都会被忽略(掩码),损失仅计算标签在[0, ..., config.vocab_size]范围内的。

返回

transformers.modeling_outputs.CausalLMOutput 或tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutput 或一个torch.FloatTensor元组(如果传递了return_dict=Falseconfig.return_dict=False)包含根据配置(ReformerConfig)和输入的各种元素。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供labels时返回) — 语言建模损失(用于下一个标记的预测)。
  • logits (torch.FloatTensor of shape (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出和每一层的输出)。 模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

ReformerModelWithLMHead 的前向方法,覆盖__call__特殊方法。

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

示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, ReformerModelWithLMHead

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerModelWithLMHead.from_pretrained("google/reformer-crime-and-punishment")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs, labels=inputs["input_ids"])
>>> loss = outputs.loss
>>> logits = outputs.logits

ReformerForMaskedLM

class transformers.ReformerForMaskedLM

< source >

代码语言:javascript复制
( config )

参数

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

Reformer 模型顶部带有语言建模头。Reformer 是由 Nikita Kitaev、Łukasz Kaiser、Anselm Levskaya 在Reformer: The Efficient Transformer中提出的。

这个模型继承自 PreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。

这个模型也是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None position_ids: Optional = None attention_mask: Optional = None head_mask: Optional = None inputs_embeds: Optional = None num_hashes: Optional = None labels: Optional = None output_hidden_states: Optional = None output_attentions: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.MaskedLMOutput or tuple(torch.FloatTensor)

参数

  • input_ids(形状为(batch_size, sequence_length)torch.LongTensor)— 词汇表中输入序列标记的索引。在训练期间,input_ids 的 sequence_length 必须是相关模型的块长度(lsh 的、local 的或两者的)的倍数。在评估期间,这些索引会自动填充为块长度的倍数。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask(形状为(batch_size, sequence_length)torch.FloatTensor可选)— 用于避免在填充标记索引上执行注意力的掩码。选择的掩码值为[0, 1]
    • 对于未被“掩盖”的标记为 1,
    • 对于被“掩盖”的标记为 0。

    什么是注意力掩码?

  • position_ids(形状为(batch_size, sequence_length)torch.LongTensor可选)— 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)torch.FloatTensor可选)— 用于使自注意力模块的选定头部失效的掩码。选择的掩码值为[0, 1]
    • 1 表示头部未被“掩盖”,
    • 0 表示头部被“掩盖”。
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您希望更多地控制如何将input_ids索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • num_hashesint可选)— 在分桶期间应执行的哈希轮数。设置此参数会覆盖config.num_hashes中定义的默认值。 有关更多信息,请参见 ReformerConfig 中的num_hashes
  • past_buckets_statesList[Tuple(torch.LongTensor, torch.FloatTensor)]可选)— 长度为config.n_layersTuple(torch.LongTensor, torch.FloatTensor)列表,第一个元素是形状为(batch_size, num_heads, num_hashes, sequence_length)的先前,第二个元素是形状为(batch_size, sequence_length, hidden_size)的先前隐藏状态)。 包含预先计算的隐藏状态和桶(仅与 LSH 自注意力相关)。可用于加速顺序解码。
  • use_cachebool可选)— 如果设置为True,将返回past_key_values键值状态,并可用于加速解码(请参见past_key_values)。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的hidden_states
  • return_dictbool可选)— 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor of shape (batch_size, sequence_length), optional) — 用于计算掩码语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size] 范围内(参见 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(掩码),损失仅计算具有标签的标记

返回

transformers.modeling_outputs.MaskedLMOutput 或 tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.MaskedLMOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=Falseconfig.return_dict=False)包含根据配置(ReformerConfig)和输入的不同元素。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供 labels 时返回) — 掩码语言建模(MLM)损失。
  • logits (torch.FloatTensor of shape (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(如果模型具有嵌入层,则为嵌入输出的一个 每层的输出一个)。 模型每层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每层一个)。 在自注意力头中用于计算加权平均值的注意力权重。

ReformerForMaskedLM 的前向方法,覆盖了 __call__ 特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用 Module 实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

此示例使用了一个虚假的检查点,因为我们没有任何可用的预训练模型,用于 Reformer 架构的掩码语言建模任务。

示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForMaskedLM

>>> tokenizer = AutoTokenizer.from_pretrained("hf-internal-testing/tiny-random-reformer")
>>> model = ReformerForMaskedLM.from_pretrained("hf-internal-testing/tiny-random-reformer")

>>> # add mask_token
>>> tokenizer.add_special_tokens({"mask_token": "[MASK]"})
>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="pt")

>>> # resize model's embedding matrix
>>> model.resize_token_embeddings(new_num_tokens=model.config.vocab_size   1)
>>> with torch.no_grad():
...     logits = model(**inputs).logits

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

>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> predicted_token = tokenizer.decode(predicted_token_id)
代码语言:javascript复制
>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-[MASK] tokens
>>> labels = torch.where(
...     inputs.input_ids == tokenizer.mask_token_id, labels[:, : inputs["input_ids"].shape[-1]], -100
... )

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

ReformerForSequenceClassification

class transformers.ReformerForSequenceClassification

<来源>

代码语言:javascript复制
( config )

参数

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

Reformer 模型变压器,顶部带有一个序列分类/回归头(池化输出的线性层),例如用于 GLUE 任务。

Reformer 是由 Nikita Kitaev、Łukasz Kaiser、Anselm Levskaya 在 Reformer: The Efficient Transformer 中提出的。

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

这个模型也是一个 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

< source >

代码语言:javascript复制
( input_ids: Optional = None position_ids: Optional = None attention_mask: Optional = None head_mask: Optional = None inputs_embeds: Optional = None num_hashes: Optional = None labels: Optional = None output_hidden_states: Optional = None output_attentions: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.SequenceClassifierOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。在训练期间,input_ids 序列长度必须是相关模型的块长度(lsh’s、local’s 或两者)的倍数。在评估期间,索引会自动填充为块长度的倍数。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选在 [0, 1]
    • 1 代表未被遮蔽的标记,
    • 0 代表被遮蔽的标记。

    什么是注意力掩码?

  • position_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围 [0, config.max_position_embeddings - 1] 中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块的选定头部失效的掩码。掩码值选在 [0, 1]
    • 1 表示头部未被遮蔽,
    • 0 表示头部被遮蔽。
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,可以直接传递嵌入表示,而不是传递 input_ids。如果您想要更多控制如何将 input_ids 索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • num_hashes (int, optional) — 在分桶期间应执行的哈希轮数。设置此参数会覆盖 config.num_hashes 中定义的默认值。 有关更多信息,请参见 ReformerConfig 中的 num_hashes
  • past_buckets_states (List[Tuple(torch.LongTensor, torch.FloatTensor)], optional) — 长度为 config.n_layersTuple(torch.LongTensor, torch.FloatTensor 列表,第一个元素是形状为 (batch_size, num_heads, num_hashes, sequence_length) 的先前 buckets,第二个元素是形状为 (batch_size, sequence_length, hidden_size) 的先前 hidden_states)。 包含预先计算的隐藏状态和桶(仅与 LSH 自注意力相关)。可用于加速顺序解码。
  • use_cache (bool, optional) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的 hidden_states
  • return_dict (bool, optional) — 是否返回一个 ModelOutput 而不是一个普通的元组。
  • labels (torch.LongTensor of shape (batch_size,), 可选) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方损失),如果config.num_labels > 1,则计算分类损失(交叉熵)。

返回

transformers.modeling_outputs.SequenceClassifierOutput 或者tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutput 或者一个torch.FloatTensor元组(如果传递了return_dict=False或者当config.return_dict=False时),包括根据配置(ReformerConfig)和输入不同元素。

  • loss (torch.FloatTensor of shape (1,), 可选,当提供labels时返回) — 分类(如果 config.num_labels==1 则为回归)损失。
  • logits (torch.FloatTensor of shape (batch_size, config.num_labels)) — 分类(如果 config.num_labels==1 则为回归)得分(SoftMax 之前)。
  • hidden_states (tuple(torch.FloatTensor), 可选,当传递output_hidden_states=True或者当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的一个,加上每一层的输出的一个)。 模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), 可选,当传递output_attentions=True或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每一层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

ReformerForSequenceClassification 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会负责运行预处理和后处理步骤,而后者会默默地忽略它们。

单标签分类示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForSequenceClassification.from_pretrained("google/reformer-crime-and-punishment")

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

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

>>> predicted_class_id = logits.argmax().item()
>>> label = model.config.id2label[predicted_class_id]
代码语言:javascript复制
>>> # 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 = ReformerForSequenceClassification.from_pretrained(
...     "google/reformer-crime-and-punishment", num_labels=num_labels
... )

>>> labels = torch.tensor(1)
>>> loss = model(**inputs, labels=labels).loss

ReformerForQuestionAnswering

class transformers.ReformerForQuestionAnswering

<来源>

代码语言:javascript复制
( config )

参数

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

Reformer 模型,顶部带有一个用于提取问题回答任务(如 SQuAD / TriviaQA)的跨度分类头(在隐藏状态输出的顶部有一个线性层,用于计算span start logitsspan end logits

Reformer 是由 Nikita Kitaev、Łukasz Kaiser、Anselm Levskaya 在Reformer: The Efficient Transformer中提出的。

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

该模型还是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有事项。

forward

<来源>

代码语言:javascript复制
( input_ids: Optional = None position_ids: Optional = None attention_mask: Optional = None head_mask: Optional = None inputs_embeds: Optional = None num_hashes: Optional = None start_positions: Optional = None end_positions: Optional = None output_hidden_states: Optional = None output_attentions: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.QuestionAnsweringModelOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。在训练期间,input_ids 序列长度必须是相关模型块长度(lsh’s、local’s 或两者的倍数)。在评估期间,这些索引会自动填充为块长度的倍数。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
    • 1 表示未被掩码的标记,
    • 0 表示被掩码的标记。

    什么是注意力掩码?

  • position_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块中选择的头部失效的掩码。掩码值在[0, 1]中选择:
    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,可以直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
  • num_hashes (int, optional) — 在分桶期间应执行的哈希轮数。设置此参数会覆盖config.num_hashes中定义的默认值。 有关更多信息,请参阅 ReformerConfig 中的num_hashes
  • past_buckets_states (List[Tuple(torch.LongTensor, torch.FloatTensor)], optional) — 长度为config.n_layersTuple(torch.LongTensor, torch.FloatTensor列表,第一个元素是先前的的形状(batch_size, num_heads, num_hashes, sequence_length),第二个元素是先前的隐藏状态的形状(batch_size, sequence_length, hidden_size)。 包含预先计算的隐藏状态和桶(仅与 LSH 自注意力相关)。可用于加速顺序解码。
  • use_cache (bool, optional) — 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • start_positions (torch.LongTensor of shape (batch_size,), optional) — 用于计算标记范围的起始位置(索引)的标签,以计算标记分类损失。位置被夹紧到序列的长度(sequence_length)。序列之外的位置不会被考虑在内计算损失。
  • end_positions (torch.LongTensor of shape (batch_size,), optional) — 用于计算标记范围的结束位置(索引)的标签。位置被夹紧到序列的长度(sequence_length)。序列之外的位置不会被考虑在内计算损失。

返回值

transformers.modeling_outputs.QuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.QuestionAnsweringModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=Falseconfig.return_dict=False时)包含各种元素,取决于配置(ReformerConfig)和输入。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供labels时返回) — 总跨度提取损失是起始位置和结束位置的交叉熵之和。
  • start_logits (torch.FloatTensor of shape (batch_size, sequence_length)) — 跨度开始得分(SoftMax 之前)。
  • end_logits (torch.FloatTensor of shape (batch_size, sequence_length)) — 跨度结束得分(SoftMax 之前)。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出加上每一层的输出)。 模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

ReformerForQuestionAnswering 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者会负责运行前处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, ReformerForQuestionAnswering
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForQuestionAnswering.from_pretrained("google/reformer-crime-and-punishment")

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

>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()

>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index   1]

>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss

RemBERT

原文链接: huggingface.co/docs/transformers/v4.37.2/en/model_doc/rembert

概述

RemBERT 模型是由 Hyung Won Chung、Thibault Févry、Henry Tsai、Melvin Johnson、Sebastian Ruder 在 重新思考预训练语言模型中的嵌入耦合 中提出的。

论文摘要如下:

我们重新评估了在最先进的预训练语言模型中共享输入和输出嵌入权重的标准做法。我们表明,解耦的嵌入提供了增加的建模灵活性,使我们能够显著改善多语言模型输入嵌入的参数分配效率。通过在 Transformer 层中重新分配输入嵌入参数,我们在微调期间使用相同数量的参数实现了标准自然语言理解任务的显著性能提升。我们还表明,为输出嵌入分配额外容量对模型有益,即使在预训练后丢弃输出嵌入后,这些好处仍然持续存在于微调阶段。我们的分析表明,更大的输出嵌入可以防止模型的最后几层过度专门化于预训练任务,并鼓励 Transformer 表示更加通用和更易于迁移到其他任务和语言。利用这些发现,我们能够训练出在 XTREME 基准测试上表现出色的模型,而不增加微调阶段的参数数量。

使用提示

对于微调,RemBERT 可以被视为 mBERT 的一个更大版本,具有类似 ALBERT 的嵌入层因式分解。与 BERT 不同,这些嵌入在预训练中没有绑定,这使得输入嵌入更小(在微调期间保留)和输出嵌入更大(在微调时丢弃)。分词器也类似于 Albert 而不是 BERT。

资源

  • 文本分类任务指南
  • 标记分类任务指南
  • 问答任务指南
  • 因果语言建模任务指南
  • 掩码语言建模任务指南
  • 多项选择任务指南

RemBertConfig

class transformers.RemBertConfig

< 源代码 >

代码语言:javascript复制
( vocab_size = 250300 hidden_size = 1152 num_hidden_layers = 32 num_attention_heads = 18 input_embedding_size = 256 output_embedding_size = 1664 intermediate_size = 4608 hidden_act = 'gelu' hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 classifier_dropout_prob = 0.1 max_position_embeddings = 512 type_vocab_size = 2 initializer_range = 0.02 layer_norm_eps = 1e-12 use_cache = True pad_token_id = 0 bos_token_id = 312 eos_token_id = 313 **kwargs )

参数

  • vocab_size (int, 可选, 默认为 250300) — RemBERT 模型的词汇量。定义了在调用 RemBertModel 或 TFRemBertModel 时可以由 inputs_ids 表示的不同标记数量。模型的词汇量。定义了可以由传递给 RemBertModel 的 inputs_ids 表示的不同标记。
  • hidden_size (int, 可选, 默认为 1152) — 编码器层和池化层的维度。
  • num_hidden_layers (int, 可选, 默认为 32) — Transformer 编码器中的隐藏层数。
  • num_attention_heads (int, 可选, 默认为 18) — Transformer 编码器中每个注意力层的注意力头数。
  • input_embedding_size (int, 可选, 默认为 256) — 输入嵌入的维度。
  • output_embedding_size (int, 可选, 默认为 1664) — 输出嵌入的维度。
  • intermediate_size (int, 可选, 默认为 4608) — Transformer 编码器中“中间”(即前馈)层的维度。
  • hidden_act (strfunction, optional, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持 "gelu""relu""selu""gelu_new"
  • hidden_dropout_prob (float, optional, 默认为 0) — 嵌入层、编码器和池化器中所有全连接层的丢失概率。
  • attention_probs_dropout_prob (float, optional, 默认为 0) — 注意力概率的丢失比率。
  • classifier_dropout_prob (float, optional, 默认为 0.1) — 在微调时分类器层的丢失比率。
  • max_position_embeddings (int, optional, 默认为 512) — 该模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如,512、1024 或 2048)。
  • type_vocab_size (int, optional, 默认为 2) — 在调用 RemBertModel 或 TFRemBertModel 时传递的 token_type_ids 的词汇表大小。
  • initializer_range (float, optional, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • layer_norm_eps (float, optional, 默认为 1e-12) — 层归一化层使用的 epsilon。
  • is_decoder (bool, optional, 默认为 False) — 模型是否用作解码器。如果为 False,则模型用作编码器。
  • use_cache (bool, optional, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在 config.is_decoder=True 时相关。

这是用于存储 RemBertModel 配置的配置类。它用于根据指定的参数实例化 RemBERT 模型,定义模型架构。使用默认值实例化配置将产生类似于 RemBERT google/rembert 架构的配置。

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

示例:

代码语言:javascript复制
>>> from transformers import RemBertModel, RemBertConfig

>>> # Initializing a RemBERT rembert style configuration
>>> configuration = RemBertConfig()

>>> # Initializing a model from the rembert style configuration
>>> model = RemBertModel(configuration)

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

RemBertTokenizer

class transformers.RemBertTokenizer

< source >

代码语言:javascript复制
( vocab_file do_lower_case = False remove_space = True keep_accents = True bos_token = '[CLS]' eos_token = '[SEP]' unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' **kwargs )

参数

  • vocab_file (str) — SentencePiece 文件(通常具有 .spm 扩展名),其中包含实例化分词器所需的词汇表。
  • bos_token (str, optional, 默认为 "[CLS]") — 在预训练期间使用的序列开头标记。可用作序列分类器标记。 在使用特殊标记构建序列时,这不是用于序列开头的标记。使用的标记是 cls_token
  • eos_token (str, optional, 默认为 "[SEP]") — 序列结束标记。 在使用特殊标记构建序列时,这不是用于序列结尾的标记。使用的标记是 sep_token
  • unk_token (str, optional, 默认为 "<unk>") — 未知标记。词汇表中不存在的标记无法转换为 ID,并将设置为此标记。
  • sep_token (str, optional, 默认为 "[SEP]") — 分隔符标记,在从多个序列构建序列时使用,例如,用于序列分类的两个序列或用于问题回答的文本和问题。它还用作使用特殊标记构建的序列的最后一个标记。
  • pad_token (str, optional, 默认为"<pad>") — 用于填充的标记,例如在批处理不同长度的序列时。
  • cls_token (str, optional, 默认为"[CLS]") — 在进行序列分类(整个序列的分类而不是每个标记的分类)时使用的分类器标记。构建带有特殊标记的序列时,它是序列的第一个标记。
  • mask_token (str, optional, 默认为"[MASK]") — 用于屏蔽值的标记。在使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。
  • sp_model (SentencePieceProcessor) — 用于每次转换(字符串、标记和 ID)的SentencePiece处理器。

构建一个 RemBERT 分词器。基于SentencePiece。

此分词器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。

build_inputs_with_special_tokens

<来源>

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — 将添加特殊标记的 ID 列表。
  • token_ids_1 (List[int], optional) — 可选的第二个 ID 列表,用于序列对。

返回

List[int]

带有适当特殊标记的输入 ID 列表。

通过连接和添加特殊标记从序列或序列对构建用于序列分类任务的模型输入。一个 REMBERT 序列的格式如下:

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

<来源>

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], optional) — 可选的第二个 ID 列表,用于序列对。
  • already_has_special_tokens (bool, optional, 默认为False) — 标记列表是否已经格式化为模型的特殊标记。

返回

List[int]

一个整数列表,范围为[0, 1]:1 表示特殊标记,0 表示序列标记。

从没有添加特殊标记的标记列表中检索序列 ID。在使用分词器的prepare_for_model方法添加特殊标记时调用此方法。

create_token_type_ids_from_sequences

<来源>

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], optional) — 可选的第二个 ID 列表,用于序列对。

返回

List[int]

根据给定序列的标记类型 ID 列表。

创建用于序列对分类任务的两个传递序列的掩码。一个 RemBERT

序列对掩码的格式如下:

代码语言:javascript复制
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
| first sequence    | second sequence |

如果token_ids_1None,则此方法仅返回掩码的第一部分(0)。

save_vocabulary

<来源>

代码语言:javascript复制
( save_directory: str filename_prefix: Optional = None )

RemBertTokenizerFast

class transformers.RemBertTokenizerFast

<来源>

代码语言:javascript复制
( vocab_file = None tokenizer_file = None do_lower_case = True remove_space = True keep_accents = False bos_token = '[CLS]' eos_token = '[SEP]' unk_token = '<unk>' sep_token = '[SEP]' pad_token = '<pad>' cls_token = '[CLS]' mask_token = '[MASK]' **kwargs )

参数

  • vocab_file (str) — SentencePiece 文件(通常具有*.spm*扩展名),其中包含实例化分词器所需的词汇表。
  • do_lower_case (bool, optional, 默认为True) — 在标记化时是否将输入转换为小写。
  • remove_space (bool, 可选, 默认为 True) — 在分词时是否去除文本(删除字符串前后的多余空格)。
  • keep_accents (bool, 可选, 默认为 False) — 在分词时是否保留重音。
  • bos_token (str, 可选, 默认为 "[CLS]") — 在预训练期间使用的序列开头标记。可以用作序列分类器标记。 在构建使用特殊标记的序列时,这不是用于序列开头的标记。使用的标记是 cls_token
  • eos_token (str, 可选, 默认为 "[SEP]") — 序列结束标记。… 注意:在使用特殊标记构建序列时,这不是用于序列结尾的标记。使用的标记是 sep_token
  • unk_token (str, 可选, 默认为 "<unk>") — 未知标记。词汇表中没有的标记无法转换为 ID,而是设置为此标记。
  • sep_token (str, 可选, 默认为 "[SEP]") — 分隔符标记,在从多个序列构建序列时使用,例如,用于序列分类的两个序列或用于问题回答的文本和问题。它也被用作使用特殊标记构建的序列的最后一个标记。
  • pad_token (str, 可选, 默认为 "<pad>") — 用于填充的标记,例如在批处理不同长度的序列时使用。
  • cls_token (str, 可选, 默认为 "[CLS]") — 在进行序列分类(整个序列的分类而不是每个标记的分类)时使用的分类器标记。在使用特殊标记构建时,它是序列的第一个标记。
  • mask_token (str, 可选, 默认为 "[MASK]") — 用于屏蔽值的标记。在使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。

构建一个“快速”的 RemBert 分词器(由 HuggingFace 的 tokenizers 库支持)。基于 Unigram。这个分词器继承自 PreTrainedTokenizerFast,其中包含大部分主要方法。用户应该参考这个超类以获取有关这些方法的更多信息

build_inputs_with_special_tokens

< source >

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — 将添加特殊标记的 ID 列表
  • token_ids_1 (List[int], 可选, 默认为 None) — 第二个序列对的 ID 列表。

返回

List[int]

带有适当特殊标记的 输入 ID 列表。

通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。RemBERT 序列的格式如下:

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

< source >

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], 可选, 默认为 None) — 第二个序列对的 ID 列表。
  • already_has_special_tokens (bool, 可选, 默认为 False) — 如果 token 列表已经使用特殊标记格式化,则设置为 True

返回

List[int]

一个整数列表,范围为 [0, 1]:1 表示特殊标记,0 表示序列标记。

从没有添加特殊标记的 token 列表中检索序列 ID。在使用分词器 prepare_for_model 方法添加特殊标记时调用此方法。

create_token_type_ids_from_sequences

< source >

代码语言:javascript复制
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], optional, 默认为 None) — 序列对的可选第二个 ID 列表。

返回

List[int]

根据给定的序列(s)的标记类型 ID 列表。

从传递的两个序列创建一个掩码,用于在序列对分类任务中使用。一个 RemBERT

序列对掩码的格式如下:

代码语言:javascript复制
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
| first sequence    | second sequence |

如果 token_ids_1 为 None,则仅返回掩码的第一部分 (0s)。

save_vocabulary

< source >

代码语言:javascript复制
( save_directory: str filename_prefix: Optional = None )

PytorchHide Pytorch 内容

RemBertModel

class transformers.RemBertModel

< source >

代码语言:javascript复制
( config add_pooling_layer = True )

参数

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

裸的 RemBERT 模型,输出原始隐藏状态,没有特定的头部。此模型是 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

该模型可以作为编码器(仅具有自注意力)以及解码器运行,此时在自注意力层之间添加了一层交叉注意力,遵循 Attention is all you need 中描述的架构,作者为 Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser 和 Illia Polosukhin。

要作为解码器运行,模型需要使用配置中的 is_decoder 参数初始化为 True。要在 Seq2Seq 模型中使用,模型需要使用 is_decoder 参数和 add_cross_attention 参数初始化为 True;然后期望将 encoder_hidden_states 作为输入传递给前向传递。

forward

< source >

代码语言:javascript复制
( input_ids: LongTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None past_key_values: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值在 [0, 1] 中选择:
    • 1 表示“未被掩盖”的标记,
    • 0 表示“被掩盖”的标记。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 段落标记索引,用于指示输入的第一部分和第二部分。索引在 [0, 1] 中选择:
    • 0 对应于 句子 A 的标记,
    • 1 对应于 句子 B 的标记。

    什么是标记类型 ID?

  • position_ids(形状为(batch_size, sequence_length)torch.LongTensor可选)— 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)torch.FloatTensor可选)— 用于使自注意力模块的选定头部失效的掩码。选择的掩码值在[0, 1]中:
    • 1 表示头部未被masked
    • 0 表示头部被masked
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dictbool可选)— 是否返回一个 ModelOutput 而不是一个普通元组。
  • encoder_hidden_states(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor可选)— 编码器最后一层的隐藏状态序列。如果模型配置为解码器,则在交叉注意力中使用。
  • encoder_attention_mask(形状为(batch_size, sequence_length)torch.FloatTensor可选)— 用于避免对编码器输入的填充标记索引执行注意力的掩码。如果模型配置为解码器,则在交叉注意力中使用此掩码。选择的掩码值在[0, 1]中:
    • 1 表示未被masked的标记,
    • 0 表示被masked的标记。
  • past_key_values(长度为config.n_layerstuple(tuple(torch.FloatTensor)),每个元组包含形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的 4 个张量)— 包含注意力块的预计算键和值隐藏状态。可用于加速解码。如果使用了past_key_values,用户可以选择仅输入最后的decoder_input_ids(这些没有将它们的过去键值状态提供给此模型的)形状为(batch_size, 1)的张量,而不是形状为(batch_size, sequence_length)的所有decoder_input_ids
  • use_cachebool可选)— 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。

返回值

transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或一个torch.FloatTensor元组(如果传递了return_dict=False或当config.return_dict=False时)包含各种元素,这取决于配置(RemBertConfig)和输入。

  • last_hidden_state(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor)— 模型最后一层的隐藏状态序列。 如果使用了past_key_values,则输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。
  • past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当传递use_cache=Trueconfig.use_cache=True时返回) — 长度为config.n_layerstuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量,如果config.is_encoder_decoder=True还有 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。 包含预先计算的隐藏状态(自注意力块中的键和值,以及如果config.is_encoder_decoder=True在交叉注意力块中)可用于加速顺序解码(请参见past_key_values输入)。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个用于嵌入的输出,如果模型有嵌入层, 一个用于每一层的输出)。 模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每一层一个)。 在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.add_cross_attention=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每一层一个)。 解码器交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。

RemBertModel 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的方法需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RemBertModel
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertModel.from_pretrained("google/rembert")

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

>>> last_hidden_states = outputs.last_hidden_state

RemBertForCausalLM

class transformers.RemBertForCausalLM

< source >

代码语言:javascript复制
( config )

参数

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

带有顶部语言建模头部的 RemBERT 模型,用于 CLM 微调。此模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有事项。

forward

< source >

代码语言:javascript复制
( input_ids: LongTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None past_key_values: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.CausalLMOutputWithCrossAttentions or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask(形状为(batch_size, sequence_length)torch.FloatTensor可选)— 避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]中。
    • 1 表示未被 masked的标记,
    • 0 表示被 masked的标记。

    什么是注意力掩码?

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

    什么是 token 类型 ID?

  • position_ids(形状为(batch_size, sequence_length)torch.LongTensor可选)— 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)torch.FloatTensor可选)— 用于使自注意力模块的选定头部失效的掩码。选择的掩码值在[0, 1]中:
    • 1 表示头部未被 masked
    • 0 表示头部被masked
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dictbool可选)— 是否返回 ModelOutput 而不是普通元组。
  • encoder_hidden_states(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor可选)— 编码器最后一层的输出处的隐藏状态序列。如果模型配置为解码器,则在交叉注意力中使用。
  • encoder_attention_mask(形状为(batch_size, sequence_length)torch.FloatTensor可选)— 避免在编码器输入的填充标记索引上执行注意力的掩码。如果模型配置为解码器,则在交叉注意力中使用此掩码。选择的掩码值在[0, 1]中:
    • 1 表示未被 masked的标记,
    • 0 表示被 masked的标记。
  • past_key_values(长度为config.n_layerstuple(tuple(torch.FloatTensor)),每个元组包含形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)的 4 个张量)— 包含注意力块的预计算键和值隐藏状态。可用于加速解码。如果使用past_key_values,用户可以选择仅输入最后的decoder_input_ids(这些没有将它们的过去键值状态提供给此模型的)形状为(batch_size, 1)的张量,而不是所有形状为(batch_size, sequence_length)decoder_input_ids
  • labels (torch.LongTensor,形状为(batch_size, sequence_length)optional) — 用于计算从左到右的语言建模损失(下一个词预测)的标签。索引应在[-100, 0, ..., config.vocab_size]内(参见input_ids文档字符串)。索引设置为-100的标记将被忽略(掩码),损失仅计算标签为[0, ..., config.vocab_size]的标记。
  • use_cache (bool, optional) — 如果设置为True,则返回past_key_values键值状态,可用于加速解码(参见past_key_values)。

返回

transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或一个torch.FloatTensor元组(如果传递return_dict=Falseconfig.return_dict=False)包含根据配置(RemBertConfig)和输入的不同元素。

  • loss (torch.FloatTensor,形状为(1,)optional, 当提供labels时返回) — 语言建模损失(用于下一个标记预测)。
  • logits (torch.FloatTensor,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的一个 每层输出的一个)。 模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 注意力 softmax 后的自注意力头中的注意力权重,用于计算加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 注意力 softmax 后的交叉注意力权重,用于计算交叉注意力头中的加权平均值。
  • past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当传递use_cache=Trueconfig.use_cache=True时返回) — 长度为config.n_layerstorch.FloatTensor元组的元组,每个元组包含自注意力和交叉注意力层的缓存键、值状态,如果模型用于编码器-解码器设置,则相关。仅在config.is_decoder = True时相关。 包含预先计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。

RemBertForCausalLM 的前向方法,覆盖__call__特殊方法。

虽然前向传递的方法需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RemBertForCausalLM, RemBertConfig
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> config = RemBertConfig.from_pretrained("google/rembert")
>>> config.is_decoder = True
>>> model = RemBertForCausalLM.from_pretrained("google/rembert", config=config)

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

>>> prediction_logits = outputs.logits

RemBertForMaskedLM

class transformers.RemBertForMaskedLM

< source >

代码语言:javascript复制
( config )

参数

  • config(RemBertConfig)- 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。

在顶部带有语言建模头的 RemBERT 模型。此模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: LongTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.MaskedLMOutput or tuple(torch.FloatTensor)

参数

  • input_ids(形状为(batch_size, sequence_length)torch.LongTensor)- 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask(形状为(batch_size, sequence_length)torch.FloatTensor可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]中:
    • 1 用于未被“掩码”处理的标记,
    • 0 用于被“掩码”处理的标记。

    什么是注意力掩码?

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

    什么是令牌类型 ID?

  • position_ids(形状为(batch_size, sequence_length)torch.LongTensor可选)- 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)torch.FloatTensor可选)- 用于使自注意力模块的选定头部失效的掩码。掩码值选择在[0, 1]中:
    • 1 表示头部未被“掩码”处理,
    • 0 表示头部被“掩码”处理。
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor可选)- 可选地,您可以选择直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • output_attentionsbool可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_statesbool可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dictbool可选)- 是否返回 ModelOutput 而不是普通元组。
  • labels(形状为(batch_size, sequence_length)torch.LongTensor可选)- 用于计算掩码语言建模损失的标签。索引应在[-100, 0, ..., config.vocab_size]中(请参阅input_ids文档字符串)。索引设置为-100的标记将被忽略(掩码),损失仅计算具有标签在[0, ..., config.vocab_size]中的标记。

返回

transformers.modeling_outputs.MaskedLMOutput 或 tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.MaskedLMOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或者 config.return_dict=False)包含各种元素,取决于配置(RemBertConfig)和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 掩码语言建模(MLM)损失。
  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 前每个词汇标记的分数)。
  • hidden_states (tuple(torch.FloatTensor)可选,当传递 output_hidden_states=True 或者 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于嵌入的输出,如果模型有嵌入层, 一个用于每一层的输出)。 模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor)可选,当传递 output_attentions=True 或者 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每层一个)。 注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。

RemBertForMaskedLM 的前向方法,覆盖了 __call__ 特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用 Module 实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

例子:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RemBertForMaskedLM
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertForMaskedLM.from_pretrained("google/rembert")

>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="pt")

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

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

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

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

>>> outputs = model(**inputs, labels=labels)

RemBertForSequenceClassification

class transformers.RemBertForSequenceClassification

< source >

代码语言:javascript复制
( config )

参数

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

RemBERT 模型变压器,顶部带有序列分类/回归头(池化输出的线性层),例如用于 GLUE 任务。

这个模型是 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

< source >

代码语言:javascript复制
( input_ids: FloatTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.SequenceClassifierOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。查看 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 以获取详细信息。 什么是输入 ID?
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — 用于避免在填充令牌索引上执行注意力的掩码。掩码值选在[0, 1]之间:
    • 1 用于not masked的令牌,
    • 0 用于masked的令牌。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于句子 A令牌,
    • 1 对应于句子 B令牌。

    什么是令牌类型 ID?

  • position_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 每个输入序列令牌在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块的选定头部失效的掩码。掩码值选在[0, 1]中:
    • 1 表示头部是not masked
    • 0 表示头部是masked
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您希望更多地控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor of shape (batch_size,), optional) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]中。如果config.num_labels == 1,则计算回归损失(均方损失),如果config.num_labels > 1,则计算分类损失(交叉熵)。

返回

transformers.modeling_outputs.SequenceClassifierOutput 或tuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutput 或一个torch.FloatTensor元组(如果传递了return_dict=Falseconfig.return_dict=False时)包含各种元素,取决于配置(RemBertConfig)和输入。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供labels时返回) — 分类(如果config.num_labels==1则为回归)损失。
  • logits (torch.FloatTensor of shape (batch_size, config.num_labels)) — 分类(如果config.num_labels==1则为回归)得分(SoftMax 之前)。
  • hidden_states (tuple(torch.FloatTensor), optional, 当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — torch.FloatTensor元组(一个用于嵌入层的输出,如果模型有一个嵌入层, 一个用于每一层的输出)的形状为(batch_size, sequence_length, hidden_size)。 模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

RemBertForSequenceClassification 的前向方法,覆盖了__call__特殊方法。

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

单标签分类示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, RemBertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertForSequenceClassification.from_pretrained("google/rembert")

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

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

>>> predicted_class_id = logits.argmax().item()

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

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

多标签分类示例:

代码语言:javascript复制
>>> import torch
>>> from transformers import AutoTokenizer, RemBertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertForSequenceClassification.from_pretrained("google/rembert", 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 = RemBertForSequenceClassification.from_pretrained(
...     "google/rembert", 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

RemBertForMultipleChoice

class transformers.RemBertForMultipleChoice

<来源>

代码语言:javascript复制
( config )

参数

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

RemBERT 模型在顶部具有多选分类头(在汇总输出的顶部和 softmax 上的线性层),例如用于 RocStories/SWAG 任务。

此模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

<来源>

代码语言:javascript复制
( input_ids: FloatTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.MultipleChoiceModelOutput or tuple(torch.FloatTensor)

参数

  • input_idstorch.LongTensor,形状为(batch_size, num_choices, sequence_length))— 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_masktorch.FloatTensor,形状为(batch_size, num_choices, sequence_length)可选)— 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 1 表示未被masked的标记,
    • 0 表示被masked的标记。

    注意力掩码是什么?

  • token_type_idstorch.LongTensor,形状为(batch_size, num_choices, sequence_length)可选)— 段标记索引,指示输入的第一部分和第二部分。索引选择在[0, 1]之间:
    • 0 对应于句子 A标记,
    • 1 对应于句子 B标记。

    什么是标记类型 ID?

  • position_idstorch.LongTensor,形状为(batch_size, num_choices, sequence_length)可选)— 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_masktorch.FloatTensor,形状为(num_heads,)(num_layers, num_heads)可选)— 用于使自注意力模块中选择的头部失效的掩码。掩码值选择在[0, 1]之间:
    • 1 表示头部是not masked
    • 0 表示头部是masked
  • inputs_embeds(形状为(batch_size, num_choices, sequence_length, hidden_size)torch.FloatTensor可选)— 可选地,您可以直接传递嵌入表示而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dictbool可选)— 是否返回一个 ModelOutput 而不是一个普通元组。
  • labels(形状为(batch_size,)torch.LongTensor可选)— 用于计算多项选择分类损失的标签。索引应在[0, ..., num_choices-1]范围内,其中num_choices是输入张量第二维的大小。(参见上面的input_ids

返回

transformers.modeling_outputs.MultipleChoiceModelOutput 或tuple(torch.FloatTensor)

transformers.modeling_outputs.MultipleChoiceModelOutput 或一个torch.FloatTensor元组(如果传递return_dict=Falseconfig.return_dict=False时)包含各种元素,取决于配置(RemBertConfig)和输入。

  • loss(形状为*(1,)*的torch.FloatTensor可选,当提供labels时返回)— 分类损失。
  • logits(形状为(batch_size, num_choices)torch.FloatTensor)— num_choices是输入张量的第二维。(参见上面的input_ids)。 分类得分(SoftMax 之前)。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个用于嵌入的输出,如果模型有一个嵌入层, 一个用于每一层的输出)。 模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

RemBertForMultipleChoice 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的方法需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RemBertForMultipleChoice
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertForMultipleChoice.from_pretrained("google/rembert")

>>> 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

RemBertForTokenClassification

class transformers.RemBertForTokenClassification

<来源>

代码语言:javascript复制
( config )

参数

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

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

此模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

< source >

代码语言:javascript复制
( input_ids: FloatTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.TokenClassifierOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask (torch.FloatTensor,形状为(batch_size, sequence_length)optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选在[0, 1]范围内:
    • 1 表示未被masked的标记,
    • 0 表示被masked的标记。

    什么是注意力掩码?

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

    什么是标记类型 ID?

  • position_ids (torch.LongTensor,形状为(batch_size, sequence_length)optional) — 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_mask (torch.FloatTensor,形状为(num_heads,)(num_layers, num_heads)optional) — 用于使自注意力模块中选择的头部失效的掩码。掩码值选在[0, 1]范围内:
    • 1 表示头部未被masked
    • 0 表示头部被masked
  • inputs_embeds (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
  • output_hidden_states (booloptional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的hidden_states
  • return_dict (booloptional) — 是否返回一个 ModelOutput 而不是一个普通元组。
  • labels (torch.LongTensor,形状为(batch_size, sequence_length)optional) — 用于计算标记分类损失的标签。索引应在[0, ..., config.num_labels - 1]中。

返回

transformers.modeling_outputs.TokenClassifierOutput 或tuple(torch.FloatTensor)

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

  • loss (torch.FloatTensor,形状为(1,)optional,当提供labels时返回) — 分类损失。
  • logits (torch.FloatTensor,形状为(batch_size, sequence_length, config.num_labels)) — 分类分数(SoftMax 之前)。
  • hidden_states (tuple(torch.FloatTensor)optional,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型具有嵌入层,则为嵌入输出的输出 每一层的输出)。 模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), optional, 当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

RemBertForTokenClassification 的前向方法,覆盖__call__特殊方法。

虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RemBertForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertForTokenClassification.from_pretrained("google/rembert")

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

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

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

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

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

RemBertForQuestionAnswering

class transformers.RemBertForQuestionAnswering

< source >

代码语言:javascript复制
( config )

参数

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

RemBERT 模型在顶部具有一个用于提取问答任务的跨度分类头(在隐藏状态输出的线性层上计算span start logitsspan end logits)。

此模型是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。

forward

< source >

代码语言:javascript复制
( input_ids: FloatTensor = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None start_positions: Optional = None end_positions: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.QuestionAnsweringModelOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为(batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。 什么是输入 ID?
  • attention_mask(形状为 (batch_size, sequence_length)torch.FloatTensor可选)— 避免在填充标记索引上执行注意力的掩码。掩码值在 [0, 1] 中选择:
    • 1 表示未被“掩码”的标记,
    • 0 表示被“掩码”的标记。

    注意力掩码是什么?

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

    什么是标记类型 ID?

  • position_ids(形状为 (batch_size, sequence_length)torch.LongTensor可选)— 每个输入序列标记在位置嵌入中的位置索引。在范围 [0, config.max_position_embeddings - 1] 中选择。 什么是位置 ID?
  • head_mask(形状为 (num_heads,)(num_layers, num_heads)torch.FloatTensor可选)— 用于使自注意力模块的选定头部失效的掩码。掩码值在 [0, 1] 中选择:
    • 1 表示头部未被“掩码”,
    • 0 表示头部被“掩码”。
  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您想要更多控制如何将 input_ids 索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的 attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states
  • return_dictbool可选)— 是否返回一个 ModelOutput 而不是一个普通元组。
  • start_positions(形状为 (batch_size,)torch.LongTensor可选)— 用于计算标记跨度的起始位置(索引)的标签。位置被夹紧到序列的长度(sequence_length)。序列外的位置不会计入损失的计算。
  • end_positions(形状为 (batch_size,)torch.LongTensor可选)— 用于计算标记跨度的结束位置(索引)的标签。位置被夹紧到序列的长度(sequence_length)。序列外的位置不会计入损失的计算。

返回

transformers.modeling_outputs.QuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)

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

  • loss(形状为 (1,)torch.FloatTensor可选,在提供 labels 时返回)— 总跨度提取损失是起始和结束位置的交叉熵之和。
  • start_logits(形状为 (batch_size, sequence_length)torch.FloatTensor)— 跨度起始得分(SoftMax 之前)。
  • end_logits(形状为 (batch_size, sequence_length)torch.FloatTensor)— 跨度结束得分(SoftMax 之前)。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出 每层的输出的一个)。 模型在每一层输出处的隐藏状态以及可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。 在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

RemBertForQuestionAnswering 的前向方法,覆盖了__call__特殊方法。

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

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, RemBertForQuestionAnswering
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = RemBertForQuestionAnswering.from_pretrained("google/rembert")

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

>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()

>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index   1]

>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss

TensorFlow 隐藏了 TensorFlow 内容

TFRemBertModel

class transformers.TFRemBertModel

<来源>

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

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

裸的 RemBERT 模型变换器输出原始隐藏状态,没有特定的头部。

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

此模型还是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有信息。

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

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

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

  • 一个仅包含input_ids的单个张量:model(input_ids)
  • 一个长度不定的列表,其中包含一个或多个输入张量,按照文档字符串中给定的顺序:model([input_ids, attention_mask])model([input_ids, attention_mask, token_type_ids])
  • 一个字典,其中包含一个或多个与文档字符串中给定的输入名称相关联的输入张量:model({"input_ids": input_ids, "token_type_ids": token_type_ids})

请注意,当使用子类化创建模型和层时,您无需担心这些,因为您可以像对待任何其他 Python 函数一样传递输入!

call

<来源>

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None encoder_hidden_states: np.ndarray | tf.Tensor | None = None encoder_attention_mask: np.ndarray | tf.Tensor | None = None past_key_values: Optional[Tuple[Tuple[Union[np.ndarray, tf.Tensor]]]] = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions or tuple(tf.Tensor)

参数

  • input_ids (np.ndarray, tf.Tensor, List[tf.Tensor] ``Dict[str, tf.Tensor]Dict[str, np.ndarray],每个示例的形状必须为 (batch_size, sequence_length)`) — 输入序列标记在词汇表中的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。 什么是输入 ID?
  • attention_mask (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 遮蔽掉填充标记索引的注意力掩码。掩码值选在 [0, 1] 之间:
    • 1 代表未被 masked 的标记,
    • 0 代表被 masked 的标记。

    什么是注意力掩码?

  • token_type_ids (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 段标记索引,指示输入的第一部分和第二部分。索引选在 [0, 1] 之间:
    • 0 对应于 句子 A 标记,
    • 1 对应于 句子 B 标记。

    什么是标记类型 ID?

  • position_ids (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。在范围 [0, config.max_position_embeddings - 1] 中选择。 什么是位置 ID?
  • head_mask (np.ndarraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中的选定头部失效的掩码。掩码值选在 [0, 1] 之间:
    • 1 表示头部未被 masked
    • 0 表示头部被 masked
  • inputs_embeds (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您希望更好地控制如何将 input_ids 索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的 attentions。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量中的 hidden_states。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在急切模式下使用,在图模式下该值将始终设置为 True。
  • training (bool, 可选,默认为 `False“) — 是否在训练模式下使用模型(一些模块,如 dropout 模块,在训练和评估之间具有不同的行为)。
  • encoder_hidden_states (tf.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 编码器最后一层的隐藏状态序列。如果模型配置为解码器,则在交叉注意力中使用。
  • encoder_attention_mask (tf.Tensor,形状为(batch_size, sequence_length)optional) — 用于避免在编码器输入的填充标记索引上执行注意力的掩码。如果模型配置为解码器,则在交叉注意力中使用此掩码。掩码值选在[0, 1]之间:
    • 对于未被掩码的标记,值为 1,
    • 对于被掩码的标记,值为 0。
  • past_key_values (Tuple[Tuple[tf.Tensor]],长度为config.n_layers) — 包含注意力块的预计算的键和值隐藏状态。可用于加速解码。如果使用past_key_values,用户可以选择只输入最后的decoder_input_ids(那些没有给出其过去键值状态的)的形状为(batch_size, 1),而不是形状为(batch_size, sequence_length)的所有decoder_input_ids
  • use_cache (bool, optional, 默认为True) — 如果设置为True,将返回past_key_values键值状态,可用于加速解码(参见past_key_values)。在训练期间设置为False,在生成期间设置为True

返回

transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions 或tuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions 或一个tf.Tensor元组(如果传递return_dict=Falseconfig.return_dict=False)包含根据配置(RemBertConfig)和输入的不同元素。

  • last_hidden_state (tf.Tensor,形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层的隐藏状态序列。
  • pooler_output (tf.Tensor,形状为(batch_size, hidden_size)) — 序列第一个标记(分类标记)的最后一层隐藏状态,进一步由线性层和 Tanh 激活函数处理。线性层的权重是通过预训练期间的下一个句子预测(分类)目标进行训练的。 这个输出通常不是输入语义内容的好摘要,通常最好对整个输入序列的隐藏状态进行平均或池化。
  • past_key_values (List[tf.Tensor], optional, 当传递use_cache=Trueconfig.use_cache=True时返回) — 长度为config.n_layerstf.Tensor列表,每个张量的形状为(2, batch_size, num_heads, sequence_length, embed_size_per_head)。 包含预先计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见past_key_values输入)。
  • hidden_states (tuple(tf.Tensor)optional,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入的输出 一个用于每一层的输出)。 模型在每一层的输出隐藏状态加上初始嵌入输出。
  • attentions (tuple(tf.Tensor)optional,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(tf.Tensor)optional,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每层一个)。 解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。

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

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

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertModel
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertModel.from_pretrained("google/rembert")

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

>>> last_hidden_states = outputs.last_hidden_state

TFRemBertForMaskedLM

class transformers.TFRemBertForMaskedLM

<来源>

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

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

在顶部有一个语言建模头的 RemBERT 模型。

这个模型继承自 TFPreTrainedModel。查看超类文档以获取库实现的所有模型的通用方法(如下载或保存、调整输入嵌入、修剪头等)。

这个模型也是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有内容。

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

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

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

  • 一个仅包含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

<来源>

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFMaskedLMOutput or tuple(tf.Tensor)

参数

  • input_idsnp.ndarraytf.TensorList[tf.Tensor]Dict[str, tf.Tensor]Dict[str, np.ndarray],每个示例的形状必须为(batch_size, sequence_length))- 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()。 什么是输入 ID?
  • attention_masknp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]之间:
    • 1 表示未被遮罩的标记,
    • 0 表示被遮罩的标记。

    什么是注意力掩码?

  • token_type_idsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 段标记索引,指示输入的第一部分和第二部分。索引选择在[0, 1]中:
    • 0 对应于句子 A标记,
    • 1 对应于句子 B标记。

    什么是标记类型 ID?

  • position_idsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_masknp.ndarraytf.Tensor,形状为(num_heads,)(num_layers, num_heads)可选)— 用于使自注意力模块的选定头部无效的掩码。掩码值选择在[0, 1]之间:
    • 1 表示头部未被遮罩,
    • 0 表示头部被遮罩。
  • inputs_embedsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length, hidden_size)可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量下的attentions。此参数仅在急切模式下使用,在图模式中将使用配置中的值。
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的hidden_states。此参数仅在急切模式下使用,在图模式中将使用配置中的值。
  • return_dictbool可选)— 是否返回 ModelOutput 而不是普通元组。此参数可以在急切模式下使用,在图模式中该值将始终设置为 True。
  • trainingbool可选,默认为False)— 是否在训练模式下使用模型(一些模块,如丢弃模块,在训练和评估之间具有不同的行为)。
  • labelstf.Tensor或形状为(batch_size, sequence_length)np.ndarray可选)— 用于计算掩码语言建模损失的标签。索引应在[-100, 0, ..., config.vocab_size]范围内(请参阅input_ids文档字符串)。索引设置为-100的标记将被忽略(被遮罩),损失仅计算具有标签在[0, ..., config.vocab_size]范围内的标记。

返回

transformers.modeling_tf_outputs.TFMaskedLMOutput 或tuple(tf.Tensor)

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

  • loss (tf.Tensor of shape (n,), 可选, 其中 n 是非屏蔽标签的数量,在提供 labels 时返回) — 掩码语言建模(MLM)损失。
  • logits (tf.Tensor of shape (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states (tuple(tf.Tensor), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于嵌入输出,一个用于每一层的输出)。 模型在每一层输出的隐藏状态以及初始嵌入输出。
  • attentions (tuple(tf.Tensor), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFRemBertForMaskedLM 的前向方法,覆盖了 __call__ 特殊方法。

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

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForMaskedLM
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForMaskedLM.from_pretrained("google/rembert")

>>> 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)
代码语言:javascript复制
>>> labels = tokenizer("The capital of France is Paris.", return_tensors="tf")["input_ids"]
>>> # mask labels of non-[MASK] tokens
>>> labels = tf.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)

>>> outputs = model(**inputs, labels=labels)

TFRemBertForCausalLM

class transformers.TFRemBertForCausalLM

< source >

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

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

RemBERT 模型在顶部带有一个 language modeling 头用于 CLM 微调。

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

此模型也是 tf.keras.Model 的子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取有关一般用法和行为的所有相关信息。

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

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

支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于有这种支持,当使用model.fit()等方法时,应该可以正常工作-只需传递您的输入和标签,以任何model.fit()支持的格式!但是,如果您想在 Keras 方法之外使用第二种格式,例如在使用 KerasFunctional 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

<来源>

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None encoder_hidden_states: np.ndarray | tf.Tensor | None = None encoder_attention_mask: np.ndarray | tf.Tensor | None = None past_key_values: Optional[Tuple[Tuple[Union[np.ndarray, tf.Tensor]]]] = None use_cache: Optional[bool] = 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 ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFCausalLMOutputWithCrossAttentions or tuple(tf.Tensor)

返回

transformers.modeling_tf_outputs.TFCausalLMOutputWithCrossAttentions 或tuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFCausalLMOutputWithCrossAttentions 或一个tf.Tensor元组(如果传递return_dict=Falseconfig.return_dict=False)包含根据配置(RemBertConfig)和输入的不同元素。

  • loss(形状为(n,)tf.Tensor可选,当提供labels时返回,其中 n 是非掩码标签的数量)- 语言建模损失(用于下一个标记预测)。
  • logits(形状为(batch_size, sequence_length, config.vocab_size)tf.Tensor)- 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_statestuple(tf.Tensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入输出,一个用于每层输出)。 模型在每一层输出的隐藏状态加上初始嵌入输出。
  • attentionstuple(tf.Tensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每层一个)。 注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_attentionstuple(tf.Tensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每层一个)。 解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
  • past_key_valuesList[tf.Tensor]可选,当传递use_cache=Trueconfig.use_cache=True时返回)- 长度为config.n_layerstf.Tensor列表,每个张量的形状为(2, batch_size, num_heads, sequence_length, embed_size_per_head)。 包含预先计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码。

编码器隐藏状态(tf.Tensor,形状为(batch_size, sequence_length, hidden_size)可选):编码器最后一层的隐藏状态序列。如果模型配置为解码器,则在交叉注意力中使用。编码器注意力掩码(tf.Tensor,形状为(batch_size, sequence_length)可选):用于避免在编码器输入的填充令牌索引上执行注意力。如果模型配置为解码器,则在交叉注意力中使用。掩码值选在[0, 1]之间:

  • 1 表示“未被掩码”的标记,
  • 0 表示“被掩码”的标记。

past_key_values(长度为config.n_layersTuple[Tuple[tf.Tensor]])包含注意力块的预计算键和值隐藏状态。可用于加速解码。如果使用past_key_values,用户可以选择仅输入最后的decoder_input_ids(这些没有将其过去的键值状态提供给此模型的)的形状为(batch_size, 1),而不是形状为(batch_size, sequence_length)的所有decoder_input_ids。use_cache(bool可选,默认为True):如果设置为True,将返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。在训练期间设置为False,在生成标签期间设置为True。标签(tf.Tensornp.ndarray,形状为(batch_size, sequence_length)可选):用于计算交叉熵分类损失的标签。索引应在[0, ..., config.vocab_size - 1]之间。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForCausalLM
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForCausalLM.from_pretrained("google/rembert")

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

TFRemBertForSequenceClassification

class transformers.TFRemBertForSequenceClassification

<来源>

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

  • config(RemBertConfig) - 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。

RemBERT 模型变压器,顶部带有序列分类/回归头,例如 GLUE 任务。

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

此模型也是tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档,了解与一般用法和行为相关的所有事项。

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

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

支持第二种格式的原因是,当将输入传递给模型和层时,Keras 方法更喜欢这种格式。由于这种支持,当使用model.fit()等方法时,应该可以正常工作 - 只需以model.fit()支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法之外使用第二种格式,比如在使用 KerasFunctional 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 >

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFSequenceClassifierOutput or tuple(tf.Tensor)

参数

  • input_idsnp.ndarraytf.TensorList[tf.Tensor]Dict[str, tf.Tensor]Dict[str, np.ndarray],每个示例的形状必须为(batch_size, sequence_length))— 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()。 什么是输入 ID?
  • attention_masknp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
    • 1 表示未被“masked”的标记,
    • 对于被masked的标记。

    什么是注意力掩码?

  • token_type_idsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 段标记索引,指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于句子 A标记,
    • 1 对应于句子 B标记。

    什么是标记类型 ID?

  • position_idsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_masknp.ndarraytf.Tensor,形状为(num_heads,)(num_layers, num_heads)可选)— 用于使自注意力模块的选定头部失效的掩码。掩码值在[0, 1]中选择:
    • 1 表示头部未被“masked”,
    • 0 表示头部被masked
  • inputs_embedsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length, hidden_size)可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制权,以便将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,则这很有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • return_dictbool可选)— 是否返回一个 ModelOutput 而不是一个普通的元组。此参数可以在急切模式下使用,在图模式下该值将始终设置为 True。
  • trainingbool可选,默认为False)— 是否在训练模式下使用模型(一些模块如 dropout 模块在训练和评估之间有不同的行为)。
  • labels(形状为(batch_size,)tf.Tensornp.ndarray可选)— 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方损失),如果config.num_labels > 1,则计算分类损失(交叉熵)。

返回值

transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或tuple(tf.Tensor)

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

  • loss(形状为(batch_size, )tf.Tensor可选,当提供labels时返回)— 分类(如果 config.num_labels==1 则为回归)损失。
  • logits(形状为(batch_size, config.num_labels)tf.Tensor)— 分类(如果 config.num_labels==1 则为回归)得分(SoftMax 之前)。
  • hidden_statestuple(tf.Tensor)可选,当传递output_hidden_states=True或当config.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入的输出 一个用于每一层的输出)。 模型在每一层输出的隐藏状态加上初始嵌入输出。
  • attentionstuple(tf.Tensor)可选,当传递output_attentions=True或当config.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFRemBertForSequenceClassification 的前向方法,覆盖__call__特殊方法。

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

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForSequenceClassification
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForSequenceClassification.from_pretrained("google/rembert")

>>> 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])
代码语言:javascript复制
>>> # 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 = TFRemBertForSequenceClassification.from_pretrained("google/rembert", num_labels=num_labels)

>>> labels = tf.constant(1)
>>> loss = model(**inputs, labels=labels).loss

TFRemBertForMultipleChoice

class transformers.TFRemBertForMultipleChoice

< source >

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

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

RemBERT 模型在顶部具有多选分类头(在池化输出的顶部和 softmax 之上的线性层)例如用于 RocStories/SWAG 任务。

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

此模型也是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取有关一般用法和行为的所有相关信息。

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

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

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

  • 一个仅包含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

<来源>

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFMultipleChoiceModelOutput or tuple(tf.Tensor)

参数

  • input_idsnp.ndarraytf.TensorList[tf.Tensor] ``Dict[str, tf.Tensor]Dict[str, np.ndarray],每个示例的形状必须为(batch_size, num_choices, sequence_length)`)- 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()。 什么是输入 ID?
  • attention_masknp.ndarraytf.Tensor,形状为(batch_size, num_choices, sequence_length)可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]中选择:
    • 1 表示未被掩盖的标记,
    • 0 表示被掩盖的标记。

    什么是注意力掩码?

  • token_type_idsnp.ndarraytf.Tensor,形状为(batch_size, num_choices, sequence_length)可选)- 段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]中选择:
    • 0 对应于一个句子 A标记,
    • 1 对应于一个句子 B标记。

    什么是标记类型 ID?

  • position_idsnp.ndarraytf.Tensor,形状为(batch_size, num_choices, sequence_length)可选)- 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。 什么是位置 ID?
  • head_masknp.ndarraytf.Tensor,形状为(num_heads,)(num_layers, num_heads)可选)- 用于使自注意力模块中选择的头部失效的掩码。掩码值在[0, 1]中选择:
    • 1 表示头部未被掩盖
    • 0 表示头部被掩盖
  • inputs_embeds (np.ndarraytf.Tensor,形状为 (batch_size, num_choices, sequence_length, hidden_size)可选) — 可选地,可以直接传递嵌入表示,而不是传递 input_ids。如果您想要更多控制如何将 input_ids 索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多细节,请参见返回张量中的 attentions。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多细节,请参见返回张量中的 hidden_states。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通元组。此参数可以在急切模式下使用,在图模式下该值将始终设置为 True。
  • training (bool, 可选, 默认为 False) — 是否在训练模式下使用模型(一些模块如 dropout 模块在训练和评估之间有不同的行为)。
  • labels (tf.Tensornp.ndarray,形状为 (batch_size,), 可选) — 用于计算多项选择分类损失的标签。索引应在 [0, ..., num_choices] 范围内,其中 num_choices 是输入张量第二维的大小。(参见上面的 input_ids

返回

transformers.modeling_tf_outputs.TFMultipleChoiceModelOutput 或 tuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFMultipleChoiceModelOutput 或一个 tf.Tensor 元组(如果传递 return_dict=Falseconfig.return_dict=False,则返回)包含根据配置(RemBertConfig)和输入而异的各种元素。

  • loss (tf.Tensor,形状为 (batch_size, )可选,当提供 labels 时返回) — 分类损失。
  • logits (tf.Tensor,形状为 (batch_size, num_choices)) — num_choices 是输入张量的第二维。(参见上面的 input_ids)。 分类得分(SoftMax 之前)。
  • hidden_states (tuple(tf.Tensor)可选,当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于嵌入的输出 一个用于每一层的输出)。 模型在每一层输出的隐藏状态加上初始嵌入输出。
  • attentions (tuple(tf.Tensor)可选,当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每层一个)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFRemBertForMultipleChoice 的前向方法,覆盖了 __call__ 特殊方法。

虽然前向传递的方法需要在此函数内定义,但应该在此之后调用 Module 实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForMultipleChoice
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForMultipleChoice.from_pretrained("google/rembert")

>>> 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

TFRemBertForTokenClassification

class transformers.TFRemBertForTokenClassification

<来源>

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

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

在顶部具有一个令牌分类头的 RemBERT 模型(在隐藏状态输出的顶部有一个线性层),例如用于命名实体识别(NER)任务。

此模型继承自 TFPreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。

此模型还是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有内容。

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

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

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

  • 一个仅包含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

<来源>

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFTokenClassifierOutput or tuple(tf.Tensor)

参数

  • input_ids (np.ndarray, tf.Tensor, List[tf.Tensor] ``Dict[str, tf.Tensor]Dict[str, np.ndarray],每个示例的形状必须为(batch_size, sequence_length)`) — 输入序列标记在词汇表中的索引。 可以使用 AutoTokenizer 获取索引。查看 PreTrainedTokenizer.call()和 PreTrainedTokenizer.encode()获取详细信息。 什么是输入 ID?
  • attention_mask(形状为(batch_size, sequence_length)np.ndarraytf.Tensor可选) — 避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]中:
    • 对于未被掩蔽的标记,
    • 对于被掩蔽的标记为 0。

    什么是注意力掩码?

  • token_type_ids(形状为(batch_size, sequence_length)np.ndarraytf.Tensor可选)— 段标记索引,指示输入的第一部分和第二部分。索引选择在[0, 1]内:
    • 0 对应于句子 A标记,
    • 1 对应于句子 B标记。

    什么是标记类型 ID?

  • position_idsnp.ndarraytf.Tensor,形状为(batch_size, sequence_length)可选)— 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)np.ndarraytf.Tensor可选)— 用于使自注意力模块的选定头部失效的掩码。掩码值选择在[0, 1]内:
    • 1 表示头部未被掩盖
    • 0 表示头部被掩盖
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)np.ndarraytf.Tensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。此参数仅在急切模式下使用,在图模式下将使用配置中的值。
  • return_dictbool可选)— 是否返回一个 ModelOutput 而不是一个普通元组。此参数可在急切模式下使用,在图模式下该值将始终设置为 True。
  • trainingbool可选,默认为False)— 是否在训练模式下使用模型(一些模块,如 dropout 模块,在训练和评估之间具有不同的行为)。
  • labelstf.Tensornp.ndarray,形状为(batch_size, sequence_length)可选)— 用于计算标记分类损失的标签。索引应在[0, ..., config.num_labels - 1]内。

返回

transformers.modeling_tf_outputs.TFTokenClassifierOutput 或tuple(tf.Tensor)

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

  • loss(形状为(n,)tf.Tensor可选,当提供labels时返回,其中 n 是未被掩盖标签的数量)— 分类损失。
  • logits(形状为(batch_size, sequence_length, config.num_labels)tf.Tensor)— 分类分数(SoftMax 之前)。
  • hidden_statestuple(tf.Tensor)可选,当传递output_hidden_states=True或当config.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入的输出 一个用于每一层的输出)。 模型在每一层输出的隐藏状态加上初始嵌入输出。
  • attentionstuple(tf.Tensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回) - 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每层一个)。 在自注意力头中使用注意力 softmax 后的注意力权重,用于计算加权平均值。

TFRemBertForTokenClassification 的前向方法,覆盖了__call__特殊方法。

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

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForTokenClassification
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForTokenClassification.from_pretrained("google/rembert")

>>> 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()]
代码语言:javascript复制
>>> labels = predicted_token_class_ids
>>> loss = tf.math.reduce_mean(model(**inputs, labels=labels).loss)

TFRemBertForQuestionAnswering

class transformers.TFRemBertForQuestionAnswering

<来源>

代码语言:javascript复制
( config: RemBertConfig *inputs **kwargs )

参数

  • config(RemBertConfig) - 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。

RemBERT 模型在顶部带有一个用于提取问题-回答任务(如 SQuAD)的跨度分类头(在隐藏状态输出的顶部有一个线性层,用于计算span start logitsspan end logits)。

这个模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。

这个模型也是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有内容。

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

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

支持第二种格式的原因是,当将输入传递给模型和层时,Keras 方法更喜欢这种格式。由于有了这种支持,当使用model.fit()等方法时,应该“只需”为您工作 - 只需以model.fit()支持的任何格式传递您的输入和标签!但是,如果您想在 Keras 方法之外使用第二种格式,比如在使用 Keras Functional API 创建自己的层或模型时,有三种可能性可以用来收集第一个位置参数中的所有输入张量:

  • 只有一个带有input_ids的张量,没有其他内容:model(input_ids)
  • 一个长度可变的列表,其中包含一个或多个输入张量,按照文档字符串中给定的顺序:model([input_ids, attention_mask])model([input_ids, attention_mask, token_type_ids])
  • 一个字典,其中包含与文档字符串中给定的输入名称相关联的一个或多个输入张量:model({"input_ids": input_ids, "token_type_ids": token_type_ids})

请注意,当使用子类化创建模型和层时,您无需担心这些内容,因为您可以像对待任何其他 Python 函数一样传递输入!

call

<来源>

代码语言:javascript复制
( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None start_positions: np.ndarray | tf.Tensor | None = None end_positions: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput or tuple(tf.Tensor)

参数

  • input_ids (np.ndarray, tf.Tensor, List[tf.Tensor] ``Dict[str, tf.Tensor]Dict[str, np.ndarray],每个示例的形状必须为 (batch_size, sequence_length)`) — 词汇表中输入序列标记的索引。 可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。 什么是输入 ID?
  • attention_mask (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1]
    • 对于未被“masked”掉的标记,值为 1,
    • 对于被masked掉的标记,值为 0。

    什么是注意力掩码?

  • token_type_ids (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 指示输入的第一部分和第二部分的段标记索引。索引选择在 [0, 1]
    • 0 对应于 句子 A 标记,
    • 1 对应于 句子 B 标记。

    什么是标记类型 ID?

  • position_ids (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask (np.ndarraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选择的头部失效的掩码。掩码值选择在 [0, 1]
    • 1 表示头部未被“masked”掉,
    • 0 表示头部被masked掉。
  • inputs_embeds (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选择直接传递嵌入表示,而不是传递 input_ids。如果您想要更多控制权来将 input_ids 索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的 attentions。此参数仅可在急切模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。此参数仅可在急切模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在急切模式下使用,在图模式下该值将始终设置为 True。
  • training (bool可选,默认为 `False“) — 是否在训练模式下使用模型(一些模块,如 dropout 模块,在训练和评估之间有不同的行为)。
  • start_positions (tf.Tensornp.ndarray,形状为 (batch_size,)可选) — 用于计算标记分类损失的标记(索引)开始位置的标签。位置被夹紧到序列的长度 (sequence_length)。序列外的位置不会被考虑在内,用于计算损失。
  • end_positionstf.Tensor或形状为(batch_size,)np.ndarray可选)— 用于计算标记范围结束位置的位置(索引)标签,以计算标记分类损失。位置被夹紧到序列的长度(sequence_length)。序列外的位置不会被考虑在内以计算损失。

返回值

transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或tuple(tf.Tensor)

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

  • loss(形状为(batch_size,)tf.Tensor可选,当提供start_positionsend_positions时返回)— 总跨度提取损失是开始和结束位置的交叉熵之和。
  • start_logits(形状为(batch_size, sequence_length)tf.Tensor)— 范围开始分数(SoftMax 之前)。
  • end_logits(形状为(batch_size, sequence_length)tf.Tensor)— 跨度结束分数(SoftMax 之前)。
  • hidden_statestuple(tf.Tensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入的输出 一个用于每个层的输出)。 每个层输出的模型的隐藏状态加上初始嵌入输出。
  • attentionstuple(tf.Tensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每个层一个)。 注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

TFRemBertForQuestionAnswering 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForQuestionAnswering
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForQuestionAnswering.from_pretrained("google/rembert")

>>> 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]
代码语言:javascript复制
>>> # target is "nice puppet"
>>> target_start_index = tf.constant([14])
>>> target_end_index = tf.constant([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = tf.math.reduce_mean(outputs.loss)

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

代码语言:javascript复制
什么是输入 ID?
  • attention_mask (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1]
    • 对于未被“masked”掉的标记,值为 1,
    • 对于被masked掉的标记,值为 0。

    什么是注意力掩码?

  • token_type_ids (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 指示输入的第一部分和第二部分的段标记索引。索引选择在 [0, 1]
    • 0 对应于 句子 A 标记,
    • 1 对应于 句子 B 标记。

    什么是标记类型 ID?

  • position_ids (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.max_position_embeddings - 1]。 什么是位置 ID?
  • head_mask (np.ndarraytf.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使自注意力模块中选择的头部失效的掩码。掩码值选择在 [0, 1]
    • 1 表示头部未被“masked”掉,
    • 0 表示头部被masked掉。
  • inputs_embeds (np.ndarraytf.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选择直接传递嵌入表示,而不是传递 input_ids。如果您想要更多控制权来将 input_ids 索引转换为相关向量,这将非常有用,而不是使用模型的内部嵌入查找矩阵。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的 attentions。此参数仅可在急切模式下使用,在图模式下将使用配置中的值。
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。此参数仅可在急切模式下使用,在图模式下将使用配置中的值。
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。此参数可在急切模式下使用,在图模式下该值将始终设置为 True。
  • training (bool可选,默认为 `False“) — 是否在训练模式下使用模型(一些模块,如 dropout 模块,在训练和评估之间有不同的行为)。
  • start_positions (tf.Tensornp.ndarray,形状为 (batch_size,)可选) — 用于计算标记分类损失的标记(索引)开始位置的标签。位置被夹紧到序列的长度 (sequence_length)。序列外的位置不会被考虑在内,用于计算损失。
  • end_positionstf.Tensor或形状为(batch_size,)np.ndarray可选)— 用于计算标记范围结束位置的位置(索引)标签,以计算标记分类损失。位置被夹紧到序列的长度(sequence_length)。序列外的位置不会被考虑在内以计算损失。

返回值

transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或tuple(tf.Tensor)

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

  • loss(形状为(batch_size,)tf.Tensor可选,当提供start_positionsend_positions时返回)— 总跨度提取损失是开始和结束位置的交叉熵之和。
  • start_logits(形状为(batch_size, sequence_length)tf.Tensor)— 范围开始分数(SoftMax 之前)。
  • end_logits(形状为(batch_size, sequence_length)tf.Tensor)— 跨度结束分数(SoftMax 之前)。
  • hidden_statestuple(tf.Tensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入的输出 一个用于每个层的输出)。 每个层输出的模型的隐藏状态加上初始嵌入输出。
  • attentionstuple(tf.Tensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每个层一个)。 注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

TFRemBertForQuestionAnswering 的前向方法,覆盖了__call__特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例:

代码语言:javascript复制
>>> from transformers import AutoTokenizer, TFRemBertForQuestionAnswering
>>> import tensorflow as tf

>>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
>>> model = TFRemBertForQuestionAnswering.from_pretrained("google/rembert")

>>> 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]
代码语言:javascript复制
>>> # target is "nice puppet"
>>> target_start_index = tf.constant([14])
>>> target_end_index = tf.constant([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = tf.math.reduce_mean(outputs.loss)

0 人点赞