专栏首页NewBeeNLP【作者解读】ERNIE-GEN : 原来你是这样的生成预训练框架!

【作者解读】ERNIE-GEN : 原来你是这样的生成预训练框架!

作者 | PROoshio

整理 | NewBeeNLP

写在前面

今年1月,百度发布了全新的生成式预训练模型ERNIE-GEN,我们在之前的一些文章中有过介绍:『芝麻街跨界NLP,没有一个ERNIE是无辜的』、『NLP简报(Issue#4)』,但都不是很深入,今天一起看看来自paper作者对ERNIE-GEN的解读。

『ERNIE-GEN』主要针对:

  • 生成训练中的“曝光偏置(exposure bias)”问题;
  • 如何用人类写作习惯去训练自然语言生成;
  • 如何在预训练中增强encoder和decoder的交互。这三个问题,提出了一种Multi-Flow结构的预训练和微调框架。

论文中,ERNIE-GEN利用更少的参数量和数据,在摘要生成、问题生成、对话和生成式问答4个任务共5个数据集上取得了SOTA效果。

  • 论文链接:https://arxiv.org/pdf/2001.11314.pdf
  • 开源地址:https://github.com/PaddlePaddle

Motivation

之前的生成式预训练模型如MASS、UniLM、BART等,将 Mask LM学习任务和seq2seq框架结合,在一系列生成任务上取得了显著的提升,并刷新SOTA。但这些预训练模型却很少关注自然语言生成中的一些具体的问题,对此ERNIE-GEN从以下3个问题展开了实验:

  • 「曝光偏置(exposure bias)」 问题:teacher forcing的生成训练,在训练中用Ground Truth作为decoder端的输入,而解码时用之前生成的序列作为decoder端的输入,导致训练和解码的产生偏差;
  • 「逐字符学习」问题:传统的seq2seq训练,采用逐字符(word-by-word)的学习方式,存在1)预测时过度依赖上一个词;2)与人类写作习惯 (实体、短语甚至句子同时构思,并非单个字符) 不一致的问题;
  • 「Encoder和Decoder相关性减弱」问题:在自监督的seq2seq预训练中,当输入序列很长时(假如encoder和decoder各50%),那么decoder和encoder的语义相关性减弱,模型学习将逐渐退化为Language Modeling。

针对以上3个问题,ERNIE-GEN提出一套基于Multi-Flow attention结构的预训练和微调框架:

Methods

“曝光偏置(exposure bias)”问题

在基于Transformer的seq2seq框架中,decoder端第

i+1

个字符

y_{i+1}

的预测公式如下:

Training:y_{i+1}\leftarrow MultiHead(Q=t_{i}, KV=[S,t_{\leq i}])
Decoding:y_{i+1}\leftarrow MultiHead(Q=y_{i}, KV=[S,y_{\leq i}])

其中

y

,

t

分别表示预测字符向量和Ground Truth字符向量,

S

为encoder端的表示;对

y_{i+1}

的预测起着直接影响的是用来汇聚上文表示的

Q

,这也是训练和解码阶段产生差异最直接的地方。同时,

K,V

在训练和解码中也存在差异,但对

y_{i+1}

的影响相对较弱。

为了在预训练阶段减小下游任务的“曝光偏置(exposure bias)”问题,ERNIE-GEN提出了两种适用于大规模无监督预料的生成训练方法:1)填充生成机制(Infilling Generation);2)噪声感知生成方法(Noise-aware Generation)。

  • 「Infilling Generation Mechanism 填充生成机制」

针对训练和解码中

Q

存在的差异,Infilling Generation通过在decoder端每个字符后填充符号[ATTN]作为

Q

来汇聚上文表示,统一了训练和解码中

Q

的差异:

Infilling Generation的好处有两点:

  1. 减弱了预测
y_{i+1}

时对 上一个字符

t_{i}

(训练时)或者

y_{i}

(解码时)的依赖,将预测的注意力转移到更全局的上文表示,从而在解码阶段,有利于缓解

y_{i}

预测错误对

y_{i+1}

的影响,增强生成的鲁棒性。同时在训练阶段,有利于缓解局部过度依赖;

  1. 统一了训练和解码中
Q

的差异,有利于减弱"曝光偏置"。

  • 「Noise-aware Generation Method 噪声感知生成」

针对训练和测试中

K,V

的差异,ERNIE-GEN在训练中对decoder的输入序列添加随机噪声,来训练模型感知错误,并通过调整attention权重来减弱错误对后续生成的影响;

但最好的方式是用模型先生成一遍目标序列,再根据生成的分布进行采样,这种方式是最本质解决”曝光偏置“的方法,如ACL2019最佳论文,将模型生成序列和Ground Truth序列融合输入decoder进行学习。考虑到预训练基于大规模的无监督预料,ERNIE-GEN只采用简单的随替换,来缓解“曝光偏置”。

