
Transformers 中的 BigBird面向超长序列的稀疏注意力模型完全指南【免费下载链接】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导读BigBird 是 Hugging Face Transformers 中专门为超长序列设计的 Transformer 模型将标准 BERT 的 512 token 上下文一举扩展到 4096 token核心武器是论文《Big Bird: Transformers for Longer Sequences》提出的块稀疏注意力block sparse attention。本文以官方文档docs/source/ja/model_doc/big_bird.md为主线结合仓库内 configuration_big_bird.py 与 modeling_big_bird.py 的源码实现完整讲解 BigBird 的注意力机制、使用注意事项、快速上手代码、全部模型家族与配置参数帮助你在长文档问答、摘要、基因组学等任务中直接落地使用。BigBird 是什么从 O(n²) 到 O(n) 的注意力革命传统 Transformer如 BERT的瓶颈在于全注意力full attention对序列长度呈二次方依赖——注意力矩阵的大小随序列长度平方级增长内存与算力都难以承受因此 BERT 的输入长度通常被限制在 512。BigBird 正是为了解决这一问题而提出的模型它用稀疏注意力sparse attention把这种二次依赖降到线性从而在同等硬件条件下处理此前 8 倍长度的序列。BigBird 的稀疏注意力并非单一机制而是三类注意力模式的组合局部注意力window/sliding attention每个 token 只关注其邻近的局部窗口捕捉局部上下文随机注意力random attention每个 token 额外关注若干随机选取的 token保证全局信息可以间接传播全局注意力global attention序列中少数被选为全局 token的位置如[CLS]关注序列中的全部 token同时被全部 token 关注。在 modeling_big_bird.py 的BigBirdBlockSparseAttention.bigbird_block_sparse_attention实现注释中可以看到这套组合的精确配置源码 L319-L334ITC 模式全局 token 为2 x block_size窗口 token 为3 x block_size随机 token 为num_rand_blocks x block_size窗口大小固定为 3 个 block只能通过修改block_size来间接调整全局块数量固定为 2 个 block同样只能由block_size控制。论文理论分析表明同时施加稀疏、全局与随机注意力可以保持全注意力模型在序列函数通用逼近universal approximation和图灵完备性上的性质同时大幅提升长序列下的计算效率。正因能处理更长上下文BigBird 在**问答question answering与摘要summarization等任务上相比 BERT / RoBERTa 有显著提升论文还提出了在基因组学数据genomics**上的新应用。官方使用注意事项务必逐条遵守原文档docs/source/ja/model_doc/big_bird.md中给出了若干关键使用提示这些约束直接对应源码中的硬性检查请在使用前逐条确认两种注意力实现短序列用全注意力BigBird 提供original_full原始全注意力O(n²)与block_sparse块稀疏注意力O(n)两种实现。当输入序列长度小于 1024时稀疏模式收益有限官方推荐使用original_full。当前实现采用 3 个块的窗口大小与 2 个全局块这是硬编码的注意力拓扑见上文源码注释。序列长度必须能被 block size 整除create_masks_for_block_sparse_attn会直接抛出ValueError: Sequence length must be multiple of block size...modeling_big_bird.py L1676-L1682。不过模型在forward内部会调用_pad_to_block_size自动将输入补齐到 block size 的整数倍推理结束后再裁剪回原始长度L1591-L1606、L1664-L1667因此日常使用中你通常无需手动处理但应了解这一机制。目前仅支持 ITCInput-Token-Copy实现ETCExtended-Token-Copy尚未支持源码注释明确标注 Currently, ETC is not supported。不支持num_random_blocks 0随机注意力块数必须大于 0。使用绝对位置嵌入建议右侧 padding由于 BigBird 使用绝对位置编码把 padding 放在序列右侧而非左侧更为合适。序列长度存在自动降级阈值源码 L1574-L1589 显示当seq_length (5 2 * num_random_blocks) * block_size时默认配置下即 704模型会自动打印警告并把attention_type从block_sparse切换为original_full。这意味着过短的输入不会触发稀疏路径你可以放心地把模型用于短文本但要知道此时实际走的是全注意力。快速上手用 BigBird 预测 [MASK] token英文版文档docs/source/en/model_doc/big_bird.md给出了三种等效的调用方式均以官方预训练 checkpointgoogle/bigbird-roberta-base为例。以下代码可直接复制运行。方式一Pipeline最简洁from transformers import pipeline pipeline pipeline( taskfill-mask, modelgoogle/bigbird-roberta-base, device0 ) pipeline(Plants create [MASK] through a process known as photosynthesis.)方式二AutoModel AutoTokenizer可自定义后处理import torch from transformers import AutoModelForMaskedLM, AutoTokenizer tokenizer AutoTokenizer.from_pretrained( google/bigbird-roberta-base, ) model AutoModelForMaskedLM.from_pretrained( google/bigbird-roberta-base, device_mapauto, ) inputs tokenizer(Plants create [MASK] through a process known as photosynthesis., return_tensorspt).to(model.device) with torch.no_grad(): outputs model(**inputs) predictions outputs.logits masked_index torch.where(inputs[input_ids] tokenizer.mask_token_id)[1] predicted_token_id predictions[0, masked_index].argmax(dim-1) predicted_token tokenizer.decode(predicted_token_id) print(fThe predicted token is: {predicted_token})所有 BigBird 原始 checkpoint 均托管在google组织名下可通过搜索bigbird关键字找到对应的base与large版本。从源码看块稀疏注意力的执行流程在block_sparse模式下BigBirdModel.forward的执行链路modeling_big_bird.py L1591-L1659大致如下补齐到 block 整数倍_pad_to_block_size用pad_token_id填充输入构造四类掩码调用静态方法create_masks_for_block_sparse_attn生成blocked_encoder_mask按 block 重排的掩码、band_mask窗口带掩码、from_mask与to_mask进入BigBirdEncoder每个BigBirdLayer内部是BigBirdAttention它根据config.attention_type在BigBirdSelfAttention全注意力与BigBirdBlockSparseAttention稀疏注意力之间选择L1068-L1075计算五段注意力稀疏注意力把 query 分成q[0]、q[1]、q[2:-2]、q[-2]、q[-1]五个部分分别计算L336-L337利用 token 移位技巧实现滑窗注意力。值得注意的细节是BigBirdAttention.set_attention_type与BigBirdModel.set_attention_typeL1079-L1101、L1515-L1524你可以在不重新加载权重的情况下在original_full与block_sparse之间动态切换注意力类型——切换时仅替换注意力子模块并复用已有的query/key/value权重矩阵。另外BigBirdForCausalLM作为 decoder 使用时有一个硬性限制block_sparse模式不能作为 decoder源码 L1135-L1136 会抛出BigBird cannot be used as a decoder when config.attention_type ! original_full。若配置中同时设置了add_cross_attentionTrue而attention_type不是original_full模型构造时会自动警告并强制切换为original_fullL1499-L1504。BigBird 模型家族一个主干七种任务头原文档列出了完整的模型类清单均继承自BigBirdPreTrainedModel共享同一套 BigBird 主干BigBirdModelEmbeddings Encoder Pooler仅在输出头部分不同。它们分布在 modeling_big_bird.py 中模型类源码位置用途与输出BigBirdModelL1464基础模型输出last_hidden_state、pooler_output等可配置为 encoder 或 decoderis_decoder配合add_cross_attention用于 seq2seqBigBirdForPreTrainingL1757预训练任务MLM 下一句预测输出BigBirdForPreTrainingOutput含prediction_logits、seq_relationship_logits、lossBigBirdForCausalLML1973因果语言建模继承GenerationMixin支持自回归生成BigBirdForMaskedLML1852掩码语言建模即上文fill-mask示例所用BigBirdForSequenceClassificationL2083序列分类长文档分类BigBirdForMultipleChoiceL2191多项选择BigBirdForTokenClassificationL2285Token 级分类如命名实体识别BigBirdForQuestionAnsweringL2362抽取式问答输出BigBirdForQuestionAnsweringModelOutputstart_logits/end_logits其中两个专属输出类型值得关注BigBirdForPreTrainingOutputL1423-L1439loss为 MLM 损失与下一句预测损失的加权和prediction_logits形状为(batch_size, sequence_length, config.vocab_size)seq_relationship_logits形状为(batch_size, 2)表示两段文本是否连续。BigBirdForQuestionAnsweringModelOutputL1448-L1461除start_logits/end_logits外还返回pooler_output是BigBirdModel池化层的输出。此外文档还专门列出了BigBirdTokenizer含get_special_tokens_mask、save_vocabulary两个方法与BigBirdTokenizerFast两个分词器类均位于 tokenization_big_bird.py完整支持特殊 token 掩码生成与词表保存。BigBirdConfig 配置参数详解所有稀疏注意力的行为都由BigBirdConfig控制configuration_big_bird.py L24-L81。文档中重点强调的注意力相关参数如下参数默认值说明attention_typeblock_sparse选择block_sparseO(n) 稀疏或original_fullO(n²) 全注意力。仅块稀疏模式使用该值block_size64每个 block 的大小仅在attention_type block_sparse时生效同时决定了窗口3 块与全局2 块的规模num_random_blocks3每个 query 关注的随机 block 数量仅在attention_type block_sparse时生效不支持 0use_biasTruequery/key/value 线性投影是否使用偏置rescale_embeddingsFalse是否用hidden_size ** 0.5缩放 embedding 输出源码BigBirdEmbeddings.forwardL117-L118 实现其余为继承自 BERT 家族的标准结构参数vocab_size50358、hidden_size768、num_hidden_layers12、num_attention_heads12、intermediate_size3072、hidden_actgelu_new、hidden_dropout_prob0.1、attention_probs_dropout_prob0.1、max_position_embeddings4096即支持的最大序列长度、type_vocab_size2、initializer_range0.02、layer_norm_eps1e-12、use_cacheTrue、classifier_dropoutNone、is_decoderFalse、add_cross_attentionFalse、tie_word_embeddingsTruetoken 相关 id 为pad_token_id0、bos_token_id1、eos_token_id2、sep_token_id66。快速构造与加载from transformers import BigBirdConfig, BigBirdModel # 初始化一个 google/bigbird-roberta-base 风格的配置 configuration BigBirdConfig() # 用随机权重初始化模型 model BigBirdModel(configuration) # 读取模型配置 configuration model.config下游任务指南资源原文档为 BigBird 在各类任务上的具体用法提供了任务指南入口分别对应仓库中的任务指南文档文本分类任务指南英文版Token 分类任务指南问答任务指南因果语言建模任务指南掩码语言建模任务指南多项选择任务指南总结BigBird 通过局部 随机 全局三类稀疏注意力的组合在保持模型表达能力通用逼近、图灵完备的同时将注意力的计算复杂度从二次降为线性使 Transformers 得以处理 4096 甚至更长的序列。本文从官方文档出发结合仓库源码梳理了其注意力拓扑3 块窗口、2 块全局、num_random_blocks个随机块、硬性约束序列长度需为 block size 整数倍、仅支持 ITC、不支持num_random_blocks0、短序列自动降级为全注意力、完整的 8 个模型类与BigBirdConfig全部参数。若需深入了解其注意力的推导细节可继续阅读文档中引用的博客文章或直接研读 modeling_big_bird.py 中bigbird_block_sparse_attention的实现与 tokenization_big_bird.py 的分词逻辑。【免费下载链接】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),仅供参考