用於語法糾錯(GEC)的序列到序列(seq2seq)模型(Cho et al., 2014; Sutskever et al., 2014)近年來吸引了越來越多的注意力(Yuan & Briscoe, 2016; Xie et al., 2016; Ji et al., 2017; Schmaltz et al., 2017; Sakaguchi et al., 2017; Chollampatt & Ng, 2018)。但是,大部分用於 GEC 的 seq2seq 模型存在兩個缺陷。第一,seq2seq 模型的訓練過程中使用的糾錯句對有限,如圖 1(a)所示。受訓練資料的限制,具備數百萬引數的模型也可能無法實現良好的泛化。因此,如果一個句子和訓練例項有些微的不同,則此類模型通常無法完美地修改句子,如圖 1(b)所示。第二,seq2seq 模型通常無法透過單輪 seq2seq 推斷完美地修改有很多語法錯誤的句子,如圖 1(b)和圖 1(c)所示,因為句子中的一些錯誤可能使語境變得奇怪,會誤導模型修改其他錯誤。
圖 1:(a)糾錯句對;(b)如果句子與訓練資料有些微的不同,則模型無法完美地修改句子;(c)單輪 seq2seq 推斷無法完美地修改句子,但多輪推斷可以。
為了解決上述限制,微軟研究者提出一種新型流暢度提升學習和推斷機制,參見圖 2。
對於流暢度提升學習,seq2seq 不僅使用原始糾錯句對來訓練,還生成流暢度較差的句子(如來自 n-best 輸出的句子),將它們與訓練資料中的正確句子配對,從而構建新的糾錯句對,前提是該句子的流暢度低於正確句子,如圖 2(a)所示。研究者將生成的糾錯句對稱為流暢度提升句對(fluency boost sentence pair),因為目標端句子的流暢度總是會比源句子的流暢度高。訓練過程中生成的流暢度提升句對將在後續的訓練 epoch 中作為額外的訓練例項,使得糾錯模型可以在訓練過程中看到具有更多語法錯誤的句子,並據此提升泛化能力。
對於模型推斷,流暢度提升推斷機制允許模型以多輪推斷的方式漸進地修改句子,只要每一次提議的編輯能夠提升語句的流暢度,如圖 2(b) 所示。對於有多個語法錯誤的語句,一些錯誤將優先得到修正。而經修正的部分能讓上下文更加清晰,這對模型接下來修改其它錯誤非常有幫助。此外,由於這種任務的特殊性,我們可以重複編輯輸出的預測。微軟進一步提出了一種使用兩個 seq2seq 模型的往返糾錯方法,其解碼順序是從左到右和從右到左的 seq2seq 模型。又因為從左到右和從右到左的解碼器使用不同的上下文資訊解碼序列,所以它們對於特定的錯誤型別有獨特的優勢。往返糾錯可以充分利用它們的優勢並互補,這可以顯著提升召回率。
圖 2:流暢度提升學習和推斷機制:(a)給出一個訓練例項(即糾錯句對),流暢度提升學習機制在訓練過程中從 seq2seq 的 n-best 輸出中構建多個流暢度提升句對。流暢度提升句對將在後續的訓練 epoch 中用作訓練例項,幫助擴充套件訓練集,幫助模型學習;(b)流暢度提升推斷機制允許糾錯模型透過多輪 seq2seq 推斷漸進式地修改句子,只要句子的流暢度一直能夠提升。
結合流暢度提升學習和推斷與卷積 seq2seq 模型,微軟亞洲研究院取得了當前最佳的結果,這使其成為首個在兩個基準上都達到人類水平的 GEC 系統。
論文:REACHING HUMAN-LEVEL PERFORMANCE IN AUTOMATIC GRAMMATICAL ERROR CORRECTION: AN EMPIRICAL STUDY
論文地址:https://arxiv.org/pdf/1807.01270.pdf
摘要:神經序列到序列(seq2seq)方法被證明在語法糾錯(GEC)中有很成功的表現。基於 seq2seq 框架,我們提出了一種新的流暢度提升學習和推斷機制。流暢度提升學習可以在訓練期間生成多個糾錯句對,允許糾錯模型學習利用更多的例項提升句子的流暢度,同時流暢度提升推斷允許模型透過多個推斷步驟漸進地修改句子。結合流暢度提升學習和推斷與卷積 seq2seq 模型,我們的方法取得了當前最佳的結果:分別在 CoNLL-2014 標註資料集上得到 75.02 的 F0.5 分數,在 JFLEG 測試集上得到 62.42 的 GLEU 分數,這使其成為首個在兩個基準資料集上都達到人類水平(CoNLL72.58,JFLEG62.37)的 GEC 系統。
2 背景:神經語法糾錯
典型的神經 GEC 方法使用帶有注意力的編碼器-解碼器框架將原始句子編輯成語法正確的句子,如圖 1(a)所示。給出一個原始句子
及其糾錯後的句子,其中和分別是句子 x^r 和 x^c 的第 M 和第 N 個單詞,則糾錯 seq2seq 模型透過最大似然估計(MLE)從糾錯句對中學習機率對映 P(x^c |x^r ),進而學習模型引數 Θ_crt 以最大化以下公式:
其中 S* 表示糾錯句對集。
對於模型推斷,透過束搜尋輸出句子選擇,這一過程需要最大化下列公式:
3 流暢度提升學習
用於 GEC 的傳統 seq2seq 模型僅透過原始糾錯句對學習模型引數。然而,這樣的糾錯句對的可獲得性仍然不足。因此,很多神經 GEC 模型的泛化效能不夠好。
幸運的是,神經 GEC 和神經機器翻譯(NMT)不同。神經 GEC 的目標是在不改變原始語義的前提下提升句子的流暢度;因此,任何滿足這個條件(流暢度提升條件)的句子對都可以作為訓練例項。
在這項研究中,研究者將 f(x) 定義為句子 x 的流暢度分數。
其中,P(x_i | x_<i)是給定上下文 x_<i 下 x_i 的機率,由語言模型計算得到,|x| 是句子 x 的長度。H(x) 是句子 x 的交叉熵,範圍為 [0, +∞)。因此 f(x) 的範圍為 (0, 1]。
流暢度提升學習的核心思想是生成流暢度提升的句對,其在訓練期間滿足流暢度提升條件,如圖 2(a)所示,因此這些句子對可以進一步幫助模型學習。
在這一部分中,研究者展示了三種流暢度提升策略:反向提升(back-boost)、自提升(self-boost)和雙向提升(dual-boost),它們以不同的方式生成流暢度提升句子對,如圖 3 所示。
圖 3:三種流暢度提升學習策略:(a)反向提升,(b)自提升,(c)雙向提升。它們都能生成流暢度提升句對(虛線框中的句對),幫助訓練過程中的的模型學習。圖中的數字是對應句子的流暢度分數。
4 流暢度提升推斷
4.1 多輪糾錯
正如在第一節中討論的,一些具有多個語法錯誤的語句通常不能透過一般的 Seq2Seq 推斷(單輪推斷)得到完美的修正。幸運的是,神經 GEC 與 NMT 不同,它的源語言與目標語言相同。這一特徵允許我們透過多輪模型推斷多次編輯語句,也就產生了流暢度提升推斷過程。如圖 2(b) 所示,流暢度提升推斷允許透過多輪 Seq2Seq 推斷漸進式地編輯語句,只要每一次提議的編輯能夠提升語句的流暢度。具體來說,糾錯 Seq2Seq 模型首先將原語句 x^r 作為輸入,並輸出假設 x^o1。然後流暢度提升推斷將採用 x^o1 作為輸入以生成下一個輸出 x^o2,而不是將 x^o1 直接作為最終的預測。除非 x^ot 不再能提升 x^ot-1 的流暢度,否則這一過程就不會終止。
4.2 往返糾錯
基於多輪糾錯的思路,研究者進而提出了一個進階流暢度提升推斷方法:往返糾錯。該方法不使用 4.1 中介紹的 seq2seq 模型漸進性地修改句子,而是透過一個從右到左和一個從左到右的 seq2seq 模型依次修改句子,如圖 4 所示。
圖 4:往返糾錯:某些型別的錯誤(例如,冠詞錯誤)由從右到左的 seq2seq 模型會更容易糾錯,而某些錯誤(例如主謂一致)由從左到右的 seq2seq 模型更容易糾錯。往返糾錯使得二者互補,相對於單個模型能糾正更多的語法錯誤。
5 實驗
表 2 展示了 GEC 系統在 CoNLL 和 JFLEG 資料集上的結果。由於使用了更大規模的訓練資料,因此即使是基礎卷積 seq2seq 模型也超越了多數之前的 GEC 系統。流暢度提升學習進一步提升了基礎卷積 seq2seq 模型的效能。
表 2:GEC 系統在 CoNLL 和 JFLEG 資料集上的結果對比。
如表 3 所示,流暢度提升學習提升了基礎卷積 seq2seq 模型所有層面的表現(精度、召回率、F0.5 和 GLEU),表明流暢度提升學習確實有助於用於 GEC 的 seq2seq 模型的訓練。
表 3:效能最佳的 GEC 系統在 CoNLL 和 JFLEG 資料集上的評估結果分析。紅色字型的結果超越了人類水平。
表 4:有/沒有流暢度提升學習的卷積 seq2seq 模型在 CoNLL-2014 資料集的每個錯誤型別上的召回率對比。
表 5:從左到右和從右到左的 seq2seq 模型對 CoNLL-2014 中每種錯誤型別的召回率