譚詠梅,楊一梟,楊 林,劉姝雯
(北京郵電大學 計算機學院,北京 100876)
英語是當今世界上最主要的國際通用語言,全球有超過10億人將英語作為第二語言使用。語法(syntactic)錯誤是ESL(English as Second Language)學習者最常犯的一種錯誤[1]。語法錯誤自動糾正(Grammatical Error Correction,GEC)指利用計算機對文章進行自動語法錯誤糾正。
冠詞錯誤、介詞錯誤、名詞單復數(shù)錯誤、動詞形式錯誤和主謂不一致錯誤是ESL學習者常犯的五類語法錯誤[2]。它們對文章智能評改系統(tǒng)的性能影響最大,因此本文重點關注并解決這五類錯誤。
這五類錯誤中,冠詞和介詞錯誤的變化形式有限,可將其看作序列標注問題,且長短時記憶(Long Short-Term Memory,LSTM)對于序列標注問題效果較好,因此,本文提出了一種基于LSTM的序列標注GEC方法。名詞單復數(shù)錯誤、動詞形式錯誤和主謂不一致錯誤變化形式多樣,所對應的混淆集為開放集合。本文提出一種基于ESL和新聞語料的N-gram投票策略GEC方法。
GEC開始于20世紀80年代,Writer’s Workbench主要使用規(guī)則進行語法錯誤糾正,隨后出現(xiàn)了基于句法分析的Epistle系統(tǒng),1993年微軟的Word基于拓展短語結構語法(Augmented Phrase Structure Grammar)對文本進行語法錯誤糾正。
LSTM由Sepp Hochreiter和Jurgen Schmid-huber于1997年提出[3],通過設置輸入門、輸出門、遺忘門等,解決了循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network)的梯度消失和信息的長期依賴問題,在處理序列問題中,效果較為突出。
隨著各種規(guī)模語料庫的出現(xiàn),基于語料庫的統(tǒng)計方法成為有效的GEC方法。HOO在2011年、2012年連續(xù)舉辦了兩年相關評測任務[4-5],CoNLL在2013年、2014年繼續(xù)舉辦了相關評測任務[2,6]。
GEC方法主要可以分為基于規(guī)則和基于統(tǒng)計兩類?;谝?guī)則的方法主要依賴語言學家編寫的語法規(guī)則,可分為以下兩類:
(1) 基于上下文無關規(guī)則驅動的方法。其主要依賴語言學家編寫的語法規(guī)則進行錯誤檢查[7],少量規(guī)則對系統(tǒng)不夠實用,大量規(guī)則則會出現(xiàn)互相矛盾的問題。該方法局限性太大,錯誤檢查范圍有限。
(2) 基于簡單統(tǒng)計的規(guī)則驅動的方法在提取規(guī)則的時候考慮了上下文[8],可以有效避免規(guī)則的錯誤使用,但錯誤糾正范圍仍然有限。
基于統(tǒng)計的GEC方法[9-12],即使用機器學習的方法對英文寫作中的錯誤進行糾正時,糾正的性能依賴于語料庫的構建。本文在進行識別和糾正時,將新聞語料、ESL語料和糾正后的中國學生寫的英文文章語料(PIGAI語料*www.pigai.org)混合使用。
在本文的N-gram方法中,使用大量的新聞語料進行N-gram的頻次統(tǒng)計,以用于對名詞、動詞、主謂錯誤等的識別和糾正;在神經(jīng)網(wǎng)絡模型中,對不存在語法錯誤的語料進行人工錯誤生成,以平衡語料之間的差異并補充用于模型訓練的語料。
對于冠詞和介詞的糾正,傳統(tǒng)的GEC方法使用N-gram或者基于規(guī)則的方法對語法錯誤進行糾正。單純的使用固定窗口大小的上下文信息進行糾正,信息使用并不充分,且當窗口大小變大時,難以對模型進行訓練。LSTM網(wǎng)絡模型可以學習到?jīng)Q定介詞或者冠詞使用的長期依賴信息,并且可以避免傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡中可能發(fā)生的梯度消失等問題。
因此,本文將冠詞和介詞錯誤看作一項特殊的序列標注任務,提出一種基于LSTM的序列標注GEC方法。在訓練時,使用ESL語料和補充語料,對特定冠詞或介詞進行標注。針對名詞單復數(shù)錯誤、動詞形式錯誤和主謂不一致錯誤,其混淆集為開放集合。提出一種基于ESL和新聞語料的N-gram投票策略的GEC方法。
基于LSTM和N-gram的ESL文章的GEC方法系統(tǒng)架構如圖1所示。
針對冠詞和介詞錯誤,將其看作一項特殊的序列標注任務,該文提出一種基于LSTM的序列標注GEC方法。首先,對于已有詞性標注的訓練語料進行預處理,將冠詞詞性用一個特殊標記“ART”代替,將介詞詞性用一個特殊標記“TO”代替,把上述標記與冠詞或介詞的位置進行對換。然后,使用LSTM進行模型訓練。最后,將訓練得到的模型用于測試數(shù)據(jù)。
針對名詞單復數(shù)錯誤、動詞形式錯誤和主謂不一致錯誤,混淆集為開放集合,提出基于ESL和新聞語料的N-gram投票策略的GEC方法。
2.1.1N-gram搜索服務
語法錯誤的糾正策略基于N-gram的頻次統(tǒng)計,因此需首先建立N-gram搜索服務。使用的N-gram*http://webscope.sandbox.yahoo.com/catalog.php?datatype=l來源為約12 000個新聞網(wǎng)站2006年的所有新聞,統(tǒng)計信息如表1所示。

