中文拼写检测纠正 Read, Listen, and See Leveraging Multimodal Information 论文

拼写纠正系列

NLP 中文拼写检测实现思路

NLP 中文拼写检测纠正算法整理

NLP 英文拼写算法,如果提升 100W 倍的性能?

NLP 中文拼写检测纠正 Paper

java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!

一个提升英文单词拼写检测性能 1000 倍的算法?

单词拼写纠正-03-leetcode edit-distance 72.力扣编辑距离

NLP 开源项目

nlp-hanzi-similar 汉字相似度

word-checker 中英文拼写检测

pinyin 汉字转拼音

opencc4j 繁简体转换

sensitive-word 敏感词

前言

大家好,我是老马。

下面学习整理一些其他优秀小伙伴的设计、论文和开源实现。

感受

这一篇和我的理念很类似,其实就是汉字的三个部分:音 形 义

TODO: 不过目前义这个部分我做的还比较弱,考虑添加一个关于单个字/词的解释词库。

论文+实现

论文地址: https://arxiv.org/pdf/2105.12306v1

源码地址:https://github.com/DaDaMrX/ReaLiSe

摘要

中文拼写检查(CSC)旨在检测和修正用户生成的中文文本中的错误字符。

大多数中文拼写错误是由于语义、语音或图形上相似的字符被误用。

以往的研究注意到这一现象,并尝试利用相似关系来完成这项任务。

然而,这些方法要么依赖启发式规则,要么使用手工制作的混淆集来预测正确的字符。本文提出了一种名为REALISE的中文拼写检查器,直接利用中文字符的多模态信息。

REALISE模型通过以下两个步骤解决CSC任务:

(1)捕捉输入字符的语义、语音和图形信息;

(2)选择性地混合这些模态的信息来预测正确的输出。在SIGHAN基准测试上的实验结果表明,所提出的模型显著优于强基线模型。

1 引言

中文拼写检查(CSC)任务旨在识别错误字符并生成候选修正。

由于其在搜索查询修正(Martins和Silva,2004;Gao等,2010)、光学字符识别(OCR)(Afli等,2016)、自动作文评分(Dong和Zhang,2016)等基本且广泛的应用中起到重要作用,因此受到了大量研究关注。近年来,由于大规模预训练语言模型的成功(Devlin等,2019;Liu等,2019;Yang等,2019),该任务取得了迅速的进展(Zhang等,2020;Cheng等,2020)。

在像英语这样的字母语言中,拼写错误通常是由于一个或多个字符错误,导致写出的单词不在字典中(Tachibana和Komachi,2016)。然而,在中文中,只要字符能够在计算机系统中输入,它们就被认为是有效的,这导致拼写错误实际上是在计算机语言处理中被误用的字符。考虑到汉字的构成,其中一些字符最初是象形字或形声字(Jerry,1988)。因此,在中文中,拼写错误不仅是语义上混淆的误用字符,还可能是语音或图形上相似的字符(Liu等,2010,2011)。表1展示了两个中文拼写错误的例子。第一个例子中,“平”(flat)所需的语音信息可以帮助我们得到正确的字符“瓶”(bottle),因为它们共享相同的发音“píng”。第二个例子不仅需要语音信息,还需要错误字符“轻”(light)的图形信息。正确的字符“经”(go)与“轻”具有相同的右部偏旁,并且发音相似(“qīng”和“jīng”)。

因此,考虑到中文的内在特性,在CSC任务中,充分利用中文字符的语音和图形知识,以及文本语义是至关重要的。

表1:中文拼写错误的两个示例及其候选修正

类型示例句子错误候选正确候选翻译
语音相似错误晚饭后他递给我一平(píng, flat)红酒。晚饭后他递给我一杯(bēi, cup)红酒。 ✗晚饭后他递给我一瓶(píng, bottle)红酒。 ✓He handed me a bottle of red wine after dinner.
图形相似错误每天放学我都会轻(qīng, light)过这片树林。每天放学我都会路(lù, pass)过这片树林。 ✗每天放学我都会经(jīng, go)过这片树林。 ✓I go through this wood every day after school.

