发现把所有的论文提纲写在一篇博客里我自己翻起来也很难受,干脆还是一篇论文一篇博客了。
跟之前很多使用神经机器翻译(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(
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] &#61; (C,x(i)) or (D,x(i)) thene(i) <- diffs[t].opelse if diffs[t] &#61; (I,x(i),w) thenif e(i)&#61;D thenif (x(i),w) match transformation t∈T thene(i) <- Telse e(i) <- R(w) if w∈∑_a else Celse if e(i) &#61; C then e(i) <- A(w) if w∈∑_a else C
return e
&#39;&#39;&#39;
2. 编辑空间由以下几个集合构成- Copy x(i)- Delete x(i)- Append q-gram w∈∑_a- 在GEC中特别地, 用T1,...Tk来执行单词形式变换(e.g. arrive-->arrival)- ζ &#61; {C,D,T1,...,Tk} ∪ {A(w): w∈∑_a} ∪ {R(w): w∈∑_a}
3. 举个例子:- Example 1: &#43; x: [ Bolt can have run race ]&#43; y: [ Bolt could have run the race ]&#43; diff: (C,[), (C,Bolt), (D,can), (I,can,could), (C,have), (C,run), (I,run,the), (C,race), (C,])&#43; e: C C R(could) C A(the) C C[ Bolt can have run race ]&#43; e与x同长度- Example 2:&#43; x: [ He still won race ! ]&#43; y: [ However , he still won ! ]&#43; diff: (C,[), (I,[,However , ), (D,He), (I,He,he), (C,still), (C,won), (D,race), (C,!), (C,])&#43; 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)&#61;[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)&#61;e|x) &#61; softmax(W(e)&#39;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)&#61;[M,p(i)]- M是LM中MASK标记的embedding矩阵;- p(i)是位置编码positional-embedding;
3. Insert操作: 同样的在i与i&#43;1之间我么们创建一个额外的输入组成部分: a(i,0)&#61;[M,(p(i)&#43;p(i&#43;1))/2],
4. 详细架构见Figure2: 有两个隐层- Pr(e(i)|x) &#61; softmax(logit(e(i)|x)) where- logit(e(i)|x) &#61; {θ(C)&#39; * h(i) &#43; Φ(x(i))&#39; * h(i) &#43; 0 if e(i)&#61;&#61;Cθ(A(w))&#39; * h(i) &#43; Φ(x(i))&#39; * h(i) &#43; Φ(w)&#39; * a(i) if e(i)&#61;&#61;A(w)θ(R(w))&#39; * h(i) &#43; 0 &#43; (Φ(w)-Φ(x(i)))&#39; * r(i) if e(i)&#61;&#61;R(w)θ(D)&#39; * h(i) &#43; 0 &#43; 0 if e(i)&#61;&#61;Dθ(Tk)&#39; * h(i) &#43; Φ(x(i))&#39; * h(i) &#43; 0 if e(i)&#61;&#61;Tk}- 上式中第一项捕获edit-specific-score- 上式中第二项捕获复制单词x(i)到输出的得分- 上式中第三项对一个输出中新来的token带来的影响进行建模(append与replace操作)- 上式说明了为什么预测独立edits比预测独立token要容易(???看不出来)- 损失函数(交叉熵损失): Loss(e,x) &#61; -∑_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. 略