【論文閱讀】D19-1435——GEC問題解決的一種方法:PIE架構

發現把所有的論文提綱寫在一篇博客裏我自己翻起來也很難受,乾脆還是一篇論文一篇博客了。

跟之前很多使用神經機器翻譯(NML)不一樣的是,本文使用了一種PIE架構,Parallel Iterative Edit Models,與普通的seq2seq問題相比,這種建模是seq2edits,與其他方法確實有創新之處,並且目前在CONLL2014排行榜上雄踞第四,雖然前三都是NML方法做的,但是這種PIE方法給了GEC問題乃至推廣的LST問題一種新的解決思路。

所有CONLL2014最新進展在

https://nlpprogress.com/english/grammatical_error_correction.html

本文是基於目前處於NO.4的一篇中文提綱:

Parallel Iterative Edit Models for Local Sequence Transduction

【摘要】
1. 我們展示了一個並行迭代編輯(Parallel Iterative Edit,  PIE)模型來解決局部序列轉換任務(如GEC);
2. 近期方法基於流行的encoder-decoder(ED)來解決seq2seq學習;
3. ED模型可以自動捕獲完全的依賴性在輸出標記中, 但是它因爲序列解碼而太慢;
4. PIE模型使用並行解碼, 放棄了對完全的依賴性建模遭輸出標記中的優勢, 但仍然取得了較好的效果相對於ED, 原因是:
  - 預測edits而非tokens;
  - 標註序列而非生成序列;
  - 迭代的提煉預測來捕獲依賴性;
  - 在edits中因子化logits, 並使用BERT模型預訓練;
  - PIE模型在GEC,OCR以及拼接糾正任務中做得好;
  - PIE模型是精確, 顯著快速的對於局部序列轉換任務(local sequence transduction, LST)
  - 代碼與預訓練模型在https://github.com/awasthiabhijeet/PIE
  
# 1 Introduction 引入
1. 在LST中輸入(x1,...xn), 映射輸出爲(y1,...,ym), 其中{xi}序列與{yi}序列差異很小, 且m與n大小接近, 且兩序列元素共享同一詞彙表∑;
2. GEC是LST的一個特殊情況, 推廣有NMT(不共享詞彙表)與文本摘要(非局部修正);
3. seq2seq流行使用帶注意力機制的ED模型, 因爲ED可以使得在生成輸出yt時, 同時使用到y1~yt-1的信息, 目前最先進的GEC都用到了這個模型;
4. 而我們另闢蹊徑, 使用PIE架構:
  - PIE通過並行生成輸出, 大大地減少了長輸入中潛在序列解碼問題;
  - 目前PIE也被在翻譯, 同聲傳譯中探索, 但是效果顯著較ED差;
5. 本文的新穎之處:
  - 將GEC搞成LST問題, 而非機器翻譯; 然後把LST變成一個快速non-AR的序列標註模型(ED爲AR模型, 所謂AR即自迴歸, 由前n個值預測下一個值);
  - LST變爲non-AR序列標註後就有很多新穎的元素了:
    + 輸出編輯操作而非序列;
	+ append操作而非insert操作;
  - 我們展示如何有效利用預訓練模型BERT來factorized-logit架構;
  - PIE大約比ED在GEC上快5~15倍, 另外兩種LST(OCR與拼寫檢錯)也是又快又好;

## 1.1 Output edits instead of tokens 輸出編輯而非標記
1. PIE的輸出不是詞彙表中的標記序列, 而是"複製,增,刪,改,詞形變換"等操作, 這意味着詞彙表很小, 且顯然更加合理;
  - e.g. fowler fed dog
  - seq2seq(如ED)輸出Fowler fed the dog
  - PIE輸出{Capitalize token1, Append(the) to token2, Copy token3}

## 1.2 Sequence labeling instead of sequence generation 用序列標註替代序列生成
1. 用編輯指令來標註輸入標記, 而非困難得多的序列生成;
2. 這裏有個問題是前後的tokens數量不一致, 尤其是在有插入操作時; 針對此我們使用一種特別的複合edits, 這種edits將標記插入與之前的比早期獨立預測插入方法生成更高精確度edits合併(???);

## 1.3 Iterative refinement 迭代提煉
1. 我們進一步增加PIE的推理能力通過不端輸入模型自身的輸出來進一步提煉;

## 1.4 Factorize pre-trained bidirectional LMs 因子化預訓練(BERT)
1. 最後我們使用近期預訓練好的雙向模型(如BERT), 來在編輯指令和它們的標記參數因子化logit層;
2. 現存的GEC系統典型依靠卷積前向LM來預訓練他們的decoder, 我們將展示如何使用一個雙向LM在encoder中, 且如何預測edits;

# 2 Our Method 我們的方法
1. 監督學習:
  - 標註好的數據集: D = {(x(i),y(i)): i=1,2,...,N};
  - 很大的可選語料(未匹配的正確序列): L = {y~(1),y~(2),...,y~(U)};
