0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何对typo 进行检测和纠正

深度学习自然语言处理 来源:澜舟科技 作者:澜舟科技 2022-07-13 14:38 次阅读

写在前面

自然语言文本中经常会出现一些拼写错误(typo),在中文文本里即所谓的错别字,中文拼写纠错(Chinese Spelling Correction,CSC)可以对中文文本中的 typo 进行检测和纠正。拼写纠错在诸多 NLP 任务和应用中都有重要作用,如 OCR、语音识别和搜索引擎等。在 NLP 任务和日常工作生活场景中,中文文本中的 typo 主要是拼音和字形相似导致的,示例如表 1 所示。

c7507018-01c9-11ed-ba43-dac502259ad0.png

表 1

一般 CSC 系统的输入和输出序列长度相同,所以现在 CSC 系统主要采用基于 BERT 的非自回归生成模型,这些模型依据输入序列中的所有字符来平行生成每个位置的字符,而随着 BERT 等预训练模型的成功,CSC 模型的性能也有了极大的提升。

虽然 BERT 模型很强大,但其在解决 CSC 任务时也会遇到一些问题。

首先,基于 BERT 的 CSC 模型根据 typo 本身及其上下文对该处 typo 进行检测和纠正,但当一个句子中有多处拼写错误(multi-typo)时,则句子中每个字符的上下文都至少包含一处 typo,这导致其信息中含有噪声,从而影响模型的效果。论文统计了中文拼写纠错任务 SIGHAN13、14、15 的测试集中的 multi-typo 数据,如表 2 所示,并且把这些数据抽出做成测试集,测试模型对 multi-typo 文本的纠错能力,结果如表 3 所示(character-level),结果证实了上述结论。

其次,BERT 是掩码语言模型,其从大规模语料中学习怎样根据上下文恢复被遮掩的 token,但对于一个被遮掩的位置可能有多个有效的字符,这时候 BERT 模型则会倾向于恢复成最常见的那一个,而在 CSC 任务中,则表现为模型可能会把一个有效的表述改成另外一种更常见的表述,比如将“这并非是说……”改成“这并不是说……”。

c76ce52c-01c9-11ed-ba43-dac502259ad0.png

表 2

c79924de-01c9-11ed-ba43-dac502259ad0.png

表 3

针对上述的两个问题,来自腾讯 AI 平台部门和北京大学的研究人员提出了一种名为 CRASpell 的解决方法,让我们一起来看看吧。

论文标题

CRASpell: A Contextual Typo Robust Approach to Improve Chinese Spelling Correction

论文作者

Shulin Liu, Shengkang Song, Tianchi Yue, Tao Yang, Huihui Cai, Tinghao Yu, Shengli Sun

作者单位

Tencent AI Platform Department, China

Peking University, China

论文链接

https://aclanthology.org/2022.findings-acl.237/

项目代码

https://github.com/liushulinle/CRASpell

CRASpell 介绍

该论文将 multi-typo 降低模型性能的问题称作 Contextual Typo Disturbance,将模型对文本不必要的纠正称为 Overcorrection,并针对这两个问题提出了 CRASpell 模型,其结构如图 1 所示:

c7cf88a8-01c9-11ed-ba43-dac502259ad0.png

图 1

由图 1 我们可以看到,CRASpell 主要分为两部分,左边为 Correction Module,右边为 Noise Modeling Module。

1. Correction Module

Correction Module 中,Transformer Encoder 加 Generative Block 就是一个基本的 CSC 模型,Generative Block 计算并输出一个 generative distribution,其过程可以描述为:

(1)

论文中使用 copy mechanism [1-2] 来解决 Overcorrection 的问题,其对于输入序列中的每一个 token,都有一个 one-shot 向量的 copy distribution,其形式可以描述为:

(2)

Copy Block 则是用来输出一个 copy probability,计算过程如下:

(3)

然后以 copy probability 为权重,将 copy distribution 和 generative distribution 相加作为最后输出,这样相当于给输入的 token 额外加上了一个偏重,让模型更加倾向于保留原来的 token:

(4)

2. Noise Modeling Module

