透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

微軟研究院AI頭條發表於2018-07-20

編者按:昨天,在我們的文章《機器語法糾錯能力新突破,微軟小英變身英語寫作老師》中,為大家介紹了微軟小英最新上線的“作文打分”新功能,以及這一功能背後的最新研究突破。今天,微軟亞洲研究院研究員葛濤將為大家從技術角度解讀機器自動語法改錯的最新研究成果。

機器自動語法改錯是自然語言處理領域的一個經典問題,也是近年來快速發展的一個研究方向,有著廣泛的實際應用需求。隨著相關資料集規模的逐漸增大以及深度學習技術的不斷成熟,越來越多的學者開始研究利用seq2seq模型進行自動語法改錯。

對於一個用於語法改錯任務的seq2seq模型,其基本的訓練資料為一個由原始句子和正確句子所組成的改錯句對,如圖1(a)所示。從理論上講,只要有大量的訓練資料,我們是能夠得到一個相對完美的語法改錯模型。然而實際上,這種改錯句對的數量規模相當有限。因此,在訓練資料並不充足的情況下,seq2seq模型的泛化能力就會受到影響,其導致的一個結果就是哪怕輸入的句子稍稍變動一點,模型也可能會無法將其完全改正,如圖1(b)所示。與此同時,我們還發現,對於一個含有多個語法錯誤的句子,單次的seq2seq推斷往往不能完全將其改正,在這種情況下,我們可能需要用多輪seq2seq推斷來對一個句子反覆進行修改,如圖1(c)所示。

透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

圖1

基於以上的幾點想法,我們在傳統seq2seq模型的基礎上提出了一種全新的學習和推斷機制——fluency boost learning and inference,如圖2(a)所示。

流暢度提升學習(fluency boost learning)的核心原理就是在訓練模型的過程中,讓seq2seq模型生成出多個結果,然後將結果中流暢度不如目標端正確句子的生成句子和目標端正確句子配對,組成全新的流暢提升句對,作為下一輪訓練的訓練資料。

流暢度提升推斷(fluency boost inference)則是利用seq2seq模型對句子進行多輪修改,直到句子的流暢度不再提升為止。這種多輪修改的策略能夠率先改掉句子的一部分語法錯誤,從而使句子的上下文更加清晰,有助於模型修改剩下的錯誤。

透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

2 流暢度提升學習(a)與推斷(b)


流暢度提升學習

對於語法改錯任務來說,一個合格的訓練樣本通常需要滿足兩個要求(1)源端句子和目標端句子的語義應當是一致的,因為我們不希望修改過的句子改變原意;(2)目標端句子的流暢度能夠得到提升,這一點其實也是語法改錯任務的終極目標。

而流暢度提升學習所生成出的流暢提升句對恰恰能夠很好地滿足上面的兩個條件。首先,由於我們的seq2seq模型是用改錯句對作為訓練資料訓練得到的,所以流暢度提升學習所創造出的句對通常不會改變句子原意,在模型相對穩定後,n-best結果中的句子與原句通常只有1到2個詞的差別,很少會改變句子原意;其次,我們所生成的流暢提升句對能夠保證目標端的句子比源端句子有更高的流暢度。

在這個工作中,我們用f(x)來定義句子的流暢度:

透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

上式中P(xi|x<i)為給定上文x<iP(xi)語言模型機率。H(x)實質上為句子x交叉熵,其取值範圍為[0,+∞),因此f(x)取值範圍為(0,1]。

透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

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推斷的基礎上,我們進一步提出了一種更加有效的方法——往返修改。往返修改是指利用一個反向(右到左)解碼器和一個正向(左到右)解碼器交替地對一個句子進行修改。因為正向和反向解碼器對於不同的錯誤有著各自的優勢,往返修改能夠讓這兩個模型能夠充分發揮自己的優勢。

透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

4 往返修改

例如上圖中的句子,用反向模型能夠很容易地把冠詞錯誤改正,這是因為冠詞錯誤的修正更加依賴於冠詞位置右邊的上下文。但是反向模型在檢測主謂一致這種錯誤型別時會存在一些劣勢,因為主致一致錯誤的改正往往需要依賴位於謂語動詞左邊的主語的人稱和單複數。而這一型別的錯誤又可以被正向模型發現並改正。

透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能

我們利用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 模型的語法改錯效能

透過分析發現,相比於基礎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

相關文章