动机
- 不同类型的语言模型使用不同的预测任务和训练目标,
BERT
提高了NLU
任务的性能,但双向特性难以适应NLG
任务。
贡献
- 提出一个新的联合预训练语言模型
UniLM
,使得在NLU
和NLG
任务上都可以进行fine-tuned
; - 该方法通过共享的
Transformer
和特定的self-attention mask
预测条件上下文,通过三种无监督语言目标进行优化,在GLUE
等数据集上结果优于BERT
。
不同类型的语言模型的区别
UniLM
预训练目的在于对于给定的输入序列,获得每个token
的上下文表征向量。如图所示,通过三种不同的无监督语言建模目标对共享的多层Transformer
进行优化,包括unidirectional LM
、bidirectional LM
和sequence-to-sequence LM
。在实现时,通过控制self-attention
时的mask
来控制每个token
对上下文的关注程度,以进行不同的建模任务。预训练后,则使用下游任务的特定任务数据进行微调。
预训练目标
本文为不同的语言建模目标设计了四个完形填空任务,即对输入随机选择一些token
并进行[MASK]
,然后输入Transformer
并通过softmax
进行分类预测。
Unidirectional LM
:
包含left-to-right
和right-to-left
,即每个token
只对其单向的context token
和自身进行编码,在self-attention
时使用三角形的mask
来实现,将不被关注的部分设置为,被关注的部分设置为。
Bidirectional LM
:
允许所有token
在预测时相互可见,从两个方向上对context
信息进行编码,在self-attention
时的mask
为全矩阵。
Sequence-to-Sequence LM
:
在第一个source segment
内,token
双向互相可见,在第二个target segment
内,token
只关注自身、及左边的段内上下文,和源段的token
。在self-attention
时,左边部分设置为,即所有token
都可以关注source segment
,右上部分设置为,即source segement
中的token
不能关注target segment
,右下部分的上三角设置为,其余为,即target segement
中的token
只关注自身及左边位置。
Next Sentence Prediction
:
对于Bidirectional LM
,使用BERT
的NSP
任务。
预训练设置
最终的训练目标是上述不同类型的LM
目标之和,即在训练的一个batch
,的数据使用Bidirectional LM
,的数据使用Sequence-to-Sequence LM
,left-to-right LM
和right-to-left LM
各。
UniLM
模型采用BERT_large
,使用gelu
激活函数,即包含层Transformer
,hidden size
为,有个attention head
,softmax
的权重和token embedding
相关联。使用BERT_large
进行初始化,之后使用WikiPedia
和BookCorpus
进行预训练,词表大小为,输入序列最大长度为,token mask
的概率为。采用Adam(0.9,0.999)
进行优化,学习率为,在前步进行linear warmup
,之后进行线性衰减,dropout rate
为,weight decay
为,batchsize
为。
微调
对于NLU
任务,将UniLM
作为bidirectional Transformer encoder
,类似BERT
;
对于NLG
任务,以sequence-to-sequence
为例,输入设置为[SOS]S1[EOS]S2[EOS]
,通过在目标序列中随机mask
并预测恢复来进行微调,训练目标是在给定的context
中最大限度提高mask token
的似然,若[EOS]
被mask
,则是希望模型学习何时给出[EOS]
以结束生成。
部分实验结果
NLU
任务GLUE benchmark
:
NLG
任务dialog response generation
:
该任务使用了label smooth
和beam search
(即使用topk
)