ERINE系列模型:
ERINE1.0:https://blog.youkuaiyun.com/weixin_49346755/article/details/127257733?spm=1001.2014.3001.5501
ERNIE2.0:https://blog.youkuaiyun.com/weixin_49346755/article/details/127266955?spm=1001.2014.3001.5501
ERNIE3.0:https://blog.youkuaiyun.com/weixin_49346755/article/details/127258228?spm=1001.2014.3001.5501
ERNIE-Doc:https://blog.youkuaiyun.com/weixin_49346755/article/details/127262111?spm=1001.2014.3001.5501
THU-ERNIE:https://blog.youkuaiyun.com/weixin_49346755/article/details/127263266?spm=1001.2014.3001.5501
模型概述
在经典预训练模型BERT中,主要是通过Masked Language Modeling(MLM)预训练任务学习语言知识。在BERT中MLM会随机Masking一些位置的token,然后让模型去预测这些token。这些Masking的token在中文中便是字,在英文中便是sub-word,这样的预测也许不能让模型获取更加直观的语言知识,所以后续又出现了一些模型,比如ERNIE, SpanBERT等,其从Masking单个字转变成了Masking一系列连续的token,例如Masking实体词,Masking短语等,即从细粒度的Masking转向粗粒度的Masking。
ERNIE-Gram指出一种观点:这种连续的粗粒度Masking策略会忽略信息内部的相互依赖以及不同信息之间的关联。因此,基于这种想法进行改进,提出了一种显式建模n-gram词的方法,即直接去预测一个n-gram词,而不是预测一系列连续的token,从而保证n-gram词的语义完整性。
另外,ERNIE-Gram在预训练阶段借鉴ELECTRA想法,通过引入一个生成器来显式地对不同n-gram词进行建模。具体来讲,其应用生成器模型去采样合理的n-gram词,并用这些词去mask原始的语句,然后让模型去预测这些位置原始的单词。同时还使用了RTD预训练任务,来识别每个token是否是生成的。
模型改进
ERNIE和N-Gram的融入方式
不同于连续多个token的预测,ERNIE-GRAM采用了一种显式的n-gram方式进行建模。ERNIE和显式的n-gram融合建模的方式(ERNIE-GRAM)主要有两种:Explictly N-gram MLM 和 Comprehensive N-gram Prediction。
先回顾一下经典的连续token的建模方式:Contiguously MLM,然后再正式介绍以上ERNIE-Gram提出的两种方式。
Contiguously MLM
给定一串序列 x = { x 1 , . . . , x ∣ x ∣ } x=\{x_1,...,x_{|x|} \} x={x1,...,x∣x∣} 和 n-gram 起始边界序列 b = { b 1 , . . . , b ∣ b ∣ } b=\{b_1,...,b_{|b|} \} b={b1,...,b∣b∣}以及由 x x x 转换的 n-gram 序列 z = { z 1 , . . . , z ∣ b ∣ − 1 } , z i = x [ b i , b i + 1 ) z=\{z_1,...,z_{|b|-1}\},z_i=x_{[b_i,b_{i+1})} z={z1,...,z∣b∣−1},zi=x[bi,bi+1) 。 M M M 表示从起始边界 b b b 中随机选择15%的准备 mask 的 index, z M z_M zM 表示由 M M M 选择出的相应的 token 集, z \ M z_{\backslash M} z\M 表示将 x x x 进行 mask 后的序列。
上图展示了一个Contiguously MLM的例子,给定的序列为 x = { x 1 , x 2 , x 3 , x 4 , x 5 , x 6 } x=\{x_1,x_2,x_3,x_4,x_5,x_6\} x={x1,x2,x3,x4,x5,x6}, 起始边界序列为 b = { 1 , 2 , 3 , 4 , 5 , 6 } b=\{ 1,2,3,4,5,6\} b={1,2,3,4,5,6},假设从起始边界序列 b b b 的随机选择的索引为 M = { 2 , 4 } M=\{2,4\} M={2,4},则 z = { x 1 , x [ 2 : 4 ) , x 5 , x 6 } , z M = { x [ 2 : 4 ) , x 5 } , z \ M = { x 1 , [ M ] , [ M ] , x 4 , [ M ] , x 6 } z=\{x_1,x_{[2:4)},x_5,x_6\},z_M=\{x_{[2:4)},x_5\},z_{\backslash M}=\{x_1,[M],[M],x_4,[M],x_6\} z={x1,x[2:4),x5,x6},zM={x[2:4),x5},z\M={x1,[M],[M],x4,[M],x6}。
Contiguously MLM 可通过如下方式进行优化:
− log p θ ( z M ∣ z \ M ) = − ∑ z ∈ z M ∑ x ∈ z log p θ ( x ∣ z \ M ) -\log p_{\theta}(z_M|z_{\backslash M})=-\displaystyle\sum_{z \in z_M}\sum_{x \in z} \log p_{\theta}(x|z_{\backslash M}) −logpθ(zM∣z\M)=−z∈zM∑x∈z∑logpθ(x∣z\M)
Explicitly N-gram MLM
在连续token预测中, 需要预测多次,每次预测一个token,直到完成这一段连续token的所有预测,才表示完成了一个实体词或者短语。不同于连续token预测, 显式的N-gram预测直接去预测一个n-gram词,即站在一种粗粒度的角度上进行预测。
如上图所示,假设
y
=
{
y
1
,
y
3
,
.
.
.
,
y
∣
b
∣
−
1
}
y=\{y_1,y_3,...,y_{|b|-1}\}
y={y1,y3,...,y∣b∣−1} 为显式的n-gram序列,
y
M
=
{
y
2
,
y
4
}
y_M=\{y_2,y_4\}
yM={y2,y4} 为随机选择的mask token,则 mask 后的完整序列为
z
\
M
=
{
x
1
,
[
M
]
,
x
4
,
[
M
]
,
x
6
}
z_{\backslash M}=\{x_1,[M],x_4,[M],x_6\}
z\M={x1,[M],x4,[M],x6}。
Explicitly N-gram MLM可通过如下方式进行优化:
− log p θ ( y M ∣ z ‾ \ M ) = − ∑ y ∈ y M log p θ ( y ∣ z ‾ \ M ) - \log p_{\theta}(y_M| \overline z_{\backslash M})=-\displaystyle\sum_{y \in y_M} \log p_{\theta}(y|\overline z_{\backslash M}) −logpθ(yM∣z\M)=−y∈yM∑logpθ(y∣z\M)
Comprehensive N-gram MLM
通过以上讨论可知,Contiguously MLM是从细粒度角度进行预测连续token, Explicitly N-gram MLM是从粗粒度角度进行预测n-gram token, Comprehensive N-gram是一种融合细粒度和粗粒度的预测方式,其将更加全面地进行建模。
其优化的目标函数为以上两种方式的融合,这里需要注意这两种方式是基于统一的上下文 z ‾ \ M \overline z_{\backslash M} z\M 进行预测:
− log p θ ( y M , z M ∣ z ‾ \ M ) = − ∑ y ∈ y M log p θ ( y ∣ z ‾ \ M ) − ∑ z ∈ z M ∑ x ∈ z log p θ ( x ∣ z ‾ \ M ) - \log p_{\theta}(y_M,z_M|\overline z_{\backslash M})=-\displaystyle\sum_{y \in y_M} \log p_{\theta}(y|\overline z_{\backslash M})-\displaystyle\sum_{z \in z_M}\sum_{x \in z} \log p_{\theta}(x|\overline z_{\backslash M}) −logpθ(yM,zM∣z\M)=−y∈yM∑logpθ(y∣z\M)−z∈zM∑x∈z∑logpθ(x∣z\M)
图a展示了细粒度和粗粒度预测的详细融合方式,其将细粒度的预测位置直接拼接到了序列的末尾,图中以虚线分割。其中虚线以左是Explictly N-gram的粗粒度预测,虚线以右是Contiguously MLM的细粒度预测。以 y 2 y_2 y2位置为例,由于其包含两个token,所以细粒度预测需要预测2次(论文中这两个位置使用了 M 1 M1 M1和 M 2 M2 M2这两个不同的token进行mask)。
此时,整个文本序列为: [ x 1 , [ M ] , x 4 , [ M ] , x 6 , [ M 1 ] , [ M 2 ] , [ M 1 ] ] [x_1,[M],x_4,[M],x_6,[M1],[M2],[M1]] [x1,[M],x4,[M],x6,[M1],[M2],[M1]], 为了在Self-Attention时不造成信息的混乱,ERNIE-Gram约定:
-
虚线以左的 Explicitly N-gram MLM 粗粒度预测,即在预测 y 2 y_2 y2 和 y 4 y_4 y4 时,只能看见虚线以左的token。
-
虚线以后的Contiguously MLM细粒度预测,即在预测 x 2 , x 3 x_2,x_3 x2,x3和 x 5 x_5 x5时,只能看见自己以及虚线以左的token。
图b展示了其计算时的Attention矩阵,其中红色点表示相互能够看见,在Self-Attention计算时,相互的信息需要融入。
增强N-gram关系建模
为了更加显式地建模不同n-gram之间的关系,在预训练阶段,ERNIE-Gram借鉴了Electra的思路,使用一个生成器去生成一个位置的n-gram词,并且用这个n-gram词去mask该位置的n-gram token。
如图所示,Transformer Encoder θ′便是生成器,图b展示了使用生成的n-gram token去mask原始句子token的一个样例,ERNIE-Gram根据数据Masking位置的词分布采样了public official和completely去替换了原始语句词,即:
- 原始语句:the prime minister proposed nothing less than a overhaul of the tax system.
- Masking语句:the public official proposed completely a overhaul of the tax system.
然后将mask语句传入Transformer Encoder θ中进行训练。
假设 y M ′ = { y 2 ′ , y 4 ′ } , z ‾ \ M ′ = { x 1 , y 2 ′ , x 4 , y 4 ′ , x 6 } y'_M=\{y'_2,y'_4\},\overline z'_{\backslash M}=\{x_1,y'_2,x_4,y'_4,x_6\} yM′={y2′,y4′},z\M′={x1,y2′,x4,y4′,x6},表示用生成n-gram项Masking后的序列,则联合的预训练目标函数为:
− log p θ ′ ( y M ∣ z ‾ \ M ) − log p θ ( y M , z M ∣ z ‾ \ M ′ ) -\log p_{\theta '}(y_M|\overline z_{\backslash M})-\log p_{\theta}(y_M,z_M|\overline z'_{\backslash M}) −logpθ′(yM∣z\M)−logpθ(yM,zM∣z\M′)
另外,ERNIE-Gram融入了the replaced token detection (RTD)任务,用于识别这些token是否是被生成器替换的token。假设 z ^ \ M = { x 1 , y 2 , x 4 , y 4 , x 6 } \hat z_{\backslash M}=\{ x_1,y_2,x_4,y_4,x_6\} z^\M={x1,y2,x4,y4,x6},为真实目标n-gram词替换后的序列,则RTD的目标函数为:
− log p θ ( 1 ( z ‾ \ M ′ = z ^ \ M ) ∣ z ‾ \ M ′ ) = − ∑ t = 1 ∣ z ^ \ M ∣ log p θ ( 1 ( z ‾ \ M , t ′ = z ^ \ M , t ) ∣ z ^ \ M , t ′ ) -\log p_{\theta}(1(\overline z'_{\backslash M}=\hat z_{\backslash M})|\overline z'_{\backslash M})=- \displaystyle\sum^{|\hat z_{\backslash M}|}_{t=1} \log p_{\theta}(1(\overline z'_{\backslash M,t}=\hat z_{\backslash M,t})|\hat z'_{\backslash M,t}) −logpθ(1(z\M′=z^\M)∣z\M′)=−t=1∑∣z^\M∣logpθ(1(z\M,t′=z^\M,t)∣z^\M,t′)
模型参考
论文地址:https://arxiv.org/abs/2010.12148
代码地址:https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/ernie_gram/modeling.py