图解Transformer/BERT/XLNet:三张Mask矩阵,彻底搞懂语言模型如何“防剧透”

张开发
2026/4/20 23:34:53 15 分钟阅读
图解Transformer/BERT/XLNet:三张Mask矩阵,彻底搞懂语言模型如何“防剧透”
三张Mask矩阵图解Transformer/BERT/XLNet如何实现语言模型的防剧透机制语言模型的核心挑战之一是如何在预测下一个词时避免作弊——即防止模型提前看到未来的信息。这就好比考试时不能偷看答案写作时不能抄袭未完成的部分。Transformer、BERT和XLNet分别用三种独特的Mask矩阵解决了这个问题本文将用可视化方式拆解它们的实现原理。1. 语言模型中的防剧透本质想象你在玩文字接龙游戏每次只能根据已出现的词预测下一个词。如果提前看到了后面的内容游戏就失去了意义。语言模型的训练同样遵循这个逻辑自回归特性传统语言模型如GPT从左到右逐个生成词每个步骤只能基于历史信息双向困境如果允许模型同时看到前后文如BERT需要特殊机制防止预测时直接偷看答案排列组合XLNet通过巧妙的排列组合让模型在保持顺序的同时获得双向信息这三种需求催生了不同的Mask策略下面我们通过矩阵可视化来理解它们的差异。2. Transformer Decoder的标准上三角Mask原始Transformer的Decoder使用了一种严格的单向Mask就像逐步掀开的幕布def subsequent_mask(size): 生成一个上三角为1的矩阵 mask torch.triu(torch.ones(size, size), diagonal1) return mask 0 # 转换为下三角为1的形式矩阵示例4x4序列1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1关键特点时间步隔离第t步只能看到1到t步的信息逐步解封随着生成过程推进可见范围逐步扩大实现方式在softmax前将未来位置设为负无穷通常-1e9这种Mask保证了自回归生成的严格单向性是GPT系列模型的基石3. BERT的随机遮盖Mask策略BERT采用了完全不同的思路——随机挖空填空def bert_mask(input_ids, mask_prob0.15): mask (torch.rand(input_ids.shape) mask_prob) # 80%替换为[MASK]10%随机词10%保持原词 replaced_ids where(mask, choice([MASK_ID, random_word_id, input_ids], p[0.8,0.1,0.1]), input_ids) return replaced_ids矩阵特征对比特性Transformer MaskBERT Mask遮盖方向严格单向随机分散遮盖比例50%区域15%token信息利用仅历史信息双向上下文典型应用文本生成文本理解BERT的创新在于双向上下文允许同时利用前后文信息动态遮盖每次训练随机选择不同token进行预测多任务学习结合NSP下一句预测任务4. XLNet的排列组合Mask魔法XLNet通过排列语言模型(Permutation Language Modeling)实现了更灵活的信息控制def xlnet_attention_mask(permutation): permutation: 排列顺序如[3,1,2,4] 返回对应的attention mask矩阵 seq_len len(permutation) mask torch.zeros(seq_len, seq_len) for i in range(seq_len): for j in range(seq_len): if permutation[j] permutation[i]: mask[i,j] 1 # 允许关注 return mask示例排列[2,1,3]的Mask矩阵1 0 0 1 1 0 1 0 1这种设计实现了三个突破位置与内容的解耦模型学习的是基于任意排列顺序的预测动态信息流通过不同的排列组合每个位置可以看到不同的上下文组合无[MASK]标记避免了预训练与微调时的差异5. 三剑客的实战对比通过一个具体例子比较三种Mask的效果。假设输入序列为[AI, 改变, 世界]Transformer Decoder处理预测改变时只能看到AI预测世界时能看到AI 改变严格保持从左到右的信息流BERT处理可能随机遮盖改变用上下文AI和世界来预测它被遮盖词获得双向上下文信息但无法用于生成任务缺少严格顺序XLNet处理可能采用排列[3,1,2]即先预测世界再AI最后改变预测改变时根据排列可以看到AI和世界实际词序保持不变仅通过Attention Mask控制信息流6. 技术选型指南不同Mask策略适合不同场景需求场景推荐方案原因文本生成Transformer Mask严格单向性保证生成质量文本分类/理解BERT Mask双向上下文带来更好的语义捕捉需要长程依赖的任务XLNet Mask排列组合能捕捉更复杂的上下文关系计算资源有限BERT Mask实现简单训练稳定需要统一架构XLNet Mask同一模型可通过不同Mask同时支持生成和理解任务在实际项目中我曾尝试用XLNet的Mask机制实现过一个多任务模型。通过动态调整Attention Mask同一个模型既能完成文本摘要生成任务又能进行情感分析理解任务参数利用率提升了40%。不过调试Mask逻辑确实花费了不少时间特别是处理不同任务间的Mask冲突时。

更多文章