整理了 ACL2020短文 Enhancing Pre-trained Chinese Character Representation with Word-aligned Att)论文的阅读笔记
论文地址:论文
背景
近年来,以 BERT 为代表的预训练模型在 NLP 领域取得取得了非常显著的效果。但是,已有的中文预训练模型大多以汉字为基本单位,根据汉字的外部语境学习表征,基于字粒度计算 Attention , 没有利用中文的分词知识。本文提出了一种新的词对齐注意来挖掘显式词信息,对各种基于字符的中文预训练语言模型的表征进行增强。
模型
对于n个字符的输入序列表示为
S
=
[
c
1
,
c
2
,
.
.
.
,
c
n
]
S=[c_1,c_2,...,c_n]
S=[c1,c2,...,cn],
c
j
c_j
cj表示输入序列的第j个字符,也就是汉字。使用分词工具
π
\pi
π对序列进行分词:
π
(
S
)
=
[
w
1
,
w
2
,
.
.
.
,
w
m
]
,
(
m
<
=
n
)
\pi(S)=[w_1,w_2,...,w_m],(m<=n)
π(S)=[w1,w2,...,wm],(m<=n),这里面的w就是一个个子序列,代表了由几个字符构成的词语,它们是不相交的,表述为
w
i
=
{
c
s
,
c
s
+
1
,
.
.
.
,
c
s
+
l
−
1
}
w_i=\{c_s,c_{s+1},...,c_{s+l-1}\}
wi={cs,cs+1,...,cs+l−1}。
对于预训练的输出的字符级的表示,首先算一个自注意矩阵
A
c
∈
R
n
×
n
A_c\in R^{n×n}
Ac∈Rn×n:
A
c
=
F
(
H
)
=
s
o
f
t
m
a
x
(
(
K
W
k
)
(
Q
W
+
q
)
T
d
)
A_c = F(H)=softmax(\frac{(KW_k)(QW+q)^T}{\sqrt d})
Ac=F(H)=softmax(d(KWk)(QW+q)T) 其中,K和Q都是H(预训练模型最后一层的字符级表示)分别作为kays和quire参与计算,
W
k
W_k
Wk和
W
q
W_q
Wq是可学习参数,维度是d×d,
A
c
A_c
Ac矩阵在不考虑词边界的情况下对字符级之间的相似度进行建模。
本文的做法就是,利用这个相似度矩阵和上面的分词信息,在单词内部对字符相似度进行整和,首先将
A
c
A_c
Ac表示为
[
a
c
1
,
a
c
2
,
.
.
.
,
a
c
n
]
[a_c^1,a_c^2,...,a_c^n]
[ac1,ac2,...,acn]其中
a
c
i
a_c^i
aci就是
A
c
A_c
Ac矩阵的一行,它表示某个字符对其它字符的注意力向量,利用分词结果对注意力矩阵进行划分:
π
(
A
c
)
=
[
{
a
c
1
,
a
c
2
}
,
{
a
c
3
}
,
.
.
.
,
{
a
c
n
−
1
,
a
c
n
}
]
\pi(A_c)=[\{a_c^1,a_c^2\},\{a_c^3\},...,\{a_c^{n-1},a_c^n\}]
π(Ac)=[{ac1,ac2},{ac3},...,{acn−1,acn}] 然后,本文设计了一个聚合模块对词内注意力进行聚合,将根据分词结果划分好的注意力序列
a
c
s
,
.
.
.
,
a
c
s
+
l
−
1
{a_c^s,...,a_c^{s+l-1}}
acs,...,acs+l−1转变成一个统一的
a
w
i
a_w^i
awi,它对应着词
w
i
w_i
wi,具体计算过程为:
a
w
i
=
λ
M
a
x
p
o
o
l
i
n
g
(
{
a
c
s
,
.
.
.
,
a
c
s
+
l
−
1
}
)
+
(
1
−
λ
)
M
e
a
n
p
o
o
l
i
n
g
(
{
a
c
s
,
.
.
.
,
a
c
s
+
l
−
1
}
)
a_w^i=\lambda Maxpooling(\{a_c^s,...,a_c^{s+l-1}\})+(1-\lambda)Meanpooling(\{a_c^s,...,a_c^{s+l-1}\})
awi=λMaxpooling({acs,...,acs+l−1})+(1−λ)Meanpooling({acs,...,acs+l−1})
A
^
c
[
s
:
s
+
l
−
1
]
=
e
l
⋅
a
w
i
\hat A_c[s:s+l-1]=e_l\cdot a_w^i
A^c[s:s+l−1]=el⋅awi 其中,
λ
\lambda
λ是一个自适应学习的参数,
e
l
e^l
el是一个全1向量,也就是说把这个词内的注意力结果进行聚合统一了。最终得到增强后的H:
H
^
=
A
^
c
V
W
\hat H=\hat A_cVW
H^=A^cVW 其中,V就是H,W是一个科学系矩阵,这样我们就通过分词对预训练模型的结果进行了增强。
也可以进行多头的,在多头注意力架构下,最终结果为:
H
ˉ
=
C
o
n
c
a
t
(
H
^
1
,
H
^
2
,
,
.
.
.
,
H
^
K
)
\bar H=Concat(\hat H^1,\hat H^2,,...,\hat H^K)
Hˉ=Concat(H^1,H^2,,...,H^K) 此外,由于歧义和非形式化输入的风险,分割器通常是不可靠的,特别是在域外数据上,这可能导致错误传播和令人不满意的模型性能。我们也可以使用多个不同的分词器(M个)得到M个最终的表示
H
ˉ
1
,
.
.
.
,
H
ˉ
M
\bar H^1,...,\bar H^M
Hˉ1,...,HˉM,文中建议的融合方式为:
H
~
=
∑
m
=
1
M
t
a
n
h
(
H
ˉ
m
W
g
)
\tilde H=\sum_{m=1}^Mtanh(\bar H^mW_g)
H~=m=1∑Mtanh(HˉmWg)
实验
选择了三个公开可用的中文预训练模型作为基本编码器:BERT、ERNIE和BERT-wwm。在5个中文自然语言处理任务和6个公共基准数据集上进行了实验。实验设置:
实验结果:
消融实验: