语法纠错团队成功入选ACL 2022的中文纠错模型CRASpell和CNEG

| 导语

语法纠错是一项基础的NLP任务,在机器翻译、语音识别、自动问答等任务中具有重要的作用。我们针对中文语法纠错进行了深入的研究,提出的两个创新方案都被NLP顶会ACL 2022录用。

1.概述

自媒体时代,每天都会产生成千上万的文章,这些文章质量参差不齐,语法错误问题非常普遍。语法纠错是一项枯燥且困难的工作,因此如何让AI实现自动纠错具有重要的应用价值。为此,博通内容理解团队对中文语法纠错进行了深入的研究,在去年研究的基础上(ACL 2021,PLOME ),又提出了两个创新技术方案,都被ACL 2022 (2篇)录用。

博通内容理解平台,由TEG 机器学习平台部NLP技术中心打造。平台目前提供65+种能力,涵盖了分类标签、内容质量、特定属性和基础能力等四个大类,支持图文、视频和直播等主要内容形态,广泛应用于腾讯看点、微视、微信搜一搜、AMS广告等业务中,平台日均调用量6亿+次。

ACL全称国际计算语言学年会(Annual Meeting of the Association for Computational Linguistics),是计算语言学和自然语言处理领域国际排名第一的顶级学术会议,每年召开一次,被中国计算机学会列为A类会议。

下面我们对博通团队入选ACL 2022的两篇论文分别进行详细的技术解读。

2.CRASpell

论文标题:CRASpell: A Contextual Typo Robust Approach to Improve Chinese Spelling Correction

中文标题:CRASpell:一种上下文错误鲁棒的中文拼写纠错模型

论文链接:

https://github.com/liushulinle/CRASpell/blob/main/CRASpell.pdf

2.1 任务介绍

中文拼写纠错也叫错别字纠错,目标是识别给定文本中的错别字并对其进行纠正。上图展示了一个例子,其中标红的是错别字,标绿的是改正字。文本中错别字的数量是不定的,可能没有错别字,也可能有多个错别字。

2.2 研究动机

我们发现,现有的纠错模型存在两个问题:1)过纠正问题:模型倾向于将低频表达误纠正为高频表达;2)多错误干扰:文本中的多个错别字相互干扰,导致模型在多错误文本上纠错效果差。

  • 过纠正问题

最新的纠错模型都基于BERT,而BERT本身是一个MASK语言模型,其预训练的方式导致倾向于预测高频表达,因此现有的SOTA纠错模型普遍存在对低频表达过纠正的问题。例如模型倾向于将“这并非是说”纠正为“这并不是说”。为了解决这个问题,我们在纠正网络中引入了Copy机制,增加模型对原字的预测概率,从而减少误纠正的情况。

  • 多错误相互干扰问题

在中文纠错中,多错误文本非常普遍(多错误文本指单个句子包含多个错别字)。下表展示了公开数据集SIGHAN2013~2015评测集中多错误样本占总体错别字样本的占比。我们从句子粒度和字粒度进行了统计,可以看到句子粒度多错误占比在20%以上,字粒度多错误占比在37%以上。

图1:SIGHAN2013~2015评测集中多错误样本占比,其中me是多错误样本数,te是总的错误样本数,ratio是多错误占比。

我们发现已有的SOTA纠错模型在多错误样本上识别效果较差。为了定量评估模型在多错误样本上性能的损失,我们从SIGHAN评测集中筛选出所有多错误样本,并等比例抽样无错误样本构建多错误评测集。然后,用SOTA模型在完整评测集和多错误评测集上分别进行评测,对比指标变化。下表展示了评测结果,其中最后一行是我们发表在ACL2021上的工作。从表中可以看到,所有模型在多错误评测集上的指标都显著低于完整评测集上的评测指标(至少降低6个点),说明现有模型在多错误样本上表现欠佳。

图2:SOTA模型在完整评测集和多错误评测集上指标对比

