论文题目:《GLM: General Language Model Pretraining
with Autoregressive Blank Infilling》
论文链接:https://arxiv.org/pdf/2103.10360.pdf
github链接1:https://github.com/THUDM/GLM;
github链接2:https://github.com/THUDM/ChatGLM-6B
huggingface链接:https://huggingface.co/THUDM/chatglm-6b
摘要
目前,已经有各种类型的预训练架构,包括自编码模型(例如BERT),自回归模型(例如GPT)和编码器-解码器模型(例如T5)。然而,没有一个预训练框架对三个主要类别的所有任务(自然语言理解(NLU),无条件生成和有条件生成)都表现最佳。
本文主要贡献:
- 提出了一种基于自回归空白填充的通用语言模型(GLM)来应对上述三种任务。
- GLM通过添加2D位置编码并允许任意顺序预测跨度来改进空白填充预训练,从而在NLU任务上比BERT和T5获得了性能提升。
- 通过变化空白数量和长度,可以针对不同类型的任务对GLM进行预训练。
- 在跨NLU、有条件和无条件生成的广泛任务范围内,GLM在相同的模型大小和数据情况下优于BERT、T5和GPT,并且使用BERTLarge的1.25×参数的单个预训练模型实现了最佳性能,展示了其对不同下游任务的通用性。
1 GLM预训练
GLM 将 NLU 任务制定为包含任务描述的完形填空问题,这些问题可以通过自回归生成来回答。
1.1. 自回归空白填充
GLM通过优化自回归空白填充目标进行训练。
给定输入文本
x
=
[
x
1
,
…
,
x
n
]
x =[ x_1, …, x_n ]
x=[x1,…,xn],对多个文本跨度
{
s
1
,
…
,
s
m
}
\{ s_1, …, s_m \}
{s1,…,sm} 进行采样,其中每个跨度
s
i
s_i
si对应于一系列连续的标记
[
s
i
,
1
;
…
;
s
i
,
l
i
]
[ s_i ,1;… ; s_i , li ]
[si,1;…;si,li]在x中。每个跨度都被单个 [MASK] 标记替换,形成损坏的文本xcorrupt。
上图意思是原文为[x1, x2, x3, x4, x5, x6]。两个跨度 [x3] 和 [x5; x6] 被采样。
模型通过自回归方式从损坏的文本中预测跨度中缺失的标记,这意味着当预测跨度中缺失的标记时,模型可以访问损坏的文本和之前预测的跨度。为了完全捕捉不同跨度之间的相互依赖关系,我们随机排列跨度的顺序,类似于置换语言模型
跨度的顺序是随机排列的,类似于排列语言模型 ( XLNet )。形式上,令Zm为长度为m 的索引序列 [1, 2, , …, m ] 的所有可能排列的集合,并且s_z < i为 [s_z1, …, s _ zi -1],预训练目标为定义为:
每个空格中的标记始终按照从左到右的顺序生成,即生成跨度si的概率被分解为:
输入x分为两部分:A 部分是损坏的文本xcorrupt,B 部分由屏蔽的 span组成。
GLM 自回归生成 B 部分。每个跨度都以 [S] 作为输入,并附加 [E] 作为输出。二维位置编码表示跨度间和跨度内位置。[M] := [掩码],[S] := [开始],[E] := [结束]
Self-Attention Mask矩阵:灰色区域被遮蔽了。A 部分文本可以关注它们自己(蓝框)但不能关注 B。B 部分文本可以关注 A 及其在 B 中的前文(黄色和绿色框对应于两个跨度)。[M] := [掩码],[S] := [开始],[E] := [结束]。
为了启用自回归生成,每个跨度都用特殊标记 [START] 和 [END] 填充,分别用于输入和输出。通过这种方式,GLM在统一模型中自动学习双向编码器(对于 A 部分)和单向解码器(对于 B 部分) 。
从λ =3的泊松分布中随机抽取长度跨度。新的跨度被重复采样,直到至少 15% 的原始标记被屏蔽。根据经验,15% 的比率对于下游 NLU 任务的良好性能至关重要。
1.2 多任务预训练
在前面的部分中,GLM掩蔽短跨度,并适用于NLU任务。然而,我们有兴趣预训练一个单一模型,可以处理NLU和文本生成。我们研究了一个多任务预训练设置,其中第二个目标是与空白填充目标联合优化的长文本生成任务。我们考虑以下两个目标:
• 文档级别。我们随机抽样一个跨度,其长度从原始长度的50%到100%的均匀分布中抽样。该目标旨在进行长文本生成。
• 句子级别。我们限制掩蔽跨度必须是完整的句子。我们随机抽样多个跨度(句子)以覆盖15%的原始令牌。此目标旨在进行序列到序列任务,其预测通常为完整的句子或段落。
这两个新目标与原始目标相同,即Eq.1。唯一的区别在于跨度数量和跨度长度。
2 GLM模型架构
2.1 模型结构
GLM 使用单个Transformer ,并对架构进行了多项修改:
(1)Layer Normalization的顺序和残差连接被重新排列,这已被证明对于大规模语言模型避免数值错误至关重要(如Megatron-LM),之前应该是先残差,后层归一化
(2)用于输出标记预测的单个线性层;
(3) ReLU s替换为GELU s
ReLU 确定性地将输入乘以零或一,而Dropout随机地乘以零。
对GELU具体来说,神经元输入x可以乘以m~Bernoulli(Φ(x)),其中Φ(x) = P(X≤x);X~ N (0, 1)是标准正态分布的累积分布函数。选择此分布是因为神经元输入倾向于遵循正态分布,尤其是使用批归一化时。由于高斯的累积分布函数通常使用误差函数 计算,因此高斯误差线性单位 (GELU)定义为:
上面公式近似于:
GELU 非线性通过它们的值加权输入,而不是像 ReLU 中那样通过它们的符号来门控输入。 在所有考虑的计算机视觉、自然语言处理和语音任务中都获得了效果改进。
2.2. 二维位置编码
给定Input=[x1,x2,x3,x3,x5,x6],然后采样m个 spans。
把被采样的部分mask掉,得到Part A。
random 被采样的 spans,得到 PartB。
把PartA与PartB拼接成一个sequence,Part A部分采用双向注意力,PartB部分采样自回归预测。为了能够自回归生成,padded 【start】和【end】。
- 每个令牌都用两个位置 ids编码。
- 第一个位置 id 表示损坏的文本xcorrupt中的位置。对于掩码跨度,它是相应 [MASK] 令牌的位置。
- 第二个位置 id 表示跨度内位置
- 对于 A 部分中的字符,它们的第二个位置 id 为 0。对于 B 部分中的标记,它们的范围从 1 到跨度的长度。
- 这两个位置 id通过可学习的嵌入表投影到两个向量中,这两个向量都被添加到输入标记嵌入中。
2.3. 微调GLM
使用 GLM 将情感分类任务制定为空白填充。
通常,对于下游 NLU 任务,会在模型之上添加线性分类器,从而导致预训练和微调之间的不一致。
在这里,NLU 分类任务被重新表述为空白填充的生成任务,如上所述。
具体来说,给定一个带标签的示例 ( x , y ),输入文本x通过包含单个掩码标记的模式转换为完形填空问题c ( x ) 。
给定x预测y 的条件概率为:
如图中的示例,标签“positive”和“negative”映射到单词“good”和“bad”。在这种情况下,GLM 使用交叉熵损失进行了微调。
3 实验结果
3.1 SuperGLUE
预训练的 GLM 模型针对每个任务进行了微调。
GLM在大多数具有基础架构或大型架构的任务上始终优于BERT。平均而言,GLMBase 得分比BERT Base 高 4.6%,GLMLarge 得分比BERT Large 高 5.0%。
- 在RoBERTa Large的设置中,GLM RoBERTa仍然可以在 baselines 上实现改进,但 margin 较小。
- 具体来说,GLM RoBERTa优于T5 Large,但只有它的一半大小。
- 在多任务预训练中,在一个训练批次中,短跨度和长跨度(文档级或句子级)的采样机会均等。
GLMDoc 和 GLMSent 的性能略低于 GLMLarge,但仍优于BERT Large 和UniLM Large。在多任务模型中, GLMSent平均比GLMDoc 高出1.1%。
3.2. 序列到序列
GLM RoBERTa可以实现匹配Seq2Seq BART模型的性能,并且优于T5和UniLMv2。
表 3 和表 4:GLMLarge 可以在二次生成任务上实现与其他预训练模型相匹配的性能。GLMSent 的性能优于 GLMLarge,而 GLMDoc 的性能略低于 GLMLarge。
3.3. 文字填充
表 5:GLM 大大优于以前的方法(1.3 到 3.9 BLEU),并在此数据集上取得了最先进的结果。
3.4. 语言建模
图 4:所有模型都在零样本设置中进行评估。
将模型的参数增加到 410M(GPT Large 的 1.25)导致性能接近GPT Large。
GLM515M ( GPT Large的 1.5 )可以进一步超越GPT Large。
4 结论
GLM是一种用于自然语言理解和生成的通用预训练框架。论文展示了NLU任务可以被形式化为条件生成任务,因此可以由自回归模型解决。GLM将不同任务的预训练目标统一为自回归空白填充,具有混合的注意力掩码和新颖的二维位置编码。我们的实验证明GLM在NLU任务中优于先前的方法,并且可以有效地共享参数以用于不同的任务。