阅读大概需要5分钟

跟随小博主,每天进步一丢丢

PS:文末每日一题雅思单词

导读

这一段时间,笔者一直在研究语音识别后的文本纠错,而就在八月26-30日,CCF的自然语言处理和中文计算会议召开了,笔者也从师兄那里拿到了新鲜出炉的会议论文集,其中重点看的自然是其shared task2:grammatical error correction的overview以及优胜团队的论文。本文总结了优胜团队的论文并给出了一些可能的改进方向。

本文涉及四篇文章:

  1. 官方的overview: Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction

  2. 比赛第一名:有道团队的论文:Youdao’s Winning Solution to the NLPCC-2018 Task 2 Challenge: A Neural Machine Translation Approach to Chinese Grammatical Error Correction

  3. 比赛第二名:阿里团队的论文:Chinese Grammatical Error Correction Using Statistical and Neural Models

  4. 比赛第三名:北京语言大学团队的论文: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进行困惑度排序并挑选一整个句子作为最终结果,阿里的几个解决方案中把修改部分单独拿出来构成修改集,结合最小编辑距离和语言模型评分挑选最终修改结果:

冲突发生时的解决方案(两个模型产生的两个句子):

  1. 为模型分配优先级,当冲突发生时选择优先级高的模型的结果

  2. 将冲突句子对原句所做的更改做并集,选择可以最小化编辑距离的修改方式

  3. 对修改集做交集

  4. 用语言模型对修改后的句子进行评分,选择分数高的

  5. 用语言模型评分,并把句子长度作为正则化参数 (分数 / 句子长度)

组合分类:

  • 低层组合:组合同一类型模型的候选结果

  • 高层组合:组合不同类型模型的候选结果

组合方式:

  • 低层组合:模型两两组合,并排列组合使用解决方案,使用验证集分数最高的方案

  • 高层组合:

    1. 将冲突解决方案扩展成对三个模型的

    2. 加入保护机制,当三种模型的冲突太多时则不对句子做修改

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模型未尝不是一个好选择。

下面对以上三篇论文以及笔者最近的一些浏览结果进行一些总结,给出可能改进和组合的方向

输入处理

  1. 颗粒度选择:字级或词级(词级可用BPE划分subword解决OOV或rare word问题)

  2. 训练语料对划分:

最小编辑距离语料:错误句子只和与其编辑距离最小的正确句子构成训练语料对

全语料:错误句子和其每个正确句子分别构成训练语料对

embedding

  1. word2vec中文语法修正版 wang2vec

  2. 使用自训练embedding 或 预训练的embedding+训练更新

  3. 使用embedding mask

  4. ELMO

模型

  1. 基于规则的模型

  2. 基于统计的模型:

    n-gram 或 rnn 语言模型 + 相似字音表暴力替换

    (n-gram + 翻译模型)得到概率 + (信道噪声 + beam search)挑选候选解

  3. encoder-decoder( lstm(单向或双向) 或 CNN ) + attention(一般attention或google的self-attention

划分方式

  1. 纵向划分:用基于统计、基于规则的简单模型解决简单错误,再把经过简单错误处理后的句子输入处理复杂错误的seq2seq模型

  2. 横向划分:不同类型的模型内部自行排列组合并选出每个类别的输出代表(低层组合),再对类别的输出进行组合得到最终输出(高层组合)

组合方式

  • 整句采用型

    对模型分配优先级,选择优先级高的模型的输出结果

    用语言模型对句子进行评分,选取困惑度最低的句子

    语言模型评分+句子长度作为正则化

  • 构造编辑集

    抽取出在原句上修改的部分,几个模型的修改部分分别构造成几个编辑集

    对编辑集求并集,选取编辑距离最小的修改方式

    对编辑集求交集

    冲突避免:几个模型给出的修改意见不同处太多,意见不统一则放弃修改

原文地址:

https://zedom1.top/2018/09/05/nlpcc_cgec/

PS:文章不容易,点个文末广告卡片表示支持!

每日一题

当在卷积神经网络中加入池化层(pooling layer)时,变换的不变性会被保留,是吗?
A、不知道
B、看情况
C、是
D、否

正确答案是:C

解析:

池化算法比如取最大值/取平均值等, 都是输入数据旋转后结果不变, 所以多层叠加后也有这种不变性。

IELTS a bit

namely  adv. 也就是

cease    [sis]

vi. 停止;终了

vt. 停止;结束

n. 停止

推荐阅读:

一大批历史精彩文章啦


2018 NLPCC Chinese Grammatical Error Correction 论文小结相关推荐

  1. 论文阅读:Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction

    论文阅读:Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction 1. 引言 2. 任务定义 3. 数据 3.1 训练 ...

  2. 复现有道NLPCC-2018 CGEC:A Neural Machine Translation Approach to Chinese Grammatical Error Correction

    有道NLPCC-2018 CGEC任务论文:A Neural Machine Translation Approach to Chinese Grammatical Error Correction ...

  3. 论文笔记:Improving Grammatical Error Correction Models with Purpose-Built Adversarial Examples

    论文笔记:Improving Grammatical Error Correction Models with Purpose-Built Adversarial Examples 文章简要介绍 出处 ...

  4. 论文解读:DCSpell:A Detector-Corrector Framework for Chinese Spelling Error Correction

    论文解读:DCSpell:A Detector-Corrector Framework for Chinese Spelling Error Correction 简要信息: 序号 属性 值 1 模型 ...

  5. 自动语法错误校正(Grammatical Error Correction)

    写英语论文很折磨人.平时用英语写的少,关键时候写的头痛死.记起前段时间在知乎上看了一个哥们写的NLP潜在热门方向,介绍了自动语法错误校正(具体名称记不起来了,当时没有收藏,现在找不到了).就不知道怎么 ...

  6. Improving the Efficiency of Grammatical Error Correction with Erroneous Span Detection and Correctio

    EMNLP20,GEC(Grammar Error Correct)比较近的一篇文章,没啥太多的novelty,主要是用了RoBertA,和以往的neural方法一样,seq2seq model,只是 ...

  7. Improving the Efficiency of Grammatical Error Correction with Erroneous Span Detection翻译

    摘要 我们提出了一种独立于语言的新颖方法,通过将GEC任务分为两个子任务来提高语法错误纠正的效率:错误跨度检测(ESD)和错误跨度校正(ESC).ESD使用有效的序列标注模型来识别语法错误的文本范围. ...

  8. 论文解读:Spelling Error Correction with Soft-Masked BERT

    论文解读:Spelling Error Correction with Soft-Masked BERT(2020ACL)   拼写错误纠错是一个比较重要且挑战的任务,非常依赖于人类的语言理解能力.本 ...

  9. 【论文复现】MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction论文复现

    文章目录 本文内容 环境配置 全局变量 模型构建 损失函数 模型训练 构造Dataset 构造Dataloader 训练 模型评估 模型使用 参考文献 代码地址 :https://github.com ...

  10. 【语音】论文阅读笔记 Non-autoregressive Error Correction for CTC-based ASR with Phone-conditioned Masked LM

    目录 摘要 介绍 预备和相关工作 1. CTC-based ASR 2. Masked LM 3. ASR error correction 提出的方法 1. Phone-conditioned Ma ...

最新文章

  1. Java--缓存热点数据,最近最少使用算法
  2. Python入门100题 | 第067题
  3. 1.0 MySQL数据库基础知识
  4. 普元连接mysql_普元EOS 案例 - 还有一行代码的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. java 多态_Java面向对象 —— 多态
  6. 自加一运算_C语言i++、++i混合运算老手未必全掌握,看了你就明白了
  7. 瀑布流布局的实现方式
  8. 利用百度地图坐标拾取系统获取经纬度,并将其坐标转换保存成SHP文件
  9. 在线光纤网速测试软件,光纤网速测试,宽带测试
  10. R实现KMeans聚类算法教程
  11. 【2021年度总结】积跬步,「卷」千里,2022 继续「卷」
  12. unit在matlab中啥意思,unit8(matlab中uint8函数)
  13. 间隔一段时间重复自动登录网站、定时自动登录网站的软件 —— 定时执行专家,无需复杂编程,简单配置即可使用
  14. Elastix 2.5 PBX服务器安装配置使用手册
  15. wap视频广告遇到的问题
  16. Mac Android Studio Chipmunk | 2021.2.1 Patch 1错误:Installed Build Tools revision 33.0.0 is corrupted
  17. css3宽度变大动画_H5 直播的疯狂点赞动画是如何实现的?
  18. Dashboard安装配置
  19. 《MySQL 入门教程》第 06 篇 备份与恢复
  20. Android V1签名与校验原理分析(全网最全最详细)

热门文章

  1. C#结合VS开发WinForm学习笔记
  2. 位运算简介及实用技巧(二):进阶篇(1)
  3. 关于系统响应函数OnSysCommand
  4. laravel 分页带参数
  5. python常用内置函数整理
  6. vue组件化学习第一天
  7. ElasticStack系列之九 master、data 和 client 节点
  8. iOS UITextField限制输入字数
  9. [IC]Lithograph(1)光刻技术分析与展望
  10. Debian Stable分支对于开发者的意义[续软件系统。。。]