邓俊锋, 朱聪慧, 赵铁军
(哈尔滨工业大学 计算机科学与技术学院, 哈尔滨150001)
近年来,采用序列到序列学习框架的神经机器翻译方法,俨然成为语法错误纠正研究的主流[1-2]。神经机器翻译研究中最新的模型不断被应用到语法错误纠正任务中,并取得远超其他方法的性能。 然而,受限于“错误-纠正”平行语料的规模,拥有巨大参数空间的神经语法错误纠正模型很难被充分训练,导致模型的泛化能力大打折扣。
之前大部分研究工作仅关注于少数特定类型的语法错误的生成[3-4]。 例如,不可数名词、冠词、介词等。 部分最新的工作开始逐渐尝试生成全部类型的语法错误,并从句子层面考虑伪平行句对中的语法错误多样性[5-6]。
本文使用神经机器翻译中的back-translation 方法[7]来合成伪平行句对。 首先,利用种子语料训练一个语法错误生成模型,在训练时,模型的输入为“错误-纠正”平行句对中书写正确的纠正句子,输出为平行句对中含语法错误的句子。 使用该反向模型,将海量书写正确的句子“翻译”成含语法错误的句子,进而构造伪“错误-纠正”平行句对。 然而,Xie 等人[5]的工作表明,在反向模型的解码阶段,若直接采用beam search 策略,生成的伪错误句子将缺乏足够的语法错误多样性。 不同于Xie 等人使用加噪的beam search 解码策略来引入更多的语法错误,本文直接使用sampling 解码策略。 在语法错误纠正任务的标准数据集CoNLL-2014 Test Set 上的实验结果表明:本文提出的方法能合成有效的伪“错误-纠正”平行句对,从而帮助语法错误纠正模型的训练。
1.1.1 模型结构
Transformer 包含一个编码器和一个解码器,图1 给出了Transformer 的模型结构。给定源端错误句子x =(x1,x2,...,xm), xi∈X,X 为 源 端 词 表,Transformer 编码器将x 编码为连续空间中的一组隐含状态表示e =(e1,e2,...,em)。 基于这一表示,Transformer 解码器逐时间步地生成目标端纠正句子y =(y1,y2,...,yn), yi∈Y,Y 为目标端词表。
图1 Transformer 模型结构Fig. 1 Transformer model architecture
1.1.2 模型训练
语法错误纠正模型建模以下条件概率分布:
其中,θ 为语法错误纠正模型的参数。 训练时,使用极大似然估计学习模型参数:
1.1.3 解码策略
给定输入的错误句子x,采用beam search 解码生成目标端纠正句子yhyp,在每一个时间步,保留得分最高的前k 个候选前缀句子。 此外,为了抑制模型偏向于输出较短句子的行为,在原始的似然得分中引入长度惩罚项,具体计算公式为:
使用back-translation 方法,对书写正确的句子Yclean施加“噪声”,以构建伪平行句对(Ycorrupt,Yclean)。 之后,组合种子语料(X,Y) 和生成的(Ycorrupt, Yclean), 将 其 记 作 混 合 语 料 (Xmixtcure,Ymixture),训练语法错误纠正模型。
1.2.1 语法错误生成模型
使用“错误-纠正”平行句对(X,Y) 训练反向神经语法错误生成模型。 模型结构采用Transformer,给定错误句子x =(x1,x2,...xm) 和对应的纠正句子y =(y1,y2,...,yn), 语法错误生成模型建模“加噪”概率:
模型损失函数定义为:
在种子语料(X,Y) 上训练好语法错误生成模型后,用其“翻译”书写正确的句子Yclean, 得到含语法错误的句子,进而构建伪平行句对(Ycorrupt,Yclean)。
1.2.2 面向语法错误多样性的back-translation
在机器翻译中使用back-translation 方法生成伪源语言句子时,反向模型一般采用greedy search 或者beam search 解码。 关于back-translation 的最新研究[8]表明,采用sampling 或者加噪的beam search解码能取得更好的效果。 因为在构造伪平行句对时,greedy search 或者beam search 解码生成的伪源语言句子缺乏足够的多样性,且无法全面呈现反向模型建模的概率分布P(Source |Target)。 相比之下,采用sampling 或加噪的beam search 解码能在生成的伪源语言句子中引入更多的多样性,从而为后续正向模型的训练提供更强的学习信号。
面向语法错误纠正的“错误-纠正”平行语料,其源端错误句子和目标端纠正句子往往存在大量的重复。 无论是语法错误纠正模型,还是语法错误生成模型,使用具有这种特性的语料进行训练,模型往往趋于“保守”。 若在构造伪平行句对时,反向模型采用greedy search 或者beam search 解码策略,在生成的伪错误句子中,只会包含极少的语法错误,这样构造出的伪平行句对只能提供微弱的学习信号。 在早期实验中发现,若采用这两种解码策略,在反向模型输出的伪错误句子中,有相当一部分和输入的书写正确的句子完全相同。 Xie 等人受神经对话生成研究[9]的启发,在做back-translation 时,采用加噪的beam search 解码来生成伪错误句子,并证实有效。 本文指出,采用sampling 解码构造的伪平行句对同样能帮助训练,且效果比greedy search 解码策略更好。
本文在实验中,使用NUCLE[10]和Lang-8[11]作为训练语料。 原始的Lang-8 语料包含约80 多种语言的句子,可使用语言识别工具langid.py,过滤掉原始语料中的非英语句子,以及源端错误句子和目标端纠正句子完全相同的平行句对。 对于不同平行句对中源端错误句子相同的情况,仅保留其中之一,至此,筛选出大约120 万条“错误-纠正”平行句对。进一步分析Lang-8 语料发现,在一部分平行句对的目标端纠正句子中,包含修订者额外给出的评注。例如,“maybe you could say XXX”、“XXX is ok, but it sounds a little strange”,对于这样的平行句对,可利用手工设计的一些匹配模式,以及一些启发式规则(例如,要求目标端纠正句子和源端错误句子的长度比值不能超过1.5),将其过滤掉。 最终,用于模型训练的Lang-8 语料的句对数为930428。 NUCLE是CoNLL-2013、CoNLL-2014 语法错误纠正评测任务提供的语料,官方已经对其进行预处理,包含57151 条平行句对。 此外,在使用back-translation方法合成伪平行句对时,用到了WMT-2017 提供的英语单语语料News Crawl 2013,原始语料包含约1500 万个句子,实验中仅使用其中前100 万个句子。 表1 给出了实验中使用的训练数据的统计信息。
表1 训练数据Tab. 1 Training Data
测试数据为CoNLL-2014 Test Set[12],使用官方提供的M2打分器[13],评估指标为F0.5值。 为了方便和之前的工作进行对比,在此选用CoNLL-2013 Test Set[14]作为开发集。
表2 测试集&评价指标Tab. 2 Test Set & Metrics
2.2.1 语法错误生成模型训练设置
基于开源库tensor2tensor 实现Transformer,采用Transformerbase模型;编码器、解码器各包含6 个相同 的 网 络 层; 各 层 输 入、 输 出 的 维 度, 以 及Embedding 维度设置为512;多头注意力层使用8 个头,在单个头中,查询向量、键向量、值向量的维度均设置为64;前向神经网络子层的隐含层维度设置为2048,在模型的Embedding 层、以及各子层的输出处应用dropout,dropout 率设置为0.3;label smoothing率设置为0.1;使用带学习率衰减的Adam 优化算法,初始学习率设置为0.000 3;warmup 步数设置为16000;在4 块GeForce RTX 2080 Ti 上训练模型;batch 的大小设置为256;最大句子长度设置为50;超过该长度的部分直接截断,更新约30 000 步后停止。 源端、目标端使用不同词表,分别取各自出现最频繁的前30000 个BPE[15](byte pair encoding)子词单元。
2.2.2 语法错误纠正模型训练设置
使用语法错误生成模型“翻译” News Crawl 2013 语料中前100 万个英语句子,分别采用greedy search 和sampling 解码策略,设置生成的伪错误句子长度不超过50 个词,这样构造出100 万条伪“错误-纠正”平行句对(Ycorrupt, Yclean),和原始种子语料(X,Y) 一起,从头开始训练语法错误纠正模型。 由于实际训练语料规模增大,和反向模型相比,多更新18 000 步,其余训练设置保持不变。
解码时,采用带长度惩罚项的beam search,beam size 设置为8,长度惩罚项中的α 参数设置为0.6,设置生成的纠正句子最大长度为300。
表3 给出了在CoNLL-2014 Test Set 上的实验结果。 由此可见,本文提出的方法能显著提升语法错误纠正的性能。
在使用back-translation 合成伪“错误-纠正”平行句对时,分别采用greedy search 和sampling 解码策略,并用混合语料训练Transformer。 在F0.5值上,sampling 的结果比baseline 高出了约1.8 个点,比greedy 的结果高出6.1 个点。 这说明:(1)基于sampling 解码策略的back-translation 数据增强方法,能有效利用外部单语语料,为语法错误纠正模型的训练提供额外的学习信号,从而显著提升模型的性能。 (2)在使用反向模型生成伪错误句子时,采用sampling 解码策略比greedy search 解码策略更好。 这归因于采用sampling 解码,能提高生成伪错误句子中的语法错误多样性。
Xie 等人[5]的工作在方法上和本文最为接近,同样利用back-translation 方法来合成伪平行句对。而与本文方法的不同之处在于:为了在生成的伪错误句子中引入更多的语法错误多样性,文献[5]中使用了三种加噪的beam search 解码策略(rank penalty noising、top penalty noising、random noising)。 而本文直接使用sampling 解码,尽管该方法带来的绝对提升(1.82)有所不及,但本文baseline 系统的结果比其最好的系统(base+BTrandomBS)还要高出2.18 个点。
表3 CoNLL-2014 Test Set 实验结果Tab. 3 Experimental result on CoNLL-2014 Test Set
本文将机器翻译中的back-translation 方法应用到语法错误纠正中,充分利用外部单语语料,以缓解该任务面临的数据稀疏问题。 首次提出使用sampling 解码策略来构造伪“错误-纠正”平行句对,并在两个标准数据集上均取得显著提升。 进一步的工作将考虑如何利用外部资源中的弱监督信号(如维基百科的编辑历史)来提升语法错误纠正的性能。