纠错模型本质上是基于上下文对错别字进行识别和纠正。在多错误样本中,上下文中至少包含一个错别字。这种错别字使得上下文中包含噪声信息,我们认为正是这种上下文中的噪声导致模型在多错误样本识别效果变差。考虑下面的例子:

这个句子中包含错别字“”和错别字“”。当我们对"大"进行错别字识别时,""是它的上下文,这个噪声导致模型未能识别出""是一个错别字。因此,解决这一个问题的关键是提升模型对上下文噪声的建模能力。基于这一观察,我们提出了一种基于对比学习的上下文噪声建模模型。

2.3 方法

模型架构如下图所示,基本思想是,对于每个输入文本,我们为其生成一个带噪样本。训练模型时,让纠错模型在带噪样本和原样本上输出的分布一致,提升模型对噪声的建模能力。

模型整体分为纠正模块和噪声建模模块。其中纠正模块基于原始输入文本训练纠错模型,噪声建模模块则负责构造噪声样本以及计算原文本和噪声文本的对比loss,下面分别进行介绍。

2.3.1 纠正模块

纠错模块是一个基于BERT的纠错模型,图中的Transformer Encoder是一个12层的Base_base模型,Generative Block基于最后一层BERT的输出向量在整个字表空间进行生成。Copy Block计算从输入中进行Copy的概率,并基于生成概率和Copy概率得到最终的生成概率。如果生成的字和输入不同,则表示这里是一个错别字,生成的字即为纠正字,否则表示此处不是错别字。

2.3.2 噪声建模模块

如图所示,噪声建模模块首先根据待纠错文本生成噪声样本,然后基于噪声样本计算生成概率。训练模型时,让纠错模型在带噪样本和原样本上输出的分布相近,提升模型对上下文噪声的建模能力。

  • 噪声样本构造方法

我们基于混淆集随机替换原样本中的字来构造噪声样本,下图展示了这一过程的示例。具体来说,分为两步:

Step1:随机采样加噪位置

我们构造噪声样本的目的是模拟上下文噪声,因此需要在已有错别字的周围采样加噪位置。我们发现,只有当错别字距离小于一定值时,才会相互干扰。因此,我们只在错别字周边一定范围内采样加噪位置,下图展示了合法的加噪位置示意。

Step2:从混淆集随机采样易错字进行替换

和我们发表在ACL 2021上的工作类似(PLOME),混淆集采样时以70%的概率采样近音字或同音字,15%的概率采样形近字,15%的概率随机从整个字表空间随机采样。

  • 噪声建模Loss

实现时,我们通过最小化两个模块生成概率的KL散度来达到让两个生成分布相似的目的,从而提升模型对上下文噪声的建模能力。噪声建模模块的Transformer Encoder和Generative Block和纠正模块中的同名模块共享参数。

最终的损失由纠正损失和对比损失加权得到,公式如下:

注意其中α的取值,当噪声文本位置和原文本位置字符不同时(表示在噪声样本中该位置是构造的噪声),对比loss的权重为0。这表明构造的噪声本身不参与模型训练,保证新增的噪声只作为上下文,不作为错别字,避免改变训练集正负样本的分布。

2.4. 实验结果

我们的模型在训练时基于cBERT(我们在ACL2021上提出的针对纠错的预训练模型)进行初始化。除了和多个SOTA模型进行了对比,此外我们还实现了几个对比方法:

  • cBERTCopy: 只有Copy模块,没有噪声建模模块,用于验证Copy模块的作用;

  • cBERTNoise: 只有噪声建模模块,没有Copy模块,用于验证噪声建模模块的作用;

  • cBERTRdrop: R-Drop是Liang等人在2021年提出的一种通用的模型正则化方法,我们在这里也进行了对比。

下表展示了实验结果:

表中对比的方法都是基于BERT的模型。从实验结果可以看到,我们模型中的Copy模块和噪声建模模块对效果都有一定的提升,二者合并提升幅度更大。最终,在完整评测集上,我们的模型在检测和纠正两个子任务上都取得了SOTA的效果。在多错误评测集上,我们的模型优势非常明显,F值提升2.6个点以上,充分证明了我们的方法能够有效提升模型在多错误样本的识别效果。

