Skip to content

Paper Sharing: GLM-General Language Model

这次论文分享也来自美团实习期间组里的论文分享,正好记录到blog上。

论文地址

1 Motivation & Realated Work

  • Existing pretraining frameworks 当前现有的预训练框架:
    • Autoencoding 自编码(Encoder only):BERT,RoBERTa, ALBERT;通过掩盖掉某个token然后预测补全,但是它难以直接用于文章生成等任务
    • Autoregressive 自回归(Decoder only):GPT,GPT-2,GPT-3;无法捕捉到NLU任务中对语句的上层理解,token间的复杂关系
    • Encoder-Decoder:T5,BART,MASS.
  • Natural language tasks 自然语言任务
    • Natural language understanding(NLU) 自然语言理解: Sentiment Classification, EQA (Extractive Question Anwering), Natural Language Inference;
      • 以Bert为代表的Autoencoding模型在这类任务上表现较好
      • GPT的出现将这类问题也可以转化成生成式任务,不需要接下游任务; PET (Schick and Schütze, 2020a,b) 通过使用填空方式重构输入样本减少了gpt3的参数
    • Unconditional generation 无条件生成: Language Model;
      • 以GPT为代表的Autoregressive模型在这类任务表现较好
    • Conditional generation 有条件生成seq2seq: Summary, Generative QA, Machine Translation.
      • 以T5为代表的encoder-decoder模型在这类任务表现较好

结论:由于自编码、自回归目标性质不同,缺少一个在这三类NLP任务上表现都很好的统一模型。这篇文章主要就要做这么一件事情,名字也相应的叫做General Language Model (GLM)

2 GLM pretraining Framework

Methodologies: 随机遮掉一段连续的token (基于autoencoding思想) + 训练模型逐一补充全这段内容 (基于autoregressive思想)

(挖掉绿色的部分,蓝色部分的attention是双向的,相互可见;绿色是left-to-right的,用于生成补全)

创新卖点

自编码:随机MASK掉输入文本中一些连续的tokens(text span) —— span shuffling

自回归:重新构建生成之前MASK掉的内容

2D positional encoding

2.1 Training Objective

设输入文本\(x=[x_1, .., x_n]\),随机mask掉一些span\(\{s_1, ..., s_m\}\),每个span都可以表示成\([s_{i,1}, ..., s_{i, l}]\)对应输入文本中一段连续内容。被mask掉的文本用[mask]标记,得到\(x_{\mathcal{corrupt}}\)

span shuffling:为了尽可能的捕捉到不同span之间的内在关系和依赖,本文随机打乱所有span的顺序。具体地,令\(Z_m\)\(\{s_1, ..., s_m\}\)的全排列集合,\(s_{z_{<i}}=[s_{z_1}, s_{z_2}, ..., s_{z_{i-1}}]\)表示index<i的所有span组成的序列。那么训练目标就是\({max}_{\theta}\mathbb{E}_{Z\sim Z_{m}}\left[\sum_{i=1}^{m}\log p_\theta(s_{z_{i}}|x_{\mathrm{corrupt}},s_{z_{<i}})\right]\)。所有的填空生成都是从左到右,即\(p_{\theta}(s_{i}|x_{\mathrm{corrupt}},s_{z_{<i}})=\prod_{j=1}^{l_i}p(s_{i,j}|x_{corrupt}, s_{z_{<i}}, s_{i, <j})\).

例子:x = [x1, x2, x3, x4, x5, x6],mask掉x3和[x5, x6]

mask后分成Part A和Part B,Part A为mask后的\(x_{corrupt}\), Part B是mask掉的内容(图b)

对Part B进行shuffle和填充[Start]和[End],得到用于训练的语料如上图c

图d是self-attention mask的情况,其中Part A部分两两相互都能看见;Part B部分是left-to-right的,后面不能看到前面。

mask策略拓展 对于完成NLU类任务,我们可以以实体(entity)粒度进行mask。每个span的长度服从\(\lambda=3\)的泊松分布;对一个输入反复mask直到至少15%的内容已经被mask掉。

对于Text Generation类任务,我们需要增强模型的生成能力,这时候需要mask掉更多的内容,本文提供了两种方法: - Document-level:mask掉原文本50%-100%的内容。目标是长文本生成。 - Sentence-level:限制每次mask的内容必须是整句话,一共要mask掉原文15%的tokens。目标是seq2seq任务。