逐字符学习的问题

传统的自回归seq2seq训练采用逐字符(word-by-word)的学习范式,而人类写作,往往是实体、短语甚至句子同时构思好的,并非逐字思考;而且逐字符学习很容易局部过拟合,过度依赖上一个字符的表示。

针对逐字符学习的不足,ERNIE-GEN提出了逐片段(span-by-span)的学习范式,即训练时,每步不只预测一个字符,而是预测一个语义完成的片段:

图中

[t_{2},t_{3}]

为一个语义完整的span。逐字符学习(word-by-word)的目标序列的概率为:

P(t_1,t_2,t_3|S,\theta)=P(t_1|S,\theta)\times P(t_2|[S,t_1],\theta)\times P(t_3|,[S,t_1,t_2],\theta)\\

逐片段学习(span-by-span)的目标序列的概率为:

P(t_1,t_2,t_3|S,\theta)=P(t_1|S,\theta)\times P(t_2,t_3|[S,t_1],\theta)\\ P(t_2,t_3|[S,t_1],\theta)=P(t_2|[S,t_1],\theta)\times P(t_3|[S,t_1],\theta)\\

[t_2,t_3]

内,

t_2

t_3

是同时预测的,它们都依赖相同的上文

[S,t_1]

。使模型在

t_1

位置具有生成下一个语义片段span的能力,让模型更具「远见」,并提高生成质量。

为了连续地采样语义完整片段(semantically-complete span),ERNIE-GEN通过「T-检验」来统计训练数据中的

n-gram

片段:

  • 「step1:」 基于初始假设
H_0

: “一个随机的

n-gram

不是一个具备统计意义的片段“,可以计算得到训练数据中所有

bi-gram

tri-gram

t-统计值,公式如下:

tscores ={\frac{(p({w})-p^\prime({w}))}{\sqrt{\sigma^2/N}}} ,p^\prime ({w})\!=\!\prod_{i=1}^n p(w_{i}), p({w})\!=\!\frac{\texttt{Count}({w})}{N} \\

其中

p({w})

{w}

的统计概率,

\sigma^2\!\!=\!p({w})(1-p({w}))

{w}

的方差(伯努利分布);

N

n-gram

的总数;

  • 「step2:」 筛选出t-统计值. top 20w的bi-gram和top 5w tri-gram以及全部uni-gram来构造span词典
{V}_{span}

;*注:_t-统计值_越高表示越否定假设

H_{0}

{w}

越可能是统计意义下完整的片段。

  • 「step3:」 根据词典
{V}_{span}

在ground truth序列中采样span,按照tri-gram

\rightarrow

bi-gram

\rightarrow

uni-gram的顺序在

{V}_{span}

中查询,直到一个gram被查到。

Encoder和Decoder相关性减弱的问题

在构造预训练数据时,UniLM和MASS都采样一段连续的子序列作为生成目标,当输入序列很长时,由于目标序列较长,decoder端对encoder的依赖减弱,模型训练有退化为language model的风险,不利于encoder和decoder的联合预训练。对此ERNIE-GEN采用「多片段-多粒度采样」的策略来构造预训练数据:

给定输入序列

S

,ERNIE-GEN先采样一个长度分布

D_i\in [U(1,4),U4,32]

,根据

D_i

S

中采样子序列,直到所有子序列

{T}=[T_1,...T_k]

的总长度到

S

的 25%。拼接后的的序列

{T}

为预训练学习的目标序列,采样后的

S

记作

S^{\prime}

。如此一来,采样的子序列和

S^{\prime}

的语义相关性很强,encoder和decoder的相关性也进一步得到增强,有利于encoder和decoder的联合预训练。

Model Architecture

「Multi-Flow Attention」 多流attention结构

基于Infilling generation机制,ERNIE-GEN在预训练中将word-by-word和span-by-span的训练任务进行联合学习。在具体实现中,ERNIE-GEN将infilling generation中插入的[ATTN]符号抽出,拼接成了一个[ATTN]符号序列

{A}

用于预测。模型通过输入两个等长的符号序列

{A}_{W},{A}_{S}

来预测word-by-word任务和span-by-span任务的生成结果。

图中蓝色区域为「Contexture Flow」,用于提供上文表示,其

l-th

层到

(l+1)-th

层更新如下:

{s}_i^{(l+1)}\leftarrow Multihead(Q={s}_i^{(l)},KV={S}^{(l)})
{t}_i^{(l+1)}\leftarrow Multihead(Q={t}_i^{(l)},KV=\left[{S}^{(l)},{t}_{\leq i}^{(l)}\right])

