编者按:昨天,在我们的文章《机器语法纠错能力新突破,微软小英变身英语写作老师》中,为大家介绍了微软小英最新上线的“作文打分”新功能,以及这一功能背后的最新研究突破。今天,微软亚洲研究院研究员葛涛将为大家从技术角度解读机器自动语法改错的最新研究成果。
机器自动语法改错是自然语言处理领域的一个经典问题,也是近年来快速发展的一个研究方向,有着广泛的实际应用需求。随着相关数据集规模的逐渐增大以及深度学习技术的不断成熟,越来越多的学者开始研究利用seq2seq模型进行自动语法改错。
对于一个用于语法改错任务的seq2seq模型,其基本的训练数据为一个由原始句子和正确句子所组成的改错句对,如图1(a)所示。从理论上讲,只要有大量的训练数据,我们是能够得到一个相对完美的语法改错模型。然而实际上,这种改错句对的数量规模相当有限。因此,在训练数据并不充足的情况下,seq2seq模型的泛化能力就会受到影响,其导致的一个结果就是哪怕输入的句子稍稍变动一点,模型也可能会无法将其完全改正,如图1(b)所示。与此同时,我们还发现,对于一个含有多个语法错误的句子,单次的seq2seq推断往往不能完全将其改正,在这种情况下,我们可能需要用多轮seq2seq推断来对一个句子反复进行修改,如图1(c)所示。
图1
基于以上的几点想法,我们在传统seq2seq模型的基础上提出了一种全新的学习和推断机制——fluency boost learning and inference,如图2(a)所示。
流畅度提升学习(fluency boost learning)的核心原理就是在训练模型的过程中,让seq2seq模型生成出多个结果,然后将结果中流畅度不如目标端正确句子的生成句子和目标端正确句子配对,组成全新的流畅提升句对,作为下一轮训练的训练数据。
而流畅度提升推断(fluency boost inference)则是利用seq2seq模型对句子进行多轮修改,直到句子的流畅度不再提升为止。这种多轮修改的策略能够率先改掉句子的一部分语法错误,从而使句子的上下文更加清晰,有助于模型修改剩下的错误。
图2 流畅度提升学习(a)与推断(b)
对于语法改错任务来说,一个合格的训练样本通常需要满足两个要求:(1)源端句子和目标端句子的语义应当是一致的,因为我们不希望修改过的句子改变原意;(2)目标端句子的流畅度能够得到提升,这一点其实也是语法改错任务的终极目标。
而流畅度提升学习所生成出的流畅提升句对恰恰能够很好地满足上面的两个条件。首先,由于我们的seq2seq模型是用改错句对作为训练数据训练得到的,所以流畅度提升学习所创造出的句对通常不会改变句子原意,在模型相对稳定后,n-best结果中的句子与原句通常只有1到2个词的差别,很少会改变句子原意;其次,我们所生成的流畅提升句对能够保证目标端的句子比源端句子有更高的流畅度。
在这个工作中,我们用f(x)来定义句子的流畅度:
上式中P(xi|x<i)为给定上文x<i,P(xi)的语言模型概率。H(x)实质上为句子x的交叉熵,其取值范围为[0,+∞),因此f(x)取值范围为(0,1]。
图3 流畅度提升学习
其实通过数据增强(data augmentation)方法来扩充训练集的做法以前就有研究者提出过,在神经网络机器翻译领域比较有代表性的工作就是Sennrich等人在ACL 2016上提出的back-translation方法(图3a),利用反转训练数据的源端和目标端来训练一个专门用来生成错误句子的模型。而我们的方法则是通过改错模型自身生成的n-best来作为错误句子(图3b)。
为了区分这两种不同的方法,我们将利用back-translation来生成流畅提升句对的方法称之为back-boost learning,而将利用改错模型自身来生成流畅句对的方法称为self-boost learning。对于self-boost learning,在不同的训练阶段,模型的不断迭代更新会导致对同一句子前后生成出的n-best也会不同,所以模型生成出的含有错误的句子更加多样化。
由于back-boost和self-boost是从完全不同的两个角度来生成流畅提升句对,这就意味着这两种方法能够互相补充、互相增强。因此,我们进一步将两种方法结合在一起,产生了最终的dual-boost learning方法。Dual-boost learning能够让back-boost和self-boost learning各自生成出流畅提升句对(如图3c)。生成出的句对不仅可以帮助训练改错模型,让改错模型从更多的样例中知道如何去改正一个句子,反过来也可以帮助训练错误生成模型来生成更多样化的含有错误的句子。
值得一提的是,我们的流畅度提升学习的方法也可以应用在大量的正确文本上。因为一个正确的句子可以看成是一个源端和目标端相同的改错句对,将流畅度提升学习应用到正确文本可以帮助我们极大地扩充训练数据的规模以及内容多样性。
流畅度提升推断利用了语法改错这个任务的特殊性——输入输出本质上是相同的,因此我们可以将输出的结果句子作为输入进行再修改。在多轮seq2seq推断的基础上,我们进一步提出了一种更加有效的方法——往返修改。往返修改是指利用一个反向(右到左)解码器和一个正向(左到右)解码器交替地对一个句子进行修改。因为正向和反向解码器对于不同的错误有着各自的优势,往返修改能够让这两个模型能够充分发挥自己的优势。
图4 往返修改
例如上图中的句子,用反向模型能够很容易地把冠词错误改正,这是因为冠词错误的修正更加依赖于冠词位置右边的上下文。但是反向模型在检测主谓一致这种错误类型时会存在一些劣势,因为主致一致错误的改正往往需要依赖位于谓语动词左边的主语的人称和单复数。而这一类型的错误又可以被正向模型发现并改正。
我们利用Lang-8、CLC、NUCLE这几个知名的语法改错数据集以及额外从Lang-8收集到的287万训练句对作为原始训练数据。我们的基本seq2seq模型是一个7层卷积seq2seq模型。
对于流畅度提升学习,我们从10-best outputs中来筛选构造流畅提升句对,并且使用英语维基百科的语料作为正确文本来生成流畅句对。在实际模型训练过程中,我们强制规定在每一轮训练迭代过程中,用于训练的流畅句对数量不超过原始训练句对的数量。对于流畅度提升推断,我们使用了往返修改的策略,在流畅度提升的前提下,用反向和正向的seq2seq模型交替对句子进行修改。此外,我们使用了5元组语言模型和编辑特征对于beam search选出的12-best句子进行重排序,从而选出最好的结果作为单轮推断的输出。
我们在CoNLL-2014和JFLEG两个基准测试集上对系统进行了评价,分别选用了两个数据集官方的评测指标Max-match F_0.5和GLEU。值得一提的是,CoNLL-2014数据集有两种不同的标注集。一种是原始标注集,由2名专业人员进行标注;而另一个标注集则是由Bryant & Ng (2015)后来对原始标注集的一个扩充,将标注数提到了10组。我们在这两个标注集下都进行了测试,分别区别这两种标注集,我们用CoNLL-2014代表原始2人标注集,CoNLL-10代表10人标注集。
我们将结合了流畅度提升学习和推断机制的seq2seq模型和一些知名的语法改错系统进行了效果对比。从下表中可以看出,在使用了更多的训练数据之后,我们的基础模型就已经超越了多数先前的系统。当在基础模型上加入流畅度提升学习机制后,模型在三个基准上都有了显著的提高,在CoNLL-2014和CoNLL-10基准上达到了61.34和76.88 F_0.5,在JFLEG数据集上也达到了61.41的高分。当再加入流畅度提升推断机制以后,模型在JFLEG数据集上的得分提高到了62.42,但在CoNLL数据集上F_0.5的得分出现了下降。
通过分析发现,相比于基础seq2seq模型,流畅度提升学习能够提升模型在准确率、召回率、F_0.5、GLEU所有指标上的得分,有效地帮助模型更好地学习如何进行语法改错。流畅度提升推断能够显著提高召回率,但却会使准确率下降。由于F_0.5这个指标对准确率的权重要远大于召回率,因此模型在F_0.5的得分上出现了下降。而对于JFLEG数据集,加上流畅度提升推断后模型的GLEU得分能够从61.41提高到62.42,这也证实了流畅度提升推断能够更好地提升句子的流畅度。
在CoNLL-10和JFLEG两个基准测试集上按照人机对比的评测设定,结合了流畅度提升学习和推断机制的seq2seq模型的得分分别为74.84和62.42的得分,均首次超越了人类在这两个基准上的表现(CoNLL: 72.58, JFLEG: 62.37)。
但必须要说明的是,这并不意味着自动语法改错目前已经全面超越了人类。目前的改错模型主要是基于对句子的浅层分析,并不涉及到对语义级别的深层理解,这就使得在涉及到深层语义理解的错误修改时,机器的能力要远弱于人类专家的水平;而且,目前自动语法改错通常只涉及到单句级别的修改,并不会考虑段落或者篇章级上下文语境。因此,机器自动改错想要真正超越人类水平,还有较长的一段路要走。但对于大多数语法错误来说,机器自动语法改错的能力确实已经可以达到人类的水平了。
了解更多技术细节,请阅读我们的论文:
Fluency Boost Learning and Inference for Neural Grammatical Error Correction
http://aclweb.org/anthology/P18-1097
Reaching Human-level Performance in Automatic Grammatical Error Correction: An Empirical Study
https://arxiv.org/abs/1807.01270