在表格中,"Sent." 是指示原句,"Cand." 是候选修正,"Trans." 是英文翻译。错误字符、候选字符和正确字符在颜色上有所区分:错误字符为红色,候选字符为橙色,正确字符为蓝色。

在本文中,我们提出了REALISE(阅读、听力和视觉),一种中文拼写检查器,它利用语义、语音和图形信息来纠正拼写错误。REALISE模型采用了三个编码器来学习文本、语音和视觉模态的有用表示。首先,BERT(Devlin et al., 2019)作为语义编码器的骨干,用于捕捉文本信息。对于语音模态,我们使用汉语拼音(pinyin),即中文字符发音的拼音化拼写系统,作为语音特征。我们设计了一个分层编码器来处理拼音字母,在字符级别和句子级别上分别进行处理。与此同时,对于视觉模态,我们通过多通道的字符图像来构建图形特征,每个通道对应一种特定的中文字体。然后,我们使用ResNet(He et al., 2016)块对这些图像进行编码,从而得到字符的图形表示。

在获得三种不同模态的表示后,一个挑战是如何将它们融合为一个紧凑的多模态表示。为此,我们设计了一个选择性模态融合机制,用于控制每种模态的信息流向混合表示的程度。此外,鉴于预训练-微调程序已经被证明在各种NLP任务中有效(Devlin et al., 2019; Dong et al., 2019; Sun et al., 2020),我们提出通过在对应模态中预测正确字符来预训练语音和图形编码器。

我们在SIGHAN基准数据集(Wu et al., 2013; Yu et al., 2014; Tseng et al., 2015)上进行了实验。通过利用多模态信息,REALISE大幅超越了所有之前的最先进模型。与之前使用混淆集(Lee et al., 2019)来捕获字符相似性关系的方法(如SOTA SpellGCN(Cheng et al., 2020))相比,REALISE在检测级别和修正级别的F1值分别提高了平均2.4%和2.6%。进一步的分析表明,我们的模型在处理那些未在手工混淆集中定义的错误时表现更好。这表明,利用中文字符的语音和图形信息能更好地捕捉易被误用的字符。

总之,本文的贡献包括:

(i) 我们提出在中文拼写检查任务中除了文本语义外,还利用中文字符的语音和图形信息;

(ii) 我们引入了选择性融合机制来整合多模态信息;

(iii) 我们提出了语音和视觉预训练任务,进一步提升模型性能;

(iv) 据我们所知,所提出的REALISE模型在SIGHAN中文拼写检查基准测试中取得了最佳结果。

2 相关工作

2.1 中文拼写检查

中文拼写检查(CSC)任务是检测和纠正中文句子中的拼写错误。

早期的研究设计了各种规则来处理不同类型的错误(Chang 等, 2015;Chu 和 Lin, 2015)。

随后,传统的机器学习算法被引入到该领域,如条件随机场(Conditional Random Field)和隐马尔可夫模型(Hidden Markov Model)(Wang 和 Liao, 2015;Zhang 等, 2015)。随后,基于神经网络的方法在中文拼写检查中取得了显著进展。

Wang 等(2018)将 CSC 任务视为序列标注问题,并使用双向 LSTM 来预测正确的字符。

随着大规模预训练语言模型(如 BERT(Devlin 等, 2019))的成功,Hong 等(2019)提出了 FASpell 模型,该模型使用基于 BERT 的去噪自编码器来生成候选字符,并利用一些经验度量来选择最可能的候选字符。

此外,Soft-Masked BERT 模型(Zhang 等, 2020)采用级联架构,其中 GRU 用于检测错误位置,BERT 用于预测正确的字符。