2. GEC中這可以是一個語法正確的句子語料庫來預訓練一個語言模型;
3. 背景: 現存的ED模型
  - 現存的seq2seq-ED模型通過Pr(y|x)來捕獲y(t)與y(1)~y(t-1)之間全部的依賴性, 即MLE概率;
  - encoder將輸入序列{x(i)}轉化爲上下文狀態{h(i)};
  - decoder總結y(<t)到一個狀態s(t);
  - 注意力機制用於{h(i)};
  - Pr(y(t)|y(<t),x) = Pr(y(t)|c(t),s(t)), 其中c(t)是輸入文本;
  - decoding使用了集束搜索(beam-search), 當一個正確的序列語料L是可獲得的, decoder使用L,模型預訓練使用re-rank與beam-search輸出;(我理解爲加權bagging吧)

## 2.1 Overview of the PIE model 並行迭代編輯模型概觀
1. 映射: 輸入序列{x(i)}-->編輯序列{e(i)}
  - 設計seq2edits函數使得輸入(x,y)得到e, 詳見2.2;(這個應該就是平凡的工作)
  - 注意{e(i)}的長度當然與{x(i)}長度相等;(總之得設計成相同長度的)
  
2. 訓練: Pr(e|x,θ), 詳見2.3;
  - 如果有正確語料集L, 可以用於預訓練encoder來預測一個arbitrarily-masked-token(y(t)), 就跟BERT一樣;
  - 注意到seq2seq中的正確語料是用於訓練decoder的, 只捕獲前向的依賴性, 在我們的預訓練我們的預測token(y(t))它既依賴前向也依賴後向上下文, 這尤其對於GEC這種任務是有用的, 因爲y(t+1)~y(m)是可以被x(t+1)~x(n)預測的;

3. 推理: 給定輸入x, Pr(e|x,θ) = Π_t=1~n{Pr(e(t)|x,t,θ)}
  - 這不涉及到ED模型中的序列標記生成;
  - 我們輸出最可能的e^=argmax_e(Pr(e|x,θ));
  - 然後用e^去修正原始句子即可;
  
## 2.2 The Seq2Edits Function 一個平凡的函數
1. 算法僞代碼:
'''
Require: x=(x(1),...,x(n)), y=(y(1),...,y(m)), T: 轉換列表;
Algorithm:
diffs <- LEVENSHTEIN-DIST(x,y)	// with modified cost
diffs <- In diffs break substitutions, merge inserts into q-grams // ???
∑_a <- M // most common inserts in training data
e <- EMPTYARRAY(n)

for t<-1 to LENGTH(diffs) do 
	if diffs[t] = (C,x(i)) or (D,x(i)) then
		e(i) <- diffs[t].op
	else if diffs[t] = (I,x(i),w) then
		if e(i)=D then
			if (x(i),w) match transformation t∈T then
				e(i) <- T
			else 
				e(i) <- R(w) if w∈∑_a else C
		else if e(i) = C then 
			e(i) <- A(w) if w∈∑_a else C
return e
'''
2. 編輯空間由以下幾個集合構成
  - Copy x(i)
  - Delete x(i)
  - Append q-gram w∈∑_a
  - 在GEC中特別地, 用T1,...Tk來執行單詞形式變換(e.g. arrive-->arrival)
  - ζ = {C,D,T1,...,Tk} ∪ {A(w): w∈∑_a} ∪ {R(w): w∈∑_a} 
