hengyuan
2023/02/24阅读:32主题:嫩青
GLM
Github:https://github.com/THUDM/GLM
Title:GLM: General Language Model Pretraining with Autoregressive Blank Infilling
1.Motivation
-
之前主流的三种 pre-trained model arch 主要是 autoencoding model (e.g., BERT), autoregressive models (e.g., GPT), and encoder-decoder models (e.g., T5). 然而,没有一个 unified 的 model 可以在三个主要类别 (NLU, unconditional generation, and conditional generation.) 的任务中表现最好。 -
之前也有人用 MLM Loss 和 MLE Loss 去进行 Multi-task training 想让模型在 NLU 和 NLG 上都表现好,但是因为这两个 Loss 本质上还是相差的比较多,这种 Multi-task training 获得的模型并不是最好的,因此该论文提出了 GLM 这种 pre-training framework (based on autoregressive blank infilling),只用一个 Loss 就可以让模型兼备 NLU 和 NLG 这两种能力
2.Background

-
上面这个图可以看到每个 arch 在三个方面能力的表现 -
Augoregressive models 在 uncondition generation 上的效果比较好, 而且在 Long-text generation 以及 few-shot 上的表现也不会更好 (billion 级别的大模型上),缺点就是它的 undirectional attention mechanism 在 NLU tasks 上没办法 fully capture context 的信息 -
Autoencoding models 里面的 bi-directional attention 让它可以更好地理解上下文的信息,但是无法直接去进行 text generation -
Encoder-Decoder 在 condition on encoder information 去进行生成上的效果比较好,因为 encoder 有 bidirectional attention 去得到 contextual information, 然后 decoder 用 cross-attention 从 encoder 获取信息来进行 conditional generation
-
3.Method

-
方法上主要提出了 Span Shuffling 和 2D positional encodings。 -
Span Shuffling 就是把 Masked 的 text span 的顺序打乱去进行预测,而不是顺序预测 -
2D Positional Encoding 就是用两个 Position embedding (分别是 inter- and intra-span positions) 来 represent Masked text span 里面每个 token 的位置信息,inter 就是这个 token 对应的是原来句子中哪个位置的 [MASK]
, intra-span 就是 token 在每个 span 内部自己的位置
3.1 Autoregressive Blank Infilling
-
整体就是把一个句子随机 mask 掉几个 text span (用
[MASK]
token), 然后让模型用 autoregressive 的方式打乱顺序地去还原 span 的内容 -
这里把原始的一个完整的句子拆分成了 Part A 和 Part B,Part A 是带有
[MASK]
token 的 corrupted text, Part B 是MASK
token 对应的 text span 内容 -
然后训练的时候,把 Part B 部分所有的 text span 进行 span shuffling,然后按 shuffling 后的顺序输入给模型进行 autoregressive 的训练
-
之所以做 span shuffling,是想让模型在预测当前 span 内容的时候可以 capture 到其他前后不同位置的 span 的信息
-
-
然后这里对 attention mechanism 也做了一些设计,Part A 部分是 bidirectional 的 self-attention (并且不能 attention 到 Part B 里面的内容), Part B 部分是 undirectional 的 masked self-attention,可以 attention 到它前面的所有内容
-
因为 Part B 打乱了顺序,所以在生产 的时候,虽然是以 auto-regressive 的形式进行生成,但是生成的时候本质上是看了上下文的内容的, 因为有 attention 到 的信息哈
-
-
整个训练的 objective 如下
-
代表一个 text span, 代表这个 text span 的 token 数量, 代表的是span 之前的所有 span
-
用这种方式进行预训练的话,模型可以学习到一个 bidirectional 的 encoder (Part A 部分) 和一个 undirectional 的 decoder (Part B 部分), 有点像是 把 Encoder 和 Decoder 通过设置不同的 attention mechanism 给他集成在一个 BERT 模型当中
3.2 Multi-Task Training
-
利用这种 pre-training framework 并配合不同的 text span 的 token 数量,可以让模型完成不同的任务从而获得不同的能力 -
就是说用一个 Auto-regressive 的 Loss 就可以帮助模型同时学会怎么利用 bidirectional attention 去进行 NLU 和利用 undirectional attention 去进行 NLG, 这个是他们这个 pre-training framework 的特点
-
-
当 text span 的 token 数量比较短的时候 (e.g., 3), 那么在这个 setup 场景下就是去训练模型让其获得 NLU 方面的能力 -
因为这时候更多的是需要模型通过 bidirectional attention 从 Part A 部分获取更 robust 的 representation 来帮助 predict mask 部分的内容,因为 mask 的 text span token 比较少,没有什么其他上文的信息课参考,所以不太需要生成方面的能力
-
-
反之,如果 text span 的 Token 数量比较多的时候,那么就是在训练模型的 NLG 能力,因为这时候需要 predict 生成出来的 token 数量比较多 -
这边他们实验中是 mask 了 document-level 和 sentence-level 这两个级别来训练模型的 NLG 能力
-
3.3 Other Info

