发表时间:2020年05月
论文地址:https://arxiv.org/abs/2005.07421
代码地址(非作者实现): https://github.com/quantum00549/SoftMaskedBert
使用Soft-Masked BERT完成中文拼写纠错(Chinses Spell Checking, CSC)任务,并且该方法也适用于其他语言。
Soft-Masked BERT = 双向GRU(Bi-GRU) + BERT
其中Bi-GRU负责预测哪个地方有错误,BERT负责对错误进行修正。
作者说原始的BERT是mask了 “15%” 的词训练的,这不足以让BERT学会如何找出句子中的错误,所以要使用新的方法。
该模型分为三部分:
输入: embedding后的characters序列。embedding方式和BERT一样,包括word embedding,position embedding和segment embedding.
网络架构:Bi-GRU -> 全连接层(Linear) -> Sigmoid
输出:每个character为错字的概率,越接近1表示越有可能是错的。
Soft Masking模块就是对Input进行mask,方式就是加权,公式为:
e i ′ = p i ⋅ e m a s k + ( 1 − p i ) ⋅ e i e_i^{\prime}=p_i \cdot e_{m a s k}+\left(1-p_i\right) \cdot e_i ei′=pi⋅emask+(1−pi)⋅ei
e i ′ e'_i ei′ :第 i i i个character进行mask后的结果。
p i p_i pi :第 i i i个character为错字的概率, p i ∈ [ 0 , 1 ] p_i \in [0,1] pi∈[0,1]。
e m a s k e_{mask} emask :mask embeding。具体是什么原文中并没有说明。github上quantum00549的论文复现使用的是
e i e_i ei :第 i i i个character的词向量。
输入:soft-masking后的input。
网络架构:BERT+全连接层(Linear)+Softmax
输出:将词修正后的结果。
注意:在BERT和Linear之间,有一个残差连接,即将input和bert的output进行相加。用公式表示则为:
h i ′ = h i c + e i h_i^{\prime}=h_i^c+e_i hi′=hic+ei
Detection Network和Correction Network损失函数使用的都是CrossEntropy,用公式表示为:
L
d
=
−
∑
i
=
1
n
log
P
d
(
g
i
∣
X
)
L
c
=
−
∑
i
=
1
n
log
P
c
(
y
i
∣
X
)
联合起来为:
L = λ ⋅ L c + ( 1 − λ ) ⋅ L d \mathcal{L}=\lambda \cdot \mathcal{L}_c+(1-\lambda) \cdot \mathcal{L}_d L=λ⋅Lc+(1−λ)⋅Ld
其中 λ \lambda λ 为 [ 0 , 1 ] [0,1] [0,1] 的超参数。
benchmark: SIGHAN
训练集:自己造的,使用confusion table的方式。具体为将一个句子中15%的字替换成与其相同发音的其他常见字。在所有样本中,有80%的句子按上述方式处理,剩下20%则是直接随机替换成任意文字。
优化器(optimizer):Adam
学习策略(Learning Scheduler): 无
学习率(Learning Rate):2e-5
The size of hidden unit in Bi-GRU is 256
batch size: 320
作者还使用了500w个训练样本和SIGHAN中训练样本对BERT进行了fine-tune.