并获得增强的文档体验
开始使用
词汇表
本词汇表定义了通用的机器学习和 🤗 Transformers 术语,旨在帮助您更好地理解文档。
A
attention mask (注意力掩码)
注意力掩码是一个可选参数,用于将序列进行批处理(batching)。
该参数向模型指示哪些标记(tokens)应该被关注,哪些不应该被关注。
例如,考虑以下两个序列:
>>> 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)因此,我们无法直接将它们放在同一个张量中。第一个序列需要填充(pad)到与第二个序列相同的长度,或者第二个序列需要截断(truncate)到第一个序列的长度。
在前一种情况下,ID 列表将通过填充索引进行扩展。我们可以将列表传递给分词器(tokenizer),并像这样要求它进行填充:
>>> 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 中转换为张量。注意力掩码是一个二进制张量,指示填充索引的位置,以便模型不会对其进行关注。对于 BertTokenizer,1 表示应该关注的值,而 0 表示填充值。此注意力掩码位于分词器返回的字典中,键为“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 (自动编码模型)
autoregressive models (自回归模型)
B
backbone (主干网络)
主干网络是输出原始隐藏状态或特征的网络(嵌入层和各层)。它通常连接到一个 head(模型头),后者接受这些特征作为输入进行预测。例如,ViTModel 是一个不带特定 head 的主干网络。其他模型也可以将 ViTModel 用作主干网络,例如 DPT。
C
causal language modeling (因果语言建模)
一种预训练任务,模型按顺序读取文本并必须预测下一个单词。这通常通过读取整个句子并在模型内部使用掩码来隐藏特定时间步之后的未来标记来实现。
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 (解码器输入 ID)
此输入特定于编码器-解码器模型,包含将馈送到解码器的输入 ID。这些输入应用于序列到序列的任务(例如翻译或摘要),并且通常以针对每个模型特定的方式构建。
大多数编码器-解码器模型(BART、T5)会根据 labels 自行创建它们的 decoder_input_ids。在这些模型中,传递 labels 是处理训练的首选方式。
请查阅每个模型的文档,了解它们如何处理序列到序列训练的这些输入 ID。
decoder models (解码器模型)
解码器模型也被称为自回归模型,涉及一种预训练任务(称为因果语言建模),其中模型按顺序读取文本并必须预测下一个单词。这通常通过读取整个句子并使用掩码来隐藏特定时间步之后的未来标记来实现。
deep learning (DL) (深度学习)
使用具有多个层的神经网络的机器学习算法。
E
encoder models (编码器模型)
编码器模型(也称为自动编码模型)获取输入(如文本或图像)并将其转换为称为嵌入(embedding)的压缩数值表示。通常,编码器模型使用诸如 掩码语言建模 等技术进行预训练,这些技术会掩盖部分输入序列,并强制模型创建更有意义的表示。
F
feature extraction (特征提取)
选择原始数据并将其转换为更具信息量、对机器学习算法更有用的特征集的过程。特征提取的一些例子包括将原始文本转换为词嵌入(word embeddings),以及从图像/视频数据中提取重要特征(如边缘或形状)。
feed forward chunking (前馈分块)
在 Transformers 的每个残差注意力块中,自注意力层后通常跟着 2 个前馈层。前馈层的中间嵌入大小通常大于模型的隐藏大小(例如,对于 google-bert/bert-base-uncased)。
对于大小为 [batch_size, sequence_length] 的输入,存储中间前馈嵌入 [batch_size, sequence_length, config.intermediate_size] 所需的内存可能占内存使用量的很大一部分。《Reformer: The Efficient Transformer》的作者注意到,由于计算独立于 sequence_length 维度,因此在数学上等同于分别计算两个前馈层的输出嵌入 [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,则不进行前馈分块。
finetuned models (微调模型)
微调是迁移学习的一种形式,它涉及获取一个预训练模型,冻结其权重,并将输出层替换为新添加的 模型头(model head)。模型头在您的目标数据集上进行训练。
有关更多详细信息,请参阅《微调预训练模型》教程,并学习如何使用 🤗 Transformers 微调模型。
H
head (模型头)
模型头是指神经网络的最后一层,它接受原始隐藏状态并将它们投影到不同的维度。每个任务都有一个不同的模型头。例如:
- GPT2ForSequenceClassification 是一个序列分类头(线性层),位于基础 GPT2Model 之上。
- ViTForImageClassification 是一个图像分类头(位于
CLS标记的最终隐藏状态之上的线性层),位于基础 ViTModel 之上。 - Wav2Vec2ForCTC 是一个带有 CTC 的语言建模头,位于基础 Wav2Vec2Model 之上。
I
image patch (图像块)
基于视觉的 Transformer 模型将图像拆分为较小的块,这些块被线性嵌入,然后作为序列传递给模型。您可以在模型的配置中找到模型的 patch_size(即分辨率)。
inference (推理)
推理是在训练完成后在新数据上评估模型的过程。请参阅《推理流水线》教程,了解如何使用 🤗 Transformers 执行推理。
input IDs (输入 ID)
输入 ID 通常是作为输入传递给模型的唯一必需参数。它们是标记索引(token indices),即组成序列的标记的数值表示,将用作模型的输入。
每个分词器的工作方式不同,但底层机制相同。以下是使用 BERT 分词器的示例,它是一个 WordPiece 分词器:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence = "A Titan RTX has 24GB of VRAM"分词器负责将序列拆分为分词器词汇表中可用的标记。
>>> tokenized_sequence = tokenizer.tokenize(sequence)标记要么是单词,要么是子词。例如,这里“VRAM”不在模型词汇表中,因此它被拆分为“V”、“RA”和“M”。为了表明这些标记不是独立的单词,而是同一个单词的组成部分,为“RA”和“M”添加了双哈希前缀。
>>> print(tokenized_sequence)
['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']然后可以将这些标记转换为模型可理解的 ID。这可以通过将句子直接馈送到分词器来完成,分词器利用 🤗 Tokenizers 的 Rust 实现以获得最佳性能。
>>> inputs = tokenizer(sequence)分词器返回一个包含其对应模型正常工作所需的所有参数的字典。标记索引位于键 input_ids 下。
>>> encoded_sequence = inputs["input_ids"]
>>> print(encoded_sequence)
[101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]请注意,分词器会自动添加“特殊标记”(如果关联的模型依赖它们),这些是模型有时使用的特殊 ID。
如果我们对先前的 ID 序列进行解码,
>>> decoded_sequence = tokenizer.decode(encoded_sequence)我们将看到:
>>> print(decoded_sequence)
[CLS] A Titan RTX has 24GB of VRAM [SEP]因为这就是 BertModel 期望其输入的方式。
L
labels (标签)
标签是一个可选参数,可以传递给模型,以便模型自行计算损失。这些标签应该是模型的预期预测:模型将使用标准损失来计算其预测与预期值(标签)之间的损失。
根据模型头,这些标签会有所不同。例如:
- 对于序列分类模型(BertForSequenceClassification),模型期望一个维度为
(batch_size)的张量,其中批处理的每个值对应于整个序列的预期标签。 - 对于标记分类模型(BertForTokenClassification),模型期望一个维度为
(batch_size, seq_length)的张量,其中每个值对应于每个单独标记的预期标签。 - 对于掩码语言建模(BertForMaskedLM),模型期望一个维度为
(batch_size, seq_length)的张量,其中每个值对应于每个单独标记的预期标签:标签是掩码标记的标记 ID,其余部分为忽略值(通常为 -100)。 - 对于序列到序列任务(BartForConditionalGeneration,MBartForConditionalGeneration),模型期望一个维度为
(batch_size, tgt_seq_length)的张量,其中每个值对应于与每个输入序列相关联的目标序列。在训练期间,BART 和 T5 都会在内部制作适当的decoder_input_ids和解码器注意力掩码。它们通常不需要提供。这不适用于利用编码器-解码器框架的模型。 - 对于图像分类模型(ViTForImageClassification),模型期望一个维度为
(batch_size)的张量,其中批处理的每个值对应于每个单独图像的预期标签。 - 对于语义分割模型(SegformerForSemanticSegmentation),模型期望一个维度为
(batch_size, height, width)的张量,其中批处理的每个值对应于每个单独像素的预期标签。 - 对于目标检测模型(DetrForObjectDetection),模型期望一个包含
class_labels和boxes键的字典列表,其中批处理的每个值对应于每个单独图像的预期标签和边界框数量。 - 对于自动语音识别模型(Wav2Vec2ForCTC),模型期望一个维度为
(batch_size, target_length)的张量,其中每个值对应于每个单独标记的预期标签。
每个模型的标签可能不同,因此请务必始终查看每个模型的文档,以获取有关其特定标签的更多信息!
基础模型(BertModel)不接受标签,因为它们是基础 Transformer 模型,仅输出特征。
large language models (LLM) (大型语言模型)
一个通用术语,指代在海量数据上训练的 Transformer 语言模型(GPT-3、BLOOM、OPT)。这些模型通常还具有大量的可学习参数(例如 GPT-3 为 1750 亿)。
M
masked language modeling (MLM) (掩码语言建模)
一种预训练任务,模型看到的是被破坏的文本版本(通常通过随机掩盖一些标记来实现),并必须预测原始文本。
multimodal (多模态)
结合文本与其他输入类型(例如图像)的任务。
N
Natural language generation (NLG) (自然语言生成)
所有与生成文本相关的任务(例如,Write With Transformers,翻译)。
Natural language processing (NLP) (自然语言处理)
“处理文本”的一种通俗说法。
Natural language understanding (NLU) (自然语言理解)
所有与理解文本内容相关的任务(例如对整个文本、单个单词进行分类)。
P
pipeline (流水线)
🤗 Transformers 中的流水线是一种抽象,指代一系列按特定顺序执行的步骤,用于预处理和转换数据,并从模型返回预测结果。流水线中包含的一些示例阶段可能是数据预处理、特征提取和归一化。
有关更多详细信息,请参阅《推理流水线》。
PipelineParallel (PP) (流水线并行)
一种并行技术,其中模型在多个 GPU 上垂直(层级)拆分,因此模型的一层或几层放置在单个 GPU 上。每个 GPU 并行处理流水线的不同阶段,并处理批次的一小部分。点击此处了解更多关于 PipelineParallel 如何工作的信息。
pixel values (像素值)
传递给模型的图像数值表示的张量。像素值的形状为 [batch_size, num_channels, height, width],由图像处理器生成。
pooling (池化)
通过获取池化维度中的最大值或平均值,将矩阵减少为较小矩阵的操作。池化层通常位于卷积层之间,用于对特征表示进行下采样。
position IDs (位置 ID)
与具有嵌入在其中的每个标记位置的 RNN 不同,Transformer 不知道每个标记的位置。因此,模型使用位置 ID(position_ids)来识别标记在标记列表中的位置。
它们是一个可选参数。如果没有将 position_ids 传递给模型,这些 ID 会自动创建为绝对位置嵌入。
绝对位置嵌入选择在 [0, config.max_position_embeddings - 1] 范围内。一些模型使用其他类型的位置嵌入,例如正弦位置嵌入或相对位置嵌入。
preprocessing (预处理)
将原始数据准备为机器学习模型可轻松消费的格式的任务。例如,文本通常通过分词进行预处理。要更好地了解其他输入类型的预处理,请查看《预处理》教程。
pretrained model (预训练模型)
已在某些数据(例如整个维基百科)上进行预训练的模型。预训练方法涉及自我监督目标,这可能是阅读文本并尝试预测下一个单词(请参阅 因果语言建模),或掩盖一些单词并尝试预测它们(请参阅 掩码语言建模)。
语音和视觉模型有其各自的预训练目标。例如,Wav2Vec2 是一种在对比任务上预训练的语音模型,该任务要求模型从一组“虚假”语音表示中识别“真实”语音表示。另一方面,BEiT 是一种在掩码图像建模任务上预训练的视觉模型,该任务掩盖了一些图像块,并要求模型预测掩盖的块(类似于掩码语言建模目标)。
R
recurrent neural network (RNN) (循环神经网络)
一种使用循环遍历层来处理文本的模型类型。
representation learning (表示学习)
机器学习的一个子领域,专注于学习原始数据的有意义表示。表示学习技术的一些例子包括词嵌入、自动编码器和生成对抗网络(GAN)。
S
sampling rate (采样率)
以赫兹为单位测量每秒采集的样本(音频信号)数量。采样率是将连续信号(如语音)离散化的结果。
self-attention (自注意力)
输入的每个元素都会找出它应该关注的其他输入元素。
self-supervised learning (自监督学习)
机器学习技术的一个类别,其中模型从无标签数据中创建自己的学习目标。它与 无监督学习 和 监督学习 不同,因为学习过程是受监督的,但不是由用户明确监督的。
自监督学习的一个例子是 掩码语言建模,其中模型被输入删除了部分标记的句子,并学习预测缺失的标记。
semi-supervised learning (半监督学习)
机器学习训练技术的一个广泛类别,与 监督学习 和 无监督学习 不同,它利用少量有标签数据和大量无标签数据来提高模型的准确性。
半监督学习方法的一个例子是“自我训练”,其中模型在有标签数据上进行训练,然后用于对无标签数据进行预测。模型以最高置信度预测的无标签数据部分会被添加到有标签数据集中,并用于重新训练模型。
sequence-to-sequence (seq2seq) (序列到序列)
从输入生成新序列的模型,如翻译模型或摘要模型(例如 Bart 或 T5)。
Sharded DDP (分片数据并行)
正如各种其他 ZeRO 实现所使用的那样,它是基础 ZeRO 概念的另一个名称。
stride (步幅)
在 卷积 (convolution) 或 池化 (pooling) 中,步长 (stride) 指的是核在矩阵上移动的距离。步长为 1 表示核一次移动一个像素,步长为 2 表示核一次移动两个像素。
监督学习 (supervised learning)
一种使用标记数据直接修正和指导模型性能的模型训练形式。数据被输入到正在训练的模型中,将其预测结果与已知标签进行比较。模型根据预测错误程度更新其权重,并重复此过程以优化模型性能。
T
张量并行 (Tensor Parallelism, TP)
一种用于在多个 GPU 上进行训练的并行技术,其中每个张量被拆分为多个块,因此张量无需完全驻留在单个 GPU 上,而是每个张量分片 (shard) 驻留在指定的 GPU 上。分片在不同的 GPU 上分别并行处理,并在处理步骤结束时同步结果。这有时被称为水平并行,因为拆分发生在水平级别。点击此处了解更多关于张量并行的信息。
词元 (token)
句子的组成部分,通常是一个单词,也可以是子词(不常见的单词通常被拆分为子词)或标点符号。
词元类型 ID (token type IDs)
某些模型旨在对句子对进行分类或回答问题。
这些模型需要将两个不同的序列合并到一个“input_ids”条目中,这通常借助特殊词元(例如分类词元 [CLS] 和分隔词元 [SEP])来实现。例如,BERT 模型构建其双序列输入的方式如下:
>>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]我们可以使用分词器 (tokenizer) 通过将两个序列作为两个参数(而不是像之前那样作为列表)传递给 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 表示的额外词元。
迁移学习 (transfer learning)
一种涉及获取预训练模型并将其适应于特定任务数据集的技术。与其从头开始训练模型,不如利用现有模型获得的知识作为起点。这加快了学习过程并减少了所需的训练数据量。
Transformer
基于自注意力机制的深度学习模型架构。
U
无监督学习 (unsupervised learning)
一种模型训练形式,其中提供给模型的数据未加标记。无监督学习技术利用数据分布的统计信息来寻找对当前任务有用的模式。
Z
零冗余优化器 (Zero Redundancy Optimizer, ZeRO)
一种并行技术,它执行张量分片,这与张量并行 (TensorParallel) 有些类似,不同之处在于整个张量会在前向或后向计算时及时重构,因此无需修改模型。此方法还支持多种卸载技术,以补偿 GPU 内存不足的问题。点击此处了解更多关于 ZeRO 的信息。
在 GitHub 上更新