此外,我们还对比了不同加噪声的方法以及不同的建模上下文噪声的方法,

详情请参阅我们的论文原文:https://github.com/liushulinle/CRASpell/blob/main/CRASpell.pdf

2.5. 论文小结

本文提出了一种建模上下文噪声的方法,在训练阶段构造带噪上下文,通过优化带噪样本和原样本的对比损失提升模型对上下文噪声的鲁棒性。实验结果表明我们的方法能够有效提升模型在多错误样本上的纠错效果。

相关代码已开源:https://github.com/liushulinle/CRASpell

3.CNEG

论文标题:Improving Chinese Grammatical Error Detection via Data augmentation by Conditional Error Generation

中文标题:一种提升中文语法错误检测的错误文本生成方法

论文链接:

https://github.com/liushulinle/CRASpell/blob/main/CNEG.pdf

3.1 任务介绍

中文语法错误检测,目标是判断中文文本是否包含语法错误,并识别出语法错误的位置和类型(多字,少字,选词错误等)。下图展示了一个例子,上面的句子是错误句,下面的是正确句,标蓝色的位置表示选词错误,标绿色的表示多字。

3.2 研究动机

语法错误检测是一个序列标注的任务,需要标注出句子中的每个错误位置和相应的类型,那么对于标注人员就需要丰富的语言学知识。因此,目前中英文语法错误检测的主要挑战是标注数据的极度不足。为了缓解数据缺失的问题,数据增强方法是近来学者的研究重点,也就是通过正确句子自动构造出错误句子。然而这些构建方法存在以下三个问题:

  • 上下文无关的错误问题

人产生的文字无论是通过打字还是手写,语法错误基本都是上下文相关。而一些随机引入噪声的方法,通常是与上下文无关的,如下图的 case Ⅰ所示,这样的语法错误非常简单,构造的句子对后续的检测模型帮助有限。

  • 生成模型不可控导致的语义模糊。

为了模拟人的错误,同时增加多样性和泛化性。很多工作使用生成模型或者翻译模型,通过正确的句子生成语法错误的句子。然而由于seq2seq模型的可控性较差,生成的句子通常会与原句产生较大的差异。如Case Ⅱ所示,通过对比原句和生成句,很难去推断对应的正确句子是什么,因此也无法确定具体的语法错误是什么。这种语义上的模糊对于检测模型来讲也是非常困难的数据。

  • 增强的数据很可能是语法正确的。 

大部分的工作都提出了自动构造语法错误句子的方法,但无论是随机噪声还是模型生成,都很难保证生成的句子是语法错误的,那么这种伪样本就会对后续的检测模型造成困扰。如Case Ⅲ所示。

为了缓解上述的问题,我们提出了一种条件的非自回归语法错误生成模型,借助于BERT语言模型来自动生成上下文相关的语法错误。然后借助于BERT模型来判断生成的错误是否真的错误。该方法可以有效缓解中文语法纠错数据不足的问题。

3.3 方法

我们的方法是首先构建一个基于BERT的生成模型,基于少量的正确-错误句子pair 微调生成模型,然后生成一个错误片段,再判别生成的片段是否错误,最后构建成一个语法错误的句子。下面详细介绍一下各个模块:

3.3.1 语法错误片段生成模型

BERT是基于海量文本训练的,这些文本中既包含很正式的文本,也包含语法错误的文本,模型通过预训练蕴含了丰富的语言信息。在预训练阶段MLM的目标是直接对MASK的部分进行复原,那么我们可以借助MLM这种复原能力,去引导模型回忆起海量数据中较为常见的错误片段,让模型去生成这些错误。

