摘要
UniLM由微软研究院在bert的基础上开发的新型预训练模型,可在自然语言理解和生成任务上进行微调,模型采用了三个任务进行预训练:单向、双向、sequence to sequence预测。采用共享的Transformer网络和特殊的attention掩码机制,结合了AR和AE语言模型的优点,在抽象摘要、生成式问题回答和语言生成数据集的抽样领域取得了最优秀的成绩。
1. 介绍
AR: Aotoregressive Lanuage Modeling,又叫自回归语言模型。它指的是,依据前面(或后面)出现的tokens来预测当前时刻的token,代表模型有ELMO、GPT等。
AE:Autoencoding Language Modeling,又叫自编码语言。通过上下文信息来预测当前被mask的token,代表有BERT ,Word2Vec(CBOW)。
AR 语言模型:
- 缺点:它只能利用单向语义而不能同时利用上下文信息。 ELMO 通过双向都做AR 模型,然后进行拼接,但从结果来看,效果并不是太好。
- 优点: 对自然语言生成任务(NLG)友好,天然符合生成式任务的生成过程。这也是为什么 GPT 能够编故事的原因。
AE 语言模型:
缺点: 由于训练中采用了 [MASK] 标记,导致预训练与微调阶段不一致的问题。 此外对于生成式问题, AE 模型也显得捉襟见肘,这也是目前 BERT 为数不多实现大的突破的领域。
优点: 能够很好的编码上下文语义信息, 在自然语言理解(NLU)相关的下游任务上表现突出。
语言模型详解
ELMo 学习两个单向的语言模型,一个前向语言模型,从左到右读取文本,一个后向语言模型,从右向左读文本,encode文本信息。
GPT 采用从左向右的Transformer来逐词预测文本。
Bert 使用双向Transformer encoder,将左右的文本信息都融合起来,预测masked word。Bert在大量的自然语言理解任务上表现很优越,但双向的结构使得它很难在自然语言生成的任务上应用。
- UniLM 是一个多层的Transformer网络,在大量文本上进行了联合预训练,针对三种无监督语言模型目标进行优化。单向LM、双向LM、sequence to sequence LM。
-
UniLM与Bert对比:
相同点:可以通过fine-tune来适应各种下游任务
不同点:Bert主要用于NLU任务。UniLM通过不同的self-attention masks机制,能够为不同的语言模型来生成不同的文本信息,从而应用于NLU和NLG任务。
-
UniLM的三个优点:
- 不同的LM模型使用共享的参数和架构,减轻训练和构造多个LM模型的需求
2)由于UniLM的共享参数在不同的LM目标中进行了联合优化,所以学习到的文本表征具有更高的普适性,减缓了单个LM模型的过拟合问题。
3)在NLU任务的应用外,UniLM能够作为sequence to sequence模型使用,从而应用于NLG任务中,比如抽象摘要,问答生成。
2. 预训练
预训练过程为:给定输入序列,UniLM为每一个token训练出一个融合上下文信息的向量表征,即词向量。
UniLM通过三个无监督语言模型目标优化共享的Transformer network,LM目标分别为:单向LM,双向LM,sequence-to-sequence LM。UniLM通过特殊的self-attention机制来控制在训练过程中考虑的文本信息,这种self-attention机制通过mask来决定计算每个token
的向量表征时应该考虑的context是哪些。
在双向LM模型中,没有任何mask,因为上下文信息都会被融入token中。在从左向右的单向LM模型中,矩阵上半三角会被mask掉,因为token只考虑左边的文本信息。在seq-to-seq模型中,句子s1的矩阵部分没有mask,s1因为s1融合上下文信息,句子s2矩阵的右上三角有mask,因为s2融合了s1的信息和左边的文本信息。
当UniLM预训练完成以后,便可通过fine-tuning来应用到下游任务中。
2.1. 输入表征
模型输入为单词序列,在单向LM中为文本片段,在双向LM和seq-to-seq LM中为一对文本片段。
我们在输入的开头加上开始符号[SOS],每个片段的结尾加上结束符[EOS],在NLU任务中,结束符用于标志句子的边界信息,在NLG任务重,结束符还可以让学到何时终止解码步骤。
输入的表征和Bert一致,每个token的向量表征为相应的token embedding,position embedding,sgment embedding的加和。但UniLM在优化不同的LM模型时,segment embedding会有所变化。
-
Token Embeddings 词的向量表示
token embedding 层是要将各个词转换成固定维度的向量。在BERT中,每个词会被转换成768维的向量表示。
-
Segment Embeddings 辅助BERT区别句子对中的两个句子的向量表示
BERT 能够处理对输入句子对的分类任务。这类任务就像判断两个文本是否是语义相似的。句子对中的两个句子被简单的拼接在一起后送入到模型中。那BERT如何去区分一个句子对中的两个句子呢?答案就是segment embeddings.
Segment Embeddings 层只有两种向量表示。前一个向量是把EA赋给第一个句子中的各个token, 后一个向量是把EB赋给第二个句子中的各个token。如果输入仅仅只有一个句子,那么它的segment embedding就是全EA。
-
Position Embeddings 让BERT学习到输入的顺序属性
加入位置信息,能让模型理解相同单词在不同句子中不同位置的信息,学习到不同的向量表示。
实现过程中,Bert处理512个token的输入,词向量维度为768,position embedding是(512,768)的lookup表,序列的每个位置的position embedding对应表中相应的行。
因此,如果有这样两个句子“Hello world” 和“Hi there”, “Hello” 和“Hi”会由完全相同的position embeddings,因为他们都是句子的第一个词。同理,“world” 和“there”也会有相同的position embedding。
2.2. 骨干网络:多层Transformer
模型输入向量:, 首先被包装为, 然后通过L层的transformer,在不同层融合上下文信息,每个Transformer块使用多头注意力融合上一层输出的向量,编码为,
上一层的输出通过三个参数矩阵被线性的投影为queries,keys和values。
掩码矩阵M决定一对token在attention中是否会考虑对方。
文章使用不同的掩码矩阵M来控制生成一个token的表征时需要考虑的上下文信息。
2.3 预训练目标
- 完形填空:对于三个LM模型都进行完形填空任务,模型在与训练过程中随机选取输入中的token,将他们替换成特殊字符[MASK],将这些[MASK]字符的输出向量放入softmax分类器中来预测字符的值。UniLM的参数通过最小化原始tokens和预测tokens的交叉熵损失函数来优化。
- 下一句预测:针对双向LM模型进行下一句预测任务,操作和bert一致。目的是让模型理解两个句子之间的联系。训练的输入是句子A和B,B有一半的几率是A的下一句,输入这两个句子,模型预测B是不是A的下一句。预训练的时候可以达到97-98%的准确度。
2.4 预训练设置
整体的训练目标为各LM模型训练目标的总和。在每个训练批次中,1/3使用双向LM目标,1/3使用seq-to-seq LM目标,自左向右和自右向左的单向LM目标都为1/6。
UniLM的模型构架和Bert Large版本一样,激活函数和GPT一样用gelu。此外,本模型采用24层transformer,隐层节点为1024,注意力头数16,包含360M参数。
UniLM使用Bert Large进行初始化,再在英语wikipedia和BookCorpus上进行预训练。词典大小为28,996,输入句子的最大长度为512。
输入token被mask掉的概率为15%,其中10%用随机token替换,10%保持用原始token,80%用[mask]替换。此外,80%情况下mask一个token,20%情况下mask bigram或trigram。
2.5 在下游NLU和NLG任务中微调
-
NLU任务
使用双向tranformer encoder进行微调,文本分类任务中,使用[sos]的输出向量,标为,输入到随机初始化的softmax分类器中,分类概率为,是参数矩阵,C是类别数目。
-
NLG任务
使用seq-to-seq模型,微调过程和预训练中使用self-attention masks相同。S1为源序列,S2为目标序列,输入为“[sos] s1 [eos] s2 [eso]”,模型通过随机在s2中mask一定比例的token,学习去还原这些token。训练目标为在给定上下文的时候最大化masked tokens的概率。在生成的过程中,若预测出了[eos]则代表生成结束。
实验
-
抽象摘要
-
问答
-
问题生成、回复生成
参考文献:paper阅读:UniLM(Unified Language Model Pre-training for Natural Language Understanding and Generation)