2.2 Model Architecture

模型架构就是Transformer,但是进行了一些修改:

(1) 重新调整了layer normalization和residual connection的顺序 (Shoeybi et al., 2019)。原本的transformer的normalization发生在add后面,现在为了提高模型的稳定性,将normalization置前。

(2) 接了一个single linear layer来预测输出的token。

(3) 用GeLU替换了ReLU。

2D positional encoding:本文提出了一种新的位置编码方式(如上面图c),一共两维(id1, id2)。其中id1是mask后token的绝对位置;id2是part B部分的token在自己的span里的位置,part A的token在这里都为0。这个编码方式的优点:不仅表示了输入信息中相对位置的关系,同时并没有向模型“泄露”自己要预测生成的token的长度。

下游任务(finetune):

3 Experiment

GLM模型在NLU、有条件生成和无条件生成三个任务上都有很好的效果;使用1.5倍的GLM(GLM515M)首次同时在三种任务上取得最优,之前都是需要训练三种不同的模型实现。

超参数设置:​

3.1 Setup

为了和Bert比较,训练了两个架构和Bert一样的模型GLMbase和GLMlarge,参数量分别为110M和340M。

对于多任务预训练,训练了两个模型,分别为文档级GLMdoc和句子级GLMsent。

另外还训练了两个更大的模型,参数量分别为410M和515M,记为GLM410M和GLM515M。

为了对比SOTA,还训练了一个数据量、超参数和RoBERTa一样的模型,记为GLMToBERTa。

3.2 Datasets & Results

3.2.1 SuperGLUE

SuperGLUE是一个包含8个高难度自然语言理解任务的基准测试集。本文将这些任务转化为填空问题,并使用预训练的GLM模型生成答案。对比基础模型选择了Bert;在对比大模型中,选择了T5、BART和RoBERTa。

研究结果表明,在大多数任务中,GLM优于BERT,无论是在基础(base)还是大型(large)架构上。而且,GLM在平均得分上也稍微领先于其他模型,尽管领先的幅度相对较小。

3.2.2 多任务Pretrained

在**seq2seq任务**中,本文使用了Gigaword和SQuAD 1.1数据集评估在BookCorpus和Wikipedia上预训练的模型,以及使用了CNN/DailyMail和XSum数据集评估在更大语料库上预训练的模型。结果显示,GLMLarge在性能上与其他预训练模型相当。GLMSent表现更好,而GLMDoc则稍逊。这说明文档级目标对于条件生成任务并不利,因为任务的目的是从上下文中提取信息,而不是扩展上下文。将GLMDoc的参数量增加到410M使其在两个任务上表现最佳。在更大语料库上预训练的模型中,GLMRoBERTa可以与BART相媲美,并且超过了T5和UniLMv2。

有条件生成(seq2seq)

更大的语料库预训练结果

在**文本填充任务**中,本文在Yahoo Answers数据集上评估了GLM,并将其与专为文本填充设计的BLM(Blank Language Model)进行了比较。结果显示,GLM在BLEU评分上明显优于先前的方法,并在这个数据集上达到了最先进水平。

在**语言建模任务**中,本文使用了WikiText103和LAMBADA两个数据集来评估GLM的性能。作者发现GLM在语言建模任务上优于GPTLar;2D位置编码对于生成长文本具有重要作用,去掉它会降低准确率。下面是zero-shot语言建模结果:

3.2.3 消融实验

从上表可以看出GLM的cloze训练范式上对于结果的提升是最有效,另外shuffle spans和2D位置编码也有一定效果;相反的,sentinel token会降低模型效果。

Summary

个人认为这篇文章为了统一NLU任务和文本生成任务,十分着重考虑了mask的相关问题。与其他相关工作不同,本文的出发点是兼顾autoencoding和autoregressive的好处,结合创新的mask方式、pretrain方式让模型兼顾句子的语义理解和内容生成。

在NLU类任务上,还是继承了PET的思想,结合finetune让模型拥有更好的效果;在文本生成任务上,这种pretrain方式得到的PLM的效果依然有很好的效果。