一些先前的工作(Yu 和 Li, 2014;Wang 等, 2019;Cheng 等, 2020)使用手工制作的中文字符混淆集(Lee 等, 2019),旨在通过发现易错字符的相似性来纠正错误。

Wang 等(2019)利用指针网络(Vinyals 等, 2015)从混淆集中选择正确的字符。

Cheng 等(2020)提出了 SpellGCN 模型,该模型通过图卷积网络(GCNs)(Kipf 和 Welling, 2016)在混淆集上建模字符相似性。

然而,字符混淆集是预定义且固定的,无法覆盖所有的相似关系,也无法区分中文字符之间的相似性差异。

在本工作中,我们摒弃了预定义的混淆集,直接利用多模态信息来发现所有中文字符之间微妙的相似关系。

图1:REALISE模型的架构概览。语义、语音和图形编码器分别用于捕捉文本、声音和视觉模态的信息。融合模块选择性地融合来自三个编码器的信息。

在示例输入中,为了纠正错误字符“轻”(qīng,轻),我们不仅需要上下文的文本信息,还需要该字符本身的语音和图形信息。

F1

2.2 多模态学习

近年来,许多研究致力于整合来自不同模态的信息,以提高性能。

例如,多模态情感分析(Zadeh 等人,2016;Zhang 等人,2019)、视觉问答(Antol 等人,2015;Chao 等人,2018)和多模态机器翻译(Hitschler 等人,2016;Barrault 等人,2018)等任务已经取得了很大进展。

最近,提出了多模态预训练模型,如 VL-BERT(Su 等人,2020)、Unicoder-VL(Li 等人,2020)和 LXMERT(Tan 和 Bansal,2019)。

为了将汉字的视觉信息融入语言模型,Meng 等人(2019)设计了 Tianzige-CNN,以促进一些自然语言处理任务,如命名实体识别和句子分类。

据我们所知,本文是首个利用多模态信息来解决中文拼写检查任务的研究。

3 REALISE 模型

在本节中,我们介绍了 REALISE 模型,该模型利用语义、语音和图形信息来区分汉字的相似性并纠正拼写错误。

如图 1 所示,首先采用多个编码器从文本、声音和视觉模态中捕获有价值的信息。

然后,我们开发了一个选择性模态融合模块,以获得上下文感知的多模态表示。最后,输出层预测错误修正的概率。

3.1 语义编码器

我们采用 BERT(Devlin 等人,2019)作为语义编码器的骨干。

BERT 提供了丰富的上下文词表示,并在大规模语料上进行了无监督预训练。

其中,L 是 Transformer 层的数量。每一层由一个多头注意力模块和一个带有残差连接(He 等人,2016)以及层归一化(Ba 等人,2016)的前馈网络组成。

最后一层的输出被用作输入标记在文本模态中的上下文化语义表示。

3.2 语音编码器