3. 舉個例子:
  - Example 1: 
    + x: [ Bolt can have run race ]
	+ y: [ Bolt could have run the race ]
	+ diff: (C,[), (C,Bolt), (D,can), (I,can,could), (C,have), (C,run), (I,run,the), (C,race), (C,])
	+ e: C	C	R(could)	C		A(the)	C		C
	     [	Bolt	can		have	run		race	]
	+ e與x同長度
  - Example 2:
    + x: [ He still won race ! ]
    + y: [ However , he still won ! ]
	+ diff: (C,[), (I,[,However , ), (D,He), (I,He,he), (C,still), (C,won), (D,race), (C,!), (C,])
	+ e: A(However , )	T_case	C		C	D		C	C
	     [				He		still	won	race	!	]
4. 注意點:
  - x,y之間的diff, 刪除與插入自然可以用代價1來表示, 但是modify的代價可能與相關單詞有關, 附錄中展示了不同modification帶來的更多有意義的編輯;
  - diff應當預置好(很難...), 然後從訓練集中構造M個最頻繁的q-gram插入得到集合∑_a;
  - 此後我們從左到右掃描diff, 然後生成e;
  - 注意x->y的轉換是不可逆的, 因爲∑_a並沒有包含所有可能的插入q-gram;

## 2.3 The Parallel Edit Prediction Model 並行編輯預測模型
1. 我們使用一個雙向encoder來爲每個x(i)提供一個上下文的encoding, 這也可以是一個多層雙向RNNs或CNNs或者其他深度雙向transformers;
2. 我們使用的deep-bidirectional-transformer, 因爲它可以並行編碼輸入, 我們預訓練使用正確語料L以及BERT, 得到一個語言模型(language model,LM);
3. BERT模型簡介!!!
  - BERT輸入是token-embedding:x(i)與positional-embedding:p(i)對於每個x(i)在序列x中, 令h(i,0)=[x(i,p(i))];
  -每一層l產出一個h(i,l)在位置i上, 這是一個關於h(i,l-1)與h(j,l-1)上的自注意力的函數, j∈[1,n];
  - BERT模型預訓練通過masking-out輸入tokensd的一小塊, 使用一個叫作特別的MASK的東西, 然後預測這個masked-word從它的雙向上下文捕獲, 作爲最後一層的輸出h1,...hn;

### 2.3.1 A Default use of BERT 
1. 因爲我們的任務叫作序列標註任務, 一個默認的輸出層一定是計算Pr(e(i)|x), 通過一個編輯空間ζ中的元素構成的softmax得到輸出: Pr(e(i)=e|x) = softmax(W(e)'h(i))
  - W(e)是通過訓練得到的;
2. 我們提出一個在預訓練LM中挖掘token-embeddings的方法, 這可以熱啓動edits的訓練像appends和與replaces這些涉及到token-argument的;
3. 進一步, 低於appends與replaces, 我們提供一種新方法來計算隱層輸出通過替換輸入中的positional-embeddings與自注意機制;

### 2.3.2 An Edit-Factorized BERT Architecture
1. 我們採用一個預訓練的BERT-like雙向語言模型學習如何預測這些edits;
2. Replace操作: 對於每個位置i我們創建一個額外的輸入組成部分: r(i,0)=[M,p(i)]
  - M是LM中MASK標記的embedding矩陣;
  - p(i)是位置編碼positional-embedding;
3. Insert操作: 同樣的在i與i+1之間我麼們創建一個額外的輸入組成部分: a(i,0)=[M,(p(i)+p(i+1))/2], 
4. 詳細架構見Figure2: 有兩個隱層
  - Pr(e(i)|x) = softmax(logit(e(i)|x)) where
  - logit(e(i)|x) = {
		θ(C)' * h(i) + Φ(x(i))' * h(i) + 0					if e(i)==C
		θ(A(w))' * h(i) + Φ(x(i))' * h(i) + Φ(w)' * a(i)	if e(i)==A(w)
		θ(R(w))' * h(i) + 0 + (Φ(w)-Φ(x(i)))' * r(i)		if e(i)==R(w)
		θ(D)' * h(i) + 0 + 0								if e(i)==D
		θ(Tk)' * h(i) + Φ(x(i))' * h(i) + 0					if e(i)==Tk
	}
  - 上式中第一項捕獲edit-specific-score
  - 上式中第二項捕獲複製單詞x(i)到輸出的得分
  - 上式中第三項對一個輸出中新來的token帶來的影響進行建模(append與replace操作)
  - 上式說明了爲什麼預測獨立edits比預測獨立token要容易(???看不出來)
  - 損失函數(交叉熵損失): Loss(e,x) = -∑_a

# 3 Experiments 實驗
1. 主要是PIE V.S. 帶注意力機制的ED模型;
2. 3.2揭示了PIE在其他LST問題如OCR及拼寫檢錯中也有極好的表現;

## 3.1 Grammatical Error Correction(GEC)
1. 訓練集: Lang-8, NUCLE, FCE三個語料, 共計120w句子對;
2. 驗證集: Conll2013測試集中的1381個句子對;
3. 使用BERT-LARGE模型來預訓練, 在Wikipedia(2500M單詞)與Book Corpus(800M單詞)來預測15%隨機masked單詞使用deep-bidirectional-context;
4. 然後我們使用2-epoch訓練在One-Billion-word Corpus, 這被作爲人造訓練;
5. 最後我們在真實的GEC訓練語料上微調了2-epoch;
6. batchsize爲64且學習率爲2e-5;
7. 編輯空間ζ包含: copy, delete, 1000-appends, 1000-replaces, 29-transformations及其inverse;
8. Append與Replace主要涉及: 標點符號, 冠詞, 代詞, 介詞, 連詞, 動詞;
9. transformation主要涉及: s, d, es, ing, ed或者代替後綴s->ing,d->s,等等;
  - 提到的常見情況應當被提出, 這樣許多replace編輯只是映射到極少的transformation-edits;(思考)
10. 3.1.4告訴我們考慮transformation提高了recall;
11. 詳細實驗結果圖標直接看論文了, 這裏不浪費時間寫了:
  
### 3.1.1 Overall Results: 結果很好
### 3.1.2 Running Time Comparison: 速度很快
### 3.1.3 Impact of Iterative Refinement
### 3.1.4 Ablation study on the PIE Architecture
1. Synthetic Training: ???
2. Factorized Logits: ???
3. Inserts as Appends: ???
4. Transformation edits: 不用的話recall減少6.3;
5. Impact of Language Model: ???
6. Impact of Network Size: 網絡大小很重要!(Table7)

## 3.2 More Sequence Transduction Tasks 不重要, 與GEC無關
1. Spell Correction: ???
2. Correcting OCR errors: ???

# 4 Related Work 相關工作
1. GEC
2. Parallel decoding in neural in neural machine translation
3. LST

# 5 Conclusion 總結
1. 略

































 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章