最近,筆者一直在研究語音識別后的文本糾錯,而就在八月26-30日,CCF的自然語言處理和中文計算會議召開了,筆者也從師兄那里拿到了新鮮出爐的會議論文集,其中重點看的自然是其shared task2:grammatical error correction的overview以及優(yōu)勝團隊的論文。本文總結(jié)了優(yōu)勝團隊的論文并給出了一些可能的改進方向。
本文涉及四篇文章:
0.官方的overview: Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction
1.比賽第一名:有道團隊的論文:Youdao’s Winning Solution to the NLPCC-2018 Task 2 Challenge: A Neural Machine Translation Approach to Chinese Grammatical Error Correction
2.比賽第二名:阿里團隊的論文:Chinese Grammatical Error Correction Using Statistical and Neural Models
3.比賽第三名:北京語言大學(xué)團隊的論文:A Sequence to Sequence Learning for Chinese Grammatical Error Correction
首先來看官方的overview。
0. Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction
官方的overview將整個shared task的目標(biāo)、數(shù)據(jù)集、評價標(biāo)準(zhǔn)以及參賽情況進行大致總結(jié)。
數(shù)據(jù)集來自于學(xué)習(xí)中文的外國人作文,評價標(biāo)準(zhǔn)為F0.5。
訓(xùn)練語料中,每個句子后面跟著0~n(n不定)個糾正過后的句子,若句子后面沒有糾正的句子,則說明該句子是正確的。后面的n個句子都是正確結(jié)果。
這里我們當(dāng)然更關(guān)注參賽團隊情況以及他們使用的方法,參賽總共23支隊伍,6支提交了最終結(jié)果,最終分?jǐn)?shù)如下:

在論文集中,F(xiàn)0.5 29以上的三支參賽隊伍:有道、阿里、北京語言大學(xué)信息科學(xué)學(xué)院分別提交了他們的論文,下面也會分別進行小結(jié)。
以下是官方對那6支參賽團隊使用方法的總結(jié)原文:
Most of the systems treat the GEC problem as a machine translation (MT) task. Rule-based models and language models are also explored.
AliGM proposes two modules for this problem: the correction module and the combination module. In the former module, correction candidates are generated for each input sentence with two statistical models and one neural model. The statistical models include a rule-based model and a statistical machine translation (SMT) -based model. The neural model refers to a neural machine translation (NMT) -based model. In the latter module, they combine these models in a hierarchical manner.
CU-Boulder uses a Bi-LSTM model with attention to make corrections. And they use the character-level minimum edit distance (MED) to select the correction version among multiple candidates. Joint voting of five models is implemented to advance the performance.
YouDao also casts the problem as a machine translation task. It is worth noting that they use a staged approach and design specific modules targeting at particular errors, including spelling, grammatical, etc.
BUPT uses a two-stage procedure method. In the first stage, they adopt neural models for error detection. In the second stage, they use a statistical method following Generating and scoring correction candidates in Chinese grammatical error diagnosis..
PKU uses a character-based MT model to deal with this problem. Besides, they propose a preprocessing module for the correction of spelling errors. First, the error detection is based on the binary features including cooccurrence probability, mutual information and chi-square test. Then confusion sets are introduced to generate candidates at the detected point. The final correction is the candidate with the highest language model probability. To improve the precision score, they set a high threshold. In addition, they check each correction with confidence levels in a post-processing stage.
BLCU proposes a system mainly based on the convolutional sequence-to-sequence model.
可以看到,大多數(shù)參賽團隊將糾錯任務(wù)作為翻譯任務(wù)(從錯誤句子到正確句子的翻譯),以往基于統(tǒng)計以及規(guī)則的模型雖然還有使用但不再作為主力,基于雙向LSTM的神經(jīng)網(wǎng)絡(luò)模型已經(jīng)成為主流,其中以 Encoder-Decoder + attention 模型最為流行,但他們并沒有純用神經(jīng)網(wǎng)絡(luò)進行糾錯,而是摻雜了從編輯距離到n-gram等各種方法。此外還有劃分階段,對不同階段使用不同模型,最終整合各個階段的輸出的策略。下面我們來依次看比賽前三名的論文。
1. Youdao’s Winning Solution to the NLPCC-2018 Task 2 Challenge: A Neural Machine Translation Approach to Chinese Grammatical Error Correction
總結(jié):他們將糾錯任務(wù)視作翻譯任務(wù),錯誤分為表面錯誤和語法錯誤,使用相似字音表+5-gram解決低級錯誤,使用字級、詞級 Transformer 模型解決高級錯誤,將低級模型和高級模型進行組合,最終再用5-gram語言模型對糾正后句子進行困惑度分析,選擇困惑度最低的句子。