表1 N-gram詳細信息
為了提高其查詢效率,使用開源搜索引擎solr*https://lucene.apache.org/solr/對其建立倒排索引,提供搜索服務。
2.1.2知識庫
冠詞和介詞的變化形式有限,都處于封閉集合內(nèi)。針對冠詞和介詞建立有限混淆集。

圖1 系統(tǒng)架構圖
名詞及動詞不像冠詞和介詞那樣變化形式有限,其變化形式是開放集合。因此針對名詞錯誤、動詞形式、主謂不一致錯誤分別建立變化表。
冠詞混淆集冠詞混淆集包含三種情況: the,a/an,null。null代表不使用冠詞。
介詞混淆集介詞混淆集包含常見的17個介詞: on,about,into,with,as,at,by,or,from,in,of,over,to,among,between,under,within。
名詞單復數(shù)變化表名詞單復數(shù)變化表包括: 名詞單數(shù)、名詞復數(shù),如表2所示。

表2 名詞單復數(shù)變化表
動詞形式變化表動詞形式變化表主要包括: 動詞原形、過去式、過去分詞、現(xiàn)在分詞,如表3所示。

表3 動詞形式變化表
動詞單復數(shù)變化表動詞單復數(shù)變化取決于其主語單復數(shù)形式。動詞單復數(shù)變化表主要包括: 動詞單數(shù),動詞復數(shù),如表4所示。

表4 動詞單復數(shù)變化表
對混淆集為開放集的GEC方法,基于移動窗口[10]及N-gram投票策略。
2.2.1移動窗口
移動窗口(Moving Window)定義如式(1)所示。
MWi,k(w)={wi -j,…,wi -j+(k -1),j=0,k-1}
(1)
wi為句中第i個單詞,k代表窗口大小,j為窗口內(nèi)第一個單詞與wi的距離。如表5所示。

表5 移動窗口
窗口大小k的選擇和j的取值范圍直接影響著GEC的效果,針對不同的錯誤類型,選擇不同的k,j值。
2.2.2N-gram投票策略
本策略模擬現(xiàn)實生活中的投票表決機制,含語法錯誤候選的N-gram片段代表一個可能具有投票權利的候選人。由于語料庫有限,N-gram片段的頻次可能出現(xiàn)非常稀疏的情況。本策略設置一個最小有效頻次,只有當查詢到的頻次高于最小有效頻次時,此N-gram片段才具有投票權利。
在現(xiàn)實生活中,不同的人針對不同領域所投的票的重要性是不一樣的,例如: 領域專家的投票重要性高于普通人。本策略使用N-gram片段長度模擬領域專家的專業(yè)程度,N-gram越長所投票的重要性越高。
最后,針對投票結果,得到糾正后的結果。具體算法如圖2所示。

