
BigBirdPegasus 长序列条件生成模型详解从稀疏注意力原理到 Transformers 实战【免费下载链接】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导读BigBirdPegasus 是 Hugging Face Transformers 库中面向超长序列的编码器-解码器Encoder-Decoder模型它把 BigBird 的稀疏注意力机制与 Pegasus摘要专用预训练架构结合将注意力复杂度从二次方降到线性从而可以在同等硬件条件下处理比 BERT 类模型长 8 倍的输入。本文以docs/source/ja/model_doc/bigbird_pegasus.md为核心骨架结合本仓库中 configuration_bigbird_pegasus.py 与 modeling_bigbird_pegasus.py 的源码实现系统讲解 BigBirdPegasus 的稀疏注意力原理、block_sparse与original_full两种注意力实现、配置参数、五类模型头 API 与基于google/bigbird-pegasus-large-arxiv的完整实践读完即可在长文档摘要、问答等场景直接上手。BigBirdPegasus 是什么BigBirdPegasus 由论文Big Bird: Transformers for Longer Sequences提出。其核心动机是以 BERT 为代表的 Transformer 模型虽然在 NLP 中取得了巨大成功但其全注意力机制对序列长度的二次依赖尤其在显存层面是核心瓶颈。BigBird 通过稀疏注意力将这种二次依赖降为线性同时理论上证明该模型是序列函数的通用逼近器universal approximator且图灵完备因此完整二次注意力模型的重要性质得以保留。理论分析还揭示了一个有趣的事实仅需 O(1) 个全局 token例如 CLS就能在稀疏注意力中带来显著的收益。与 BERT / RoBERTa 相比BigBirdPegasus 凭借处理更长上下文的能力在问答与摘要等任务上显著提升效果论文还将其推广到基因组学数据的新应用场景。从本仓库的源码结构看BigBirdPegasus 的实现包含三个核心文件文件职责configuration_bigbird_pegasus.py配置类BigBirdPegasusConfig定义模型结构超参modeling_bigbird_pegasus.pyPyTorch 模型实现约 2400 行convert_bigbird_pegasus_tf_to_pytorch.py从 TensorFlow 原版google-research/bigbird转换权重的脚本同时test_modeling_bigbird_pegasus.py 提供了覆盖两种注意力类型、自动 padding、batch 一致性等场景的完整测试。BigBird 稀疏注意力核心机制三类注意力组合全局 局部 随机BigBird 的稀疏注意力由三类注意力组成其实现注释modeling_bigbird_pegasus.py给出了 ITC 模式下的精确配置全局 tokenglobal固定为 2 个块2 × block_size通常是序列开头与结尾的 token它们可以关注整条序列窗口 tokenwindow/sliding固定为 3 个块3 × block_size即滑动窗口局部注意力随机 tokenrandom每个 query 额外关注num_random_blocks个随机选择的块num_rand_tokens × block_size。从代码中可以看到注意力计算被拆分成5 个部分分别处理q[0]首个全局块、q[1]、中间块q[2:-2]、q[-2]、q[-1]末尾全局块。中间块的滑动注意力使用论文中的 token 平移shifting技巧高效实现随机块则按rand_attn预生成的邻接表聚合。最终把各块结果拼接并通过四次scatter_把稀疏注意力权重回填到完整的(bsz, n_heads, seq_len, seq_len)注意力矩阵中。序列长度的块对齐要求稀疏注意力的一个关键约束是序列长度必须是块大小的整数倍。源码中有两处强制校验BigBirdPegasusBlockSparseAttention.forward中若from_seq_length % from_block_size ! 0或to_seq_length % to_block_size ! 0会直接抛出ValueErrormodeling_bigbird_pegasus.pycreate_masks_for_block_sparse_attn中同样要求seq_length % block_size 0modeling_bigbird_pegasus.py。好消息是BigBirdPegasusEncoder.forward内部会自动把输入 padding 到 block_size 的整数倍_pad_to_block_size方法并在输出时裁掉 padding 部分因此用户只需保证原始序列长度满足任务需要即可modeling_bigbird_pegasus.py。两种注意力实现original_full 与 block_sparse选择原则与默认配置BigBird 附带了original_full和block_sparse两种实现当序列长度小于 1024时稀疏注意力几乎无法带来收益官方建议使用original_full全注意力当序列长度大于等于 1024时使用block_sparse可以显著降低计算与显存开销。配置默认值即为block_sparseattention_type: str block_sparse。BigBirdPegasusEncoderAttention.__init__根据config.attention_type选择BigBirdPegasusSelfAttention全注意力或BigBirdPegasusBlockSparseAttention稀疏注意力传入其他值会抛出ValueErrormodeling_bigbird_pegasus.py。序列过短时的自动回退源码实现了一个贴心细节即使显式设置了block_sparse如果序列长度不超过(5 2 * num_random_blocks) * block_size默认配置下即(56)*64 704编码器会打印警告并自动切换为original_fullmodeling_bigbird_pegasus.py。原因是稀疏注意力需要满足2 个全局块 3 个滑动块 2 × num_random_blocks 个随机块的最小 token 数。该行为在测试test_for_change_to_full_attn中有专门覆盖。运行时切换注意力类型set_attention_type方法允许在已实例化的模型上动态切换注意力类型切换时会保留已训练好的 query/key/value 权重因为两种注意力共享相同的线性投影结构仅替换注意力计算模块modeling_bigbird_pegasus.py。推理阶段无随机性稀疏注意力的随机块选择在训练时通过np.random.permutation生成但推理非训练模式下直接返回全零邻接表保证结果可复现modeling_bigbird_pegasus.py。此外论文旧方案仅在序列长度为 1024、3072、4096 时使用预生成的随机计划其他长度会调用_get_rand_attn_plan动态规划随机块分布modeling_bigbird_pegasus.py。配置参数详解BigBirdPegasusConfig稀疏注意力专属参数BigBirdPegasusConfigconfiguration_bigbird_pegasus.py中以下三个参数直接决定稀疏注意力的行为参数默认值说明attention_typeblock_sparse使用论文提出的块稀疏注意力复杂度 O(n)还是原始全注意力复杂度 O(n²)可选original_full与block_sparse仅作用于编码器# only for encoderblock_size64每个块的大小仅在attention_type block_sparse时生效全局块数量与窗口大小均以 block_size 为单位固定num_random_blocks3每个 query 关注的随机块数量仅在block_sparse时生效use_biasFalsequery / key / value 线性投影是否使用偏置完整默认超参一览参数默认值说明vocab_size96103词表大小max_position_embeddings4096最大位置编码长度d_model1024隐藏层维度同时映射为hidden_sizeencoder_layers/decoder_layers16 / 16编码器 / 解码器层数encoder_ffn_dim/decoder_ffn_dim4096 / 4096FFN 中间层维度encoder_attention_heads/decoder_attention_heads16 / 16注意力头数activation_functiongelu_new激活函数dropout/attention_dropout/activation_dropout0.1 / 0.0 / 0.0各类 dropoutinit_std0.02初始化标准差decoder_start_token_id2解码起始 tokenscale_embeddingTrue词嵌入是否乘以sqrt(d_model)pad_token_id/bos_token_id/eos_token_id0 / 2 / 1特殊 token idencoder_layerdrop/decoder_layerdrop0.0 / 0.0LayerDrop 概率use_cacheTrue是否使用 KV 缓存classifier_dropout0.0分类头 dropouttie_word_embeddingsTrue是否共享词嵌入与输出投影权重参数映射与加载别名配置类通过attribute_map建立了与其他模型通用的命名映射configuration_bigbird_pegasus.pyattribute_map { num_attention_heads: encoder_attention_heads, hidden_size: d_model, attention_probs_dropout_prob: attention_dropout, num_hidden_layers: encoder_layers, }这意味着在加载检查点或编写兼容代码时通用的hidden_size、num_hidden_layers等命名会被自动映射到 BigBirdPegasus 的d_model、encoder_layers等内部命名方便from_pretrained兼容加载。从配置初始化模型from transformers import BigBirdPegasusConfig, BigBirdPegasusModel # 初始化一个 bigbird-pegasus-base 风格的配置 configuration BigBirdPegasusConfig() # 用随机权重初始化模型 model BigBirdPegasusModel(configuration) # 访问模型配置 configuration model.config注意该示例创建的是随机权重模型实际使用应通过from_pretrained加载预训练权重。模型架构与 API 一览BigBirdPegasus 采用 BART/Pegasus 风格的编码器-解码器架构。从 modeling_bigbird_pegasus.py 的__all__导出列表可见共有 6 个公开类类用途BigBirdPegasusConfig配置类BigBirdPegasusModel基础编解码模型输出解码器隐状态与编码器输出BigBirdPegasusForConditionalGeneration带语言建模头lm_head用于摘要等生成任务BigBirdPegasusForSequenceClassification带句子级分类头用于 GLUE 类任务BigBirdPegasusForQuestionAnswering带问答头start/end logitsBigBirdPegasusForCausalLM纯解码器因果语言模型复用 Pegasus 的 DecoderWrapper 模式BigBirdPegasusPreTrainedModel所有模型的基类架构细节共享词嵌入编码器与解码器共享shared词嵌入BigBirdPegasusScaledWordEmbedding并按scale_embedding乘以缩放因子权重通过_tied_weights_keys声明 tie 关系modeling_bigbird_pegasus.py。绝对位置嵌入BigBirdPegasusLearnedPositionalEmbedding继承自nn.Embedding使用可学习的绝对位置编码因此输入建议右 paddingpad 在左侧会干扰位置信息。自动右移与多数模型不同若未提供decoder_input_idsBigBirdPegasusModel会自动基于input_ids执行shift_tokens_right生成解码输入modeling_bigbird_pegasus.py。编码器只有稀疏/全注意力二选一解码器保持全注意力稀疏注意力仅用于编码器解码器的 self-attention 与 cross-attention 均使用标准多头注意力BigBirdPegasusDecoderAttention因此解码阶段行为与 BART/Pegasus 一致支持 KV 缓存加速。实战使用 BigBirdPegasus 做长文档摘要模型与分词器加载BigBirdPegasus 使用PegasusTokenizer与 Pegasus 系列共用分词器推荐预训练检查点google/bigbird-pegasus-large-arxiv。以下是仓库源码 docstring 中自带的官方摘要示例modeling_bigbird_pegasus.pyfrom transformers import AutoTokenizer, BigBirdPegasusForConditionalGeneration model BigBirdPegasusForConditionalGeneration.from_pretrained(google/bigbird-pegasus-large-arxiv) tokenizer AutoTokenizer.from_pretrained(google/bigbird-pegasus-large-arxiv) ARTICLE_TO_SUMMARIZE ( The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two machine translation tasks show these models to be superior in quality while being more parallelizable and requiring significantly less time to train. ) # max_length 可设置到 4096充分利用长序列能力 inputs tokenizer([ARTICLE_TO_SUMMARIZE], max_length4096, return_tensorspt, truncationTrue) # 生成摘要 summary_ids model.generate(inputs[input_ids], num_beams4, max_length15) tokenizer.batch_decode(summary_ids, skip_special_tokensTrue, clean_up_tokenization_spacesFalse)[0] # dominant sequence models are based on recurrent or convolutional neural networks .要点说明max_length4096对应max_position_embeddings充分体现长序列处理能力generate支持num_beams、max_length等 GenerationMixin 全部参数源码 docstring 指出加载时默认忽略缺失的final_logits_bias_keys_to_ignore_on_load_missing这是迁移预训练权重的兼容细节。其他任务头用法问答BigBirdPegasusForQuestionAnswering输出start_logits/end_logits传入start_positions/end_positions计算交叉熵损失start/end 损失取平均序列分类BigBirdPegasusForSequenceClassification通过 eos token 位置池化解码器隐状态再接BigBirdPegasusClassificationHeadDense → tanh → Dense支持分类、回归、多标签三种损失因果语言建模BigBirdPegasusForCausalLM会将config.is_decoder置为True、is_encoder_decoder置为False纯解码器运行。训练与微调BigBirdPegasusForConditionalGeneration是标准的 Seq2Seq 模型微调时传入input_ids与labels即可自动计算交叉熵损失。传入labels时use_cache会被自动置为Falsemodeling_bigbird_pegasus.py解码输入由shift_tokens_right从 labels 生成。from transformers import BigBirdPegasusForConditionalGeneration, BigBirdPegasusConfig config BigBirdPegasusConfig() model BigBirdPegasusForConditionalGeneration(config) # 假设 inputs / labels 已通过 tokenizer 构造 # outputs model(input_idsinputs[input_ids], attention_maskinputs[attention_mask], labelslabels) # loss outputs.loss训练过程中可配合梯度检查点supports_gradient_checkpointing True与 LayerDrop 降低显存占用Batch 大小注意序列需按块对齐框架会自动 padding见前文。使用限制与注意事项结合文档的 Usage tips 与源码汇总如下关键约束序列长度 1024 时推荐original_full稀疏注意力在小序列上无收益序列长度必须能被 block_size 整除框架会在编码器内部自动 padding但解码等场景需留意仅支持 ITC 模式源码注释明确 ETC额外全局 token模式当前不受支持modeling_bigbird_pegasus.pynum_random_blocks 0不受支持随机块是稀疏注意力的必要组成部分相关测试如test_attention_outputs对返回稀疏矩阵的处理也体现了这一点建议右 padding由于使用可学习绝对位置嵌入左侧 padding 会干扰位置语义固定窗口与全局块规模窗口固定 3 块、全局固定 2 块只能通过调整block_size间接改变覆盖范围稀疏注意力的注意力矩阵不可求梯度测试test_retain_grad_hidden_states_attentions在 block_sparse 模式下被跳过返回矩阵大量位置为 0无法携带梯度这是与全注意力的行为差异batch 内一致性_check_batched_forward测试验证了带 padding 与不带 padding 样本在同一 batch 中的 logits 与单独前向一致test_modeling_bigbird_pegasus.py实际使用时应保持各样本长度对齐策略一致。总结BigBirdPegasus 在本仓库中的实现完整覆盖了线性复杂度稀疏注意力全局 滑动 随机三合一、双注意力实现与自动回退、完整的多任务头生成 / 分类 / 问答 / 因果 LM以及 Pegasus 分词器兼容。若你的任务是长文档摘要、长上下文问答或需要比 BERT 类模型处理长 8 倍序列的场景BigBirdPegasus 是一个经过源码与测试双重验证的成熟方案序列 ≥ 1024 时使用block_sparse获得线性复杂度序列较短时回退original_full保证效果两者共享同一套权重结构切换成本极低。【免费下载链接】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),仅供参考