輸入處理
他們的預(yù)處理階段較為簡單,語料方面使用的是全語料策略:每個句子和其正確答案句子各構(gòu)成一個樣本對,即{(錯誤句子,正確句子0),(錯誤句子,正確句子1),(錯誤句子,正確句子2)。。。},若句子本身是正確,則答案句子用其本身,即{(待訓(xùn)練句子,待訓(xùn)練句子)}。
值得一提的是,他們得到了樣本對還額外經(jīng)過了一步篩選:使用自己在大語料中訓(xùn)練出來的5-gram字級語言模型檢測錯誤句子和正確句子的困惑度,若是前者的困惑度低于后者,則把這個樣本對刪去。
模型分層:
有道將錯誤大題分成兩類,一類是拼寫類的表面錯誤,第二類是較為困難的語法錯誤。
對于表面錯誤,有道使用大量文本訓(xùn)練出來的5-gram字級模型作為輔助模型,并且使用 SIGHAN 2013 CSC Datasets 中提供字音、字形相似表。

在有了5-gram模型和字表之后,他們使用的方式頗為暴力:對句子中的每個字,將其在字表中的候選字替換進去并計算得分,所有句子中困惑度最低的即為最終選擇。
在糾正完表面錯誤后,他們開始著手進行語法錯誤的糾正,這方面他們采用的是 基于 self-attention的 encoder-decoder框架Transformer ,因為在機器翻譯領(lǐng)域 sub-word 效果更好,然而字級更能處理拼寫和字級語法錯誤,因此他們分別構(gòu)造了字級和詞級的神經(jīng)網(wǎng)絡(luò)模型,試圖將他們組合起來以此獲取這兩種顆粒度各自的優(yōu)點,實現(xiàn)方面他們使用了基于tensorflow的框架 tensor2tensor,參數(shù)設(shè)置方面除了把hidden size設(shè)為800外,其余為默認(rèn)設(shè)置。
分類處理完之后,自然要進行模型的組合了,首先是低級錯誤模型單獨來,然后是低級錯誤+高級錯誤模型,先字后詞、先詞后字以及只用字、只用詞四種高級模型,由此得到了總共5個糾正模型:

值得一提的是,他們并不是只使用一個模型組合,而是將五個模型組合都使用上,最終得到了5個組合的輸出,再用5-gram模型對這5個句子進行評分,選擇困惑度最低的句子。最終他們的結(jié)果如下:

可以看出,他們的思路是將錯誤分為簡單和復(fù)雜兩類錯誤,用簡單模型(5-gram+暴力替換)解決簡單錯誤,復(fù)雜模型(Transformer)解決復(fù)雜錯誤,而后將兩個階段的模型進行組合,把字級5-gram作為評分工具選出最后的句子。
2. Chinese Grammatical Error Correction Using Statistical and Neural Models
總結(jié):多模型平行結(jié)構(gòu),使用基于規(guī)則、基于統(tǒng)計和神經(jīng)網(wǎng)絡(luò)三大類模型,先在類別內(nèi)進行低級組合得到類別候選,再對類別候選進行高級組合。

在輸入處理方面,阿里生成了兩類數(shù)據(jù)集,第一類是將待測句子和其糾正句子中編輯距離最小的句子構(gòu)成樣本對,稱為NLPCC MinEd,第二類是將待測句子和所有糾正句子各構(gòu)成樣本對,稱為NLPCC Expand。在神經(jīng)網(wǎng)絡(luò)翻譯模型中使用不同的語料類訓(xùn)練模型并組合結(jié)果。
阿里使用的模型和有道的不大相同。有道的在單個模型組合里采用的是垂直結(jié)構(gòu):先糾簡單再就復(fù)雜,然而阿里采用的是平行結(jié)構(gòu),不分簡單復(fù)雜,模型自行把它們都搞定,而后再組合起來。
此外,他們引入了基于規(guī)則的模型,在基于統(tǒng)計的模型中使用語言模型+翻譯模型并用信道噪聲+beam search挑選候選解。
語言模型方面用中文語料進行訓(xùn)練,翻譯模型方面用平行語料(錯誤句子和正確句子的對應(yīng))訓(xùn)練,以此得到錯誤句子和正確句子的條件概率。
神經(jīng)網(wǎng)絡(luò)方面也是 Encoder-Decoder (各2層LSTM) + attention 的模型,他們只使用字級模型,但在其它方面做了修改,如LSTM是單向還是雙向、是否使用以及是在Encoder還是在Decoder使用預(yù)訓(xùn)練的embedding,數(shù)據(jù)集是只挑錯誤句子到候選正確句子編輯距離最低的句子對還是使用所有候選正確句子,以此產(chǎn)生了4個模型組合:

