摘要
本文将在NLPTEA2020任务:中文语法错误诊断(CGED)中介绍我们的系统。CGED旨在诊断四种类型的语法错误,即单词缺失(M),单词冗余(R),错误单词选择(S)和单词乱序(W)。自动CGED系统包含两个部分,包括错误检测和错误纠正。为了进行错误检测,我们的系统基于多层双向transformer编码器的模型构建,并且将ResNet集成到编码器中以提高性能。我们还探索了从模型库中逐步进行集成选择的方法,以提高单个模型的性能。为了进行纠错,我们设计了两个模型来分别对S型和M型错误进行纠正。在官方评估中,我们的系统在识别级别和位置级别获得了错误检测的最高的F1分数,而在错误纠正上获得了第二高的F1分数。
1.介绍
中文通常被认为是最复杂的语言之一。与英语相比,中文既没有单数/复数的变化,也没有动词的时态变化。另外,由于中文中没有明确给出单词边界,因此通常必须在更深入的分析之前对单词切分进行处理。所有这些问题使中文学习对新学习者具有挑战性。近年来,越来越多的具有不同语言和知识背景的人开始对学习汉语作为第二语言感兴趣。有必要开发一种自动的中文语法错误诊断(CGED)工具,以帮助识别和纠正这些人书写的语法错误。
为了促进汉语学习中自动语法错误诊断的发展,自2014年以来,用于教育应用的自然语言处理技术(NLP-TEA)就将CGED作为共享任务之一。目前已经提出了许多解决CGED任务的方法。
在这项工作中,我们在NLPTEA-2020 CGED任务中介绍了我们的系统。为了进行错误检测,我们的系统基于多层双向transformer编码器的模型构建,并且将ResNet集成到编码器中以提高性能。我们还探索了从模型库中逐步进行集成选择的方法,以提高单个模型的性能。为了进行纠错,我们设计了两个模型来分别建议对S型和M型错误进行纠正。更具体地说,我们使用RoBERTa和n-gram语言模型进行S型校正,并结合使用预训练的屏蔽语言模型和统计语言模型来生成M型的可能校正结果。在官方评估中,我们的系统在识别级别和位置级别获得了错误检测的最高的F1分数,而在错误校正上获得了第二高的F1分数。
本文的组织如下:第2节简要介绍了CGED共享任务。第三部分讨论我们的方法。第4部分显示了实验结果。第5节显示了相关工作。最后,在第6节中介绍了结论和未来的工作。
2.中文语法错误检测
NLPTEA CGED任务的目的是指出中文外语学习者写的句子中的错误。句子包含四种类型的语法错误,包括单词丢失错误(M),单词冗余错误(R),单词选择错误(S)和单词排序错误(W)。输入句子可能包含一个或多个此类错误。给定一个句子,系统需要指出:(1)句子是否正确;(2)句子包含何种错误;(3)准确的错误位置;(4)可能对S型和M型错误进行的纠正。表1中显示了一些典型示例。
3.方法
3.1 错误检测
我们将错误检测问题视为序列标注问题。具体而言,给定句子 x x x,我们使用BIO编码生成相应的标签序列 y y y。然后,我们将ResNet和transformer编码器结合起来以解决标注问题。
(1)transformer编码器
我们使用Vaswani et al. (2017) 所述的多层双向transformer编码器(BERT)对输入句子进行编码。如图1(a)所示,该模型由三部分组成:输入嵌入层 I I I,编码器层 E E E和输出层 O O O。给定序列 S = w 0 , . . . . . . , w N \textbf S=w_0,......,w_N S=w0,......,wN作为输入,编码器的公式如下:
h i 0 = W e w i + W p (1) h^0_i=W_ew_i+W_p\tag{1} hi0=Wewi+Wp(1)
h i l = t r a n s f o r m e r _ b l o c k ( h i l − 1 ) (2) h^l_i=transformer\_block(h^{l-1}_i)\tag{2} hil=transformer_block(hil−1)(2)
y i B E R T = s o f t m a x ( W o h i L + b o ) (3) y^{BERT}_i=softmax(W_oh^L_i+b_o)\tag{3} yiBERT=softmax(WohiL+bo)(3)
其中 w i w_i wi是当前字符, N N N表示序列长度。因此,公式1创建了一个输入嵌入。此处,transformer模块包括自注意层和完全连接层,并输出 h i l h^l_i hil。l是当前层的位置, l ≥ 1 l≥1 l≥1。 L L L是BERT的总层数。等式3表示输出层。 W o W_o Wo是输出权重矩阵, b o b_o bo是输出层的偏差, y i B E R T y^{BERT}_i yiBERT是语法错误检测的预测。
(2)整合ResNet
深度神经网络在每一层都学习不同的表示。例如, Belinkov et al. (2017) 证明,在机器翻译任务中,网络的低层学习代表单词的结构,而高层则更关注单词的含义。对于强调语法性质的任务(例如中文语法错误检测),来自较低层的信息被认为很重要。在这项工作中,我们使用残差学习框架将单词嵌入的信息与深层的信息相结合。给定序列 S = w 0 , . . . . . . , w N S=w_0,......,w_N S=w0,......,wN作为输入, R e s B E R T ResBERT ResBERT的公式如下:
h i 0 = W e w i + W p (4) h^0_i=W_ew_i+W_p\tag{4} hi0=Wewi+Wp(4)
h i l = t r a n s f o r m e r _ b l o c k ( h i l − 1 ) (5) h^l_i=transformer\_block(h^{l-1}_i)\tag{5} hil=transformer_block(hil−1)(5)
R i = h i L − w i (6) R_i=h^L_i-w_i\tag{6} Ri=hiL−wi(6)
H i L = c o n c a t ( h i L , R i ) (7) H^L_i=concat(h^L_i,R_i)\tag{7} HiL=concat(hiL,Ri)(7)
y n R e s B E R T = s o f t m a x ( W o H i L + b o ) (8) y^{ResBERT}_n=softmax(W_oH^L_i+b_o)\tag{8} ynResBERT=softmax(WoHiL+bo)(8)
等式6表示残差学习框架,其中 h i L h^L_i hiL的隐藏输出和输入嵌入用于近似残差函数。然后,我们将 h i L h^L_i hiL和 R i R_i Ri的串联发送到输出层。
(3)从模型库中逐步集成选择
我们发现,在每次训练结束时,不同的随机种子和dropout值可能会导致不同的性能。合并不同的模型结果以提高性能很简单。我们不是通过加权平均来组合所有单个模型,而是使用模型库中的前向逐步选择来查找模型的子集,这些子集在一起进行平均时会产生出色的性能。模型库是使用不同的随机种子和dropout值生成的。基本的集成选择过程非常简单:
- 从空的集合开始。
- 将库中的模型添加到集合中,以使集合在验证集上的中文语法错误检测指标达到最佳性能。
- 重复步骤2进行固定次数的迭代,或者直到使用完所有模型为止。
- 从嵌套的集合中返回在验证集中具有最佳性能的集成。
选择在每个步骤中要添加的最佳模型时的投票系统是按照span-level评估,其工作方式如下:
- 标记错误文本跨度的每单个模型都计为该错误文本跨度的投票(例如,如果给定位置的单词“是”被一个单个模型标记为R型,则它会收到一个投票)。请注意,只有被单个模型识别为错误类型的文本范围才被视为候选。
- 如果错误文本的每个候选范围收集的票数最少,例如30%*子集模型的数量,则被标记为真实错误。
提出的简单正向模型选择过程是有效的,但有时会过度适合验证集,从而降低测试集的整体性能。为了减少对验证集的过度拟合,我们对这种选择过程进行了三项补充,如Caruana et al. (2004) 所述: