【论文阅读】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. 略

































发布了40 篇原创文章 · 获赞 133 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/CY19980216/article/details/103674256