Transformers 文档

词汇表

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

词汇表

本词汇表定义了通用的机器学习和 🤗 Transformers 术语,以帮助您更好地理解文档。

A

attention mask

attention mask 是一个可选参数,在对序列进行批处理时使用。

此参数指示模型应关注哪些 token,不应关注哪些 token。

例如,考虑以下两个序列

>>> from transformers import BertTokenizer

>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")

>>> sequence_a = "This is a short sequence."
>>> sequence_b = "This is a rather long sequence. It is at least longer than the sequence A."

>>> encoded_sequence_a = tokenizer(sequence_a)["input_ids"]
>>> encoded_sequence_b = tokenizer(sequence_b)["input_ids"]

编码后的版本长度不同

>>> len(encoded_sequence_a), len(encoded_sequence_b)
(8, 19)

因此,我们无法将它们按原样放在同一个张量中。第一个序列需要填充到第二个序列的长度,或者第二个序列需要截断到第一个序列的长度。

在第一种情况下,ID 列表将通过填充索引进行扩展。我们可以将列表传递给分词器,并要求它像这样进行填充

>>> padded_sequences = tokenizer([sequence_a, sequence_b], padding=True)

我们可以看到,在第一个句子右侧添加了 0,使其与第二个句子长度相同

>>> padded_sequences["input_ids"]
[[101, 1188, 1110, 170, 1603, 4954, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [101, 1188, 1110, 170, 1897, 1263, 4954, 119, 1135, 1110, 1120, 1655, 2039, 1190, 1103, 4954, 138, 119, 102]]

然后可以将其转换为 PyTorch 中的张量。attention mask 是一个二进制张量,指示填充索引的位置,以便模型不会关注它们。对于 BertTokenizer1 表示应关注的值,而 0 表示填充值。此 attention mask 位于分词器返回的字典中,键为“attention_mask”

>>> padded_sequences["attention_mask"]
[[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

autoencoding models

请参阅 encoder modelsmasked language modeling

autoregressive models

请参阅 causal language modelingdecoder models

B

backbone

backbone 是网络(嵌入和层),它输出原始隐藏状态或特征。它通常连接到一个 head,该 head 接受特征作为其输入以进行预测。例如,ViTModel 是一个没有特定 head 的 backbone。其他模型也可以使用 VitModel 作为 backbone,例如 DPT

C

causal language modeling

一种预训练任务,模型按顺序读取文本并预测下一个词。通常通过读取整个句子来完成,但在特定时间步使用模型内的掩码来隐藏未来的 token。

channel

彩色图像由三个通道的某种组合构成:红色、绿色和蓝色(RGB),而灰度图像只有一个通道。在 🤗 Transformers 中,通道可以是图像张量的第一个或最后一个维度:[n_channels, height, width] 或 [height, width, n_channels]。

connectionist temporal classification (CTC)

一种算法,允许模型在不知道输入和输出确切对齐方式的情况下进行学习;CTC 计算给定输入的各种可能输出的分布,并从中选择最可能的输出。CTC 通常用于语音识别任务,因为由于说话者语速不同等原因,语音与文字记录的对齐方式并不总是清晰的。

convolution

神经网络中的一种层,其中输入矩阵与一个较小的矩阵(核或过滤器)进行逐元素乘法,并将值加到一个新矩阵中。这被称为卷积运算,它在整个输入矩阵上重复进行。每次操作都应用于输入矩阵的不同片段。卷积神经网络(CNN)常用于计算机视觉。

D

DataParallel (DP)

在多 GPU 上训练的并行技术,其中相同的设置会复制多次,每次复制接收一个不同的数据切片。处理是并行进行的,所有设置在每个训练步骤结束时进行同步。

在此处 了解有关 DataParallel 工作原理的更多信息

decoder input IDs

此输入特定于 encoder-decoder 模型,并包含将输入到 decoder 的 input IDs。这些输入应用于 sequence to sequence 任务,如翻译或摘要,并且通常以每个模型特定的方式构建。

大多数 encoder-decoder 模型(BART、T5)会根据 labels 自动创建其 decoder_input_ids。在这些模型中,传递 labels 是处理训练的首选方式。

请检查每个模型的文档,了解它们如何处理 sequence to sequence 训练的这些 input IDs。

decoder models

decoder models 也被称为 autoregressive models,它们涉及一种预训练任务(称为 causal language modeling),模型按顺序读取文本并预测下一个词。通常通过读取整个句子并使用掩码来隐藏特定时间步的未来 token 来完成。

deep learning (DL)

使用具有多个层的神经网络的机器学习算法。

E

encoder models

Encoder models 也称为 autoencoding models,它们接收输入(如文本或图像)并将其转换为称为 embedding 的压缩数值表示。通常,encoder models 使用如 masked language modeling 等技术进行预训练,该技术会掩盖输入序列的部分内容,并迫使模型创建更有意义的表示。

F

feature extraction

选择和转换原始数据以创建一组对机器学习算法更有信息性和有用性的特征的过程。特征提取的一些例子包括将原始文本转换为词嵌入,以及从图像/视频数据中提取诸如边缘或形状等重要特征。

feed forward chunking

在 transformers 的每个残差注意力块中,self-attention 层通常后跟 2 个 feed forward 层。feed forward 层的中间嵌入大小通常大于模型的隐藏大小(例如,对于 google-bert/bert-base-uncased)。

对于大小为 [batch_size, sequence_length] 的输入,存储中间 feed forward 嵌入 [batch_size, sequence_length, config.intermediate_size] 所需的内存可能占内存使用量的很大一部分。Reformer: The Efficient Transformer 的作者注意到,由于计算与 sequence_length 维度无关,因此将两个 feed forward 层的输出嵌入 [batch_size, config.hidden_size]_0, ..., [batch_size, config.hidden_size]_n 分别计算,然后将它们连接起来以得到 [batch_size, sequence_length, config.hidden_size](其中 n = sequence_length)在数学上是等效的,这会增加计算时间以换取内存使用量的减少,但会产生数学上**等效**的结果。

对于使用 apply_chunking_to_forward() 函数的模型,chunk_size 定义了并行计算的输出嵌入数量,因此定义了内存和时间复杂度的权衡。如果 chunk_size 设置为 0,则不执行 feed forward chunking。

finetuned models

Finetuning 是一种迁移学习的形式,它涉及采用一个预训练模型,冻结其权重,并用新添加的 model head 替换输出层。模型 head 在您的目标数据集上进行训练。

请参阅 Fine-tune a pretrained model 教程以获取更多详细信息,并了解如何使用 🤗 Transformers 进行模型微调。

H

head

model head 指的是神经网络的最后一层,它接收原始隐藏状态并将其投影到不同的维度。每个任务都有一个不同的 model head。例如

I

图像块

基于视觉的 Transformer 模型将图像分割成更小的块(patches),然后对这些块进行线性嵌入,最后将它们作为一个序列输入到模型中。您可以在模型的配置中找到 patch_size(即分辨率)。

推理

推理是指在训练完成后,对新数据进行模型评估的过程。有关如何使用 🤗 Transformers 进行推理的教程,请参阅 推理流水线 教程。

输入 IDs

输入 IDs 通常是传递给模型的唯一必需参数。它们是 token 的索引,是构成模型输入序列的 token 的数值表示。

每个分词器的工作方式不同,但底层机制是相同的。下面是一个使用 BERT 分词器的例子,它是一个 WordPiece 分词器。

>>> from transformers import BertTokenizer

>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")

>>> sequence = "A Titan RTX has 24GB of VRAM"

分词器负责将序列分割成可以在分词器词汇表中找到的 token。

>>> tokenized_sequence = tokenizer.tokenize(sequence)

token 可以是单词或子词。例如,这里的“VRAM”不在模型词汇表中,所以它被分割成了“V”、“RA”和“M”。为了表明这些 token 不是独立的单词,而是同一个单词的一部分,对“RA”和“M”添加了一个双哈希前缀。

>>> print(tokenized_sequence)
['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']

然后,这些 token 可以被转换成模型能够理解的 IDs。这可以通过将句子直接输入到分词器中来完成,分词器利用了 🤗 Tokenizers 的 Rust 实现来达到最佳性能。

>>> inputs = tokenizer(sequence)

分词器返回一个字典,其中包含其对应模型正常工作所需的所有参数。token 索引在 input_ids 键下。

>>> encoded_sequence = inputs["input_ids"]
>>> print(encoded_sequence)
[101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]

请注意,分词器会自动添加“特殊 token”(如果相关模型需要的话),这些特殊 ID 是模型有时会使用的。

如果我们解码之前的 IDs 序列,

>>> decoded_sequence = tokenizer.decode(encoded_sequence)

我们将看到

>>> print(decoded_sequence)
[CLS] A Titan RTX has 24GB of VRAM [SEP]

因为 BertModel 会以这种方式期望其输入。

L

标签

标签是一个可选参数,可以传递给模型,以便模型自己计算损失。这些标签应该是模型的预期预测:模型将使用标准的损失函数来计算其预测值与期望值(标签)之间的损失。

这些标签因模型头而异,例如:

  • 对于序列分类模型(BertForSequenceClassification),模型期望一个维度为 (batch_size) 的张量,其中批次中的每个值对应于整个序列的期望标签。
  • 对于 token 分类模型(BertForTokenClassification),模型期望一个维度为 (batch_size, seq_length) 的张量,其中每个值对应于每个单独 token 的期望标签。
  • 对于掩码语言模型(BertForMaskedLM),模型期望一个维度为 (batch_size, seq_length) 的张量,其中每个值对应于每个单独 token 的期望标签:标签是掩码 token 的 token ID,对于其余 token,值为被忽略(通常为 -100)。
  • 对于序列到序列任务(BartForConditionalGeneration, MBartForConditionalGeneration),模型期望一个维度为 (batch_size, tgt_seq_length) 的张量,其中每个值对应于每个输入序列的目标序列。在训练期间,BART 和 T5 都会在内部进行适当的 decoder_input_ids 和 decoder attention masks。通常不需要提供它们。这不适用于利用编码器-解码器框架的模型。
  • 对于图像分类模型(ViTForImageClassification),模型期望一个维度为 (batch_size) 的张量,其中批次中的每个值对应于每个图像的期望标签。
  • 对于语义分割模型(SegformerForSemanticSegmentation),模型期望一个维度为 (batch_size, height, width) 的张量,其中批次中的每个值对应于每个像素的期望标签。
  • 对于目标检测模型(DetrForObjectDetection),模型期望一个包含 class_labelsboxes 键的字典列表,其中批次中的每个值对应于每个图像的期望标签和边界框数量。
  • 对于自动语音识别模型(Wav2Vec2ForCTC),模型期望一个维度为 (batch_size, target_length) 的张量,其中每个值对应于每个 token 的期望标签。

每个模型的标签可能不同,因此请务必查阅每个模型的文档以获取有关其特定标签的更多信息!

基础模型(BertModel)不接受标签,因为它们是基础的 Transformer 模型,仅输出特征。

大型语言模型 (LLM)

一个通用术语,指在大量数据上训练过的 Transformer 语言模型(GPT-3、BLOOM、OPT)。这些模型通常也拥有大量的可学习参数(例如,GPT-3 有 1750 亿个)。

M

掩码语言模型 (MLM)

一种预训练任务,其中模型会看到文本的损坏版本(通常通过随机掩盖一些 token 来实现),并且需要预测原始文本。

多模态

结合文本和其他类型输入(例如图像)的任务。

N

自然语言生成 (NLG)

与生成文本相关的任务(例如,Write With Transformers,翻译)。

自然语言处理 (NLP)

一个泛指“处理文本”的通用说法。

自然语言理解 (NLU)

与理解文本内容相关的任务(例如,对整个文本或单个单词进行分类)。

P

流水线

在 🤗 Transformers 中,流水线 (pipeline) 是一个抽象概念,指的是一系列按特定顺序执行的步骤,用于预处理和转换数据,并从模型中返回预测结果。流水线中可能包含的示例阶段包括数据预处理、特征提取和归一化。

有关更多详细信息,请参阅 推理流水线

流水线并行 (PP)

一种并行技术,其中模型垂直(按层级)分割到多个 GPU 上,因此只有模型的一层或几层放在单个 GPU 上。每个 GPU 并行处理流水线的不同阶段,并处理一小部分批次。在此处 了解更多 关于流水线并行如何工作。

像素值

图像的数值表示张量,传递给模型。像素值的形状为 [batch_size, num_channels, height, width],由图像处理器生成。

池化

一种将矩阵缩小到更小矩阵的操作,通过取池化维度上的最大值或平均值来实现。池化层通常位于卷积层之间,用于下采样特征表示。

位置 IDs

与 RNN 不同,RNN 的每个 token 的位置都嵌入其中,而 Transformer 对每个 token 的位置是无感的。因此,位置 IDs (position_ids) 用于模型识别 token 列表中的每个 token 的位置。

它们是一个可选参数。如果模型未传递 position_ids,则 ID 将自动创建为绝对位置嵌入。

绝对位置嵌入的范围是 [0, config.max_position_embeddings - 1]。有些模型使用其他类型的位置嵌入,如正弦位置嵌入或相对位置嵌入。

预处理

将原始数据准备成机器学习模型可以轻松使用的格式的任务。例如,文本通常通过分词进行预处理。要更全面地了解其他输入类型的预处理,请查看 预处理 教程。

预训练模型

在某些数据上(例如,整个维基百科)进行过预训练的模型。预训练方法涉及自监督目标,可以是阅读文本并尝试预测下一个单词(参见 因果语言建模),或者掩盖一些单词并尝试预测它们(参见 掩码语言建模)。

语音和视觉模型有自己的预训练目标。例如,Wav2Vec2 是一个语音模型,在一个对比学习任务上进行了预训练,该任务要求模型从一组“假”语音表示中识别出“真”语音表示。另一方面,BEiT 是一个视觉模型,在一个掩码图像建模任务上进行了预训练,该任务会掩盖一些图像块,并要求模型预测这些被掩盖的块(类似于掩码语言建模目标)。

R

循环神经网络 (RNN)

一种使用循环层来处理文本的模型类型。

表示学习

机器学习的一个子领域,专注于学习原始数据的有意义的表示。表示学习技术的一些例子包括词嵌入、自编码器和生成对抗网络(GAN)。

S

采样率

每秒采样的次数(以赫兹为单位)(对音频信号进行采样)。采样率是对语音等连续信号进行离散化处理的结果。

自注意力

输入中的每个元素都会找出它们应该关注输入中的其他哪些元素。

自监督学习

一类机器学习技术,其中模型从无标签数据创建自己的学习目标。它与无监督学习监督学习不同,在于学习过程是受监督的,但并非直接由用户监督。

自监督学习的一个例子是掩码语言建模,其中模型输入句子并移除其中一部分标记,然后学习预测缺失的标记。

半监督学习

一类广泛的机器学习训练技术,它利用少量带标签数据和大量无标签数据来提高模型的准确性,这与监督学习无监督学习不同。

半监督学习方法的一个例子是“自训练”,其中模型在带标签数据上进行训练,然后用于对无标签数据进行预测。模型最自信地预测的无标签数据部分会被添加到带标签数据集中并用于重新训练模型。

序列到序列(Seq2Seq)

生成新序列的模型的输入,如翻译模型或摘要模型(如BartT5)。

分片 DDP

基础ZeRO概念的另一个名称,如各种其他ZeRO实现所使用的。

步幅

卷积池化中,步幅是指内核在矩阵上移动的距离。步幅为 1 表示内核一次移动一个像素,步幅为 2 表示内核一次移动两个像素。

监督学习

一种模型训练形式,直接使用带标签的数据来纠正和指导模型性能。数据被馈送到正在训练的模型中,并将其预测与已知标签进行比较。模型根据其预测的错误程度更新其权重,并重复该过程以优化模型性能。

T

张量并行(TP)

在多 GPU 上进行训练的并行技术,其中每个张量被分割成多个块,因此,而不是让整个张量驻留在单个 GPU 上,张量的每个分片驻留在其指定的 GPU 上。分片在不同的 GPU 上分别并行处理,并在处理步骤结束时进行同步。这就是有时所说的水平并行,因为分割发生在水平级别。在此处了解更多关于张量并行信息。

标记

句子的一部分,通常是单词,但也可以是子词(非常用词通常被分割成子词)或标点符号。

标记类型 ID

一些模型的目的是对句子对进行分类或进行问答。

这些需要将两个不同的序列连接到单个“input_ids”条目中,这通常借助特殊标记来完成,例如分类器([CLS])和分隔符([SEP])标记。例如,BERT 模型构建其两个序列输入如下:

>>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]

我们可以使用我们的分词器通过将两个序列作为两个参数(而不是像以前那样作为列表)传递给tokenizer来自动生成此类句子,如下所示:

>>> from transformers import BertTokenizer

>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence_a = "HuggingFace is based in NYC"
>>> sequence_b = "Where is HuggingFace based?"

>>> encoded_dict = tokenizer(sequence_a, sequence_b)
>>> decoded = tokenizer.decode(encoded_dict["input_ids"])

这将返回:

>>> print(decoded)
[CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP]

这足以让某些模型理解一个序列在哪里结束,另一个序列在哪里开始。然而,其他模型,如 BERT,也使用标记类型 ID(也称为段 ID)。它们表示为识别模型中两种序列类型的二进制掩码。

分词器将此掩码作为“token_type_ids”条目返回:

>>> encoded_dict["token_type_ids"]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]

第一个序列,“上下文”,用于问题,其所有标记都由0表示,而第二个序列,“问题”则由所有标记由1表示。

一些模型,如 XLNetModel 使用额外的标记2表示。

迁移学习

一种涉及采用预训练模型并根据您的任务特定数据集对其进行调整的技术。与从头开始训练模型相比,您可以利用现有模型获得的知识作为起点。这加速了学习过程并减少了所需的训练数据量。

Transformer

基于自注意力的深度学习模型架构。

U

无监督学习

一种模型训练形式,其中提供给模型的数据没有标签。无监督学习技术利用数据的统计信息来查找有用的模式来处理当前任务。

Z

零冗余优化器(ZeRO)

并行技术,它执行类似于张量并行的张量分片,不同之处在于整个张量在进行前向或后向计算时会被重新组合,因此模型不需要修改。此方法还支持各种卸载技术来弥补有限的 GPU 内存。在此处了解更多关于 ZeRO 信息。

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.