圖2 N-gram投票策略
Fset和Wset為參數(shù)。Fset為最小有效頻次,只有當查詢到的頻次大于Fset時才可參加投票。Wset用于調(diào)整不同長度N-gram片段投票的權重,N-gram片段長度越長其權重越大。
此算法基于語料庫,由于一方面語料庫規(guī)模有限不可能包含所有的片段,另一方面語料庫中存在噪音數(shù)據(jù)。所以,設置最小有效頻次Fset,只有當查詢出的N-gram片段頻次大于此頻次,才能說明語料庫中包含相關語料,此N-gram片段具有投票權利。依據(jù)實驗對比,將Fset設置為100。
具有投票權利的N-gram片段的頻次代表改為相應結果的概率。假設修改冠詞錯誤時,“have an apple”的頻次為2,“have the apple”的頻次為1,“have apple”的頻次為1。那么,根據(jù)語料庫改為“have an apple”的概率將大于“have the apple”及“have apple”。而投票策略是要在“have an apple”、 “have the apple”及“have apple”中選出一個作為投票對象,本策略選擇概率大的作為投票對象。
該文對混淆集為固定集合的語法錯誤使用基于LSTM的標注糾正策略。
2.3.1LSTM模型原理
在進行序列數(shù)據(jù)的標注時,當前單詞的標注信息一般依賴于上下文信息。傳統(tǒng)的序列標注方法依賴統(tǒng)計或者融合的方法[13-14],而循環(huán)神經(jīng)網(wǎng)絡通過建立隱藏層的序列關系,可以很好的提取序列信息[3]。其中,LSTM通過設置門限單元和Cell,可以有效避免傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡在訓練時可能會出現(xiàn)的梯度消失和梯度爆炸等問題[15]。
相比單向的LSTM模型僅僅累積當前時刻之前的信息,雙向的LSTM可以累積當前時刻的上下文信息,使得模型可以綜合上下文信息進行序列的標注。
2.3.2基于LSTM的標注糾正策略
基于LSTM的標注模型如圖3所示。模型首先將單詞轉換成單詞向量作為模型的輸入,每個時刻輸入序列中相應位置的單詞向量。在訓練的過程中,詞向量作為參數(shù)進行更新。模型使用詞向量作為LSTM單元的輸入,并在每個時刻,輸出相應的標注向量。其中,標注集合為所有的詞性集合和所有介詞或者冠詞的混淆集的并集。該標注向量的維度和標注集合總數(shù)一致,并通過softmax選擇概率最大的標注進行標記。
標注模型依賴BPTT(back propagation through time)算法[3],使用隨機梯度下降的方式進行監(jiān)督訓練。
本文針對混淆集固定的語法錯誤,即冠詞和介詞進行標注糾正。在標注之前,將序列中的冠詞或者介詞使用統(tǒng)一的標識進行表示。在標注時,統(tǒng)一的標識被標注成具體的介詞或者冠詞,實現(xiàn)語法中冠詞或介詞錯誤的糾正。
例如,在進行冠詞糾錯時:
原句:
“Debateonthelegislation,whichfacesavetothreatfrompresidentBush,istocontinuetoday.”
首先,將其處理為:
“DebateonARTlegislation,whichfacesARTvetothreatfrompresidentBush,istocontinuetoday.”
即,使用統(tǒng)一的符號”ART”進行代替句子中所有的冠詞作為輸入。
標注模型輸出為:
“NNINtheNN,WDTVBZaNNNNINNNPNNP.VBZTOVBNN.”即,冠詞部分標注為具體的冠詞。其余部位輸出相應的詞性標注。
2.3.3人工錯誤生成
因新聞語料和ESL語料之間存在差異,故模型在訓練時,對新聞語料進行人工錯誤補充,以減小語料之間的差異。根據(jù)語法錯誤的類型,隨機選擇句子中的動詞或者名詞進行形式的變化。例如,隨機地將名詞的單復數(shù)形式進行修改,將動詞的時態(tài)進行修改等。
冠詞錯誤主要包括: 冠詞誤用,冠詞冗余,冠詞缺失。錯誤類型舉例如下。
1) 冠詞誤用:
例“It is alsotheadvance of surveillance technology.”
將“theadvance”改為“anadvance”。
2) 冠詞冗余:
例“It givesthepolice a better control of the criminal.”
將“thepolice”改為“police”。
3) 冠詞缺失:
例“Government had to uninstall all the devices in the end.”
將“Government”改為“Thegovernment”。
本文將冠詞錯誤糾正看作一項特殊的序列標注任務,涉及三個子模塊: 冠詞錯誤預處理模塊、冠詞錯誤識別與糾正模塊和冠詞錯誤后處理模塊。
因冠詞缺失在冠詞錯誤中的占比較小[2],本文主要處理前面兩種錯誤類型。
2.4.1冠詞錯誤預處理模塊
將冠詞詞性用一個特殊標記“ART”代替,把詞性與冠詞的位置進行對換。這樣,句子中所有出現(xiàn)冠詞的地方都被替換為“ART”,而其對應的詞性則被修改為此處應該出現(xiàn)的冠詞。如“A_DTrecord_NN date_NN has_VBZ n’t_RB been_VBN set_VBN ._.”處理為“ART_Arecord_NN date_NN has_VBZ n’t_RB been_VBN set_VBN ._.”。
2.4.2冠詞錯誤識別與糾正模塊
根據(jù)給定句子,判斷句子中可能存在冠詞使用錯誤的位置,對句子進行詞性標注,然后識別出所有詞性被標注為冠詞(a,an,the)的地方。使用基于LSTM的序列標注方法進行冠詞錯誤識別與糾正。
基于LSTM的序列標注GEC方法,系統(tǒng)架構如圖3所示。其中,wn為輸入的待糾正句子的第n個單詞,tn為輸出的糾正后句子的第n個單詞。首先,將輸入句子中的每個單詞轉換為詞向量表示;然后,經(jīng)過兩層LSTM模型,得到標注結果。

