鄧俊鋒, 朱聰慧, 趙鐵軍
(哈爾濱工業大學 計算機科學與技術學院, 哈爾濱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 解碼策略來構造偽“錯誤-糾正”平行句對,并在兩個標準數據集上均取得顯著提升。 進一步的工作將考慮如何利用外部資源中的弱監督信號(如維基百科的編輯歷史)來提升語法錯誤糾正的性能。