内容简介:英语,作为世界上使用范围最广的语言,成为众多非英语国家(地区)的人们争相学习的第二语言(English as a Second Language,ESL)。据统计,全世界有超过17.5亿人将英语作为一种实用工具,这其中,母语非英语的人已经占据多数,同时,ESL初学者的人数仍在持续增长。然而,学习一门新的语言并非易事,在ESL初学者书写的文本中,存在大量的语法错误,能否利用计算机自动地纠正这些错误,辅助ESL初学者的语言学习,成为一个现实的问题。简而言之,语法错误纠正(Grammatical Error C
NLP
神经机器翻译
语法错误纠正
介绍
背景
英语,作为世界上使用范围最广的语言,成为众多非英语国家(地区)的人们争相学习的第二语言(English as a Second Language,ESL)。据统计,全世界有超过17.5亿人将英语作为一种实用工具,这其中,母语非英语的人已经占据多数,同时,ESL初学者的人数仍在持续增长。然而,学习一门新的语言并非易事,在ESL初学者书写的文本中,存在大量的语法错误,能否利用计算机自动地纠正这些错误,辅助ESL初学者的语言学习,成为一个现实的问题。
任务定义
简而言之,语法错误纠正(Grammatical Error Correction,GEC),就是自动地纠正文本中存在的语法错误,下图给出了一个直观的例子。具体的,一个GEC系统,通过分析输入句子的上下文,识别并纠正其中存在的任何语法错误,最终输出一个无语法错误的句子,且保留原句的语义不变。当然,如果输入句子中不存在语法错误,GEC系统应直接返回原句。
GEC方法综述
近年来,GEC这一任务在方法上经历了由规则到统计的演变,大体可分为3个阶段,下面做一简单介绍。
基于规则的方法
这一类方法通过硬编码规则来进行纠错。世界上第一个GEC系统,Writer's Workbench(1982年),就完全基于字符串的匹配和替换。对于某些特定类别的错误,基于规则的方法易于实现且十分有效,因此,直到今天,该方法仍被广泛使用。然而,考虑到语言的复杂性,基于规则的方法并不适合作为GEC的通用方法。
数据驱动的传统机器学习方法
随着语料资源的不断累积,从20世纪90年代开始,数据驱动的方法成为GEC的主流,人们利用机器学习技术(SVM、朴素贝叶斯),为不同错误类别设计单独的分类器。这类方法对冠词、介词等错误的纠正效果十分明显,但也存在一些问题。其仅利用了句子中局部的上下文信息,且只能独立地考虑不同的错误类别,对于一些交互式错误则无能为力。下面给出一个例子。
假设原句为:
显然,句子中network需改为networks,plays需改为play。
而采用对多个分类器做pipeline组合的纠错方法,假设主谓不一致先于名词单复数纠正,则纠正后的句子为:
仍然存在主谓不一致错误。
基于机器翻译的方法
将语法错误纠正看成是把“坏”句子翻译成“好”句子的思想最早来源于Brockett等人(2006年)。这是一个天才的想法,但直到2014年,该方法才逐渐成为GEC的主流,并迅速发展、迭代。在CoNLL2014年(CoNLL是NLP领域的一个年度评测会议)的GEC评测中,剑桥大学提交的基于统计机器翻译(Statistical Machine Translation,SMT)的GEC系统一举夺冠。之后,许多改进的方法被陆续提出,其中一个方法,rerank,即提取语言学特征对SMT解码得到的若干候选句子进行重排序,对纠错性能提升十分明显,基本成为GEC的一个必备环节。而随着神经机器翻译(Neural machine translation,NMT)逐渐取代SMT,NMT被很自然地引入到GEC,成为state-of-the-art GEC系统的核心组件。
基于NMT输出的GEC系统
(a)encoder-decoder模型
假设
为输入句子, 为纠正后的句子。GEC系统通过建模 ,试图找出,并将其作为纠正结果。
encoder-decoder模型的思想很简单,首先,用一个神经网络(encoder)将输入句子
编码成一个固定长度的向量,接着,用另一个神经网络(decoder)基于该向量进行解码,输出纠正后的句子。下图给出了RNN encoder-decoder模型的计算图。
典型的encoder和decoder网络均使用RNN,这里分别记为
和 。模型的具体计算公式如下,其中, 、 分别表示源端和目标端的词向量矩阵。encoder网络从
开始计算,遍历输入句子,直到输出最终的隐状态向量 。因此,在理论上可以认为 编码了整个输入句子的信息。 而在解码阶段,将 每一个时间步计算得到的隐状态向量通过
函数,转换为词汇表上的概率分布向量,之后,利用搜索技术(如beam search)找出一个输出句子。
encoder-decoder模型看似简单,实则非常强大。其能够直接、有效地对
进行建模。以机器翻译为例,通过做模型集成、采用更加复杂的encoder(如双向RNN)对输入句子编码,仅用encoder-decoder模型也能取得与高度工程化的翻译系统很接近的性能。
(b)注意力机制(attention mechanism)
理论上,一个充分复杂的encoder-decoder模型,可以完美地解决像翻译、纠错这样的问题。但是,在实际应用时,受训练数据规模的限制,模型不能无限大,这使得encoder-decoder模型面临两个突出的问题。
(1)长距离依赖
输入句子和输出句子中的某些词存在长距离依赖,在反向传播时,这可能引发梯度问题,造成模型学习困难。
(2)输入的表示
这一问题相比于长距离依赖问题更加严重。想象有两个输入句子,第一个仅包含3个单词,第二个包含100个单词,而encoder居然无差别地将它们都编码成相同长度的向量(比如说50维)。这一做法显然存在问题,长度为100的句子中很多信息可能被忽略了。
注意力机制的提出就是为了解决这一问题。在encoder对输入句子编码时,我们保留每一个词对应的隐状态向量,而在decoder解码时,我们充分利用这些信息(隐状态向量),而不是仅仅依赖encoder输出的最后一个隐状态向量
。下图给出了注意力机制的计算图。
首先,使用双向RNN作为encoder编码输入句子,拼接同一位置两个方向的隐状态向量,得到词的上下文表示。
在解码时,为不同隐状态向量分配不同权重,加权组合得到当前时间步的上下文向量,和decoder当前输出的隐状态向量拼接在一起,通过
预测下一个词。注意力机制使我们可以在解码过程中,动态地将更多的注意力(本质上是更大的权重)分配到输入句子中与当前时间步解码更相关的词上,从未提高纠错质量。
下图给出了在GEC中使用注意力机制的一个实例,可以看到大部分权重都集中在对角线上。
(c)重排序(rerank)
encoder-decoder模型加attention,这基本就是当前state-of-the-art GEC系统的核心,但为了进一步提高纠错性能,还有一个重要的实用步骤—重排序。典型的端到端Seq2Seq,直接将解码(如beam search)搜索得分最高的结果作为输出。但很多时候,由于encoder-decoder模型存在误差,解码时得分最高的结果并不一定是最好的,重 排序 对这一问题做了优化。具体做法很简单,比如说,使用beam search解码,保留得分最高的前k个候选句子,然后,在解码得分的基础上,引入若干特征(如输出句子在外部语言模型上的概率得分、与输入句子的编辑距离),对这k个候选句子重新排序,然后选择新的得分最高的句子作为最终输出。
结语
不可否认,目前GEC技术离实用还有一段距离。作为辅助语言学习的工具,GEC会更多地关注纠错的Precision,如何在保证Precision的情况下,提高纠错的Recall,将是今后GEC研究的一个重要方向。此外,目前GEC的平行语料相对较少,能否从low resource机器翻译研究中汲取营养,利用多模态数据、无监督方法来提高GEC的性能,也是一个值得关注的方向。
学习一门新的语言并不是一件简单的事情,技术为我们提供了丰富的资源来改善我们的学习体验。建立实用的自动语法纠错系统将深刻影响下一代的语言学习,这其中不仅蕴含着巨大商机,还极具教育意义。
参考文献
- A Multilayer Convolutional Encoder-Decoder Neural Network for Grammatical Error Correction, Shamil Chollampatt et al.
- Grammatical error correction in non-native English, Zheng Yuan.
- To err is Human, to Correct is Divine, Mariano Felice et al.
- Neural Machine Translation and Sequence-to-sequence Models: A Tutorial, Graham Neubig.
- Near Human-Level Performance in Grammatical Error Correction with Hybrid Machine Translation, Roman Grundkiewicz et al.
以上所述就是小编给大家介绍的《基于机器翻译输出的语法错误纠正》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- c – 纠正QOpenGLFunctions的用法
- 使用GrumPHP来纠正代码“毛病”
- 一种基于群体特征的比例偏差纠正方案
- SARscape中高分三号数据轨道纠正
- 谷歌发起包容性竞赛 纠正算法的偏见
- Java学习路线图——及时纠正自己的学习方向
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度探索C++对象模型
斯坦利•B.李普曼 (Stanley B. Lippman) / 侯捷 / 电子工业出版社 / 2012-1 / 69.00元
作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模......一起来看看 《深度探索C++对象模型》 这本书的介绍吧!