我们构建的生成模型如上图所示。如模型图的左半部分所示,我们首先mask掉正确文本中的一个片段,然后将对应的错误片段作为预测的目标。这部分与BERT的MLM一致,由于错误片段与原生MLM能复原的正确片段不同,解码层可以学习到不让正确的片段被预测出来。但是这样预测的片段可能与原始正确的片段偏差很大,导致整个语义变化很大,和整句Seq2Seq的问题一致。同时由于MLM是一种非自回归解码,当MASK的片段较长时,也很难预测连贯片段。

因此我们将被MASK的片段引入进来。图中的右半部分是使用相同的BERT编码原始正确Span信息。再将两个编码表示进行相加,最终用于解码的表示就会融入正确Span信息和上下文信息。Transformer和MLM层进行解码时就会倾向于预测原始Span相似的片段。
但由于我们把正确的span的信息直接引入,模型在分类层也容易直接生成原始正确的span。因此我们同时增加了MSE的loss,让融合的表示与原始片段的表示尽可能不同。最后在训练时,经过Target的指引,那么解码层就会生成上下文相关的错误片段。

3.3.2 语法错误句子构建

对于错误片段构建完成后,我们会基于生成的片段进行错误句子构建。因为中文中少一个字或多一个字对于语法可能有不同的影响,比如如下的例子:当缺少“会”字依然通顺,但缺少“对”字就不通顺了。

我们要进行判断构造的片段是否真的语法错误。我们依然利于BERT的MLM模型,去建模片段在上下文中的流畅度。然后通过对比错误片段和原始片段的流畅度,就可以判断生成的片段是否是错误的。

那么我们最终整个方法的样本构建就如下所示,首先生成模型去生成片段,然后进行判断,最后构造成语法错误的句子。

3.4 实验结果

我们和多个语法纠错数据增强方法进行了对比,主要分为基于噪声引入的方法和基于模型生成的方法。下表展示了实验结果:

从实验结果可以看到,当引入我们的数据后,检测模型在句子级和位置级错误检测上都有了显著的提升。
此外,我们还详细分析了各个结构的作用和一些生成样本。

详情请参阅我们的论文原文:

https://github.com/liushulinle/CRASpell/blob/main/CNEG.pdf。

3.5 论文小结

本文面对中文语法错误数据不足的挑战,提出了一种语法错误文本的构建方法。充分利用了大规模训练的BERT语言模型蕴含的语言知识,去构建语法错误和评估语法错误。最后引入构造后数据的实验结果表明我们的方法能够有效提升语法检测模型的效果。

4.总结

本文解读的技术已经成功应用于博通语法纠错系统。截止目前,公司多个业务,包括腾讯看点、腾讯广告、企鹅号发文助手、微信支付文档管理等已接入博通纠错能力,日均调用量3000w。欢迎更多的业务接入使用。

关注【腾讯太极机器学习平台】公众号

获取更多技术内容