圖3 基于LSTM的冠詞、介詞錯誤識別與糾正方法
2.4.3冠詞錯誤后處理模塊
將上一步驟的結果中為特殊標記“ART”的單詞與詞性標記進行對換,再將詞性標記刪除,得到最終輸出結果。
介詞錯誤主要包括: 介詞誤用、介詞冗余、介詞缺失。錯誤類型舉例如下。
1) 介詞誤用:
例“Pets are supposed to be chained when they are outonthe streets.”
將“onthe streets”改為“inthe streets”。
2) 介詞冗余:
例“In that case,they would have no choice but to seekforthe power of loyal police.”
將“seekfor”改為“seek”。
3) 介詞缺失:
例“Although we are not implantedwithchips we are exposed under CCTV.”
將“implanted”改為“implanted (with)”。
將介詞錯誤糾正看作一項特殊的序列標注任務,涉及三個子模塊: 介詞錯誤預處理模塊、介詞錯誤識別與糾正模塊和介詞錯誤后處理模塊。
因介詞缺失在介詞錯誤中的占比較小[2],本文主要處理前面兩種錯誤類型。
2.5.1介詞錯誤預處理模塊
將介詞詞性用一個特殊標記“TO”代替,把詞性與介詞的位置進行對換。這樣,句子中所有出現(xiàn)介詞的地方都被替換為“TO”,而其對應的詞性則被修改為此處應該出現(xiàn)的介詞。如“Some_DT 0_CD institutions_NNS are_VBP part_NNof_INthe_DT pension_NN fund_NN ._.”處理為“Some_DT 0_CD institutions_NNS are_VBP part_NNTO_ofthe_DT pension_NN fund_NN ._.”。
2.5.2介詞錯誤識別與糾正模塊
根據(jù)給定句子,判斷句子中可能存在介詞使用錯誤的位置,對句子進行詞性標注,然后識別出所有詞性被標注為介詞的地方。
使用基于LSTM的序列標注方法進行介詞錯誤糾正,系統(tǒng)架構如圖3所示。
2.5.3介詞錯誤后處理模塊
將上一步驟的結果中為特殊標記“TO”的單詞與詞性標記進行對換,再將詞性標記刪除,得到最終輸出結果。
名詞單復數(shù)錯誤糾正模塊基于名詞單復數(shù)變化表及N-gram投票策略,主要針對名詞單復數(shù)誤用情況進行糾正。此模塊具體糾正過程舉例說明如下:
例“This will,if not already,caused problems as there are very limitedspacesfor us .”
將“spaces”改為“space”。
1) 對例句詞性標注得到其詞性序列,并提取詞性標注為NN和NNS的單詞得到錯誤候選集合E={problems,spaces};
2) 使用名詞單復數(shù)變化表得到相應的糾正候選集合。如: spaces的糾正候選集合C={space,spaces};
3) 基于糾正候選集合,使用大小為3—5的移動窗口獲取N-grams片段集合。使用N-gram投票策略得到得票最高的糾正候選,在原句中進行替換。如果“space”為得票最高糾正候選,則糾正后的句子為“This will,if not already,caused problems as there are very limitedspacefor us .”
動詞錯誤糾正模塊主要針對動詞形式誤用情況及主謂不一致情況進行糾正。此模塊依賴于動詞形式變化表、動詞單復數(shù)變化表及N-gram投票策略,具體糾正過程舉例如下:
動詞形式錯誤:
例“The more peopleusingit over us,the more power they will have on us.”
將“using”改為“use”。
主謂不一致:
例“Every move of usareeasily tracked.”
將“are”改為“is”。
1) 對句子詞性標注得到其詞性序列。針對動詞形式錯誤,提取詞性標注為VB、VBD、VBG、VBN的單詞作為其錯誤候選。針對主謂不一致錯誤,提取詞性標注為VBP、VBZ的單詞作為其錯誤候選。
2) 根據(jù)錯誤候選及動詞形式變化表/動詞單復數(shù)變化表得到錯誤候選的糾正候選集合。
3) 針對糾正候選,使用大小為3—5的移動窗口獲取N-grams片段集合。使用N-gram投票策略得到得票最高的糾正候選,并在原句中進行替換。
實驗數(shù)據(jù)來源于CoNLL2013的GEC評測任務,統(tǒng)計結果如表6所示。由于CoNLL2013語料沒有正確的詞性標注,且CoNLL2013訓練語料較PIGAI詞性標注語料[13]和Brown語料*http://www.nltk.org/nltk_data/規(guī)模較小。因此,使用PIGAI詞性標注語料、Brown語料和標注后的CoNLL語料等擴充LSTM訓練語料標注時,用Stanford 標注工具對其進行詞性標注。其中,CoNLL2013語料和PIGAI語料作為ESL語料,Brown語料作為補充的新聞語料參與模型的訓練。

