Unilm生成式之Attention Mask解读

** 看完这个文档,能大致理解Unilm一统NLU和NLG的原因。

1 Unilm语言模型解读

** Unilm的感性认识

1.1 Bidirectional LM

Bert语言模型为Bidirectional LM,采用全向自注意力机制,其注意力分配同时受上文和下文影响,适合自然语言理解任务(NLU)。Transformer之间的连线表示注意力分配,Segment 1和2表示输入Bert的两个句子片段。

(Bidirectional LM 来源: Unilm论文)

 

1.2 Left-to-Right LM

NLG是利用上文预测下文,Bert的全向注意力分配机制不能有效适应NLG任务,而Left-to-Right LM是比较适合NLG任务的一种模型。

如下图所示,每个S1的注意力来源于本身S1以及S1之前部分(句子的上文),S1之后部分(下文)不会影响S1获得的注意力。

(Left-to-Right LM 来源: Unilm论文)

 

1.3 Unilm LM

Unilm继承自Bert,但针对输入的双句子片段Segment 1和Segment 2采用不同的注意力机制,Segment 1采用Bidirectional LM语言模型,而Segment 2采用Left-to-Right LM语言模型,同时Segment 2部分的S2注意力同时受Segment 1的影响,目的是在Segment 1的作用下生成Segment 2片段。

(Unilm 来源: Unilm论文)

Unilm复用Bert预训练参数,那Unilm是如何做到既支持Bidirectional LM又支持Left-to-Right LM的呢,这得益于Unilm独特的Mask机制。

 

2 Unilm Mask机制解读(Self-attention Masks)

** Unilm 生成式核心。

Unilm不改变Bert模型,复用Bert参数下,Unilm的attention计算和Bert是一致的,即Bidirectional LM式的全向attention计算。

然而,Unilm增加了attention mask矩阵。我们看看attention mask是如何建模Bidirectional LM、Left-to-right LM的。

2.1 Bidirectional LM的Mask表示

模型输入为S1和S2,S1和S2拼接组成一个长的输入文本。这个长文本中的每个token都与文本中所有token建立注意力联系。

因此,Unilm使用了一个邻接矩阵表示这种Bidirectional LM联系,如下图所示,每一维均为|S1|+|S2|,矩阵中的每个元素(i, j)表示token i与token j之间有注意力联系,并用白色表示这种联系。

(Bidirectional LM表示,来源: Unilm论文)

 

2.2 Left-to-right LM的Mask表示

Unilm同样使用邻接矩阵表示Left-to-right LM的token与token之间的注意力联系,但将矩阵元素着色,白色表示有联系,黑色表示没有联系。

矩阵的白色部分为下三角矩阵,表示token i只能与token i以及token i之前的元素(上文建立联系),不能与token i之后的部分(下文,黑色部分)建立联系。

通常情况下矩阵的白色部分会为1,黑色部分为0。

(Left-to-right LM表示,来源: Unilm论文)

想象一下NLG生成式的任务,依据上文tokens预测当前token,这和这个矩阵的下三角特别相似,每行的左边白色部分表示已经预测过的上文,而右侧黑色部分表示将要预测的下文,后续预测的下文部分是不能参与Attention Score计算的。

 

2.3 Unilm的Mask表示

Unilm则是Bidirectional LM和Left-to-right LM邻接矩阵表示的融合。

如下图所示,Unilm按S1和S2,将矩阵拆分为4部分。

Bidirectional LM,即S1区域,白色左上角区域,每个token都与其他token有直接的attention联系,确保Unilm天生支持NLU任务。

Left-to-right LM,即S2区域,即右下角黑白交替的部分,白色为下三角矩阵,表示token i只能与token i自身以及之前token(上文)建立联系,确保Unlim支持NLG任务。

S2和S1交叉左下角矩阵(白色),表示S2的token与S1的所有token之间的attention联系,表示S1能影响到S2 token的生成,能起到校对和指向的作用。

而S1和S2交叉右上角矩阵(黑色),表示S1的token与S2所有token之间的attention联系,由于元素全黑,表示S2不应该参与S1部分的Attention Score的计算。

(Unilm表示,来源: Unilm论文)

 下图是Unilm的注意力计算代码,mask直接作用于每个token的attention得分,强化(白色部分)或冲淡(黑色部分)S1、S2所有token的最终的attention score。

attention_scores = torch.matmul(
            query_layer / math.sqrt(self.attention_head_size), key_layer.transpose(-1, -2))

attention_scores = attention_scores + attention_mask

(来源: https://github.com/YunwenTechnology/Unilm

如此,虽然Unilm模型网络继承自Bert,采用Bert一样的全向注意力训练,但Unilm通过Mask矩阵,作用于每个token的注意力分值的计算,模拟出Bidirectional LM和Left-to-right LM的训练效果,使得Unilm预训练模型,既能覆盖NLU任务,也能支持NLG的任务,如文本摘要。

 

3 Unilm模型Decode机制解读

** 深入认识unilm生成式任务

生成式任务每预测一个token,都需要计算对所有之前token(上文)的注意力。

3.1 累加迭代

由于S1以及已经预测过的S2的token在之前的预测中计算过,Unilm采用累加式迭代方式,复用S1以及S2已预测过token的注意力的计算值。

从而每预测一个token,仅需计算当前token的影响,不需要重新计算整个上文对当前token的影响,从而有效的减少了计算量。

代码细节如下:

S1,即a_tokens,用于预测第一个b_token,首次计算时,会将参数保存在prev_layers中。

S2,即b_tokens,每次计算,都会将获得的layers参数cat衔接到prev_layers参数中,利用prev_layers参数,预测下一个当前b_token。

大量的参数能被复用,有效减少了NLG任务的计算量。

Unilm模型适合短文本生成任务,如文本摘要,标题生成,问题生成。

 

3.2 Beam Search策略解读

Unilm Beam Search策略为优先预测最有一个token,然后依据最后token,从上一个token的topk选项中找出最合理选项。

要点如下:

  Search窗口为K,top-K获取每个token前K高选项
  预测第i个token_b,获取到K个选择
  依据第i个token_b的topk选择,选择i+1的token_b的topk选项,并记录这种影响关系。
  预测到最后一个token时,从K个选择中找出最合理的一个,假设预测长度为n;
  然后逆序,依次记录的这种影响关系,找出n-1, n-2, ..., 2, 1位置token的选择。

Beam Search使得生成内容的可读性更好些。

 

Ref

Unilm论文 https://arxiv.org/abs/1905.03197

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值