汉语拼音(pinyin)是将汉字“拼音化”的拼音系统,用于表示汉字的发音。我们在本文中使用拼音来计算语音表示。
一个汉字的拼音由三个部分组成:声母、韵母和声调。声母(共 21 个)和韵母(共 39 个)用英语字母表示。5 种声调(以“a”字母为例,{a, ¯a, ´a, ˇa, a `})可以映射为数字 {1, 2, 3, 4, 0}。尽管所有汉字的拼音词汇表大小是一个固定数值,但我们在 REALISE 中使用字母序列来捕捉汉字之间细微的语音差异。例如,“中”(中)和“棕”(棕)的拼音分别为“zhong”和“z¯ong”。这两个字符的发音非常相似,但含义完全不同。我们因此将拼音表示为符号序列,例如:“中”的拼音表示为 {z, h, o, n, g, 1}。我们将输入句子中第 i 个字符的拼音表示为 ( p_i = (p_{i,1}, \dots, p_{i,|p_i|}) ),其中 ( |p_i| ) 是拼音 ( p_i ) 的长度。

在 REALISE 中,我们设计了一个层次化的语音编码器,它由字符级编码器和句子级编码器组成。

字符级编码器 用于建模基本发音并捕捉字符之间细微的发音差异。

句子级编码器 是一个 4 层的 Transformer,隐藏层大小与语义编码器相同。

它的目的是为每个汉字获得上下文化的语音表示。由于独立的语音向量在顺序上没有被区分,因此我们预先给每个向量添加了位置嵌入。

然后,我们将这些语音向量组合起来,并应用 Transformer 层来计算音频模态下的上下文化表示。

需要注意的是,由于 Transformer 架构的存在,这种表示也会被归一化处理。

3.3 图形编码器

我们使用 ResNet(He 等人,2016)作为图形编码器。

图形编码器由 5 层 ResNet 模块(记为 ResNet5)组成,后接一层归一化操作(Ba 等人,2016)。

为了有效提取图形信息,ResNet5 中的每个模块都会将图像的宽度和高度减半,同时增加通道数。

因此,最终的输出是一个长度等于输出通道数的向量,即高度和宽度都变为 1。

此外,我们将输出通道数设置为与语义编码器中的隐藏层大小相同,以便后续的模态融合。

由于汉字的书写字体在几千年的演变中不断变化,为了尽可能捕捉字符之间的图形关系,我们选择了三种字体:简体和繁体的黑体字(Heiti)以及小篆。

三种字体对应于字符图像的三个通道,图像大小设置为 32 × 32 像素。

3.4 选择性模态融合模块

在应用了上述的语义、语音和图形编码器之后,我们获得了在文本、语音和视觉模态下的表示向量 ( H_t )、( H_a ) 和 ( H_v )。

为了预测最终的正确汉字,我们开发了一个选择性模态融合模块,将这些来自不同模态的向量进行融合。

该模块在两个层级上融合信息,即字符级和句子级。

首先,对于每种模态,使用选择性门控单元来控制信息流入混合多模态表示的程度。例如,如果一个字符因与正确字符发音相似而拼写错误,那么更多的语音模态信息应该流入混合表示。门控值通过一个全连接层和一个 sigmoid 函数来计算。输入包括三种模态的字符表示以及语义编码器输出 ( H_t ) 的均值,以捕捉输入句子的整体语义。

3.5 声学与视觉预训练

尽管声学和视觉信息对 CSC(中文拼写检查)任务至关重要,同样重要的是如何将这些信息与正确的字符关联。

为了学习声学-文本和视觉-文本之间的关系,我们提出了对语音编码器和图像编码器进行预训练。

对于语音编码器,我们设计了一个输入法预训练目标,即给定输入拼音序列,编码器应该恢复出相应的汉字序列。

这类似于中文输入法的工作方式。我们在编码器顶部添加一个线性层,将隐藏状态转换为汉字词汇表上的概率分布。我们使用训练数据中带有拼写错误的句子的拼音来对语音编码器进行预训练,并使其恢复正确的汉字序列。

对于图像编码器,我们设计了一个光学字符识别(OCR)预训练目标。

给定汉字图像,图像编码器学习视觉信息以预测相应的汉字字符,这类似于 OCR 任务,但我们的识别仅限于字符级别,并且针对的是打印字体。在预训练过程中,我们同样在顶部添加一个线性层以进行分类。

最后,我们加载语义编码器、语音编码器和图像编码器的预训练权重,并使用 CSC 训练数据进行最终的训练过程。

表 2:使用的数据集统计

数据集句子数平均长度错误数
SIGHAN1370041.8343
SIGHAN143,43749.65,122
SIGHAN152,33831.33,037
Wang271K271,32942.6381,962
总计277,80442.6390,464

测试集

数据集句子数平均长度错误数
SIGHAN131,00074.31,224
SIGHAN141,06250.0771
SIGHAN151,10030.6703
总计3,16250.92,698

说明:所有训练数据已合并用于训练 REALISE 模型。测试集则单独用于评估模型的性能。

结论

本文提出了一种名为REALISE的中文拼写检查模型。由于中文拼写错误常常在语义、语音或图形上与正确字符相似,REALISE通过利用文本、声学和视觉模态的信息来检测和纠正这些错误。

REALISE模型通过量身定制的语义、语音和图形编码器来捕获这些模态中的信息。

此外,提出了一种选择性模态融合机制,用于控制这些模态的信息流。

实验结果表明,在SIGHAN基准测试集上,REALISE模型相较于仅使用文本信息的基准模型具有显著优势,这验证了利用声学和视觉信息对中文拼写检查任务的帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942603.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue2 elementui if导致的rules判断失效

优化目标 和 目标转化出价必填的 切换的时候还会隐藏掉 这时候的if语句会导致rules判断失效 我的办法是把判断拉到外面 别放在el-form-item里 <section v-if"unitForm.baseTarget OCPM && unitForm.cpaTargetOptions ! undefined && unitForm.cpaTa…

前端(Ajax)

1.客户端请求 向https://jsonplaceholder.typicode.com/users发送get请求 const xhr new XMLHttpRequest(); console.log(xhr.readyState); xhr.open(‘get’, ‘https://jsonplaceholder.typicode.com/users’) console.log(xhr.readyState); xhr.send(); console.log(xhr.…

uboot, s5pv210 , main_loop 分析(16)

main_loop 的代码如下&#xff1a; 4443 void main_loop (void)42 {41 #ifndef CONFIG_SYS_HUSH_PARSER E 40 ▎ static char lastcommand[CONFIG_SYS_CBSIZE] { 0, }; ■ Use of undeclared identifier CONFIG_SYS_CBSIZE39 ▎ int len;38 ▎ int rc 1;37 ▎ …

信号强劲,通信清晰:北斗三号多模对讲机TD70——专业通信解决方案

在边防海防等国家安全的关键领域&#xff0c;通信的稳定性和可靠性关乎着任务的成败和战士们的安全。北斗三号多模对讲机TD70&#xff0c;凭借其卓越的性能和全面的功能&#xff0c;成为了边防海防通信的利器&#xff0c;守护着国家安全的前沿哨兵。 一、三网融合&#xff0c;…

Arduino驱动DS18B20测量环境温度

DS18B20是一款高精度的单总线数字温度传感器&#xff0c;具体参数如下表所示&#xff1a; 参数名称 参数特性 测温范围 -55~125℃ 测量精度 在-10~85℃范围内的误差为0.5℃ 分辨率 9~12位数字信号&#xff0c;分辨率分别为0.5℃、0.25℃、0.125℃和0.0625℃ 通信方式 …

vector快慢指针+例题详解

1.快慢指针 例题 给定一个链表&#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从…

C++--------效率和表示

C 效率和表示 效率 时间效率&#xff1a;在 C 中&#xff0c;不同的数据结构和算法有着各异的时间复杂度。例如&#xff0c;访问数组元素的时间复杂度是 O ( 1 ) O(1) O(1)&#xff0c;而遍历链表查找元素的时间复杂度最坏情况下是 O ( n ) O(n) O(n)。选择合适的算法与数据…

【Mac】终端改色-让用户名和主机名有颜色

效果图 配置zsh 1.打开终端&#xff0c;进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…

模拟——郑益慧_笔记1_绪论

B站视频链接 模电是数电的基础&#xff1b;参考书&#xff1a; 模拟电子技术基础&#xff08;第四版&#xff09;华成英、童诗白主编&#xff0c;高等教育出版社&#xff1b;电子技术基础 模拟部分 康华光主编&#xff0c;高等教育出版社&#xff1b; 电子技术的发展史 电子…

YOLOv11模型改进-模块-引入多尺度大核注意力Multi-scale Large Kernel Attention

MLKA 的提出源于图像超分辨率任务的挑战性&#xff0c;该任务需重建低质量图像缺失的高频信息&#xff0c;但因 LR 与 HR 图像对应关系复杂&#xff0c;寻找像素相关性困难。此前模型扩展容量的方法增加了训练负担和数据收集成本&#xff0c;而采用的注意力机制无法同时获取局部…

【gym】给定的强化学习环境简介(二)

文章目录 环境介绍一 box2dbipedal_walkercar_dynamicscar_racinglunar_lander 二、 classic_controlacrobotCartPolecontinuous_mountain_carmountain_carpendulum 三、toy_textblackjackcliffwalkingfrozentaxi 四、mujocoAnt&#xff1a;HalfCheetah&#xff1a;Hopper&…

基于支付宝百宝箱构建自己的Agent的基本简易流程(Datawhale AI冬令营)

一&#xff0c;使用支付宝百宝箱 官网地址&#xff1a;百宝箱 (alipay.com) 二&#xff0c;应用构建 点击左上角的新建应用 然后按自己的需求选择对应的模块 以下是我的示例 点击确认之后&#xff0c;进入模型设置界面 按需设计便可以&#xff0c;以下是我的设计 当你写好…

攻防世界 - Web - Level 1 unseping

关注这个靶场的其它相关笔记&#xff1a;攻防世界&#xff08;XCTF&#xff09; —— 靶场笔记合集-CSDN博客 0x01&#xff1a;Write UP 本关是一个 PHP 代码审计关卡&#xff0c;考察的是 PHP 反序列化漏洞以及命令执行的一些绕过手段&#xff0c;下面笔者将带你一步步过关。…

Java进阶学习笔记|面向对象

第一章.类和对象 1.面向对象的介绍 1.面向过程:自己的事情自己干,代表语言C语言洗衣服:每一步自己要亲力亲为 -> 找个盆,放点水,找个搓衣板,搓搓搓 2.面向对象:自己的事情别人帮忙去干,代表语言Java语言 洗衣服:自己的事情别人干 -> 全自动洗衣机3.为啥要使用面向对…

前端性能优化之大文件上传

大文件上传是前端开发中常见的需求之一&#xff0c;特别是在需要处理较大的Excel表格数据、高清图片、视频或其他大型文件时。优化大文件上传不仅可以提升用户体验&#xff0c;还能有效减轻服务器负担。本文将深入探讨大文件上传的几种常见优化技术&#xff0c;包括文件切片与并…

数据结构之线性表之顺序表

定义&#xff1a; 由n&#xff08;n>0&#xff09;个数据特性相同的元素构成的有限序列称为线性表 简单来说n个相同数据类型的数据组wsw合在一起的这么一个集合就是一个线性表 线性表包括顺序表和链表 1. 顺序表&#xff08;我们所有的代码实现都用函数来封装&#xff09…

Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的

文章目录 一、前言二、主要内容三、小结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 在早期的计算机科学中&#xff0c;数组索引从 1 开始是很常见的。例如&#xff0c;Fortran 和 Pascal 等编程语言也采用了从 1 开始的索引。 这种索引…

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…

瑞吉外卖项目学习笔记(八)修改菜品信息、批量启售/停售菜品

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现 瑞吉外卖项目学习笔记(三)过滤器实现登录校验、添加员工、分页查询员工信息 瑞吉外卖项目学习笔记(四)TableField(fill FieldFill.INSERT)公共字…

C++小碗菜之五:关键字static

“一个人的命运啊&#xff0c;当然要靠自我奋斗&#xff0c;但也要考虑到历史的行程。” ——2009年4月23日在视察中国联合工程公司时的讲话 目录 ​编辑 前言 static在局部作用域中的作用 给出例子&#xff1a; 修改上面给出的例子&#xff1a; 为什么不使用全局变量…