2018 NLPCC Chinese Grammatical Error Correction 论文小结

简介: 这一段时间,笔者一直在研究语音识别后的文本纠错,而就在八月26-30日,CCF的自然语言处理和中文计算会议召开了,笔者也从师兄那里拿到了新鲜出炉的会议论文集,其中重点看的自然是其shared task2:grammatical error correction的overview以及优胜团队的论文。
这一段时间,笔者一直在研究语音识别后的文本纠错,而就在八月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支提交了最终结果,最终分数如下:

8447e594883d83b5faf2772272e8f5fc542f9f21



在论文集中,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语言模型对纠正后句子进行困惑度分析,选择困惑度最低的句子。

70efdc65445c151157bcfd007a95c60fccd17f15



输入处理


他们的预处理阶段较为简单,语料方面使用的是全语料策略:每个句子和其正确答案句子各构成一个样本对,即{(错误句子,正确句子0),(错误句子,正确句子1),(错误句子,正确句子2)。。。},若句子本身是正确,则答案句子用其本身,即{(待训练句子,待训练句子)}


值得一提的是,他们得到了样本对还额外经过了一步筛选:使用自己在大语料中训练出来的5-gram字级语言模型检测错误句子和正确句子的困惑度,若是前者的困惑度低于后者,则把这个样本对删去。


模型分层


有道将错误大题分成两类,一类是拼写类的表面错误,第二类是较为困难的语法错误


对于表面错误,有道使用大量文本训练出来的5-gram字级模型作为辅助模型,并且使用 SIGHAN 2013 CSC Datasets中提供字音、字形相似表。


41907eabf0daa059e7a569b6197c64475cd56c09



在有了5-gram模型和字表之后,他们使用的方式颇为暴力:对句子中的每个字,将其在字表中的候选字替换进去并计算得分,所有句子中困惑度最低的即为最终选择


在纠正完表面错误后,他们开始着手进行语法错误的纠正,这方面他们采用的是 基于 self-attention的 encoder-decoder框架Transformer ,因为在机器翻译领域 sub-word 效果更好,然而字级更能处理拼写和字级语法错误,因此他们分别构造了字级和词级的神经网络模型,试图将他们组合起来以此获取这两种颗粒度各自的优点,实现方面他们使用了基于tensorflow的框架 tensor2tensor,参数设置方面除了把hidden size设为800外,其余为默认设置。


分类处理完之后,自然要进行模型的组合了,首先是低级错误模型单独来,然后是低级错误+高级错误模型,先字后词、先词后字以及只用字、只用词四种高级模型,由此得到了总共5个纠正模型:


c5960d185f33d79a6a763a6c128ac6ce517fb682



值得一提的是,他们并不是只使用一个模型组合,而是将五个模型组合都使用上,最终得到了5个组合的输出,再用5-gram模型对这5个句子进行评分,选择困惑度最低的句子。最终他们的结果如下:

3c29450efa24ed0130ef1a50eb1affcbb3f95701




可以看出,他们的思路是将错误分为简单和复杂两类错误,用简单模型(5-gram+暴力替换)解决简单错误,复杂模型(Transformer)解决复杂错误,而后将两个阶段的模型进行组合,把字级5-gram作为评分工具选出最后的句子。


2. Chinese Grammatical Error Correction Using Statistical and Neural Models

总结多模型平行结构,使用基于规则、基于统计和神经网络三大类模型,先在类别内进行低级组合得到类别候选,再对类别候选进行高级组合

0f968f3e92b41ebf114d48fb77616aa664318d53




输入处理方面,阿里生成了两类数据集,第一类是将待测句子和其纠正句子中编辑距离最小的句子构成样本对,称为NLPCC MinEd,第二类是将待测句子和所有纠正句子各构成样本对,称为NLPCC Expand。在神经网络翻译模型中使用不同的语料类训练模型并组合结果。


阿里使用的模型和有道的不大相同。有道的在单个模型组合里采用的是垂直结构:先纠简单再就复杂,然而阿里采用的是平行结构,不分简单复杂,模型自行把它们都搞定,而后再组合起来。


此外,他们引入了基于规则的模型,在基于统计的模型中使用语言模型+翻译模型并用信道噪声+beam search挑选候选解。


语言模型方面用中文语料进行训练,翻译模型方面用平行语料(错误句子和正确句子的对应)训练,以此得到错误句子和正确句子的条件概率。


神经网络方面也是 Encoder-Decoder (各2层LSTM) + attention 的模型,他们只使用字级模型,但在其它方面做了修改,如LSTM是单向还是双向、是否使用以及是在Encoder还是在Decoder使用预训练的embedding,数据集是只挑错误句子到候选正确句子编辑距离最低的句子对还是使用所有候选正确句子,以此产生了4个模型组合:

e078bb6f316ae2338e8a600cfa0170ac5edb6f9d




组合起来的模型得到了输出结果,若是几个模型的输出结果不同,则称发生了冲突,他们提出了5种冲突解决方案,不同与有道直接使用5-gram进行困惑度排序并挑选一整个句子作为最终结果,阿里的几个解决方案中把修改部分单独拿出来构成修改集,结合最小编辑距离和语言模型评分挑选最终修改结果:

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


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

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

  3. 对修改集做交集

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

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


组合分类:

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

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


组合方式:

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

  • 高层组合:

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

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

  1. 9657d41b2ba3d4800c5956ee622e9e0b98857e9d





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/


原文发布时间为:2018-09-11

原文作者:Zedom

本文来自云栖社区合作伙伴“ 深度学习自然语言处理”,了解相关信息可以关注“ 深度学习自然语言处理”。

相关文章
|
安全 数据安全/隐私保护 芯片
简单认识加扰与解扰
简单认识加扰与解扰
549 0
|
消息中间件 Java 中间件
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。接下来我就将从零开始介绍什么是消息队列?消息队列的应用场景?如何进行选型?如何在Spring Boot项目中整合集成消息队列。
24112 10
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
|
10月前
|
人工智能 自然语言处理 Swift
ModernBERT-base:终于等到了 BERT 回归
BERT于 2018 年发布(史前人工智能!),但它至今仍被广泛使用,BERT的纯编码器架构使其成为每天出现的各种场景的理想选择,例如检索、分类和实体提取。
953 3
|
测试技术
Vript:最为详细的视频文本数据集,每个视频片段平均超过140词标注 | 多模态大模型,文生视频
[Vript](https://github.com/mutonix/Vript) 是一个大规模的细粒度视频文本数据集,包含12K个高分辨率视频和400k+片段,以视频脚本形式进行密集注释,每个场景平均有145个单词的标题。除了视觉信息,还转录了画外音,提供额外背景。新发布的Vript-Bench基准包括三个挑战性任务:Vript-CAP(详细视频描述)、Vript-RR(视频推理)和Vript-ERO(事件时序推理),旨在推动视频理解的发展。
356 1
Vript:最为详细的视频文本数据集,每个视频片段平均超过140词标注 | 多模态大模型,文生视频
|
10月前
|
缓存 前端开发 UED
React 侧边栏组件 Sidebar
本文介绍了如何使用React创建交互式侧边栏组件,涵盖基础结构、状态管理、样式设计等方面。通过`useState`钩子控制侧边栏的展开与收起,并利用CSS实现动画效果。同时,文章还探讨了响应式设计、性能优化、可访问性和路由集成等常见问题及解决方案,帮助开发者构建高效、美观且易于维护的侧边栏组件,提升Web应用的用户体验。
313 8
|
设计模式 Java 数据库
【禁用外键】为什么互联网大厂禁用外键约束?详谈外键的优缺点和使用场景
从多个层面分析数据库外键的优缺点,并给出外键的使用场景和禁止使用的场景。
712 19
【禁用外键】为什么互联网大厂禁用外键约束?详谈外键的优缺点和使用场景
|
机器学习/深度学习 自然语言处理 负载均衡
揭秘混合专家(MoE)模型的神秘面纱:算法、系统和应用三大视角全面解析,带你领略深度学习领域的前沿技术!
【8月更文挑战第19天】在深度学习领域,混合专家(Mixture of Experts, MoE)模型通过整合多个小型专家网络的输出以实现高性能。从算法视角,MoE利用门控网络分配输入至专家网络,并通过组合机制集成输出。系统视角下,MoE需考虑并行化、通信开销及负载均衡等优化策略。在应用层面,MoE已成功应用于Google的BERT模型、Facebook的推荐系统及Microsoft的语音识别系统等多个场景。这是一种强有力的工具,能够解决复杂问题并提升效率。
848 2
|
机器学习/深度学习 并行计算 PyTorch
PyTorch与CUDA:加速深度学习模型训练的最佳实践
【8月更文第27天】随着深度学习应用的广泛普及,高效利用GPU硬件成为提升模型训练速度的关键。PyTorch 是一个强大的深度学习框架,它支持动态计算图,易于使用且高度灵活。CUDA (Compute Unified Device Architecture) 则是 NVIDIA 开发的一种并行计算平台和编程模型,允许开发者直接访问 GPU 的并行计算能力。本文将详细介绍如何利用 PyTorch 与 CUDA 的集成来加速深度学习模型的训练过程,并提供具体的代码示例。
1221 1
|
机器学习/深度学习 算法 计算机视觉
经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)
经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)
5326 1
经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)
|
API 开发工具 Android开发
Android源码下载
Android源码下载
1661 0