语法改错是一个大家比较陌生的领域,大致可以认为对英文进行语法改错。给定一句带有语法错误的话,AI对其进行修正得到正确的语法表示。最近微软亚洲研究院给出论文称当前Deep Learning模型已经超过人类水平。具体论文参考(论文地址:https://arxiv.org/abs/1807.01270)
常见的语法错误归纳为如下列表:(具体包括动词时态、情态动词、代词错误、冠词使用错误等)
对于语法改错任务,已有的方法一般包括两种:(1)基于分类,先找到错误类型再修改;(2)基于翻译模型,认为有错误的句子为源句子,正确的句子为目标句子。上文就沿用了Seq2Seq的翻译模型,模型结构依旧沿用微软自己的ConvSeq2Seq,具体结构图如下所示:
由于目前的语法改错都存在两个问题:(1)受到训练数据的影响,训练数据中没有见过的语法错误,不能很好地改正;(2)多个错误同时存在的时候,很难做到一次全部都修正。微软的论文在这两个方面做了很好的改进。如下图描述Seq2Seq语法改错过程,Single-round的inference难以改正多处错误。
针对问题(1),文章给出fluency boost learning方案,即在训练过程增加数据,让模型能够看到更多的错误,增强模型的泛化能力。
文章定义流畅度指标如下:
式子中的P表示语言模型计算得到的句子概率。f(x)越大说明这一句子越流畅。
文中提出了三种fluency boost learning的方案,均可以理解为找到流畅度小于正确句子的生成句子,用于数据补充。
A. Back Boosting
通过自定义一个Seq2Seq的错误生成模型,即将原来改错数据进行倒序,用正确的句子生成错误的句子。然后再在生成的句子中挑选流畅度比正确句子低的句子保留。然后再与正确句子构建pair用于改错模型的训练。(本质依然是增添训练数据,让模型见到更多的错误)。
B. Self Boosting
self-boost方法不用额外定义一个错误生成模型,而是使用自身的生成模型,每次挑选top k个生成句子与正确句子进行比较,如果流畅度较低即保留用于训练数据的补充。
C. Dual Boosting
Dual模型实质是将back boost和self boost进行融合的过程。需要说明的是,模型是同时进行训练。
针对问题(2),文章给出boost inference方案;即预测过程进行增强,主要包括两个方面:一是多轮预测;二是循环预测。
A. multi-round
由于句子中出现多个错误时,不能一次进行改错。需要进行多轮修改。根据定义的流畅度指标,只有当流畅度不再增强时,就不再进行下一轮的语法纠错。
B. round-way
分别定义两个解码器,一个从右至左进行解码,另一个从左到右进行解码。right-to-left能够很好的解决冠词错误的问题(只有知道右边的名词才能确定冠词形式),而left-to-right能够解决主谓一致的问题(只有知道主语,才能确定谓语形式)。
结果说明
使用的测试数据集包括CoNLL-2014,CoNLL-10, JFLEG test,测试指标GLEU为BLEU的改进版本,F0.5可以理解为MaxMatch量。具体结果如下:
与人类语法改错水平进行比较
无论是在F0.5还是GLEU指标上,该系统语法纠错的效果均超过了人类水平。