我最近真的晕mask了。 还是需要仔细看看哦
1、填充掩码:处理非定长序列,区分填充和非填充部分。 例如,在RNN等模型和Attention机制中的应用等
2、序列掩码:防止传输解码器的掩码矩阵、BERT的[掩码]位、XLNet的掩码矩阵等标签的泄漏
PS :填充掩码和序列掩码的非正式命名
嗯,上面的说明还很模糊。 还是要具体解读
稍后读具体论文,有错误就改正
RNN的掩码
RNN等模型本身可以直接处理不定长度数据,因此不需要提前通知序列长度。 以下是pytorch上的LSTM定义。
nn.lstm(input_size,hidden_size,*args,**kwargs ) ) ) ) ) 65 )
但是,在实践中,为了batch训练,通常将不定长度的数组填充到相同的长度,用掩码来区分非填充部分和填充部分。
的目的是防止RNN只作用于实际长度的语句,而处理无用的填充部分,从而使RNN的输出和隐藏状态成为语句的实际最后一位。 并且,对于token级别的任务,也可以在mask中忽略与填充部分对应的loss。
但是,在pytorch中,对于mask的具体实现形式不是用mask矩阵,而是用句子长度的列表来实现的,但本质是相同的。 如下所述,sentence_lens表示这个batch中每个语句的实际长度。
在Attention中屏蔽
Attention机制还必须忽略填充节的影响。 在此,以transformer encoder的自我保护为例。
防止标签泄漏
在语言模型中,往往需要根据上一个单词预测下一个单词,但在对LM应用self attention或同时使用上下文信息时,为了不遗漏预测的标签信息,mask需要“覆盖”它。 不同的屏蔽方式也支持一篇包装。 这里选择几种典型的。
传输器掩码
传输器包含编码器和解码器,在编码器中,自我确认的填充掩码如上所述,但解码器无法看到标签的泄漏,即在t时刻不能看到t时刻以后的信息,因此
序列掩码通常通过生成对应于要掩码的部分的上三角矩阵来实现。
在Transformer的Decoder中,不考虑填充掩码,由4个词构成的句子[A、b、c、D]在计算相似度scores后,得到下面的第一个图,去掉scores的上三角区域掩码,即负的
在自证明中,q和k必须在点积之后通过掩码进行softmax,因此对于屏蔽部分,必须设置为负无穷大,以使掩码之后的输出为0。
BERT的掩码
BERT实际上是Transformer的编码器,它用[Mask]标签代替了Masked LM,也就是随机选择数组的token的一部分,以便在语言模型的训练中使用上下文信息并且不泄露标签信息
该波Mask操作,思想直接,实现简单,效果惊人。
标签: NLP、变换器、序列、掩码、确认、掩码、填充、作用
资料来源: https://www.cn blogs.com/gaowenxingxing/p/13709013.html