针对 Contextual Typo Disturbance 问题,CRASpell 提出了 Noise Modeling Module,其思想是训练模型在原始上下文和有噪声的上下文中输出相似的概率分布。

Noise Modeling Module 的结构也是 Transformer Encoder 加 Generative Block,不同的是其前面还有一个 Noisy Block,其通过替换的方式在 typo 的上下文中插入噪声,而噪声上下文的质量又受到两个因素的影响:

a. 插入噪声的位置

作者根据表 3 的实验结果,决定在 typo 周围 个字符内选择, 时如图 2 所示,如果句子中没有错误或者选择的位置正好是一处 typo,则不插入噪声。

c7ff6dde-01c9-11ed-ba43-dac502259ad0.png

图 2

b. 应该替换成什么字符

论文中使用公开的混淆集(confusion set)[3],将选择位置上的字符替换成其相似字符,这也是 CSC 任务中制作伪数据的常用方法,不同类型字符的替换比例为:70%近音字、15%近形字以及 15%随机选择的字符。

原始输入经过 Noisy Block 插入噪声后得到新的输入,经过 Noise Modeling Module 后的输出为 , 最后将其与 Correction Module 中的 generative distribution 共同计算 KL 散度损失:

(5)

在 Correction Module 中,给定训练样本 (X, Y),对于式 (4) 中的 ,其每个位置的 token 的 loss 为:

(6)

结合式 (5) 和式 (6),得到整个模型训练的损失函数为:

(7)

(8)

这里我们可以看到,Noise Modeling Module 只在训练时被用到,而插入噪声的位置没有计算在 loss 内,这样做是为了不改变训练过程中数据里 typo 的数量,让插入的噪声只起到改变上下文信息的作用。

实验设置和结果

数据集方面,论文中的训练集包括 10K 人工标注的 SIGHAN 数据 [3-5],加上 271K 的自动生成的数据 [6],测试集使用的是 SIGHAN15 的测试集,另外作者还抽取了 SIGHAN15 测试集中所有的 multi-typo 数据以及相同数量的 negative(不含 typo)数据,组成了 multi-typo 测试集,如表 4 所示。指标采用了 character-level 的 precision、recall 和 F1 分数,即预测对一个 typo 标签算一个正确的预测结果,这样更能体现论文提出的方法对 multi-typo 的提升效果。

c81e0848-01c9-11ed-ba43-dac502259ad0.png

表 4

基线模型:

SoftMask:提出 soft-masking 策略提升 BERT 的错误检测性能;

SpellGCN:将 GCN 与 BERT 结合对字符间的关系进行建模;

Tail2Tail:基于 BERT 的模型,但把解码器换成了 CRF

cBERT:论文作者发表于 2021 年的工作,用 CSC 数据进行预训练的 BERT,论文提出的 CRASpell 模型也用 cBERT 进行初始化;

PLOME:与 cBERT 相同,但另外融合了从拼音和笔画获取的发音和字形特征;

cBERTCopy:将 copy mechanism 应用在 cBERT 上;

cBERTNoise:将 Noise Modeling Module 应用在 cBERT 上;

cBERTRdrop:基于 cBERT 实现的 Rdrop 方法 [7]。

1. Main Results

c843c0c4-01c9-11ed-ba43-dac502259ad0.png

表 5

我们可以从表 5 中看到,Noise Modeling Module 和 copy mechanism 都能提升模型性能,使用了 Noise Modeling Module 的 cBERTNoise 和 CRASpell 在 multi-typo 测试集上均取得了优于其他方法的结果(Correction-level 的 Precision 高于 Detection-level,是因为其分母是在 ground-truth 范围内的预测标签的数量,而不是所有预测标签的数量),而另外还使用了 copy mechanism 的 CRASpell 则在两个测试集都取得了最好结果。作者也从 SIGHAN14 的测试集中筛选出了一个 multi-typo 测试集,结果如表 6 所示。

c8829eac-01c9-11ed-ba43-dac502259ad0.png

表6

2. Effects of Different Replaced Positions

论文中对比了 Noisy Block 在输入句子中选择插入噪声位置的两种方式:

在整个句子中随机选择

