热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【论文阅读】D191435——GEC问题解决的一种方法:PIE架构

发现把所有的论文提纲写在一篇博客里我自己翻起来也很难受,干脆还是一篇论文一篇博客了。跟之前很多使用神经机器翻译(NML)不一样的是&#x

发现把所有的论文提纲写在一篇博客里我自己翻起来也很难受,干脆还是一篇论文一篇博客了。

跟之前很多使用神经机器翻译(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. 映射: 输入序列{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] &#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. 略

 


推荐阅读
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
author-avatar
cl云中皓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有