Mask机制中的Padding Mask 和 Sentence Mask
在自然语言处理(NLP)中,Mask机制是模型处理序列数据的关键技术,主要用于控制信息流动或屏蔽无效信息。其中,Padding Mask 和 Sentence Mask(又称Sequence Mask或Look-Ahead Mask) 是最核心的两种类型,它们在作用、实现和应用场景上有显著差异。以下从原理、实现、应用场景和组合方式展开详解:
🧱 一、Padding Mask:处理非定长序列
⚙️ 作用
- 解决变长序列问题:NLP任务中,输入文本长度通常不等。为支持批量训练,需将短序列填充至统一长度(如用
[PAD]
填充),而 Padding Mask 用于标记这些填充位置,确保模型忽略无效的填充符。 - 避免干扰计算:若不处理填充符,会导致注意力权重被分散(如均值池化时拉低特征值)或损失计算被污染。
🔧 实现方式
- 生成与输入序列同形状的布尔矩阵:有效位置为1,填充位置为0。
- 在注意力机制中的应用:
在计算注意力得分后,将填充位置替换为极小值(如def padding_mask(seq, pad_idx):return (seq != pad_idx).unsqueeze(-2) # 形状 [B, 1, L]
-1e9
),使 Softmax 后权重趋近于0:scores = scores.masked_fill(padding_mask == 0, -1e9) p_attn = F.softmax(scores, dim=-1)
📍 应用场景
- 所有处理变长序列的模型:
- RNN:通过
pack_padded_sequence
跳过填充符,直接输出有效序列的隐状态。 - Transformer Encoder/Decoder:在自注意力层中屏蔽填充位置。
- BERT:通过
attention_mask
参数区分有效 token 与[PAD]
。
- RNN:通过
🔍 二、Sentence Mask(Sequence Mask / Look-Ahead Mask)
⚙️ 作用
- 防止标签泄露:在自回归生成任务(如机器翻译、文本生成)中,确保解码器在预测当前位置时仅依赖历史信息,无法“偷看”未来词。
- 保持自回归性质:例如预测第3个词时,只能基于前2个词计算注意力权重。
🔧 实现方式
- 生成上三角矩阵:对角线及以上为0(或
-∞
),对角线及以下为1。def sequence_mask(seq):seq_len = seq.size(1)mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1) # 上三角为1mask = mask.masked_fill(mask == 1, float('-inf')) # 替换为负无穷return mask
- 应用至注意力得分:将上三角区域(未来位置)替换为
-∞
,Softmax 后权重为0。
📍 应用场景
- 仅解码器的自注意力层:
- Transformer Decoder 的
Masked Multi-Head Attention
层。 - GPT 系列等自回归语言模型的生成过程。
- Transformer Decoder 的
🔀 三、组合使用:Padding Mask + Sentence Mask
在 Transformer Decoder 中需同时处理两种需求:
- 忽略填充符(Padding Mask)
- 屏蔽未来信息(Sentence Mask)
通过逻辑与操作(&
)叠加两种掩码:
combined_mask = padding_mask & sequence_mask
scores = scores.masked_fill(combined_mask == 0, -1e9)
示例:
输入序列 ["A", "B", [PAD]]
的联合掩码为:
[[1, 0, 0], # Padding Mask:第三位是 [PAD][1, 1, 0], # Sentence Mask:B 不能看到未来(C)和 [PAD][1, 1, 0]] # 最后一位无效(填充)
这样,模型在预测时仅关注有效历史词,且忽略填充位置。
⚖️ 四、与预训练任务中的Mask区别
Padding Mask 和 Sentence Mask 是结构约束,而以下属于任务设计:
- MLM Mask(BERT):
随机遮盖15%的 token(如80%替换为[MASK]
,10%保留原词,10%随机替换),目标是预测被遮盖的词。 - Knowledge Mask(ERNIE):
遮盖整个实体或短语(如“哈利·波特”而非单字),迫使模型学习语义知识。 - Whole-Word Mask(BERT-wwm):
若一个词被拆分为多个子词(如“apple” →["ap", "##ple"]
),则同时遮盖所有子词。
💡 提示:Sentence Mask 是模型结构的固有机制,而 MLM/KM 是预训练任务的数据增强策略。
💎 五、总结对比表
以下为两种核心 Mask 的对比:
Mask类型 | 主要目的 | 作用位置 | 实现机制 | 应用场景 | 典型模型 |
---|---|---|---|---|---|
Padding Mask | 忽略填充符 [PAD] | 所有注意力层 | 有效位置为1,填充为0 → Softmax前替换为 -∞ | 变长序列的批量训练 | RNN, Transformer, BERT |
Sentence Mask | 防止未来信息泄露 | 解码器自注意力层 | 上三角矩阵(值 -∞ ) | 自回归生成(如翻译、文本生成) | Transformer Decoder, GPT |
💡 关键理解
- Padding Mask 是基础:确保模型不计算无效位置,是处理变长数据的通用技术。
- Sentence Mask 是因果约束:维持语言模型的自回归特性,避免预测时“作弊”。
- 组合应用是常态:Decoder 需同时使用两种 Mask,既屏蔽填充符又防止信息泄露。
通过精确控制信息流,这两种 Mask 构成了 Transformer、BERT、GPT 等核心模型的底层支持。理解其差异与协同,是掌握现代 NLP 模型的关键基础。