在 typo 附近选择结果如表 7 所示,作者还在测试集的数据中插入噪声,测试噪声与 typo 的距离对结果的影响,结果如图 3 所示,两组实验的结果都表明距离 typo 较近的噪声对模型的性能影响较大。

c8ad8f2c-01c9-11ed-ba43-dac502259ad0.png

表 7

c8cc35a8-01c9-11ed-ba43-dac502259ad0.png

图 3

3. Effects of Different Replaced Characters & the Copy Block

表 8 展示了插入噪声的两种方法:随机从词典中选取和从 confusion set 中选取的结果,可以看出 confusion set 的效果更好,因为从 confusion set 中选取的近音、近形字更接近实际场景下的 typo。Copy Block 被用来减少 BERT 模型对有效字符的修改,从表 9 可以看出其对 BERT 模型性能的提升,cBERT 因为在 CSC 数据上预训练过,所以 Copy Block 对其提升幅度较小。

c90c9c92-01c9-11ed-ba43-dac502259ad0.png

表 8

c92efb20-01c9-11ed-ba43-dac502259ad0.png

表 9

4. Comparison of Different Methods for Multi-typo Texts

作者为了展示 Noise Modeling Module 对模型的提升,另外实现了两种基于 cBERT 的方法:

MultiRound:用 cBERT 对输入进行多轮预测,直至不再修改;

NoiseTrain:用 Noise Block 生成的数据训练 cBERT,插入噪声的位置也参与 loss 计算。结果如表 10 所示,可以看出 NoiseTrain 提升效果最差,作者猜测是因为插入的噪声使训练数据中 typo 数量增加,且质量偏低,从而导致模型在 single-typo 和 zero-typo 的数据上的效果变差,而 Noise Modeling Module 中插入的噪声只作为上下文,不参与 loss 计算,作者认为这是导致结果差别巨大的关键所在。

c9534aac-01c9-11ed-ba43-dac502259ad0.png

表 10

总结

针对之前 CSC 模型的两个限制:Contextual Typo Disturbance 和 Overcorrection,这篇论文提出了一种新的拼写纠错模型。针对第一个问题,论文提出了 Noise Modeling Module,在训练过程中生成含噪声的上下文,该方法有效地提升了模型在 multi-typo 文本上的纠错效果。针对 Overcorrection 问题,论文将 Copy Block 与 CSC 模型结合,训练模型在原字符有效的情况下尽量不进行修改。最终,该方法也是在 SIGHAN15 任务上取得了新的 SOTA。

原文标题:文本纠错 | 怎样改善模型对 multi-typo 的纠正效果?

文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6892

    浏览量

    88827
  • 模型
    +关注

    关注

    1

    文章

    3172

    浏览量

    48713
  • 自然语言
    +关注

    关注

    1

    文章

    287

    浏览量

    13332

