UniLM详解
一、前言
预训练模型的网络结构一般分为三类:
- 自编码模型:如bert;
- 自回归模型:如gpt;
- encoder-decoder:如sqe-sqe
二、概念
UniLM全称是统一语言模型(Unified Language Model),是在微软研究院在BERT的基础上提出的预训练语言模型。使用三种特殊的Mask的预训练目标,从而使得模型可以用于NLG,同时在NLU任务获得和BERT一样的效果
三、模型结构
UniLM的核心是将几种不同的训练方式或模型结构统一到一种类似掩码语言的框架上,去共同学习一个Transformer网络;主要是通过一个 掩码矩阵 M 来控制预测单词的可见上下文词语数量,进而适配不同的训练任务,具体结构见下图:
3.1 模型输入:
- 词嵌入:UniLM采用了WordPiece的方式对其进行了分词;
- 位置嵌入:UniLM中添加了位置嵌入(和BERT相同的方式)和用于区分文本对的两个段的段嵌入(Segment Embedding);
- 特殊标记:UniLM在句子的开始添加了 [SOS] 标志。为了分割不同的段,它向其中添加了 [EOS] 标志。
3.2、网络结构
如图1红色虚线框中的内容,UniLM使用了
L
L
L 层Transformer的架构,为了区分使不同的预训练任务可以共享这个网络,UniLM在其中添加了掩码矩阵的运算符。具体的讲,我们假设输入文本表示为
x
i
i
=
1
∣
x
∣
{x_i}_{i=1}^{|x|}
xii=1∣x∣ ,它经过嵌入层后得到第一层的输入
H
0
=
[
x
1
,
⋅
⋅
,
x
i
]
H^0 = [x_1,\cdot \cdot,x_i]
H0=[x1,⋅⋅,xi] ,然后经过
L
L
L 层Transformer后得到最终的特征向量,表示为
H
l
=
T
r
a
n
s
f
o
r
m
e
r
(
H
l
−
1
)
,
l
∈
(
1
,
L
)
H^l =Transformer(H^{l-1}),l\in{(1,L)}
Hl=Transformer(Hl−1),l∈(1,L) 。 不同于原始的Transformer,UniLM在其中添加了掩码矩阵,以第 层为例,此时Transformer转化为式(1)到式(3)所示的形式。
Q
l
=
H
l
−
1
⋅
W
l
Q
,
K
l
=
H
l
−
1
⋅
W
l
K
,
V
l
=
H
l
−
1
⋅
W
l
V
Q^l = H^{l-1} \cdot W_{l}^Q , K^l = H^{l-1} \cdot W_{l}^K ,V^l = H^{l-1} \cdot W_{l}^V
Ql=Hl−1⋅WlQ,Kl=Hl−1⋅WlK,Vl=Hl−1⋅WlV
M
i
j
=
{
0
a
l
l
o
w
t
o
a
t
t
e
n
d
−
∞
p
r
e
v
e
n
t
f
r
o
m
a
t
t
e
n
d
i
n
g
M_{ij}= \begin{cases} 0 & \text{ $ allow \ to \ attend $ } \\ -\infty & \text{ $ prevent \ from \ attending $ } \end{cases}
Mij={0−∞ allow to attend prevent from attending
A
l
=
s
o
f
t
m
a
x
(
Q
l
K
l
T
d
k
+
M
)
V
l
A_l = softmax(\frac{Q_l K_l^T} {\sqrt{d_k}} + M) V_l
Al=softmax(dkQlKlT+M)Vl
其中 前一层 的 H ∈ R ∣ X ∣ d h H \in \mathbb{R}^{|X|d_h} H∈R∣X∣dh 分别使用个参数矩阵 W l Q , W l K , W l V W_{l}^Q ,W_{l}^K , W_{l}^V WlQ,WlK,WlV 投影到中Transformer的Query,Key,Value三元组中 M ∈ R ∣ X ∣ ∣ X ∣ M \in \mathbb{R}^{|X||X|} M∈R∣X∣∣X∣ 是我们前面多次提到过的用于控制预训练任务的掩码矩阵。通过覆盖被编码的特征,让预测时只能关注到与特定任务相关的特征,从而实现了不同的预训练方式。
3.3、统一任务
- 单向语言模型(Unidirectional LM):
- MASK完形填空任务,输入的是一个单独的文本
【x_1,x_2,Mask,x_4】 - 观测序列分为从左向右、从右向左两种,从左到右,即仅通过被掩蔽token的左侧所有本文来预测被掩蔽的token;从右到左,则是仅通过被掩蔽token的右侧所有本文来预测被掩蔽的token,如上图所示,使用上三角矩阵来作为掩码矩阵,阴影部分为 : − ∞ -\infty −∞ ,空白部分为0
- MASK完形填空任务,输入的是一个单独的文本
- 双向语言模型(Bidirectional LM):
- MASK完形填空任务,输入的是一个文本对
【SOS,x_1,x_2,Mask,x_4,EOS,x_5,MASK,x_7,EOS】 - 与Bert模型一致,在预测被掩蔽token时,可以观察到所有的token,如上图所示,使用全0矩阵来作为掩码矩阵
- MASK完形填空任务,输入的是一个文本对
- 序列到序列语言模型(Seq2Seq LM):
- MASK完形填空任务,输入的是一个文本对
【SOS,x_1,x_2,Mask,x_4,EOS,x_5,MASK,x_7,EOS】 - 如果被掩蔽token在第一个文本序列中,那么仅可以使用第一个文本序列中所有token,不能使用第二个文本序列的任何信息;如果被掩蔽token在第二个文本序列中,那么使用一个文本序列中所有token和第二个文本序列中被掩蔽token的左侧所有token预测被掩蔽token
- 如上图所示,在训练的时候,一个序列由 [SOS]S_1[EOS]S_2[EOS] 组成,其中S1是 source segments,S2是 target segments。随机mask两个segment其中的词,其中如果masked是source segment的词的话,则它可以attend to所有的source segment的tokens,如果masked的是target segment,则模型只能attend to所有的source tokens以及target segment中当前词和该词左边的所有tokens,这样模型可以隐形地学习到一个双向的encoder和单向decoder(类似transformer)。
- MASK完形填空任务,输入的是一个文本对
- NSP任务(Next Sentence Prediction):
- 对于双向语言模型(Bidirectional LM),与Bert模型一样,也进行下一个句子预测。如果是第一段文本的下一段文本,则预测1;否则预测0
将文本输入到Transformer网络,计算出对应的输出向量,再通过softmax分类器预测【Mask】到底属于字典中的哪一个token。UniLM模型参数通过最小化预测token和标准token的交叉熵来优化。三种类型的完型填空任务可以完成不同的语言模型运用相同的程序训练
四、训练策略
- 网络设置 : 24层Transformer,1024个hidden size,16个attention heads
- 参数大小: 340M
- 初始化: 直接采用Bert-Large的参数初始化
- 激活函数: GELU,与bert一样
- dropout比例: 0.1
- 权重衰减因子: 0.01
- batch_size: 330
- 混合训练方式: 对于一个batch,1/3时间采用双向语言模型的目标,1/3的时间采用Seq2Seq语言模型目标,最后1/3平均分配给两种单向学习的语言模型,也就是left-to-right和right-to-left方式各占1/6时间
- MASK方式: 总体比例15%,其中80%的情况下直接用[MASK]替代,10%的情况下随机选择一个词替代,最后10%的情况用真实值。还有就是80%的情况是每次只mask一个词,另外20%的情况是mask掉bi-gram或者tri-gram。
五、总结
UniLM和很多Encoder-Decoder架构的模型一样(例如MASS)像统一NLU和NLG任务,但是无疑UniLM的架构更加优雅。像MASS在做NLU任务时,它只会采用模型的Encoder部分,从而丢弃了Decoder部分的全部特征。UniLM有一个问题是在做机器翻译这样经典的Seq-to-Seq任务时,它的掩码机制导致它并没有使用表示[SOS]标志对应的全句特征,而是使用了输入句子的序列。这个方式可能缺乏了对整句特征的捕获,从而导致生成的内容缺乏对全局信息的把控。