hengyuan

V1

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 APart 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
}

分类:

人工智能

标签:

自然语言处理

作者介绍

hengyuan
V1