ERNIE-GEN 是面向生成任务的预训练-微调框架,首次在预训练阶段加入span-by-span 生成任务,让模型每次能够生成一个语义完整的片段。在预训练和微调中通过填充式生成机制和噪声感知机制来缓解曝光偏差问题。此外, ERNIE-GEN 采样多片段-多粒度目标文本采样策略, 增强源文本和目标文本的关联性,加强了编码器和解码器的交互。
论文链接:https://arxiv.org/abs/2001.11314
开源地址:https://github.com/PaddlePaddle/ERNIE/tree/repro/ernie-gen
Motivation
- exposure bias issue(曝光偏差问题)。由于训练时使用 teacher-forcing,使用 ground-truth 作为 decoder 的输入,而在推断时使用前一个解码出的字作为 decoder 的输入,导致推断错误会不断累积。也就是训练和推断的偏差。
- word-by-word generation(逐字生成问题)。传统的模型在生成是都是 word-by-word 的生成方式,不仅过于依赖上一个位置的字,也与真实写作习惯差异较大。
- encoder 和 decoder 关联性减弱问题。之前的模型都是采样一个连续的单个子句作为目标序列,当文本很长时,encoder 和 decoder 的关联性变得很弱。
Method
文章分别针对三个问题提出了一些解决方案。
Exposure bias issue(曝光偏差问题)
Infilling generation mechanism(填充式生成机制)
传统的 decoder 中,在训练中使用上一步的 ground-truth $t_{i-1}$ 来生成 $Q$ 向量(即 teacher-forcing),而在推断中使用上一步的预测 $y_{i-1}$ 来生成 $Q$ 向量,即 exposure bias issue(曝光偏差问题)。
通过在 decoder 每个字后面添加一个特殊的符号 $\texttt{[ATTN]}$ 来生成 $Q$ 向量,最顶层接输出层解码出结果。这样将 $Q$ 剥离出来,既统一了训练和推断阶段的不一致,又削弱了解码 $y_i$ 时对于 $t_{i-1}$ 或 $y_{i-1}$ 的过分依赖,缓解了推断中错误解码对后续解码的影响。
Noise-Aware generation mechanism(噪声感知机制)
为了使得模型能够感知推断过程中的错误并忽略错误,在训练时,对 ground-truth 目标序列 $T$ 添加随机噪声变为 $T’$。
word-by-word generation(逐字生成问题)
根据 Infilling generation mechanism,为了便利,我们将所有的 $\texttt{[ATTN]}$ 拼接成一个与目标序列相同长度的序列 $\mathbf{A}_W={\texttt{[ATTN]}_1,\dots,\texttt{[ATTN]}_m}$。则传统的 word-by-word 生成方式为:
逐字生成不仅过度依赖上一位置,而且不符合人类写作习惯,因此提出了 span-by-span 生成方式。span-by-span 的生成方式变为预测一个完整的语义片段,其生成方式为:
对于目标序列的给定 span 边界 $B = {b_1, \dots, b_{|B|}}$
其中,$j\in[b_i,b_{i+1})$。也就是,在一个 span 内的字仅仅依赖于该 span 窗口之前的信息,这样可以使得模型更具有“远见”。
在 ground-truth 序列中采样得到 span 的方式为:
执行 T-检验。原假设 H0:一个随机的 n-gram $\mathbf{w}={w_i,\dots,w_n}$ 不是一个具备统计意义的 span。则 t 统计值为:
$t=\frac{p(\mathbf{w})-p’(\mathbf{w})}{\sqrt{\sigma^2/N}}$
其中,$p(\mathbf{w})=\frac{Count(\mathbf{w})}{N}$ 为统计概率,$p’(\mathbf{w})=\prod_{i=1}^np(w_i)$,$\sigma^2=p(\mathbf{w})(1-p(\mathbf{w}))$
计算出所有 bigram 和 trigram 的 t 统计值,选择前 20000 的 bigram 和前 5000 的 trigram 和所有的 unigram 构建成 span 词表 $V_{span}$
- 根据 trigram -> bigram -> unigram 的顺序对 ground-truth 进行采样,直到一个 span 被查找到。
encoder 和 decoder 关联性减弱问题
当目标序列很长时,decoder 对 encoder 的依赖减弱,有退化为语言模型的趋势。因此,ERNIE-GEN 采用多片段-多粒度目标文本采样策略。
给定输入序列 $S$,首先以概率 0.4 和 0.6 从 $\mathbf{D}={U(1,4),U(4,32)}$ 中采样得到一个长度分布 $D_i$,根据该长度分布 $D_i$ 从输入序列中采样子序列,直到所有子序列的长度达到输入序列的 25%,拼接后的采样子序列即为目标序列 $T$,剩余序列为源序列 $S’$。这样可以增强目标序列与输入序列的关联性。
Architecture
Multi-Flow Attention
ERNIE-GEN 通过在相同的 contextual flow 后接 word-by-word generation flow 和 span-by-span generation flow 来联合学习。
其中,$X=[S,T’]$,$M$ 是 mask 矩阵。
在训练时,使用一个凸组合来合并 word-by-word 和 span-by-span 的 loss。预训练和微调时分别使用 $\lambda=0.5$ 和 $\lambda=1$,即微调时只学习 word-by-word 的生成任务。
Inference: Infilling Decoding
在训练阶段,通过插入一个 $\texttt{[ATTN]}$ 序列来预测输出序列。而在推断阶段,由于目标序列 $T$ 是未知的,所以需要逐步添加 $\texttt{[ATTN]}$ 符号来汇聚上文的表示,进而预测当前位置的输出。为了保证解码效率,在每一步预测结束后都将添加的 $\texttt{[ATTN]}$ 删除掉。
Experiments
ERNIE-GEN 在摘要生成、问题生成和生成式问答/对话中均取得了 SOTA 结果。
Ablation Study
- 通过比较在预训练中使用传统的生成机制和 Infilling generation。当 fine-tuning 不加噪声时,Infilling generation 较传统生成机制好,当加入噪声时,两种生成方式都有提升,而且 Infilling generation 涨幅明显。
- 下图说明在不同的噪声比例下,Infilling generation 均好于传统的生成机制。
- 计算不同的噪声比例下,source 字符、未加噪声的目标字符和加了噪声的目标字符在最后一层的平均 attention 权重。下图说明,随着噪声比例的增大,模型更加关注 decoder 端,而且对于错误的字符分配更少的权重,给正确的字符分配更多的权重。这说明模型能够在推断的过程中检测到并且忽略错误的预测,增强了模型的鲁棒性。
- 下图左侧说明 ERNIE-GEN 的 noise-aware 生成方法和 span-by-span 训练方法都起到了重要的作用。右侧效仿 UNILM 的 mask 微调模式,证明了 noise-aware 的生成方式更优。