-
文章针对 NLU 中的 classification tasks 他们模仿 PET 的方式,把这些 tasks 用 prompt template 的方式都改成了 generation 的形式,用一个 verbalizer 把生成的结果于 class 关联起来,i.e., predict "good" 这个 token 的概率就等于 positive 的概率,"bad" 的概率就是 negative class 的概率,具体流程如上图
-
注意,还把 Transformer block 里面的 residual addition 和 LayerNorm 的位置重新编排了一下,这个是之前的工作的一个 hint, 参考,具体的区别如下, 就是把 LayerNorm 放到前面去,这样做的目的是在训练大模型的时候能更加稳定一些,而且效果也会更好一点

-
直接在 pre-trained model 上进行 inference 的时候,用户只要输入 corrupted text 让模型去还原就可以了,模型在 inference 的时候应该也不是从左到右还原 MASK span 的,因为也是乱序地去还原不同的 MASK span,这样比较符合 pre-training 的范式
4.Compared Models
-
比较的主要是 BERT, XLNet, UniLM, 其中 UniLM(参考苏神博客) 和 GLM 比较相似,UniLM 也是在 attention 上面做修改,它的 attention matric 的设计和 GLM 基本一致,唯一的区别在于 UniLM 分别用了 MLM Loss (autoencoding model objective) 和 MLE Loss (autoregressive model object) 两个 Loss 来让模型兼备 NLU 能力和 NLG 能力,而 GLM 的话只用了一个 autoregressive objective 就 unify 了 NLU 和 NLG 能力,会更 efficient 些


5.Hints
-
可以通过改变模型的 Position encoding 以及对应的 attention mechanism 来巧妙地让模型以 autoregressive 的方式去利用上下文的信息来生成,而不是之前的那种只利用上文的信息来生成 -
通过修改 in-filling span 的长度可以只用一个 auto-regressive loss 训练模型 NLU 和 NLG 的能力,span 比较短的话就可以锻炼 NLU, span 比较长可以锻炼 NLG
6.Highlights
-
文章证明了在相同 Model size 和训练数据(和之前的模型用的同样的数据)的情况下,GLM 比 BERT, GPT, T5 等之前的一些预训练模型的效果要来的好 -
GLM significantly outperforms BERT on the SuperGLUE benchmark by a large margin of 4.6% – 5.0% and outperforms RoBERTa and BART when pretrained on a corpus of similar size (158GB). GLM also significantly outperforms T5 on NLU and generation tasks with fewer parameters and data.
7.Dataset
-
pre-training 所用到的所有数据参考 corpus.py, 一共有 14 个数据,包含中文和英文,具体如下
NAMED_CORPORA = {
'wikipedia': wikipedia,
'wikipedia-key': KeyReader,
'openwebtext': OpenWebText,
"zhihu": zhihu,
"zhidao": zhidao,
"baike": baike,
"test": TestDataset,
'wikibook': BertData,
"bert-base": BertBaseData,
"bert-large": BertLargeData,
'cc-news': CCNews,
'pile': Pile,
'stories': Stories,
'wudao': WuDaoCorpus
}
作者介绍