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-Gram:https://blog.youkuaiyun.com/weixin_49346755/article/details/127259532?spm=1001.2014.3001.5501
THU-ERNIE:https://blog.youkuaiyun.com/weixin_49346755/article/details/127263266?spm=1001.2014.3001.5501
模型介绍
经典的Transformer在处理数据时,会将文本数据按照固定长度进行截断,这个看起来比较”武断”的操作会造成上下文碎片化以及无法建模更长的序列依赖关系。基于此项考虑,ERNIE-Doc提出了一种文档层级的预训练语言模型方法:ERNIE-Doc在训练某一个Segment时,允许该segment能够获得整个Doc的信息。
如图所示,假设一篇完整的文档被分割成3个Segment:
S
1
,
S
2
,
S
3
S_1,S_2,S_3
S1,S2,S3,在编码segment S2时,经典的Transformer依赖的只是
S
2
S_2
S2本身:
P
(
y
∣
S
2
)
P(y|S_2)
P(y∣S2), Recurrence Transformer (例如 Transformer-XL)依赖的是
S
1
,
S
2
:
P
(
y
∣
S
1
,
S
2
)
S_1,S_2:P(y|S_1,S_2)
S1,S2:P(y∣S1,S2),这两种方法均没有使Segment
S
2
S_2
S2获得完整的文档信息
S
1
,
S
2
,
S
3
S_1,S_2,S_3
S1,S2,S3。
ERNIE-Doc在建模过程中,使得每个Segment均能获得完整的文档信息: P ( y ∣ S 1 , S 2 , S 3 ) P(y|S_1,S_2,S_3) P(y∣S1,S2,S3),其中建模长序列的关键点如下:
- Retrospective feed mechanism: 将文本两次传入模型获得文本序列的representation,第一次将获得完整的文本序列表示,然后该序列的representation继续参与第二次的编码过程,这样该文本序列在第二次编码过程中,每个token位置便能获得序列完整的双向信息。
- Enhanced recurrence mechanism: 使用了一种增强的Segment循环机制进行建模。
- Segment-reordering objective: 对一篇文档中的各个segment随机打乱,获得多个乱序文档,然后要求模型预测这些文档中哪个是正常语序的文档。
模型改进
Retrospective feed mechanism
ERNIE-Doc借鉴了人类阅读的行为习惯,在人类阅读时会分为两个阶段:首先会快速略读一下文档内容,然后回过头来仔细阅读。ERNIE-Doc基于此设计了Retrospective feed mechanism,该机制同样包含两个阶段:Skimming phase 和 Retrospective phase。
具体来讲,一篇文档会传入模型两次,第一次被称为Skimming phase,在该阶段将会获得改文档的完整序列表示。第二次被称为 Retrospective phase,在该阶段将会融入Skimming phase获得的完整文档表示,开始进一步的编码计算,从而保证在第二次计算每个Segment编码时能够获得完整的文档信息。Retrospective phase的计算方式如下:
其中以上公式各个参数解释如下:
T T T:一篇文档的Segment数量; N N N:Transformer模型层的数量; L L L:每个Segment中的最大token数量; H ^ ∈ R ( L × T × N ) × d \hat H\in R^{(L×T×N)×d} H^∈R(L×T×N)×d :一篇文档在所有层中输出的编码向量; H 1 : T i ∈ R ( L × T ) × d H^i_{1:T}∈R^{(L×T)×d} H1:Ti∈R(L×T)×d : 一篇文档在第i层产生的编码向量; h ^ τ i \hat h^i_τ h^τi:第τ个Segment在第i层产生的编码向量。
从以上公式可以看到,在retrospective 阶段,当计算每个Segment时,会引入完整文档的表示 H ^ \hat H H^,这样就保证了编码时,每个token能够获得完整文档的信息。
Enhanced Recurrence Mechanism
ERNIE-Doc通过使用Retrospective feed mechanism和Enhanced Recurrence Mechanism两种方式,增大了计算每个segment时的有效上下文长度。但是上面引入的公式计算复杂度是很高,因此 Enhanced Recurrence Mechanism期望前一个Segment便能获得完整的文档信息,然后直接融入前一个Segment便能使得当前Segment计算融入完整的文档信息。
如图所示,ERNIE-Doc通过将前一个Segment的同层编码表示,引入了当前Segment的计算中,这个做法同时也有利于上层信息反补下层的编码表示,具体公式为:
Segment-Reordering Objective
在预训练阶段,ERNIE-Doc使用了两个预训练任务:MLM和Segment-Reordering Objective。我们先来讨论Segment-Reordering Objective,其旨在帮助模型显式地建模Segment之间的关系,其会将一篇长文档进行划分为若干部分,然后将这些部分进行随机打乱,最后让模型进行预测原始的语序,这是一个 K K K 分类问题: K = ∑ i = 1 m i ! K=\sum^m_{i=1}i! K=∑i=1mi! ,其中m是最大的划分数量。
如图所示,假设存在一篇文档 D D D 被划分为3部分: D = { C 1 , C 2 , C 3 } D=\{C_1,C_2,C_3\} D={C1,C2,C3},ERNIE-Doc通过打乱这些部分得到 D ^ = { C 2 , C 3 , C 1 } \hat D=\{C_2,C_3,C_1\} D^={C2,C3,C1},然后在最后一个Segment S τ S_τ Sτ的位置进行预测原始的文档顺序 C 1 , C 2 , C 3 C_1,C_2,C_3 C1,C2,C3。
另外,在获得 D ^ = { C 2 , C 3 , C 1 } \hat D=\{C_2,C_3,C_1\} D^={C2,C3,C1}后,ERNIE-Doc会对 D ^ \hat D D^进行划分Segment: D ^ = S 1 , S 2 , . . . , S T \hat D={S_1,S_2,...,S_T} D^=S1,S2,...,ST,并且会对这些Segment中的某些Token 进行Mask,从而构造MLM任务,要求模型根据破坏的Segment S τ S_τ Sτ恢复成原始的 S τ S_τ Sτ。结合MLM和Segment-Reordering Objective总的预训练目标为:
max θ log p θ ( S τ ∣ S ^ τ ) + 1 τ = T log p θ ( D ∣ D ^ ) \max\limits_\theta \log p_{\theta}(S_{\tau}|\hat S_{\tau})+1_{\tau=T} \log p_{\theta}(D|\hat D) θmaxlogpθ(Sτ∣S^τ)+1τ=Tlogpθ(D∣D^)
其中, 1 τ = T 1_{\tau=T} 1τ=T表示Segment-Reordering Objective仅仅在最后一个Semgnet S T S_T ST位置被执行,以优化模型。
模型参考
论文地址:https://arxiv.org/abs/2012.15688
代码地址:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/paddlenlp/transformers/ernie_doc