王天极,陈柏霖,黄瑞章,3,任丽娜,2,陈艳平,3,秦永彬,3
(1. 贵州大学 计算机科学与技术学院,贵州 贵阳 550025; 2. 贵州轻工职业技术学院 贵州 贵阳 550025;3. 贵州大学 计算机科学与技术学院 公共大数据国家重点实验室,贵州 贵阳 550025)
随着社会发展,仅针对错别字的拼写检查已经难以满足人们对自动校对技术的需求,语法错误校对已成为此方向研究的重点。目前自动校对技术能够处理的语法错误以搭配不当、语序不当、成分残缺或赘余为主。语法错误校对有两种实现方式,第一种是一阶段生成类模型,用文本生成的方式直接输出修改后的文本,这类模型容易受到错误影响而倾向输出错误答案,加剧了此类模型本身具有的幻觉现象[1],性能难以满足实际需要。而为了增强生成类模型的性能,约束其输出结果,往往需要扩充大量数据、使用多种特征、引入外部知识等方法,导致模型过于复杂,而且难以训练;第二种是检测-纠错二阶段模型,此类模型先对文本做语法错误检测,再根据检测结果做纠正,是目前可行性较高的方法。而作为语法错误纠正的前置任务,语法错误检测的性能对于整体模型性能起到至关重要的作用,也是当前此方向研究的重点。
中文语法规律复杂多变,其语法、句法信息主要由语序和虚词来提供,句子中的语法错误和错别字会严重影响其错误位置局部范围的语义,甚至整个句子的语义。二阶段模型是目前可行性较高的方法。
早期的文本检错模型通常使用N-gram语言模型来检测语法错误[2],但由于语法的灵活性很强, 此类模型性能都较弱,难以满足使用需要。随后出现的神经网络机器翻译模型[3-4]能够直接将有语法错误的句子“翻译”为正确句子,大多数NMT系统采用序列到序列的模型,这类模型需要使用大量的正误句子对训练,而且由于语法错误带来的噪声,模型性能较差。由于语法错误检测与改正任务的源序列和目标序列非常相似,所以将其视为序列标注任务简单且高效。
通过研究中文语法错误检测(Chinese GramMatical Error Diagnosis,CGED)shared task提供的汉语学习者在汉语水平考试中所写的作文数据集,研究实验不同模型在此任务中的表现,我们发现在不涉及逻辑类语病错误时,搭配不当、语序不当、成分残缺或赘余类错误均与其邻近Token的相对位置和语义有较强的相关性,有效利用错误位置Token本身特征及其周边位置的语义信息能够提升模型的性能。
因此本文提出一种基于Electra的下游模型——门控双线性神经网络Gated-Bilinear,用于中文语法错误检测模型,重点关注输入序列中相邻Token的特征,与预训练语言模型Electra[5]结合能够有效弥补Transformer[6]结构仅使用绝对位置编码,而不能有效利用相对位置信息的缺陷。该模型利用Electra对文本进行字向量编码,得到文本特征,然后将该字向量输入Gated-Bilinear网络,最后使用条件随机场对Gated-Bilinear层的输出做解码得到序列标签。本文在2020年CGED测试数据集上进行实验,单模型F1值可达0.395 8,使用简单的多模型集成时F1值可达到0.411 5,两者均超过目前其他模型的性能。
英文语法错误检测任务在众多研究者多年的研究下,已经取得了很好的进展。而汉语作为分析语,特点是不会通过词形变化(即词的内部形态变化,又称作屈折变化)来表达语法意义,而是通过独立的虚词和固定的词序来表达特定的语法意义。
比起英文这种更加偏向屈折语的语言文字,中文语法错误检测更困难,且中文语法错误检测研究起步晚,同时缺少数据集和有效的方法。随着近年来NLPTEA论坛举办的几届CGED shared task,中文语法错误检测相关研究也越来越多,在2017年后进入到快速发展时期,Yang等人[7]在CGED 2017公开任务中取得综合成绩第一,其做法是在神经网络序列标注模型Bi-LSTM+CRF模型上,加入了分词、词性、依存句法等特征,同时将无监督学习到的语言模型知识应用到神经网络中。
2018年,Fu等人[8]在当年的CGED任务中取得第一名,将位置级别的F1指标提高到了0.361 2,使用的方法是对神经网络序列标注模型Bi-LSTM+CRF进行改进,引入一些新的语言学特征,如分词、高斯ePMI、词性PMI联合特征等先验知识,然后将多个Bi-LSTM模型的输出加权融合,再经过CRF层计算最终结果,最后使用外部融合机制,如模板匹配、重复项处理等,发挥了不同模型的优势。
在2020年的CGED shared task中,Wang等人[9]将位置级别的F1值提高到了0.404 1,排名第一位,这个模型使用了ResElectra作为基础模型,再使用集成学习的方法提高性能。Luo等人[10]提出StructBert-GCN模型,利用StructBert与GCN结合取得第二名的成绩,其模型使用句法依存树,以词为单位构建句法图,也用到了集成学习方法,其最终位置级别的F1为0.397 7。以上两种方法的缺点都是使用了大量模型集成学习,很难用于实际应用。
本文提出了一种基于Electra、门控双线性网络Gated-Bilinear的中文语法错误检测模型Electra-Gated-Bilinear-CRF,该模型整体分为Electra特征提取层、Gated-Bilinear特征融合层、CRF解码层三个部分。首先用Electra获得文本语义信息和文本错误特征,再使用Gated-Bilinear对相邻Token的语义和错误特征进行融合,并获取更具体的语法错误特征,解码器为条件随机场CRF,学习标签间的依赖关系。在CGED任务中,语序错误(W)可能与其他错误(Q,包括成分缺失M、成分冗余R,错别字词S)存在嵌套关系,为了处理标签冲突的情况,门控双线性特征融合层的第二层使用了两个双线性层分别预测语序错误和其他错误,对应的解码层也使用了两个CRF,整体结构和预测流程如图1所示。
图1 Electra-Gated-Bilinear-CRF模型结构和预测结果举例
中文句子首先经过Electra特征提取层,提取文本的语义和基本的文本错误特征,并用全连接层对其降维;然后经过一个两层的门控双线性网络,第一层将Token与其后继Token特征融合,再使用GLU的门控机制选择特征;第二层将Token与后继Token的新特征输入两个平行的双线性层计算,分别得到语序错误特征和其他错误特征;两者经过两个CRF层分别解码,可以得到对应语序错误和其他三种错误的标签,最后解析标签就能够得到错误三元组。
特征提取层能够在一定程度上获取文本的语义信息和文本中存在的基本错误特征。特征提取层使用Electra通过对文本进行编码操作得到768维的字向量,再经过全连接层降维得到128维字向量。若直接将Electra的768维输出作为双线性神经网络的输入,网络的参数量会特别巨大,因此本模型首先使用全连接层对其降维。为平衡模型性能和训练效率,特征提取层的输出维度设为128。
基于Transformer结构的BERT在预训练语言模型领域取得了非常好的效果,其训练方式是掩码语言模型(Masked Language Model, MLM),在预训练过程中,输入的Token的15%会被随机替换为“[MASK]”,模型需要预测该位置的原本Token,通过这种完型填空式的方式训练模型的语义理解能力。然而BERT在预训练过程中出现的“[MASK]”字符并不会在序列标注等任务中出现,这种预训练和下游任务存在着信息不匹配的情况,导致BERT在某些任务上的性能不佳。
Clark等人基于对抗网络设计了预训练模型Electra,Electra是BERT[11]模型的一种改进变种,其模型结构与BERT一致,如图2所示。
图2 Electra判别器的Transformer结构
Electra与BERT仅有预训练任务不同,该模型提出了RTD(Replace Token Detection)生成对抗预训练任务,与MLM任务不同,RTD的预训练任务是区分输入的词是否被替换的二分类任务,其中Electra是预训练任务中的判别器,训练中使用性能较弱的MLM语言模型作为生成器来对输入Token做随机替换,然后用Electra判断MLM输出的Token序列中被替换的Token,如图3所示。这种训练方式使得模型对错别字、突兀的语义非常敏感,适合用于语法错误检测任务,本文使用哈工大讯飞联合实验室基于官方ELECTRA训练代码以及大规模的中文数据训练出中文ELECTRA预训练模型[12]权重,其性能大幅高于使用MLM任务训练的BERT。
图3 Electra训练过程示例
预训练Transformer模型返回的字向量已经包含足够的语义信息,但其位置向量使用绝对位置编码,不能有效利用Token之间的相对位置信息。相对位置信息在检测语法错误中起到重要作用,因此本文提出Gated-Bilinear神经网络作为Electra的下游任务模型,利用相邻Token的特征增强模型对语法错误的检测能力。Gated-Bilinear使用线性层降低字向量维度,减少双线性神经网络的参数量,同时使用门控机制、层标准化来增强模型的性能和稳定性。
本文提出的Gated-Bilinear结构由双线性特征融合层、门控线性单元GLU、Dropout层、LayerNorm层[13]、两个分别对应语序错误和其他错误的双线性特征分类层组成。其具体结构如图4所示。
Gated-Bilinear特征融合层会接收Electra特征提取层的输出x={x1,x2,x3,…,xi,…}作为输入,其中,xi是第i个Token对应的字向量,其维度为128。输入的张量首先经过特征融合层,其中Bilinear特征融合层接收xi与xi+1作为输入,输出一个256维的新张量x′i,对于整条序列张量x而言,Bilinear特征融合层的输入是x本身和x在序列维度右移1步后的结果(Electra模型在序列开始和结尾部分各加入一个特殊标记,这里可以将第一个Token视为最后一个Token的后继,特殊标记对标签预测影响很小),如式(1)所示。
x′=xT·W·roll(x,1)+b
(1)
其中,roll函数将张量在序列维度上右移1步,W和b分别是双线性神经网络的权重和偏置量。
门控线性单元可以利用门机制做特征选择,首先将张量x′在最后一个维度对半切分为维度均为128的张量A和B,然后使用门控线性单元运算得到新的向量x″,如式(2)所示。
x″=A⊗Sigmoid(B)
(2)
Dropout层对张量中的元素以15%的概率随机置0,作用是增强模型的泛化能力,x″经过Dropout层后,再经过层标准化(LayerNorm)层,LayerNorm的公式如式(3)所示。
(3)
其中,E[x″]是x″的平均值,Var[x″]是x″的方差,ò是一个很小的值,用于避免除0,γ、β是可学习的参数。LayerNorm层在每条输入的句子维度做标准化操作,避免了梯度消失、梯度爆炸问题,使隐藏状态的传递更加稳定。
由于语法错误存在嵌套的情况,嵌套方式通常是语序错误内部嵌套其他错误,因此为解决嵌套标签问题,此模型使用了两个双线性特征分类层(Bilinear-W、Bilinear-Q)做最后的特征分类,分别处理语序错误和其他错误,提升嵌套错误识别性能。此处双线性网络输出的特征维度等于标签数量,运算过程与式(1)相同,接下来使用两个CRF层将Bilinear-W、Bilinear-Q的输出分别解码为两组标签。
条件随机场能够在解码时考虑标签的依赖关系,因此对连续标签预测的性能与Softmax相比有较大提升。对于标签序列,定义其概率为:
(4)
其中,y表示所有可能的标签序列,T为转移矩阵,Tyi-1,yi为从标签yi-1到标签yi的转移概率,Oi,yi表示输入的第i个特征被预测为标签yi的概率。在预测解码时,使用维特比算法来找到概率最高的标签序列y*,其计算如式(5)所示。
(5)
为验证模型对于汉语学习者作文中语法错误的检测能力,本文采用了由NLPTEA主办的中文语法错误检测(CGED)shared task提供的数据集。该数据集将语法错误归纳为四个大类,分别是成分冗余(Redundant,R)、成分缺失(Missing,M)、选词错误(Selection,S)和语序错误(Words Disordering,W)。这些文本数据来自汉语水平考试(简体数据,简称HSK)和华语文能力测验(繁体数据,简称TOCFL)的考生作文。
在原始数据集中,标注被表示为文本ID、错误文本、0个或多个错误三元组的形式。如表1中“最重要的是做孩子想学的环境。”这句话标注的错误三元组是“6,6,S”,表示在按字符位置的[6,6]闭区间内存在选词错误(S错误),即“做”是错词。
表1 语法错误类型举例
本文统计了实验数据集中的错误数量和错误覆盖字数,如表2所示。语序错误数量虽少,但其平均覆盖范围最大,为5.48字,故识别难度最大,其范围内可以包含其他种类错误,也容易被识别为一对S、R错误。选词错误平均字数为1.78,说明此类错误多数是两个字所组成的词。成分冗余错误平均字数是1.36,说明这类错误以单字为主。使用CRF能够有效学习不同语法错误特征对应标签的字数范围。
表2 实验数据集错误统计
本实验使用的训练集由以下几个部分组成: 2016年的HSK和TOCFL训练集(TOCFL被转化为简体),2017、2018、2020年的HSK训练集(1)从2020年训练集中抽取语法错误分布比较均匀的103条作为验证集,其余1 026条作为训练集。,并补充了2018年HSK和1026条2020年HSK数据中正确句子作为负例。本文使用Electra-Gated-Bilinear-CRF和其他模型在2020年HSK测试集上的性能作为最终实验结果进行对比。
语法错误检测的性能指标分为四类,分别是整句级别的假阳性率(false positive rate,FPR)和检测(Diagnosis)、识别(Identification)、位置(Position)三个级别的准确率、召回率和F1值,其中位置级别性能是最重要的评判指标,因为其关系到后续的语法纠错任务。
CGED任务的性能计算步骤如下:
首先将预测结果表示为“ID+correct”的二元组或“ID+错误三元组”构成的四元组;再按预测结果是否与标准答案集存在匹配计算预测结果中真阳性tp、真阴性tn、假阳性fp、假阴性fn的个数,按句子级别和位置级别分别统计;最后根据以下公式分别计算各个级别的性能。
FPR当一个正确的句子中有任何位置被检测出错误时,此句子会被视为一个误报;误报的句子总数与所有正确句子数量的比值即为整句级别的误报率FPR。
(6)
检测级别与FPR类似,检测级别也是句子级别的检测能力评价指标。此级别只评价模型判断句子是否正确的二分类性能。
识别级别此级别相当于一个多分类任务评价指标,模型需要预测一个句子中存在的所有错误类型。
位置级别此评价指标会检查预测结果二元组或四元组,只有当其存在于标准答案中时才被视为正确。
各个指标具体的准确率P、召回率R和F1值计算如式(7)~式(9)所示。
基线模型本文所选择基线模型直接使用ELECTRA判别器做特征提取层,接下来使用两个全连接层、两个CRF层,分别预测两类冲突的错误标签。
ResElectra此模型将残差网络与预训练Transformer模型Electra相结合,提出Res-Electra作为错误检测的编码部分,解码部分同样使用BIO标注形式,再使用不同的随机种子和Dropout Rate进行训练,采用Stepwise集成学习的方法提高性能,共计有80个模型参与集成。
StructBERT-GCN StructBERT[14]的训练方式比原版Bert增加字序预测和句序预测两个新的训练目标。此方法同时使用句法依存树,以词为单位构建句法图,将图结构信息表示的语法依存关系融入训练过程。此方法也用到了模型集成,有38个StructBERT-GCN-CRF模型和65个多任务训练的StructBERT-CRF模型参与集成。
训练参数训练时均使用72作为Batch Size,Electra部分的学习率为0.000 01,CRF部分的学习率为0.001,其余部分的学习率为0.000 1;模型中涉及Dropout的部分丢弃概率均为0.15;输入时限制输入序列的长度为128,超过部分会被截断。设置Early Stop值为4,即验证集性能连续4轮没有提升会停止训练。
实验结果实验比较了Electra-Gated-Bilinear-CRF、基线模型和CGED 2020性能排行前2名的模型在CGED 2020测试集上的最终结果。对比实验模型ResElectra和StructBERT-GCN的性能数据来源为CGED 2020官方综述[15]。在中文语法纠错任务上,Position Level的性能是最重要的,也是本文对比的重点。实验结果中准确率能够反映模型在检错任务上的效率,而召回率反映模型对语法错误的敏感程度,CGED任务官方认为准确率和召回率同等重要,因此使用F1值衡量模型整体性能。而在中文语法检错的实际应用中,召回率通常是模型首先需要考虑的性能指标,因为检错任务通常是作为自动校对的前置任务,其召回率对后续的纠错性能影响更为显著。在此次实验中,Electra-Gated-Bilinear-CRF的模型集成方式是肯定性策略,即组内所有模型的结果都被认为是正确的结果被输出,也是由于这种集成方式对召回率提升最大。
如表3所示,Electra-Gated-Bilinear-CRF(表中简称Electra-GB-CRF)单模型在Position Level上的F1性能与CGED 2020的第一名ResElectra和第二名StructBERT-GCN差距已经很小。后两者均通过使用不同的随机数种子和不同的优化器训练大量模型权重,如Res-Electra使用80个模型集成,StructBERT-GCN共使用103个模型集成。三者的召回率差距不大,而ResElectra在准确率上领先较多,这也是ResElectra性能更高的原因。
表3 CGED 2020 HSK测试数据集模型性能对比
本文集成的Electra-Gated-Bilinear-CRF仅将一次训练过程中验证集性能前7名模型的预测结果简单叠加,就大幅提升了召回率,结果更具有实用价值,并在准确率未下降过多的情况下使F1值超过其他模型。这也表示同一个模型在一次训练过程中对语法错误检测的随机性较大,这可能是由于语法错误检测任务的结果是开放性的,同一病句有多种修改方式,都可以达到错误纠正的效果,这也证明此任务中召回率的重要性。
为了验证Gated-Bilinear层(图表中简称GB)中各子模块对整体网络结构的贡献,本文通过消融实验对比了去掉门控线性单元、层标准化及同时去掉两者的模型性能。如表4所示,实验表明,门控机制和层标准化操作对模型性能的提升有重要作用。其中性能数据为验证集性能前7的模型权重在测试集上性能表现的平均值。
表4 消融实验性能对比
第一组实验为完整的门控双线性层,其训练过程中性能和稳定性最强,前7个权重在训练集上F1值最高为0.401 4,最低为0.384 7。
第二组只使用一组双线性错误分类层和CRF层,在处理数据的时候将嵌套语法错误中与其他错误冲突的语序错误覆盖掉,用来验证冲突标签开预测的性能;第三组去掉了CRF层,是为了验证CRF可以利用连续语法错误标签的依赖关系;
第四组去掉了层标准化,第五组去掉了门控线性单元,第六组同时去掉层标准化和门控线性单元,这三组消融实验的实验结果能够体现两个双线性层中间加入LayerNorm和GLU的作用。
从表4可以看出冲突标签分组、CRF、层标准化、门控线性单元的组合对提升模型性能和稳定性有明显的贡献。其中CRF对性能的影响最大,其通过对连续错误标签更加准确的预测,大幅提高召回率来提升整体性能。将语序错误与其他错误分开预测,能够在Identification Level和Position Level上同时提高准确率和召回率,小幅度提高模型性能。
同时,消融实验的训练过程也能体现门控线性单元和层标准化模块对提高训练稳定性和减少过拟合程度有较大贡献。本文将消融实验中每轮训练结束时的模型权重保存下来,在验证集和测试集上分别预测,将两个数据集的预测结果绘制成折线图,图中标记了验证集、测试集上性能最高的轮次数和对应的F1值,如图5所示。可以看出,Gated-Bilinear的性能、在验证集和测试集上的稳定性和泛化能力大幅度优于其他几个模型。对比去除各个模块的模型可以发现,层标准化LayerNorm模块可以增强模型的稳定性,减少模型性能的大幅波动;门控线性单元可以提高模型性能,两者结合还可以显著降低过拟合程度。
图5 训练过程中性能稳定性和过拟合程度对比
在本文中我们提出了一种基于Electra和门控双线性神经网络Gated-Bilinear的中文语法错误检测模型,这种模型有效利用了相邻Token的特征,弥补了Transformer结构不能有效利用相对位置信息的缺陷,对于中文语法错误检测任务的性能和稳定性提升效果显著。实验表明,其单模型F1值可达0.395 8,简单的多模型叠加的F1值可达到0.411 5,超过之前最佳模型的复杂集成方法。