【NLP理论】——为什么需要mask

1. PAD的问题

通常在训练NLP模型时,batch中的句子长度不相等,这个时候会对没有达到规定长度的句子会进行pad操作(一般用0进行pad),如下图所示(绿色是进行pad的部分):
在这里插入图片描述
但是PAD会引起以下几个问题。

1.1 mean-pooling的问题

如上图所示,对于矩阵:
a = [ 3 , 7 , 11 , 2 , 1 , 8 , 5 ] a = [3, 7, 11, 2, 1, 8, 5] a=[3,7,11,2,1,8,5]
a进行mean-pooling
m e a n _ a = 3 + 7 + 11 + 2 + 1 + 8 + 5 7 = 5.2857 mean\_a=\frac{3+7+11+2+1+8+5}{7}=5.2857 mean_a=73+7+11+2+1+8+5=5.2857
进行pad之后:
p a d _ a = [ 3 , 7 , 11 , 2 , 1 , 8 , 5 , 0 , 0 , 0 ] pad\_a=[3, 7, 11, 2, 1, 8, 5, 0, 0, 0] pad_a=[3,7,11,2,1,8,5,0,0,0]
pad_a进行mean-pooling
m e a n _ p a d _ a = 3 + 7 + 11 + 2 + 1 + 8 + 5 10 = 3.7 mean\_pad\_a=\frac{3+7+11+2+1+8+5}{10}=3.7 mean_pad_a=103+7+11+2+1+8+5=3.7
对比mean_amean_pad_a发现:pad操作影响mean-pooling

1.2 max-pooling的问题

在这里插入图片描述
如上图所示,矩阵 b = [ − 1 , − 3 , − 9 , − 11 , − 7 , − 2 , − 8 ] b=[-1, -3, -9, -11, -7, -2, -8] b=[1,3,9,11,7,2,8]pad之后的矩阵 m e a n _ b = [ − 1 , − 3 , − 9 , − 11 , − 7 , − 2 , − 8 , 0 , 0 , 0 ] mean\_b=[-1, -3, -9, -11, -7, -2, -8, 0, 0, 0] mean_b=[1,3,9,11,7,2,8,0,0,0]
分别对其进行max-pooling
m a x _ b = − 1 max\_b = -1 max_b=1
m a x _ p a d _ b = 0 max\_pad\_b=0 max_pad_b=0
对比max_amax_pad_a发现:pad操作影响max-pooling

1.3 attention的问题

attention技术是目前NLP任务的必备选项,在attention的计算中通常最后一步是使用softmax进行归一化操作,将数值转换为概率。但是如果直接对pad之后的向量进行softmax操作,那么pad的部分也会分摊一部分概率,这就导致有意义的部分(非pad部分)的概率之和不等于1

2. mask

mask是相对于pad而产生的技术,具备告诉模型一个向量有多长的功效。mask矩阵有如下特点:

  1. mask矩阵是与pad之后的矩阵具有相同的shape
  2. mask矩阵只有10两个值,如果值为1表示对应的pad矩阵中该位置有意义,如果值为0表示对应的pad矩阵中该位置无意义。

在第1部分中的两个向量的mask矩阵( m = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 ] m=[1,1,1,1,1,1,1,0,0,0] m=[1,1,1,1,1,1,1,0,0,0])如下图所示:
在这里插入图片描述

2.1 解决mean_pooling的问题

m e a n _ a = s u m ( p a d _ a ⋅ m ) s u m ( m ) mean\_a=\frac{sum(pad\_a \cdot m)}{sum(m)} mean_a=sum(m)sum(pad_am)

2.2 解决max_pooling的问题

在进行max_pooling时,只需要将pad的部分的值足够小即可,可以将mask矩阵中值为0的位置替换的足够小(如: 1 0 − 10 10^{-10} 1010),则不会影响max_pooling计算。
m a x _ b = m a x ( p a d _ b − ( 1 − m ) × 1 0 10 ) max\_b=max(pad\_b-(1-m) \times 10^{10}) max_b=max(pad_b(1m)×1010)

2.3 解决attention的问题

该问题的解决方式跟max_pooling一样,就是将pad的部分足够小,使得 e x e^x ex的值非常接近于0,以至于可以忽略。
s o f t m a x ( x ) = s o f t m a x ( x − ( 1 − m ) × 1 0 10 ) softmax(x)=softmax(x-(1-m) \times 10^{10}) softmax(x)=softmax(x(1m)×1010)

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值