2018 NLPCC Chinese Grammatical Error Correction 論文小結
這一段時間,筆者一直在研究語音識別後的文字糾錯,而就在八月26-30日, CCF的自然語言處理和中文計算 會議召開了,筆者也從師兄那裡拿到了新鮮出爐的會議論文集,其中重點看的自然是其 shared task2:grammatical error correction的overview以及優勝團隊的論文 。本文 總結了 優勝團隊的論文並給出了一些可能的改進方向。
本文涉及四篇文章:
-
官方的overview: Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction
-
比賽第一名: 有道團隊 的論文:Youdao’s Winning Solution to the NLPCC-2018 Task 2 Challenge: A Neural Machine Translation Approach to Chinese Grammatical Error Correction
-
比賽第二名: 阿里團隊 的論文: Chinese Grammatical Error Correction Using Statistical and Neural Models
-
比賽第三名: 北京語言大學團隊 的論文: A Sequence to Sequence Learning for Chinese Grammatical Error Correction
首先來看官方的 overview 。
overview
官方的overview將整個shared task的 目標、資料集、評價標準以及參賽情況 進行大致總結。
資料集 來自於學習中文的外國人作文,評價標準為 F0.5 。
訓練語料 中,每個句子後面跟著0~n(n不定)個糾正過後的句子,若句子後面沒有糾正的句子,則說明該句子是正確的。後面的n個句子都是正確結果。
這裡我們當然更關注參賽團隊情況以及他們使用的方法,參賽總共23支隊伍,6支提交了最終結果,最終分數如下:
在論文集中,F0.5 29以上的三支參賽隊伍:有道、阿里、北京語言大學資訊科學學院分別提交了他們的論文,下面也會分別進行小結。
以下是官方對那6支參賽團隊使用方法的總結原文:
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.可以看到,大多數參賽團隊將 糾錯任務作為翻譯任務 (從錯誤句子到正確句子的翻譯),以往基於統計以及規則的模型雖然還有使用但不再作為主力, 基於雙向LSTM的神經網路模型已經成為 主流 ,其中以 Encoder-Decoder + attention 模型 最為流行,但他們並沒有純用神經網路進行糾錯,而是 摻雜了從編輯距離到n-gram
等各種方法。此外還有劃分階段,對不同階段使用不同模型,最終整合各個階段的輸出的策略。下面我們來依次看比賽前三名的論文。
1. Youdao ’s Winning Solution to the NLPCC-2018 Task 2 Challenge: A Neural Machine Translation Approach to Chinese Grammatical Error Correction
總結:他們將 糾錯任務視作翻譯任務 ,錯誤分為 表面錯誤 和 語法錯誤 ,使用 相似字音表+5-gram解決低階錯誤 ,使用 字級、詞級 Transformer 模型解決高階錯誤 ,將低階模型和高階模型進行 組合 ,最終再用 5-gram語言模型對糾正後句子進行困惑度分析 ,選擇困惑度最低的句子。
輸入處理
他們的 預處理階段 較為簡單,語料方面使用的是全語料策略:每個句子和其正確答案句子各構成一個樣本對,即 {(錯誤句子,正確句子0),(錯誤句子,正確句子1),(錯誤句子,正確句子2)。。。} ,若句子本身是正確,則答案句子用其本身,即 {(待訓練句子,待訓練句子)} 。
值得一提的是,他們得到了樣本對還 額外經過了一步篩選 :使用自己在大語料中訓練出來的 5-gram字級語言模型 檢測錯誤句子和正確句子的困惑度,若是前者的困惑度低於後者,則把這個樣本對刪去。
模型分層
有道將錯誤大題分成兩類,一類是 拼寫類的表面錯誤 ,第二類是 較為困難的語法錯誤 。
對於 表面錯誤 ,有道使用大量文字訓練出來的5-gram字級模型作為輔助模型,並且使用 SIGHAN 2013 CSC Datasets 中提供字音、字形相似表。
在有了5-gram模型和字表之後,他們使用的方式頗為暴力: 對句子中的每個字,將其在字表中的候選字替換進去並計算得分,所有句子中困惑度最低的即為最終選擇 。
在糾正完表面錯誤後,他們開始著手進行 語法錯誤 的糾正,這方面他們採用的是 基於 self-attention的 encoder-decoder框架 Transformer ,因為在機器翻譯領域 sub-word 效果更好,然而字級更能處理拼寫和字級語法錯誤,因此他們分別構造了 字級和詞級的神經網路模型 ,試圖將他們組合起來以此獲取這兩種顆粒度各自的優點,實現方面他們使用了基於tensorflow的框架 tensor2tensor, 引數設定 方面除了把hidden size設為800外,其餘為預設設定。
分類處理完之後,自然要進行模型的組合了,首先是低階錯誤模型單獨來,然後是 低階錯誤+高階錯誤 模型, 先字後詞、先詞後字以及只用字、只用詞 四種高階模型,由此得到了總共5個糾正模型:
值得一提的是,他們 並不是只使用一個模型組合 ,而是 將五個模型組合都使用上 ,最終得到了 5個組合的輸出 ,再用 5-gram模型對這5個句子進行評分 ,選擇困惑度最低的句子。最終他們的結果如下:
可以看出,他們的思路是將錯誤分為 簡單和複雜 兩類錯誤,用 簡單模型(5-gram+暴力替換) 解決簡單錯誤, 複雜模型(Transformer) 解決複雜錯誤,而後將兩個階段的模型進行組合,把字級5-gram作為評分工具選出最後的句子。
2. Chinese Grammatical Error Correction Using Statistical and Neural Models
總結 : 多模型平行結構 ,使用 基於規則、基於統計和神經網路 三大類模型,先在類別內進行低階組合得到類別候選,再對類別候選進行高階組合 。
在 輸入處理 方面,阿里生成了兩類資料集,第一類是將待測句子和其糾正句子中編輯距離最小的句子構成樣本對,稱為NLPCC MinEd,第二類是將待測句子和所有糾正句子各構成樣本對,稱為NLPCC Expand。在神經網路翻譯模型中使用不同的語料類訓練模型並組合結果。
阿里 使用的模型和有道的不大相同 。有道的在單個模型組合裡採用的是垂直結構:先糾簡單再就複雜,然而 阿里採用的是 平行結構 ,不分簡單複雜,模型自行把它們都搞定,而後再組合起來。
此外,他們引入了基於規則的模型,在基於統計的模型中使用 語言模型+翻譯模型 並用 通道噪聲+beam search 挑選候選解。
語言模型方面用中文語料進行訓練,翻譯模型方面用平行語料(錯誤句子和正確句子的對應)訓練,以此得到錯誤句子和正確句子的條件概率。
神經網路 方面也是 Encoder-Decoder (各2層LSTM) + attention 的模型,他們只使用字級模型,但在其它方面做了修改,如LSTM是單向還是雙向、是否使用以及是在Encoder還是在Decoder使用預訓練的embedding,資料集是隻挑錯誤句子到候選正確句子編輯距離最低的句子對還是使用所有候選正確句子,以此產生了4個模型組合:
組合起來的模型得到了輸出結果,若是幾個模型的輸出結果不同,則稱發生了衝突,他們 提出了5種衝突解決方案 ,不同與有道直接使用5-gram進行困惑度排序並挑選一整個句子作為最終結果,阿里的幾個解決方案中把修改部分單獨拿出來構成修改集,結合最小編輯距離和語言模型評分挑選最終修改結果:
衝突發生時的解決方案(兩個模型產生的兩個句子):
-
為模型分配優先順序,當衝突發生時選擇優先順序高的模型的結果
-
將衝突句子對原句所做的更改做並集,選擇可以最小化編輯距離的修改方式
-
對修改集做交集
-
用語言模型對修改後的句子進行評分,選擇分數高的
-
用語言模型評分,並把句子長度作為正則化引數 (分數 / 句子長度)
組合分類:
-
低層組合:組合同一型別模型的候選結果
-
高層組合:組合不同型別模型的候選結果
組合方式:
-
低層組合:模型兩兩組合,並排列組合使用解決方案,使用驗證集分數最高的方案
-
高層組合:
3. A Sequence to Sequence Learning for Chinese Grammatical Error Correction
北 京語言文化大學 和前兩者相比, 模型較為簡單 ,他們使用的是 基於CNN的seq2seq模型 ,沒有對錯誤劃分型別也沒有使用多個模型。因為語法錯誤更多和鄰近詞語有關,使用 CNN能比LSTM更好捕捉鄰近詞的關係 ,而 多層CNN也同樣可以捕獲較遠距離的詞語互動資訊 。
輸入方面,對於不常見詞語以及未登入詞,他們同樣使用 BPE演算法 將詞劃分成 Subword 單元 。Embedding方面,他們使用了基於中文語法修正過後word2vec的 wang2vec ,並且將位置向量接在embedding以及生成的詞語後面,以此給輸入和輸出層提供位置資訊。
總結
以上三篇論文所使用的, 基本都是對已有的成熟模型進行的一些小修改 ,前兩支隊伍使用多個模型,或橫向劃分模型型別或縱向劃分錯誤型別,而後將模型組合起來,觀察他們的實驗結果可以發現, 混合模型的分數要比單個模型高出不少 (有道的實驗結果), 組合策略的選擇也同樣對分數有較大影響 (阿里的策略), 若是在算力上有所欠缺無法在能接受的時間內訓練多個模型並組合,北京語言文化大學的CNN seq2seq+attention模型未嘗不是一個好選擇。
下面對以上三篇論文以及筆者最近的一些瀏覽結果進行一些總結,給出可能 改進和組合的方向 :
輸入處理 :
-
顆粒度選擇:字級或詞級(詞級可用BPE劃分subword解決OOV或rare word問題)
-
訓練語料對劃分:
最小編輯距離語料:錯誤句子只和與其編輯距離最小的正確句子構成訓練語料對
全語料:錯誤句子和其每個正確句子分別構成訓練語料對
embedding :
-
word2vec中文語法修正版 wang2vec
-
使用自訓練embedding 或 預訓練的embedding+訓練更新
-
使用embedding mask
-
ELMO
模型 :
-
基於規則的模型
-
基於統計的模型:
n-gram 或 rnn 語言模型 + 相似字音表暴力替換
(n-gram + 翻譯模型)得到概率 + (通道噪聲 + beam search)挑選候選解
-
encoder-decoder( lstm(單向或雙向) 或 CNN ) + attention(一般attention或google的 self-attention )
劃分方式 :
-
縱向劃分 :用基於統計、基於規則的簡單模型解決簡單錯誤,再把經過簡單錯誤處理後的句子輸入處理複雜錯誤的seq2seq模型
-
橫向劃分 :不同型別的模型內部自行排列組合並選出每個類別的輸出代表(低層組合),再對類別的輸出進行組合得到最終輸出(高層組合)
組合方式 :
-
整句採用型 :
對模型分配優先順序,選擇優先順序高的模型的輸出結果
用語言模型對句子進行評分,選取困惑度最低的句子
語言模型評分+句子長度作為正則化
-
構造編輯集 :
抽取出在原句上修改的部分,幾個模型的修改部分分別構造成幾個編輯集
對編輯集求並集,選取編輯距離最小的修改方式
對編輯集求交集
衝突避免:幾個模型給出的修改意見不同處太多,意見不統一則放棄修改
原文地址:
https://zedom1.top/2018/09/05/nlpcc_cgec/
原文釋出時間為:2018-09-11
原文作者: Zedom