NLP中的mask的作用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NLP中的mask的作⽤
最近真的被mask搞得晕晕的,还是需要好好的看下哦
1、padding mask:处理⾮定长序列,区分padding和⾮padding部分,如在RNN等模型和Attention机制中的应⽤等
2、sequence mask:防⽌标签泄露,如:Transformer decoder中的mask矩阵,BERT中的[Mask]位,XLNet中的mask矩阵等
PS:padding mask 和 sequence mask⾮官⽅命名
嗯,上⾯的解释还是很晕的,还是要具体解读⼀下的
后⾯读了具体论⽂之后如有错误再修改
RNN中的Mask
对于RNN等模型,本⾝是可以直接处理不定长数据的,因此它不需要提前告知 sequence length,如下是pytorch下的LSTM定义:
nn.LSTM(input_size, hidden_size, *args, **kwargs)
但是在实践中,为了 batch 训练,⼀般会把不定长的序列 padding 到相同长度,再⽤ mask 去区分⾮ padding 部分和 padding 部分。
区分的⽬的是使得RNN只作⽤到它实际长度的句⼦,⽽不会处理⽆⽤的 padding 部分,这样RNN的输出和隐状态都会是对应句⼦实际的最后⼀位。另外,对于token级别的任务,也可以通过mask去忽略 padding 部分对应的loss。
不过,在 pytorch 中,对 mask 的具体实现形式不是mask矩阵,⽽是通过⼀个句⼦长度列表来实现的,但本质⼀样。实现如
下,sentence_lens 表⽰的是这个batch中每⼀个句⼦的实际长度。
Attention中Mask
在 Attention 机制中,同样需要忽略 padding 部分的影响,这⾥以transformer encoder中的self-attention为例:
防⽌标签泄露
在语⾔模型中,常常需要从上⼀个词预测下⼀个词,但如果要在LM中应⽤ self attention 或者是同时使⽤上下⽂的信息,要想不泄露要预测的标签信息,就需要 mask 来“遮盖”它。不同的mask⽅式,也对应了⼀篇篇的paper,这⾥选取典型的⼏个。
Transformer中的Mask
Transformer 是包括 Encoder和 Decoder的,Encoder中 self-attention 的 padding mask 如上,⽽ Decoder 还需要防⽌标签泄露,即在 t 时刻不能看到 t 时刻之后的信息,因此在上述 padding mask的基础上,还要加上 sequence mask。
sequence mask ⼀般是通过⽣成⼀个上三⾓矩阵来实现的,上三⾓区域对应要mask的部分。
在Transformer 的 Decoder中,先不考虑 padding mask,⼀个包括四个词的句⼦[A,B,C,D]在计算了相似度scores之后,得到下⾯第⼀幅图,将scores的上三⾓区域mask掉,即替换为负⽆穷,再做softmax得到第三幅图。这样,⽐如输⼊ B 在self-attention之后,也只和A,B有关,⽽与后序信息⽆关。
self-attention中,Q和K在点积之后,需要先经过mask再进⾏softmax,因此,对于要屏蔽的部分,mask之后的输出需要为负⽆穷,这样softmax之后输出才为0。
BERT中的Mask
BERT实际上是Transformer的Encoder,为了在语⾔模型的训练中,使⽤上下⽂信息⼜不泄露标签信息,采⽤了Masked LM,简单来说就是随机的选择序列的部分token⽤ [Mask] 标记代替。
这波Mask操作,思想很直接,实现很简单,效果很惊⼈。