鄧俊鋒, 朱聰慧, 趙鐵軍
(哈爾濱工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院, 哈爾濱150001)
近年來,采用序列到序列學(xué)習(xí)框架的神經(jīng)機器翻譯方法,儼然成為語法錯誤糾正研究的主流[1-2]。神經(jīng)機器翻譯研究中最新的模型不斷被應(yīng)用到語法錯誤糾正任務(wù)中,并取得遠(yuǎn)超其他方法的性能。 然而,受限于“錯誤-糾正”平行語料的規(guī)模,擁有巨大參數(shù)空間的神經(jīng)語法錯誤糾正模型很難被充分訓(xùn)練,導(dǎo)致模型的泛化能力大打折扣。
之前大部分研究工作僅關(guān)注于少數(shù)特定類型的語法錯誤的生成[3-4]。 例如,不可數(shù)名詞、冠詞、介詞等。 部分最新的工作開始逐漸嘗試生成全部類型的語法錯誤,并從句子層面考慮偽平行句對中的語法錯誤多樣性[5-6]。
本文使用神經(jīng)機器翻譯中的back-translation 方法[7]來合成偽平行句對。 首先,利用種子語料訓(xùn)練一個語法錯誤生成模型,在訓(xùn)練時,模型的輸入為“錯誤-糾正”平行句對中書寫正確的糾正句子,輸出為平行句對中含語法錯誤的句子。 使用該反向模型,將海量書寫正確的句子“翻譯”成含語法錯誤的句子,進而構(gòu)造偽“錯誤-糾正”平行句對。 然而,Xie 等人[5]的工作表明,在反向模型的解碼階段,若直接采用beam search 策略,生成的偽錯誤句子將缺乏足夠的語法錯誤多樣性。 不同于Xie 等人使用加噪的beam search 解碼策略來引入更多的語法錯誤,本文直接使用sampling 解碼策略。 在語法錯誤糾正任務(wù)的標(biāo)準(zhǔn)數(shù)據(jù)集CoNLL-2014 Test Set 上的實驗結(jié)果表明:本文提出的方法能合成有效的偽“錯誤-糾正”平行句對,從而幫助語法錯誤糾正模型的訓(xùn)練。
1.1.1 模型結(jié)構(gòu)
Transformer 包含一個編碼器和一個解碼器,圖1 給出了Transformer 的模型結(jié)構(gòu)。給定源端錯誤句子x =(x1,x2,...,xm), xi∈X,X 為 源 端 詞 表,Transformer 編碼器將x 編碼為連續(xù)空間中的一組隱含狀態(tài)表示e =(e1,e2,...,em)。 基于這一表示,Transformer 解碼器逐時間步地生成目標(biāo)端糾正句子y =(y1,y2,...,yn), yi∈Y,Y 為目標(biāo)端詞表。
圖1 Transformer 模型結(jié)構(gòu)Fig. 1 Transformer model architecture
1.1.2 模型訓(xùn)練
語法錯誤糾正模型建模以下條件概率分布:
其中,θ 為語法錯誤糾正模型的參數(shù)。 訓(xùn)練時,使用極大似然估計學(xué)習(xí)模型參數(shù):
1.1.3 解碼策略
給定輸入的錯誤句子x,采用beam search 解碼生成目標(biāo)端糾正句子yhyp,在每一個時間步,保留得分最高的前k 個候選前綴句子。 此外,為了抑制模型偏向于輸出較短句子的行為,在原始的似然得分中引入長度懲罰項,具體計算公式為:
使用back-translation 方法,對書寫正確的句子Yclean施加“噪聲”,以構(gòu)建偽平行句對(Ycorrupt,Yclean)。 之后,組合種子語料(X,Y) 和生成的(Ycorrupt, Yclean), 將 其 記 作 混 合 語 料 (Xmixtcure,Ymixture),訓(xùn)練語法錯誤糾正模型。
1.2.1 語法錯誤生成模型
使用“錯誤-糾正”平行句對(X,Y) 訓(xùn)練反向神經(jīng)語法錯誤生成模型。 模型結(jié)構(gòu)采用Transformer,給定錯誤句子x =(x1,x2,...xm) 和對應(yīng)的糾正句子y =(y1,y2,...,yn), 語法錯誤生成模型建?!凹釉搿备怕剩?/p>
模型損失函數(shù)定義為:
在種子語料(X,Y) 上訓(xùn)練好語法錯誤生成模型后,用其“翻譯”書寫正確的句子Yclean, 得到含語法錯誤的句子,進而構(gòu)建偽平行句對(Ycorrupt,Yclean)。
1.2.2 面向語法錯誤多樣性的back-translation
在機器翻譯中使用back-translation 方法生成偽源語言句子時,反向模型一般采用greedy search 或者beam search 解碼。 關(guān)于back-translation 的最新研究[8]表明,采用sampling 或者加噪的beam search解碼能取得更好的效果。 因為在構(gòu)造偽平行句對時,greedy search 或者beam search 解碼生成的偽源語言句子缺乏足夠的多樣性,且無法全面呈現(xiàn)反向模型建模的概率分布P(Source |Target)。 相比之下,采用sampling 或加噪的beam search 解碼能在生成的偽源語言句子中引入更多的多樣性,從而為后續(xù)正向模型的訓(xùn)練提供更強的學(xué)習(xí)信號。
面向語法錯誤糾正的“錯誤-糾正”平行語料,其源端錯誤句子和目標(biāo)端糾正句子往往存在大量的重復(fù)。 無論是語法錯誤糾正模型,還是語法錯誤生成模型,使用具有這種特性的語料進行訓(xùn)練,模型往往趨于“保守”。 若在構(gòu)造偽平行句對時,反向模型采用greedy search 或者beam search 解碼策略,在生成的偽錯誤句子中,只會包含極少的語法錯誤,這樣構(gòu)造出的偽平行句對只能提供微弱的學(xué)習(xí)信號。 在早期實驗中發(fā)現(xiàn),若采用這兩種解碼策略,在反向模型輸出的偽錯誤句子中,有相當(dāng)一部分和輸入的書寫正確的句子完全相同。 Xie 等人受神經(jīng)對話生成研究[9]的啟發(fā),在做back-translation 時,采用加噪的beam search 解碼來生成偽錯誤句子,并證實有效。 本文指出,采用sampling 解碼構(gòu)造的偽平行句對同樣能幫助訓(xùn)練,且效果比greedy search 解碼策略更好。
本文在實驗中,使用NUCLE[10]和Lang-8[11]作為訓(xùn)練語料。 原始的Lang-8 語料包含約80 多種語言的句子,可使用語言識別工具langid.py,過濾掉原始語料中的非英語句子,以及源端錯誤句子和目標(biāo)端糾正句子完全相同的平行句對。 對于不同平行句對中源端錯誤句子相同的情況,僅保留其中之一,至此,篩選出大約120 萬條“錯誤-糾正”平行句對。進一步分析Lang-8 語料發(fā)現(xiàn),在一部分平行句對的目標(biāo)端糾正句子中,包含修訂者額外給出的評注。例如,“maybe you could say XXX”、“XXX is ok, but it sounds a little strange”,對于這樣的平行句對,可利用手工設(shè)計的一些匹配模式,以及一些啟發(fā)式規(guī)則(例如,要求目標(biāo)端糾正句子和源端錯誤句子的長度比值不能超過1.5),將其過濾掉。 最終,用于模型訓(xùn)練的Lang-8 語料的句對數(shù)為930428。 NUCLE是CoNLL-2013、CoNLL-2014 語法錯誤糾正評測任務(wù)提供的語料,官方已經(jīng)對其進行預(yù)處理,包含57151 條平行句對。 此外,在使用back-translation方法合成偽平行句對時,用到了WMT-2017 提供的英語單語語料News Crawl 2013,原始語料包含約1500 萬個句子,實驗中僅使用其中前100 萬個句子。 表1 給出了實驗中使用的訓(xùn)練數(shù)據(jù)的統(tǒng)計信息。
表1 訓(xùn)練數(shù)據(jù)Tab. 1 Training Data
測試數(shù)據(jù)為CoNLL-2014 Test Set[12],使用官方提供的M2打分器[13],評估指標(biāo)為F0.5值。 為了方便和之前的工作進行對比,在此選用CoNLL-2013 Test Set[14]作為開發(fā)集。
表2 測試集&評價指標(biāo)Tab. 2 Test Set & Metrics
2.2.1 語法錯誤生成模型訓(xùn)練設(shè)置
基于開源庫tensor2tensor 實現(xiàn)Transformer,采用Transformerbase模型;編碼器、解碼器各包含6 個相同 的 網(wǎng) 絡(luò) 層; 各 層 輸 入、 輸 出 的 維 度, 以 及Embedding 維度設(shè)置為512;多頭注意力層使用8 個頭,在單個頭中,查詢向量、鍵向量、值向量的維度均設(shè)置為64;前向神經(jīng)網(wǎng)絡(luò)子層的隱含層維度設(shè)置為2048,在模型的Embedding 層、以及各子層的輸出處應(yīng)用dropout,dropout 率設(shè)置為0.3;label smoothing率設(shè)置為0.1;使用帶學(xué)習(xí)率衰減的Adam 優(yōu)化算法,初始學(xué)習(xí)率設(shè)置為0.000 3;warmup 步數(shù)設(shè)置為16000;在4 塊GeForce RTX 2080 Ti 上訓(xùn)練模型;batch 的大小設(shè)置為256;最大句子長度設(shè)置為50;超過該長度的部分直接截斷,更新約30 000 步后停止。 源端、目標(biāo)端使用不同詞表,分別取各自出現(xiàn)最頻繁的前30000 個BPE[15](byte pair encoding)子詞單元。
2.2.2 語法錯誤糾正模型訓(xùn)練設(shè)置
使用語法錯誤生成模型“翻譯” News Crawl 2013 語料中前100 萬個英語句子,分別采用greedy search 和sampling 解碼策略,設(shè)置生成的偽錯誤句子長度不超過50 個詞,這樣構(gòu)造出100 萬條偽“錯誤-糾正”平行句對(Ycorrupt, Yclean),和原始種子語料(X,Y) 一起,從頭開始訓(xùn)練語法錯誤糾正模型。 由于實際訓(xùn)練語料規(guī)模增大,和反向模型相比,多更新18 000 步,其余訓(xùn)練設(shè)置保持不變。
解碼時,采用帶長度懲罰項的beam search,beam size 設(shè)置為8,長度懲罰項中的α 參數(shù)設(shè)置為0.6,設(shè)置生成的糾正句子最大長度為300。
表3 給出了在CoNLL-2014 Test Set 上的實驗結(jié)果。 由此可見,本文提出的方法能顯著提升語法錯誤糾正的性能。
在使用back-translation 合成偽“錯誤-糾正”平行句對時,分別采用greedy search 和sampling 解碼策略,并用混合語料訓(xùn)練Transformer。 在F0.5值上,sampling 的結(jié)果比baseline 高出了約1.8 個點,比greedy 的結(jié)果高出6.1 個點。 這說明:(1)基于sampling 解碼策略的back-translation 數(shù)據(jù)增強方法,能有效利用外部單語語料,為語法錯誤糾正模型的訓(xùn)練提供額外的學(xué)習(xí)信號,從而顯著提升模型的性能。 (2)在使用反向模型生成偽錯誤句子時,采用sampling 解碼策略比greedy search 解碼策略更好。 這歸因于采用sampling 解碼,能提高生成偽錯誤句子中的語法錯誤多樣性。
Xie 等人[5]的工作在方法上和本文最為接近,同樣利用back-translation 方法來合成偽平行句對。而與本文方法的不同之處在于:為了在生成的偽錯誤句子中引入更多的語法錯誤多樣性,文獻[5]中使用了三種加噪的beam search 解碼策略(rank penalty noising、top penalty noising、random noising)。 而本文直接使用sampling 解碼,盡管該方法帶來的絕對提升(1.82)有所不及,但本文baseline 系統(tǒng)的結(jié)果比其最好的系統(tǒng)(base+BTrandomBS)還要高出2.18 個點。
表3 CoNLL-2014 Test Set 實驗結(jié)果Tab. 3 Experimental result on CoNLL-2014 Test Set
本文將機器翻譯中的back-translation 方法應(yīng)用到語法錯誤糾正中,充分利用外部單語語料,以緩解該任務(wù)面臨的數(shù)據(jù)稀疏問題。 首次提出使用sampling 解碼策略來構(gòu)造偽“錯誤-糾正”平行句對,并在兩個標(biāo)準(zhǔn)數(shù)據(jù)集上均取得顯著提升。 進一步的工作將考慮如何利用外部資源中的弱監(jiān)督信號(如維基百科的編輯歷史)來提升語法錯誤糾正的性能。