通过全新学习和推断机制提升seq2seq 模型的语法改错性能

编者按:昨天,在我们的文章《机器语法纠错能力新突破,微软小英变身英语写作老师》中,为大家介绍了微软小英最新上线的“作文打分”新功能,以及这一功能背后的最新研究突破。今天,微软亚洲研究院研究员葛涛将为大家从技术角度解读机器自动语法改错的最新研究成果。

机器自动语法改错是自然语言处理领域的一个经典问题,也是近年来快速发展的一个研究方向,有着广泛的实际应用需求。随着相关数据集规模的逐渐增大以及深度学习技术的不断成熟,越来越多的学者开始研究利用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<iP(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-boostself-boost是从完全不同的两个角度来生成流畅提升句对,这就意味着这两种方法能够互相补充、互相增强。因此,我们进一步将两种方法结合在一起,产生了最终的dual-boost learning方法。Dual-boost learning能够让back-boostself-boost learning各自生成出流畅提升句对(如图3c)。生成出的句对不仅可以帮助训练改错模型,让改错模型从更多的样例中知道如何去改正一个句子,反过来也可以帮助训练错误生成模型来生成更多样化的含有错误的句子

值得一提的是,我们的流畅度提升学习的方法也可以应用在大量的正确文本上。因为一个正确的句子可以看成是一个源端和目标端相同的改错句对,流畅度提升学习应用到正确文本可以帮助我们极大地扩充训练数据的规模以及内容多样性


流畅度提升推断

流畅度提升推断利用了语法改错这个任务的特殊性——输入输出本质上是相同的,因此我们可以将输出的结果句子作为输入进行再修改。在多轮seq2seq推断的基础上,我们进一步提出了一种更加有效的方法——往返修改。往返修改是指利用一个反向(右到左)解码器和一个正向(左到右)解码器交替地对一个句子进行修改。因为正向和反向解码器对于不同的错误有着各自的优势,往返修改能够让这两个模型能够充分发挥自己的优势。

4 往返修改

例如上图中的句子,用反向模型能够很容易地把冠词错误改正,这是因为冠词错误的修正更加依赖于冠词位置右边的上下文。但是反向模型在检测主谓一致这种错误类型时会存在一些劣势,因为主致一致错误的改正往往需要依赖位于谓语动词左边的主语的人称和单复数。而这一类型的错误又可以被正向模型发现并改正。

我们利用Lang-8CLCNUCLE这几个知名的语法改错数据集以及额外从Lang-8收集到的287万训练句对作为原始训练数据。我们的基本seq2seq模型是一个7层卷积seq2seq模型

对于流畅度提升学习,我们从10-best outputs中来筛选构造流畅提升句对,并且使用英语维基百科的语料作为正确文本来生成流畅句对。在实际模型训练过程中,我们强制规定在每一轮训练迭代过程中,用于训练的流畅句对数量不超过原始训练句对的数量。对于流畅度提升推断,我们使用了往返修改的策略,在流畅度提升的前提下,用反向和正向的seq2seq模型交替对句子进行修改。此外,我们使用了5元组语言模型和编辑特征对于beam search选出的12-best句子进行重排序,从而选出最好的结果作为单轮推断的输出。

我们在CoNLL-2014JFLEG两个基准测试集上对系统进行了评价,分别选用了两个数据集官方的评测指标Max-match F_0.5GLEU。值得一提的是,CoNLL-2014数据集有两种不同的标注集。一种是原始标注集,由2名专业人员进行标注;而另一个标注集则是由Bryant & Ng (2015)后来对原始标注集的一个扩充,将标注数提到了10组。我们在这两个标注集下都进行了测试,分别区别这两种标注集,我们用CoNLL-2014代表原始2人标注集,CoNLL-10代表10人标注集。

我们将结合了流畅度提升学习和推断机制的seq2seq模型和一些知名的语法改错系统进行了效果对比。从下表中可以看出,在使用了更多的训练数据之后,我们的基础模型就已经超越了多数先前的系统。当在基础模型上加入流畅度提升学习机制后,模型在三个基准上都有了显著的提高,在CoNLL-2014CoNLL-10基准上达到了61.3476.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

入门Seq2Seq
1
相关数据
神经网络技术
Neural Network

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

交叉熵技术
Cross-entropy

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

生成模型技术
Generative Model

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

语言模型技术
Language models

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

自然语言处理技术
Natural language processing

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

机器翻译技术
Machine translation

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

权重技术
Weight

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

准确率技术
Accuracy

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

微软研究院AI头条
微软研究院AI头条

微软亚洲研究院是微软公司在亚太地区设立的研究机构,也是微软在美国本土以外规模最大的一个。从1998年建院至今, 通过从世界各地吸纳而来的专家学者们的鼎力合作,微软亚洲研究院已经发展成为世界一流的计算机基础及应用研究机构,致力于推动整个计算机科学领域的前沿技术发展,并将最新研究成果快速转化到微软全球及中国本地的关键产品中,帮助消费者改善计算体验。同时,微软亚洲研究院着眼于下一代革命性技术的研究,助力公司实现长远发展战略和对未来计算的美好构想。

微软研究院AI头条
微软研究院AI头条

专注科研19年,盛产黑科技

返回顶部