其中,encoder序列为

{S}=\{s_{1},...,s_{n}\}

,加噪后的decoder输入序列为

{T}^\prime=\{t_{1},...,t_{m}\}

图中绿色区域为基于Infilling generation机制的「Word-by-word generation flow」,用于学习逐字符地生成,其

l-th

层到

l+1-th

层更新如下

{a}_i^{(l+1)}\leftarrow Multihead(Q={a}_i^{(l)},KV=\left[{S}^{(l)},{t}_{\leq i}^{(l)},{a}_{i}^{(l)}\right])

其中

{a}_i^{(l)}

表示 l-th层,符号序列

{A}_{W}

的 第

i

个隐层向量。

图中橘色区域为基于Infilling generation机制的「Span-by-span generation flow」,用于学习逐片段地生成。在给定采样span的边界序列

B\!=\!\{b_{1},...,b_{|B|}\}

时,其

l-th

层到

l+1-th

层更新如下:

{a}_j^{(l+1)}\leftarrow Multihead(Q={a}_j^{(l)},KV=\left[{S}^{(l)},{t}_{\leq b_{i}}^{(l)},{a}_{j}^{(l)}\right])

其中

{a}_i^{(l)}

表示 l-th层,符号序列

{A}_{S}

的 第

j

个隐层向量,也即第

i

个span的第

(j-b_i)

个隐层向量,

j\in[b_{i},b_{i+1})

。片段

\{t_{b_{i}},...,t_{b_{i+1}-1}\}

是在给定上文时,同时预测的。

在实现中,「Contexture Flow」「Word-by-word Flow」「Span-by-span Flow」的输入分别是

{X}=[{S},{T}^{\prime}、{A}_{W}]

{A_{S}}

,并通过不同的_attention mask_矩阵

M

来实现具体的逻辑:

\begin{cases} {X}^{(l+1)}\leftarrow Multihead (Q={X}^{(l)},KV={X}^{(l)},M_{C})\\ {A}_W^{(l+1)}\leftarrow Multihead(Q={A}_W^{(l)},KV=\left[{X}^{(l)},{A}_W^{(l)}\right]\!,M_{W})\\ {A}_S^{(l+1)}\leftarrow Multihead(Q\!=\!{A}_S^{(l)},KV\!=\!\left[{X}^{(l)}\!,{A}_S^{(l)}\right]\!,M_{S}) \end{cases}

「Contextual Flow」

S

是双向可见的,

{T}^{\prime}

是单向可见的 (seq2seq);而「Word-by-word Flow」中的符号序列

{A}_{W}

不能看见相同位置的目标字符;「Span-by-span Flow」中,符号序列

{A}_{S}

不能看见同一个span中的所有目标字符,如图中的

t_2,t_3

「Word-by-word Flow」「Span-by-span Flow」的loss加权更新,Pre-train阶段,ERNIE-GEN同时训练两个任务

\lambda=0.5

;Finetune阶段

lambda=1.0

,ERNIE-GEN只学习word-by-word的生成任务:

\begin{align} \mathcal{L}({T})&=\lambda\mathcal{L}_{Word}({T})+(1-\lambda)\mathcal{L}_{Span}({T})\\ &=-\lambda{\rm log}P({T}|{A}_W^{(L-1)})-(1-\lambda){\rm log}P({T}|{A}_S^{(L-1)}) \end{align}\\

「Infilling Decoding」填充解码

训练时,ERNIE-GEN通过[ATTN]符号序列

{A_{W}}, {A_{S}}

来生成序列,而在解码时,则需要一步一步地插入[ATTN]符号来汇聚上文表示,预测当前位置的字符。为了保证解码的效率,ERNIE-GEN在[ATTN]预测完毕后,会将[ATTN]的表示从序列中去除。具体的解码步骤如下图所示:

Experiments

Pre-training

ERNIE-GEN使用和BERT、UnilM相同的训练数据(16G),base和large模型分别用BERT-base和BERT-large热启,训练40W步左右。预训练阶段,在decoder输入序列中加入比例为

\rho_{p}=0.05

的噪声。ERNIE-GEN在最近补充了用160G预训练数据(同Roberta)下的模型性能,多个生成数据集上取得了SOTA。

Fine-tuning

ERNIE-GEN在摘要生成、问题生成、对话和生成式问答4中任务上进行了实验,都验证了策略的有效性。

  • Finetune参数配置

Ablation Studies

  • Infilling Generation 和 传统生成机制

ERNIE-GEN在3个小数据集上(Gigaword-10k, CNN/DM-10k和SQuAD)上对比了Infilling generation和传统生成机制。对比结果分别用Infilling generation机制和传统生成机制pre-train和finetune,实验结果如下:

当finetune不加噪声时,Infilling generation机制在CNN/DM-10k和SQuAD上较传统机制更好,但在Gigaword-10k上持平;当finetune加入噪声时,两种生成机制的效果都有明显的提升,且infilling机制在摘要生成任务上的涨幅为明显。

左图指出,infilling generation机制在不同的噪声

\rho_f

比例下,都较传统生成机制性能更好;为了进一步说明噪声对生成训练起的作用,论文中分析了不同噪声比例下,比较了encoder字符、未加噪的decoder字符和加噪的decoder字符在最后一层的平均attention权重。有意思的是,随着噪声比例增加,模型将更多的注意力分配到decoder端,用于检测decoder端的错误,并且给错误的字符分配更小的权重,给正确的字符分配更高的权重,从而增加了生成的鲁棒性。

  • Span-by-span 训练任务 和 Noise-aware 生成方法

表中上方的对比实验指出,span-by-span训练任务和Noise-aware生成方法都起到了显著的性能提升作用。

UniLM利用Mask LM的方式进行finetune,实质上是在输入序列中加入[MASK]噪声,随后预测噪声位置的真实字符。这种噪声finetune方式存在Mask(噪声)和预测耦合的问题,学习性能不高 (UniLM在finetune中的mask比例为

0.7

)。因此,为了验证ERNIE-GEN的Noise-aware生成方法相较于Mask LM方式更有效,论文也列出了ERNIE-GEN使用Mask LM(0.7)方式进行finetune训练的实验结果结果,并验证了Noise-aware生成方法的有效性。

总结

ERNIE-GEN针对生成任务的具体问题,如“曝光偏置”、局部强依赖性等,提出了一套在预训练中可行的解决方案,增强了自然语言生成学习的鲁棒性。通过设计一套pre-train和fine-tune的统一的学习框架,ERNIE-GEN缩小了pre-train和fine-tune间的差异;同时,通过infilling generation机制和noise-aware generation方法,也缩小了training和decoding之间的差异。最终,ERNIE-GEN在多项生成任务上取得了最好的效果,验证了所提出策略的有效性。

- END -

本文分享自微信公众号 - NewBeeNLP(NewBeeNLP),作者:PROoshio

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BERT源码分析(PART I)

    最近在看paddle相关,于是就打算仔细过一遍百度ERNIE的源码。之前粗看的时候还没有ERNIE2.0、ERNIE-tiny,整体感觉跟BERT也挺类似的,不...

    kaiyuan
  • Graph-Bert:没有我Attention解决不了的

    最近要做一个图相关的项目,之前没怎么接触过图网络,就从头开始学习了一下,后面有时间也会整理分享。这里顺便推荐一下清华大学唐杰老师的一个分享:「图表示学习和图神经...

    kaiyuan
  • 芝麻街跨界NLP,没有一个ERNIE是无辜的

    之前发在知乎、AINLP以及CSDN上的预训练模型系列文章,最近打算整理到公号上。另外欢迎大家左下角阅读原文关注我的知乎专栏:【BERT巨人肩膀】

    kaiyuan
  • laravel实现按月或天或小时统计mysql数据的方法

    如:要实现获取下图曲线图数据(ps:当然也可能是柱状图等,数据都是一样的),默认获取七天内的数据,点击今天,7天,15天,30天可任意切换,其中今天是按小时统计...

    砸漏
  • 手把手教你学会风险因子关联图绘制

    看到这张图是不是眼前一亮的感觉,觉得你的预后类型文章就差这一张图了呢?那么恭喜你,看完这个帖子就能将它收入囊中了。

    百味科研芝士
  • 论文阅读理解 - Automatic Spatially-aware Fashion Concept Discovery

    [Paper - Automatic Spatially-aware Fashion Concept Discovery - ICCV2017]

    AIHGF
  • Emlog博客正文CSS实现首行缩进的方法,理论所有网页通用

    根据我们中国人写文章的习惯,首行是需要缩进两个字的地方的,博主写文章时每次都自己敲空间挺麻烦的,所以在模板里添加该空格是很多人所希望的。莫小奈说一下如果实现博客...

    陌涛
  • ChecklistForTest

    未来sky
  • 用一个图书库实例搞懂二分搜索树的底层原理

    二叉树是一种常用的数据结构,更是实现众多算法的一把利器。本文将通过建立一个图书库的实例对二叉树中的常用类型:二分搜索树(Binary Search Tree)进...

    智慧zhuhuix
  • 双因素认证(2FA)教程

    所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤。 密码是最常见的认证方法,但是不安全,容易泄露和冒充。 ? 越来越多的地方...

    ruanyf

扫码关注云+社区

领取腾讯云代金券