原文标题:文本纠错 | 怎样改善模型对 multi-typo 的纠正效果?

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    无损检测与传统检测的区别

    。 1. 定义与原理 1.1 无损检测(NDT) 无损检测是一种在不损害或不改变被检测对象的前提下,对材料或产品的内部和表面缺陷进行检测的技术。无损
    的头像 发表于 11-25 11:38 124次阅读

    针对雷击浪涌可采用哪些元器件进行检测

    针对雷击浪涌,可采用的检测元器件多种多样,这些元器件在电子设备防雷保护中扮演着关键角色。以下是对几种主要元器件的介绍: 1. 气体放电管(GDT) 定义与特性 : 气体放电管是一种用于防雷击的高性能
    的头像 发表于 10-06 16:31 274次阅读

    使用OPA2846运放进行检波遇到的疑问求解

    使用OPA2846进行检波的时候,仿真输出检波信号噪声峰峰值约为不到1mV,实际电路信号噪声峰峰值在200mV内;把该电路的运放换为LF412进行检波,仿真输出信号噪声峰峰值约为250mV,实际电路信号噪声
    发表于 08-30 07:53

    如何进行IP检测

    如何避免网络出现故障,增强网络安全性?又如何更加合理的规划分配网络资源?这就不得的提到我们需要定期给自家或企业中的IP进行检测了。IP 地址就像是网络世界中设备的“身份证号码”,定时进行检测,能够
    的头像 发表于 07-26 14:09 471次阅读
    如何<b class='flag-5'>进行</b>IP<b class='flag-5'>检测</b>

    冲压模具如何实现视觉在线检测?

    视觉检测系统是一种利用机器视觉技术对冲压模具和冲压件进行检测的方法。通过使用高精度的相机和光源,对冲压件进行拍摄,然后通过图像处理和算法分析,对冲压件的质量进行检测和评估。对冲压件
    的头像 发表于 06-03 17:43 671次阅读

    微波检测的原理是什么 微波检测的特点

    微波检测是一种利用微波技术对物体进行检测的方法。它在许多领域,如通信、遥感、工业过程控制等具有广泛的应用。本文将详细介绍微波检测的原理、特点以及应用。 微波检测的原理 微波
    的头像 发表于 05-28 14:42 1453次阅读

    为什么说“AOI检测”是SMT焊接质量的把关者?

    是在SMT生产线上的板子经过AOI设备时,对板子进行实时检测,以便及时发现和纠正问题;而离线AOI检测则是对已经下线的板子进行检测,发现问题
    发表于 04-25 11:56

    基于纠正措施系统(FRACAS)的关键技术

    故障报告,分析和纠正措施系统是一种系统的方法,用于从一个或多个来源收集失效数据,针对根本原因对数据进行汇编和分析以及识别纠正措施。
    的头像 发表于 02-20 10:34 1418次阅读

    如何检测变频器中电容好坏

    检测变频器中电容好坏时,常用的检测方法有三种:一种是采用电容表进行检测;二是采用指针万用表进行检测;三是采用电桥进行检测
    发表于 02-06 11:22 1097次阅读

    安泰ATA-2082高压放大器如何驱动超声探头进行无损检测

    无损检测技术是一种在不破坏或影响被检测物体性能的前提下,通过物理或化学方法对其内部或表面的缺陷进行检测的技术。在无损检测领域,超声检测是一种
    的头像 发表于 01-24 17:29 426次阅读
    安泰ATA-2082高压放大器如何驱动超声探头<b class='flag-5'>进行</b>无损<b class='flag-5'>检测</b>

    高压气密性检测仪的检测步骤

    高压气密性检测仪是一种用于检测容器、管道等设备气密性和压力的设备。它可以在不破坏设备的情况下进行检测,具有高效、准确的特点。下面介绍高压气密性检测仪的
    的头像 发表于 01-10 10:50 712次阅读
    高压气密性<b class='flag-5'>检测</b>仪的<b class='flag-5'>检测</b>步骤

    如何纠正三相电源相序

    。下面将通过详细讨论相序错误的原因、检测纠正方法,以及在实际应用中的注意事项,来帮助读者深入了解如何纠正相序错误。 首先,我们需要明确相序错误的原因。相序错误通常发生在电气系统中的三相电源供电电缆的接线错误或者设
    的头像 发表于 01-04 14:30 5645次阅读

    ADAS1000-3导联脱落的时候是如何被各个通道中的比较器检测到的?

    ADAS1000-3集成芯片,在导联脱落检测的时候有些不太明白。我们用的是直流导联脱落检测。当导联脱落的时候是如何被各个通道中的比较器检测到的?以及在软件上面如何进行检测方面不是很明白
    发表于 12-19 07:11

    如何使用示波器探头对被测电路进行检测

    对电路信号进行检测之前首先要知道被测电路是什么电路,被测信号是什么信号。盲目地测试或者使用不正确的测量方法,有可能得到错误的波形甚至损坏仪器危及安全。1什么是差分信号?什么是单端信号?差分传输是一种
    的头像 发表于 12-08 16:14 861次阅读
    如何使用示波器探头对被测电路<b class='flag-5'>进行检测</b>

    使用AD9914进行相位纠正功能的疑惑求解答

    最近使用AD9914进行相位纠正功能实现。存在一些疑惑: 对于预设的16位相位偏移字(POW)在送入AD9914执行后,对于输出的波形,请问是会出现 相位截断类型的波形(我在示波器上没能捕捉到)(图1),还是产生类似频率增长(相位累加器斜率增加)的波形(图2)快速追到补偿
    发表于 12-05 08:26