处理不定长输入

在NLP中,一个常见的问题是输入序列长度不等,而mask可以帮助我们处理。虽然RNN等模型可以处理不定长的input,但是在实践中,需要对input做batchize,转换成固定大小的tensor,方便矩阵操作

举个例子: case 1: I like cats. case 2: He does not like cats. 假设默认的seq_len是5,一般会对case 1做pad处理,变成 I like cats <PAD> <PAD>

在上述例子数字编码后,开始做embedding,而pad也会有embedding向量,但pad本身没有实际意义,参与训练可能还是有害的。因此,有必要维护一个mask tensor来记录哪些是真实的value,上述例子的两个mask如下: 1 1 1 0 01 1 1 1 1后续再梯度传播中,mask起到了过滤的作用,在pytorch中,有参数可以设置:nn.Embedding(vocab_size, embed_dim,padding_idx=0)

Language model中防止未来信息泄露

在语言模型中,常常需要从上一个词预测下一个词,而现阶段attention是标配,比如Transformer中的self attention,如果不做mask,在decoder的时候很容易把下一个词的信息泄露了,即按上诉例子,不能在预测like这个词时已经知道like后面的词了。