专栏首页白话NLP【白话NLP】——为什么需要mask
原创

【白话NLP】——为什么需要mask

1. PAD的问题

通常在训练NLP模型时,batch中的句子长度不相等,这个时候会对没有达到规定长度的句子会进行pad操作(一般用0进行pad),如下图所示(绿色是进行pad的部分):

在这里插入图片描述

但是PAD会引起以下几个问题。

1.1 mean-pooling的问题

如上图所示,对于矩阵:

a = [3, 7, 11, 2, 1, 8, 5]

a进行mean-pooling

mean\_a=\frac{3+7+11+2+1+8+5}{7}=5.2857

进行pad之后:

pad\_a=[3, 7, 11, 2, 1, 8, 5, 0, 0, 0]

pad_a进行mean-pooling

mean\_pad\_a=\frac{3+7+11+2+1+8+5}{10}=3.7

对比mean_amean_pad_a发现:pad操作影响mean-pooling

1.2 max-pooling的问题

在这里插入图片描述

如上图所示,矩阵b=[-1, -3, -9, -11, -7, -2, -8]pad之后的矩阵mean\_b=[-1, -3, -9, -11, -7, -2, -8, 0, 0, 0]

分别对其进行max-pooling

max\_b = -1

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])如下图所示:

在这里插入图片描述

2.1 解决mean_pooling的问题

mean\_a=\frac{sum(pad\_a \cdot m)}{sum(m)}

2.2 解决max_pooling的问题

在进行max_pooling时,只需要将pad的部分的值足够小即可,可以将mask矩阵中值为0的位置替换的足够小(如:10^{-10}),则不会影响max_pooling计算。

max\_b=max(pad\_b-(1-m) \times 10^{10})

2.3 解决attention的问题

该问题的解决方式跟max_pooling一样,就是将pad的部分足够小,使得e^x的值非常接近于0,以至于可以忽略。

softmax(x)=softmax(x-(1-m) \times 10^{10})

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【BERT系列】—— 将Tensorflow格式的模型转换为Pytorch格式的模型

    以BERT为代表的预训练模型是目前NLP领域最火热的方向,但是Google发布的 BERT 是Tensorflow格式的,这让使用pytorch格式 程序猿 们...

    Dendi
  • 依存句法分析

    在依存句法分析中,句子中词与词之间存在一种二元不等价关系: 主从关系。在句子中,如果一个词修饰另一个词,则称修饰词为从属词(dependent),被修饰词成为支...

    Dendi
  • 【深度大白话】——曲则全,谈谈深度学习中的激活函数

    如上图所示,激活函数(Activation Function)是在人工神经网络神经元上运行的函数,负责将神经元的输入映射到输出。激活函数为人工神经网络引入非线性...

    Dendi
  • 开发十年,只剩下这套Java开发体系了

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。

    猿天地
  • Python3网络爬虫(五):Python3安装Scrapy

    运行平台:Windows Python版本:Python3.x IDE:Sublime text3 一、Scrapy简介     Scrapy是一个为...

    Jack_Cui
  • 开发十年,只剩下这套Java开发体系了阅读源码分布式架构微服务性能优化并发编程开发工具项目实战

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。

    美的让人心动
  • 2018-08-01 编程十年,Java技术线路

    https://my.oschina.net/u/3779583/blog/1862418

    Albert陈凯
  • 【leetcode刷题】T91-旋转数字

    我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。

    木又AI帮
  • 开发十年,就只剩下这套Java开发体系了

    以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上。想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳...

    Java高级架构
  • 为什么物联网需要创业工作室

    创业工作室的理念正变得越来越流行,并且有充分的理由。有一些基本的可重复流程可以在创建一个工作室内的初创企业时具有相当大的影响力。物联网是一个重要的、广泛的技术进...

    lixiao

扫码关注云+社区

领取腾讯云代金券