《Spelling Error Correction with Soft-Masked BERT》阅读笔记

会议:ACL2020

机构:字节跳动、复旦大学

摘要:拼写错误检测很重要但是具有挑战性,因为其需要人类水平的语言理解能力。目前一个SOTA是用BERT在句子的每个位置的候选列表中选择一个字符,以进行修改(或不修改)。然而,这个方法的准确性可能不是最优的,因为BERT没有足够的能力去识别某个位置的字符是不是错误的,因为他使用mask language model的训练方式。我们提出了一个新的神经网络来解决上述问题,包括了错误检测网络和错误纠正网络,并通过soft-masking的技术来连接两个部分。我们的方法可以用于其他语言检测纠正问题。在两个数据集上的实验结果表明,我们提出的方法的表现优于baseline也优于基于BERT的baseline。

解决问题:作者认为纠错任务分两步,当能够准确检测出错误时,纠正才能完成得更好。作者观察到BERT模型不能很好地去检测错误,认为是BERT使用mask language model导致的(BERT在训练的时候,只有15%的词被遮蔽以进行预测)。为了解决上述问题,作者提出了新的架构Soft-Masked BERT

模型
《Spelling Error Correction with Soft-Masked BERT》阅读笔记
两个网络:一个检测网络,一是纠错网络

  • 检测网络是Bi-GRU,用于计算句子中的每一个字符是错误的可能性
    输入:   e 1 \ e_{1}  e1,   e 2 \ e_{2}  e2…与BERT的输入一致
    输出:字符是错误的可能性   p i \ p_{i}  pi
  • 纠错网络是BERT
    输入:   e i ′ \ e_{i}^{'}  ei《Spelling Error Correction with Soft-Masked BERT》阅读笔记
    因为考虑到输入的字可能是错误的,所以把错误的给忽略掉(使用mask)
    输出:是某个字符的可能性(全连接softmax做多分类)
    注:这里还用了残差网络,即做预测的时候不只是用BERT的最后一层输出   h i c \ h_{i}^{c}  hic,而是用   h i ′ \ h_{i}^{'}  hi,其中
    《Spelling Error Correction with Soft-Masked BERT》阅读笔记
    两个网络的联合训练时候线性加和的方式进行
    《Spelling Error Correction with Soft-Masked BERT》阅读笔记

实验
测试数据集:
SIGHAN2015(1100个句子)。自己又创建了一个更大的数据集News Title(来自今日头条文章的标题,为了有更高的错误率,特地从低质量的文章中抽取),其中共有15739个句子。

预训练数据集:
为了做预训练任务,又弄了一个更大的数据集(5000K个句子,其中随机替换了15%的字,在这15%的错误字符中,80%是同音字,20%是随机字符)

结果:
《Spelling Error Correction with Soft-Masked BERT》阅读笔记
单独使用BERT已经取得很好的结果,使用soft-mask之后结果提升1-3个点
《Spelling Error Correction with Soft-Masked BERT》阅读笔记
预训练数据集规模对结果的影响,显而易见的是训练集规模越大,结果越好

《Spelling Error Correction with Soft-Masked BERT》阅读笔记
λ对结果的影响,实验证明λ=0.8时最佳,即模型更注重纠错任务

除此之外,作者还做了一系列的消融实验,以证明模型里面的每一个组件对于效果的提升都是必要的
作者还提了一下future work:扩展模型以用于语法错误修正

这篇文章mask掉错字,完全依靠上下文去猜出正确的字,没有利用到音似形似字,(可能是数据量过大,预训练已经考虑了大部分的音似形似情况)。这一点GCNSpell可能做得比较好,用GCN融合了音似形似信息,这可能是GCNSpell没有像本篇文章使用大规模数据集也能取得好结果的原因。
Soft-Masked BERT使用了5000K的数据做预训练
而GCNSpell只使用了281K的数据做预训练