深入理解 Hugging Face Transformers 术语表:从 Attention Mask 到 Transformer 的核心概念详解
深入理解 Hugging Face Transformers 术语表从 Attention Mask 到 Transformer 的核心概念详解【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本术语表是理解 Transformers 代码库与文档的基础词典覆盖了机器学习与 Transformers 框架中最常出现的术语从attention mask、input IDs、token type IDs等模型输入参数到encoder、decoder、head、backbone等架构组件再到MLM、CTC、pipeline、transfer learning等训练与推理范式。读完本文你将能够准确理解tokenizer返回的每一个字典键的含义、各类模型对labels的形状要求以及feed forward chunking等内存优化技巧的底层原理并能在阅读 官方文档 与模型源码时快速定位概念对应的代码位置。Aattention mask注意力掩码attention mask是在对序列进行批处理batching时使用的可选参数用于告诉模型应该关注哪些 token、忽略哪些 token。假设有两句话需要放入同一个 batch 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)因此无法直接把它们放进同一个张量要么把短序列填充padding到长序列的长度要么把长序列截断truncation到短序列的长度。若采用填充方式ID 列表会被扩展若干填充索引padding index可以让 tokenizer 直接完成填充 padded_sequences tokenizer([sequence_a, sequence_b], paddingTrue)可以看到第一条序列末尾被补上了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]]attention mask就是一个二进制张量标记出哪些位置是填充索引不应被关注。在BertTokenizer中1表示该值需要被关注0表示填充值。tokenizer 返回的字典中它以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]]从源码看attention_mask的生成逻辑集中在 tokenization_utils_base.py 的_pad/create_attention_mask相关实现中框架会根据padding策略自动为填充位置写入0该键随后被模型前向传播直接消费。autoencoding models自编码模型参见 encoder models 与 masked language modeling (MLM)。autoregressive models自回归模型参见 causal language modeling 与 decoder models。Bbackbone骨干网络backbone是输出原始隐状态hidden states或特征features的网络部分由嵌入层与层组成通常连接到一个 head 之上head 以这些特征为输入并做出预测。例如ViTModel就是不带特定 head 的骨干网络其他模型可以把它当作 backbone 使用例如 DPT其DPTModel定义见 modeling_dpt.py。骨干网络 任务头的拆分正是 Transformers 框架中AutoModel与AutoModelForXxx两类入口区分的根源。Ccausal language modeling因果语言建模一种预训练任务模型按顺序阅读文本并预测下一个单词。通常模型会读完整句话但在内部使用掩码mask在特定时间步隐藏未来 token从而保证只能利用过去信息——这也是自回归autoregressive生成的机制基础。channel通道彩色图像由红、绿、蓝RGB三个通道的值组合而成灰度图像只有一个通道。在 Transformers 中通道既可以是图像张量的第一维也可以是最后一维[n_channels, height, width]或[height, width, n_channels]。前者是 PyTorch 常用的CHW布局后者是部分图像处理器采用的HWC布局图像预处理工具 中提供了两者间的转换函数。connectionist temporal classification (CTC)联结时序分类一种无需知道输入与输出精确对齐方式即可训练模型的算法。CTC 会针对给定输入计算所有可能输出的分布再从中选出概率最高的输出。由于说话人语速等差异语音往往无法与转录文本精确对齐因此 CTC 在语音识别任务中被广泛使用。在代码库中Wav2Vec2ForCTC就是典型的 CTC 模型头实现。convolution卷积一种神经网络层类型输入矩阵与一个较小的矩阵核 / kernel或滤波器 / filter逐元素相乘结果求和后写入新的矩阵。该操作对输入矩阵的不同片段重复进行称为卷积操作。卷积神经网络CNN在计算机视觉中被普遍使用。Ddecoder input IDs解码器输入 ID这是编码器-解码器encoder-decoder模型特有的输入包含喂给解码器的输入 ID用于翻译、摘要等序列到序列seq2seq任务通常以每个模型特有的方式构建。大多数编码器-解码器模型BART、T5会从labels自行生成decoder_input_ids。对这类模型直接传入labels就是处理训练的最佳方式。这一点可以在 modeling_bart.py 中看到当labels非空且未提供decoder_input_ids时框架内部调用shift_tokens_right从labels移位生成解码器输入并自动关闭use_cache。具体到每个模型如何处理这些输入 ID请查阅对应模型文档。decoder models解码器模型又称自回归模型autoregressive models参与顺序阅读文本、预测下一个词的预训练任务即因果语言建模通常做法是模型读完整句话用掩码在特定时间步隐藏未来 token。deep learning (DL)深度学习使用神经网络具有多个层的机器学习算法。Eencoder models编码器模型又称自编码模型autoencoding models编码器模型把输入文本或图像等转换为简化后的数值表示即嵌入embeddings。编码器模型常通过 masked language modeling 等技术预训练遮住输入序列的一部分迫使模型学到有意义的表示。Ffeature extraction特征提取把原始数据挑选、转换为对机器学习算法更有信息量、更有用的特征集的过程。例如把原始文本转为词嵌入word embeddings、从图像/视频数据中提取边缘、形状等关键特征。feed forward chunking前馈分块在 Transformer 的每个残差注意力块中自注意力层之后通常跟着两个前馈feed forward层。前馈层的中间嵌入尺寸往往大于模型隐藏尺寸例如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]在数学上完全等价。这带来的是增加计算时间、降低内存占用的权衡而结果不变。对于使用apply_chunking_to_forward函数的模型chunk_size定义了并行计算的输出嵌入数量即内存与时间复杂度的权衡点当chunk_size设为0时不做前馈分块。从 pytorch_utils.py 的源码注释可以看到该函数把input_tensors沿chunk_dim维度切成chunk_size大小的子张量分别独立执行forward_fn以节省显存只要forward_fn在chunk_dim维度上相互独立结果就与直接前向完全一致。finetuned models微调模型微调是迁移学习的一种形式取一个预训练模型固定其权重并用新添加的 model head 替换输出层然后在目标任务数据集上训练该 head。想学习用 Transformers 微调模型可参考 Fine-tune a pretrained model 教程。Hhead模型头模型头指神经网络的最后几层接收原始隐状态并投射到不同维度。不同任务有不同模型头例如GPT2ForSequenceClassification在基础 [GPT2Model] 之上叠加的序列分类头线性层ViTForImageClassification在 [ViTModel] 的CLStoken 最终隐状态之上叠加的图像分类头线性层Wav2Vec2ForCTC在基础 [Wav2Vec2Model] 之上叠加、配合 CTC 的语言建模头。Iimage patch图像块基于视觉的 Transformer 模型会把图像切分成更小的块patch线性嵌入后作为序列传给模型。inference推理推理是训练完成后在新数据上评估模型的过程。如何在 Transformers 中做推理可参考 推论的 pipeline 教程。input IDs输入 IDinput_ids是传递给模型的最常见参数它们是 token 的索引是构成模型输入序列的 token 数值表示。每个 tokenizer 的工作方式不同但基本机制一致。下面以 BERT tokenizer一种 WordPiece tokenizer为例 from transformers import BertTokenizer tokenizer BertTokenizer.from_pretrained(google-bert/bert-base-cased) sequence A Titan RTX has 24GB of VRAMtokenizer 会把序列切成词表中可用的 token tokenized_sequence tokenizer.tokenize(sequence)token 是单词或子词subword。例如这里的VRAM不在模型词表中因此被切为V、RA、M为表明这些 token 属于同一个词而不是独立单词RA和M被加上了双井号前缀 print(tokenized_sequence) [A, Titan, R, ##T, ##X, has, 24, ##GB, of, V, ##RA, ##M]把这些 token 转成模型可理解的 ID可直接把句子交给 tokenizer其底层为提升性能利用了 Tokenizers 的 Rust 实现 inputs tokenizer(sequence)tokenizer 返回一个字典包含对应模型正常工作所需的全部参数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]注意当关联模型需要时tokenizer 会自动添加特殊 tokenspecial tokens。对上面的 ID 序列做解码 decoded_sequence tokenizer.decode(encoded_sequence) print(decoded_sequence) [CLS] A Titan RTX has 24GB of VRAM [SEP]这正是BertModel期望的输入形式[CLS]与[SEP]分别对应 ID101与102。LLabels标签labels是可选参数用于让模型计算损失。标签应是模型预测的期望值模型通过常规损失函数比较预测与标签。不同模型头要求的标签形状不同例如序列分类BertForSequenceClassification期望形状(batch_size)batch 中每个值对应整条序列的预测标签token 分类BertForTokenClassification期望形状(batch_size, seq_length)每个值对应单个 token 的预测标签掩码语言建模BertForMaskedLM期望形状(batch_size, seq_length)每个值对应单个 token 的预测标签此处标签是掩码 token 的 token ID非掩码位置通常设为-100该值会被CrossEntropyLoss忽略从而只对掩码位置计算损失序列到序列任务BartForConditionalGeneration、MBartForConditionalGeneration期望形状(batch_size, tgt_seq_length)每个值对应与各输入序列关联的目标序列。训练时 BART 与 T5 会在内部生成合适的decoder_input_ids与解码器 attention mask通常无需自行提供但不适用于不使用编码器-解码器框架的模型图像分类ViTForImageClassification期望形状(batch_size)每个值对应单张图像的预测标签语义分割SegformerForSemanticSegmentation期望形状(batch_size, height, width)每个值对应单个像素的预测标签目标检测DetrForObjectDetection期望一个字典列表含class_labels与boxes两个键对应每张图像的预测标签与边界框数量自动语音识别Wav2Vec2ForCTC期望形状(batch_size, target_length)每个值对应单个 token 的预测标签。[!TIP] 每个模型的标签可能不同使用前务必查阅对应模型文档确认其标签的具体要求。基础模型如BertModel不接受labels——它们是纯骨干 Transformer只输出特征。large language models (LLM)大语言模型指在海量数据上训练的 Transformer 语言模型如 GPT-3、BLOOM、OPT通常拥有极多可学习参数例如 GPT-3 有 1750 亿个。Mmasked language modeling (MLM)掩码语言建模一种预训练任务模型观察被破坏的文本通常随机掩掉部分 token并需要预测出原始文本。multimodal多模态结合文本与另一种输入如图像的任务。NNatural language generation (NLG)自然语言生成与生成文本相关的所有任务如 Transformers 中的写作、翻译等。Natural language processing (NLP)自然语言处理对如何让机器处理文本这一领域的统称。Natural language understanding (NLU)自然语言理解与理解文本内容相关的所有任务如整段文本分类、单个词分类等。Ppipeline流水线 Transformers 中的 pipeline 是一种抽象按特定顺序执行数据预处理与变换、处理数据、并从模型返回预测的一系列步骤。流水线中的典型阶段包括数据预处理、特征提取、归一化等。使用细节可参考 推理 pipeline 教程 目录。pixel values像素值传给模型的图像数值表示张量形状为[batch_size, n_channels, height, width]由图像处理器image processor生成。pooling池化把矩阵缩小为更小矩阵的操作常见做法是取池化维度上的最大值或平均值。池化层通常出现在卷积层之间用于对特征表示做下采样。position IDs位置 ID与 RNN位置通过循环隐式编码不同Transformer 本身不知道每个 token 的位置因此需要position_ids来标识 token 位置。这是可选参数若不传模型会自动生成绝对位置嵌入。绝对位置嵌入从[0, config.max_position_embeddings - 1]范围选取部分模型会使用正弦位置嵌入sinusoidal或相对位置嵌入等其他类型。框架中位置嵌入的具体实现可参考 modeling_rope_utils.pyRoPE 相对位置与各模型配置的max_position_embeddings字段。preprocessing预处理把原始数据整理成机器学习模型易于处理格式的任务。例如文本通常通过 tokenization 预处理。其他输入类型的预处理方式可参考 Preprocess、feature_extraction_utils.py 与 video_processing_utils.py。pretrained model预训练模型在某种数据如整个 Wikipedia上预先训练好的模型。预训练方法包含自监督目标阅读文本并预测下一个词见 causal language modeling或掩掉部分词并预测见 masked language modeling。语音与视觉模型有各自的预训练目标。例如 Wav2Vec2 是语音模型通过对比任务预训练——模型需要从一组伪语音表示中识别出真实的语音表示BEiT 是视觉模型通过掩掉部分图像块并让模型预测被掩块类似 MLM 的目标来预训练。Rrecurrent neural network (RNN)循环神经网络一种通过循环层来处理文本的模型类型。representation learning表示学习机器学习中学习原始数据有意义表示的子领域相关技术包括词嵌入word embeddings、自编码器autoencoders、生成对抗网络GANs等。Ssampling rate采样率每秒采集的样本数如音频信号单位为赫兹Hz。采样率是连续信号如语音离散化的结果。self-attention自注意力输入的每个元素自行判断应该关注其他哪些元素。self-supervised learning自监督学习模型从无标签数据中自行构造学习目标的一类机器学习技术。它与无监督学习、监督学习不同区别在于学习过程并不由用户显式监督。自监督学习的一个例子是 masked language modeling模型看到部分 token 被删去的句子学习预测缺失 token。semi-supervised learning半监督学习结合少量有标签数据与大量无标签数据来提升模型精度的一类广泛训练技术。与监督学习、无监督学习不同半监督学习的一种做法是自训练self-training先用有标签数据训练模型再对无标签数据做预测模型最有信心的预测被加入有标签数据集用于重新训练模型。sequence-to-sequence (seq2seq)序列到序列从输入生成新序列的模型例如翻译模型与摘要模型如 Bart、T5。stride步长在卷积或池化中stride 指核kernel在矩阵上移动的距离。stride 为 1 时核每次移动 1 个像素stride 为 2 时每次移动 2 个像素。supervised learning监督学习一种模型训练方式直接使用有标签数据指导模型、修正其表现。数据喂给正在训练的模型其预测与已知标签比较模型根据预测的错误程度更新权重这一过程反复进行以优化模型性能。Ttoken词元句子的一部分通常是单词但也可以是子词不常见的词常被拆分为子词或标点符号。token Type IDstoken 类型 ID部分模型面向句子对分类、问答等任务需要把两条不同的序列合并进同一个input_ids条目通常借助[CLS]、[SEP]等特殊 token 完成。例如 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 等模型还使用 token 类型 ID又称 segment IDs以二进制掩码的形式标识模型中的两条序列。tokenizer 通过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]第一条序列即作为上下文的那条的所有 token 用0表示第二条序列对应问题的所有 token 用1表示。部分模型如XLNetModel还会用2表示额外的 token。该键的生成逻辑同样位于 tokenization_utils_base.py框架会根据是否传入第二个序列自动决定是否生成。transfer learning迁移学习取预训练模型并使其适配任务特定数据集的技术。与从零训练模型不同迁移学习以现有模型的知识为起点加速学习过程并减少所需训练数据量。transformerTransformer基于自注意力的深度学习模型架构。Uunsupervised learning无监督学习提供给模型的数据没有标签的训练形式。无监督学习技术利用数据分布的统计信息找出对任务有用的模式。延伸阅读本术语表对应的英文原版位于 docs/source/en/glossary.md各术语对应的代码入口可分别参考 tokenization_utils_base.py输入 ID、attention mask、token type IDs 的生成、modeling_utils.py模型基类与前向接口以及 pytorch_utils.pyapply_chunking_to_forward分块实现。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考