表6 CoNLL2013的GEC評測任務數(shù)據(jù)統(tǒng)計
CoNLL2013的GEC評測任務數(shù)據(jù)里標注了多種錯誤類型,但評測任務主要是針對冠詞錯誤、介詞錯誤、名詞錯誤、主謂一致和動詞形式錯誤這五種占比較高[2]的錯誤類型。
CoNLL2013評價標準為F1[2],定義如式(2)所示。
(2)
其中P與R分別表示準確率和召回率,定義如式(3)、式(4)所示。
Ncorrect指系統(tǒng)修改正確的錯誤的數(shù)目,Npredicted指系統(tǒng)修改的錯誤的數(shù)目,Ntarget指語料本身存在的錯誤的數(shù)目。
基于LSTM和N-gram的ESL文章的GEC方法在CoNLL2013的GEC評測數(shù)據(jù)上的實驗結果如表7到表9,并與基于語料庫的英語文章語法錯誤檢查及糾正方法[16]和2013年評測第一名UIUC[12]進行比較。
如表7所示,針對冠詞錯誤的糾正,本文的方法的F1值比UIUC方法高5%,比Corpus GEC方法高5%。針對介詞錯誤的糾正,本文方法的F1值比UIUC方法高21%,比Corpus GEC方法高13%。表明基于LSTM的序列標注GEC方法對冠詞和介詞語法錯誤糾正任務有效。這是由于詞向量包含豐富的上下文信息,而使用LSTM更好地學習到了決定冠詞或者介詞使用的長期的依賴信息,所以結果較好。

表7 冠詞及介詞錯誤糾正結果
如表8所示在僅使用N-gram+vote投票策略對名詞及動詞錯誤糾正時,F(xiàn)1值與UIUC方法都還存在一定的差距。這是由于N-gram + vote策略基于的新聞語料與所需糾正的ESL文章具有差異性,會將大量正確句子改為錯誤句子。名詞及動詞變化表不能涵蓋所有的名詞及動詞的變化形式,導致糾正名詞及動詞時還具有一定的局限性。

表8 名詞及動詞錯誤糾正結果
如表9所示,對于全部五種類型錯誤的糾正,本文方法均優(yōu)于UIUC方法,在2013年CoNLL的GEC數(shù)據(jù)上總的F1值為33.87%,超過第一名UIUC總的F1值31.20%。總的實驗結果表明基于LSTM和N-gram 的ESL文章的語法錯誤自動糾正方法是有效的。

表9 所有類型錯誤糾正結果
針對冠詞和介詞錯誤,本文提出一種基于LSTM的序列標注GEC方法。針對名詞單復數(shù)錯誤、動詞形式錯誤和主謂不一致錯誤,本文提出一種基于N-gram投票策略的GEC方法。在2013年CoNLL的GEC評測數(shù)據(jù)上,針對冠詞錯誤糾正F1為38.05%,介詞錯誤的糾正F1為28.89%,所有五種類型錯誤的總F1為33.87%,均高于評測第一名UIUC。實驗結果表明,本文方法對冠詞及介詞錯誤的糾正是有效的,但仍有一些問題存在。例如,在介詞缺失和冠詞缺失時如何進行糾正;在糾正名詞單復數(shù)錯誤及動詞錯誤時,如何避免將正確句子改為錯誤句子;及動詞形式中如果出現(xiàn)被動語態(tài)錯誤時該怎么糾正等。這些問題仍需進一步研究解決。