博通语法纠错技术方案入选ACL2022,论文详细解读相关推荐

  1. 博途PLC 1200/1500PLC 工艺对象PID PID_Compact详细解读

    这篇博文我们详细解读博途PLC自带的PID功能块PID_Compact,大部分工业闭环调节过程,我们采用系统自带的PID功能块基本都能胜任,一些特殊的被控对象,我们可能需要采用一些先进PID算法,比如 ...

  2. 蚂蚁集团三项技术方案入选“2021年信息技术应用创新典型解决方案”

    近日,由工业和信息化部网络安全产业发展中心(信息中心).信息中心技术创新应用协作组主办的"2021年信息技术应用创新典型解决方案"在北京经开区信创园成功举办首场技术交流与实践分享活 ...

  3. 谷歌全方位自曝Waymo无人车技术方案 | 42页报告要点解读+下载

    李杉 夏乙 编译整理 量子位 出品 | 公众号 QbitAI 谷歌今天发布了一份无人车重磅报告:<通往完全自动驾驶之路>. 这份42页的报告从技术层面详细展示了谷歌Waymo无人车的软件. ...

  4. 【带你看看JS生态圈的技术趋势】state-of-js 2021 详细解读

    一.写在前面 本文的数据来源是 state-of-js ,是前端生态圈中比较有影响力的且规模较大的数据调查. 由于"JS 生态圈"这个话题很大,涉及到的技术很多,所以很多可以深挖的 ...

  5. 博客摘录「 丁达尔效应产生的原因_详细解读什么是丁达尔现象」2023年4月15日

    胶体能有丁达尔现象,而溶液几乎没有,可以采用丁达尔现象来区分胶体和溶液,注意:当有光线通过悬浊液时有时也会出现光路,但是由于悬浊液中的颗粒对光线的阻碍过大,使得产生的光路很短.

  6. 每周资讯 | 三星成为加拿大Telus5G设备供应商、高通发布骁龙690处理器、诺基亚与博通合作开发5G芯片……...

    NEWS 2020.06 5G国内外时事新闻精选 本期关键词:HTC.腾讯云计算.诺基亚.央视总台 第三周 2020.06 中国移动全面赋能5G开发者:自研物联网操作系统OneOS正式商用 _ 6月1 ...

  7. 科研工具整理:论文翻译、流程制图、语法纠错

    上一次我们已经介绍了一些论文工具,着一些继续介绍哦,主要以论文翻译.流程制图.语法纠错为主. 一.论文翻译 1.唐帕翻译 集文档翻译.文字翻译.网站翻译.人工翻译以及论文润色为一体. 文档翻译-pdf ...

  8. 阿里技术人才能力模型(深度解读系列之一)

    蓝色关注,回复"1"获取知名公司程序员和产品经理职级 这是我的第「104」篇原创文章 见字如面,我是军哥. 上周有一位读者朋友联系我,说他有阿里的技术人才能力模型,但是不能完全理解 ...

  9. 周博通 | 阿里语音AI入选MIT“全球十大突破技术”;阿里云率先达成国家绿色数据中心标准;iOS协程开发框架coobjc开源...

    阿里妹导读:雪融化了,春天还会远吗? 天气渐暖,"惊蛰"将至,春雷渐来,冬眠的动物们也将陆续活动开,年后第一期的周博通也整装再发.重新上线啦,希望你会喜欢. 周 博 通 中国唯一上 ...

最新文章

  1. node.js(一)
  2. 《Python核心编程》第二版第36页第二章练习 续一 -Python核心编程答案-自己做的-...
  3. PetClinic 没有分页功能
  4. linux 文件io实例代码,linux 文件IO(示例代码)
  5. day8网络编程,面向对象1
  6. SPI 读取不同长度 寄存器_[读书笔记]《计算机科学速成课》—6 寄存器和内存
  7. Hibernate一对一映射示例注释
  8. LOAM: Lidar Odometry and Mapping in Real-time
  9. linux 编译.sh,Linux内核编译步骤
  10. Hadoop 面试题之七
  11. nginx1.8.0安装
  12. tcpip协议服务器端总结,TCPIP详解-卷一-协议-10.9小结
  13. 设计模式:行为型模式
  14. Vue.js学习笔记(3)循环语句
  15. anaconda中的pkgs文件清理
  16. python画条状图_Python 绘制分组条形图
  17. 无锡人称包子为馒头,跟宋朝有关?
  18. 麦克利兰的成就动机理论(转)
  19. Java“彭于晏,区块链技术与应用
  20. 2021最新番剧有哪些?续作扎堆,神仙打架

热门文章

  1. java 获取代码注释
  2. 丘成桐计算机竞赛用什么电脑,丘成桐这样的学术竞赛到底对申请有没有用?
  3. win10下Light-GBM(LGB)安装
  4. python中的正则匹配知识点
  5. openmeetings 安装ssl
  6. 物联网教育现状和前景
  7. EEGLAB系列教程5:数据预处理2(ICA去伪迹)
  8. 【解决vscode终端输出中文乱码问题图文教程】
  9. JS总结——获取元素的各种高度宽度
  10. Linux——基本指令