組合起來的模型得到了輸出結(jié)果,若是幾個模型的輸出結(jié)果不同,則稱發(fā)生了沖突,他們提出了5種沖突解決方案,不同與有道直接使用5-gram進行困惑度排序并挑選一整個句子作為最終結(jié)果,阿里的幾個解決方案中把修改部分單獨拿出來構(gòu)成修改集,結(jié)合最小編輯距離和語言模型評分挑選最終修改結(jié)果:
沖突發(fā)生時的解決方案(兩個模型產(chǎn)生的兩個句子):
- 為模型分配優(yōu)先級,當(dāng)沖突發(fā)生時選擇優(yōu)先級高的模型的結(jié)果
- 將沖突句子對原句所做的更改做并集,選擇可以最小化編輯距離的修改方式
- 對修改集做交集
- 用語言模型對修改后的句子進行評分,選擇分?jǐn)?shù)高的
- 用語言模型評分,并把句子長度作為正則化參數(shù) (分?jǐn)?shù) / 句子長度)
組合分類:
- 低層組合:組合同一類型模型的候選結(jié)果
- 高層組合:組合不同類型模型的候選結(jié)果
組合方式:
- 低層組合:模型兩兩組合,并排列組合使用解決方案,使用驗證集分?jǐn)?shù)最高的方案
- 高層組合:
- 將沖突解決方案擴展成對三個模型的
- 加入保護機制,當(dāng)三種模型的沖突太多時則不對句子做修改

3. A Sequence to Sequence Learning for Chinese Grammatical Error Correction
北京語言文化大學(xué)和前兩者相比,模型較為簡單,他們使用的是基于CNN的seq2seq模型,沒有對錯誤劃分類型也沒有使用多個模型。因為語法錯誤更多和鄰近詞語有關(guān),使用CNN能比LSTM更好捕捉鄰近詞的關(guān)系,而多層CNN也同樣可以捕獲較遠(yuǎn)距離的詞語交互信息。
輸入方面,對于不常見詞語以及未登錄詞,他們同樣使用BPE算法將詞劃分成Subword 單元。Embedding方面,他們使用了基于中文語法修正過后word2vec的wang2vec,并且將位置向量接在embedding以及生成的詞語后面,以此給輸入和輸出層提供位置信息。
總結(jié)
以上三篇論文所使用的,基本都是對已有的成熟模型進行的一些小修改,前兩支隊伍使用多個模型,或橫向劃分模型類型或縱向劃分錯誤類型,而后將模型組合起來,觀察他們的實驗結(jié)果可以發(fā)現(xiàn),混合模型的分?jǐn)?shù)要比單個模型高出不少(有道的實驗結(jié)果),組合策略的選擇也同樣對分?jǐn)?shù)有較大影響(阿里的策略),若是在算力上有所欠缺無法在能接受的時間內(nèi)訓(xùn)練多個模型并組合,北京語言文化大學(xué)的CNN seq2seq+attention模型未嘗不是一個好選擇。
下面對以上三篇論文以及筆者最近的一些瀏覽結(jié)果進行一些總結(jié),給出可能改進和組合的方向:
- 輸入處理:
- 顆粒度選擇:字級或詞級(詞級可用BPE劃分subword解決OOV或rare word問題)
- 訓(xùn)練語料對劃分:
- 最小編輯距離語料:錯誤句子只和與其編輯距離最小的正確句子構(gòu)成訓(xùn)練語料對
- 全語料:錯誤句子和其每個正確句子分別構(gòu)成訓(xùn)練語料對
- embedding:
- 模型:
- 基于規(guī)則的模型
- 基于統(tǒng)計的模型:
- n-gram 或 rnn 語言模型 + 相似字音表暴力替換
- (n-gram + 翻譯模型)得到概率 + (信道噪聲 + beam search)挑選候選解
- encoder-decoder( lstm(單向或雙向) 或 CNN ) + attention(一般attention或google的self-attention)
- 劃分方式:
- 縱向劃分:用基于統(tǒng)計、基于規(guī)則的簡單模型解決簡單錯誤,再把經(jīng)過簡單錯誤處理后的句子輸入處理復(fù)雜錯誤的seq2seq模型
- 橫向劃分:不同類型的模型內(nèi)部自行排列組合并選出每個類別的輸出代表(低層組合),再對類別的輸出進行組合得到最終輸出(高層組合)
- 組合方式:
- 整句采用型:
- 對模型分配優(yōu)先級,選擇優(yōu)先級高的模型的輸出結(jié)果
- 用語言模型對句子進行評分,選取困惑度最低的句子
- 語言模型評分+句子長度作為正則化
- 構(gòu)造編輯集:抽取出在原句上修改的部分,幾個模型的修改部分分別構(gòu)造成幾個編輯集
- 對編輯集求并集,選取編輯距離最小的修改方式
- 對編輯集求交集
- 沖突避免:幾個模型給出的修改意見不同處太多,意見不統(tǒng)一則放棄修改
- 整句采用型:
我的個人博客:Zedom1.top