Mask 有两种,Padding-mask,用于处理不定长输入
另一种是 seqence-mask,为了防止未来信息不被泄露
padding mask - 处理输入不定长
在 NLP 中,一个常见的问题是输入序列长度不等,一般来说我们会对一个 batch 内的句子进行 PAD,通常值为 0。
sequence mask - 防止未来信息泄露
在语言模型中,常常需要从上一个词预测下一个词,sequence mask 是为了使得 decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。产生一个上三角矩阵,上三角的值全为 1,下三角的值全为 0,对角线也是 0。把这个矩阵作用在每一个序列上,就可以达到我们的目的啦。值得注意的是,本来 mask 只需要二维的矩阵即可,但是考虑到我们的输入序列都是批量的,所以我们要把原本二维的矩阵扩张成 3 维的张量。