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

    文章

    6564

    浏览量

    87951
  • 模型
    +关注

    关注

    1

    文章

    2823

    浏览量

    48054
  • 自然语言
    +关注

    关注

    1

    文章

    271

    浏览量

    13239

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    集成芯片好坏检测方法有哪些

    这些检测方法可以综合使用,以全面评估集成芯片的好坏。在进行检测时,请确保遵循相关的安全操作规程,避免对芯片或测试设备造成损坏。如果对某些测试方法不熟悉,建议寻求专业人员的帮助。
    的头像 发表于 03-19 16:51 1156次阅读

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

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

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

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

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

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

    如何纠正三相电源相序

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

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

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

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

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

    AD8495能对E型和J型热电偶进行检测吗?

    大家好! 本人正在使用AD8495对热电偶温度进行检测。 由于项目要求能够检测电路能够在K、J、E的热电偶中通用,并且考虑到目前一级代理E络盟不再继续采购AD8496(针对J型)使得AD8496价格
    发表于 11-21 07:21

    看完本篇,帮你纠正错误的去耦方法

    看完本篇,帮你纠正错误的去耦方法
    的头像 发表于 10-26 15:22 301次阅读
    看完本篇,帮你<b class='flag-5'>纠正</b>错误的去耦方法

    车辆燃油系统如何进行压力检测

    对车辆进行燃油系统压力检测通常需要一些专用工具和基本的机械知识。以下是一般的步骤来进行燃油系统压力检测: 注意:在进行燃油系统压力
    的头像 发表于 10-07 15:01 1170次阅读

    机器视觉检测系统的工作原理及检测流程介绍

    在机器视觉检测系统工作流程中,主要分为图像信息获取、图像信息处理和机电系统执行检测结果3个部分,另外根据系统需要还可以实时地通过人机界面进行参数设置和调整。 当被检测的对象运动到某一设
    发表于 09-19 06:34

    如何正确使用气密检漏仪进行检测

    正确使用气密检漏仪进行检测需要按照以下步骤进行: 准备工作:首先,检查气密检漏仪的状态,确保仪器正常工作。检查仪器的电源、气源等是否正常连接。确认被测产品或系统已经准备好,没有明显的损坏或杂质
    的头像 发表于 08-24 09:43 643次阅读
    如何正确使用气密检漏仪<b class='flag-5'>进行检测</b>

    ARMv8-M处理器故障处理和检测

    件,以便进行纠正或保护可以采取行动。一些ARMv8‑M设备设计用于检测更多类型的错误 条件,并且可以以可预测的方式处理检测到的错误,使其适合用于安全相关系统。
    发表于 08-02 06:28