NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character

拼写纠正系列

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/2406.16536v2

源码地址:https://github.com/ktlktl/c-llm

摘要

中文拼写检查(CSC)旨在检测和纠正句子中的拼写错误。尽管大语言模型(LLMs)展现了强大的能力,并广泛应用于各种任务,但它们在CSC任务上的表现常常不尽如人意。我们发现,LLMs未能满足CSC任务的中文字符级约束,即字符数一致性和语音相似性,这导致了性能瓶颈。进一步分析表明,这个问题源于分词粒度的设置,因为当前的混合字符-词分词方式难以满足这些字符级约束。为了解决这个问题,我们提出了C-LLM,一种基于大语言模型的中文拼写检查方法,能够逐字符学习检查错误。字符级分词使得模型能够学习字符级对齐,有效缓解与字符级约束相关的问题。此外,CSC任务被简化为主要涉及复制和替换的任务。在两个CSC基准数据集上的实验表明,C-LLM比现有方法平均提高了10%的性能。具体来说,它在通用场景下提升了2.1%,在垂直领域场景下有显著的12%的提升,取得了当前的最佳表现。

源代码可以访问 https://github.com/ktlKTL/C-LLM。

1 引言

中文拼写检查(CSC)涉及检测和纠正中文句子中的错误字符,在各类应用中起着重要作用(Gao et al., 2010; Yu and Li, 2014)。尽管大语言模型(LLMs)展现了强大的能力,并日益应用于各种任务(Wang et al., 2023; He and Garner, 2023; Wu et al., 2023a),以往的研究(Li and Shi, 2021)表明,生成模型如LLMs在CSC任务中的表现并不理想。

CSC任务本质上涉及字符级的长度和语音约束。字符级长度约束要求预测句子的字符数与源句子一致。此外,语音约束要求预测字符在语音上与源字符高度相似,因为大约83%的拼写错误与正确字符在语音上相同或相似(Liu et al., 2010)。我们发现,LLMs往往未能满足这些字符级长度和语音相似性的要求,导致CSC任务的表现瓶颈。

以GPT-4为例(Achiam et al., 2023),我们观察到,在少样本提示下,模型生成的句子中有10%没有与源句子匹配字符数。相比之下,BERT风格的模型完全没有这个问题。此外,35%的预测字符与源字符在语音上不相似,且由于非同音字的预测错误约占70%的错误。这些字符长度和语音相似性的问题导致了生成的输出未能满足任务需求,从而导致纠错性能不佳。

我们发现,根本问题在于LLM的分词粒度。当前的混合字符-词分词方式会导致字符到词的映射,这使得LLM难以学习字符级的对齐,通常会生成不符合字符级约束的预测。如图1所示,在混合字符-词分词的情况下,LLM需要推断出多个标记对应单一字符(例如,“胆(bold)”,“大(large)”,“的(of)”->“大 量的(large amount))”),并推断出隐式的字符对齐(例如,“胆(bold)”->“大(large)”)。这些推理过程使得CSC任务变得复杂,因为大多数CSC案例涉及简单的字符复制。例如,正确的字符“量(amount)”是直接从源句子复制过来的。

f1

尽管LLM在各种任务中取得了语义理解的进展,但不清晰的字符对齐仍然会导致错误和过度纠正。因此,建立明确的字符级对齐至关重要。基于这一概念,我们提出了C-LLM,一种基于大语言模型的中文拼写检查方法,它逐字符学习检查错误。我们的动机是进行字符级编码,并建立字符级对齐来训练句子对,从而缓解字符级约束相关问题。如图1所示,该方法确保句子对的标记数保持一致,从而使得LLM更容易学习中文字符之间的语音映射。此外,CSC任务被简化为复制正确字符和替换错误字符的任务,而不涉及复杂的推理。

具体来说,我们构建了字符级分词,确保标记根据单个中文字符进行编码。为了适应新的词汇,我们在大型数据集上进行继续训练。此外,为了使LLM能够学习CSC任务,我们对CSC数据集进行监督微调。在通用数据集CSCD-NS(Hu et al., 2022)和多领域数据集LEMON(Wu et al., 2023b)上的实验表明,C-LLM在通用和垂直领域场景中均超越了现有方法,达到了当前的最佳表现。

本文的贡献可以总结为三个方面:

(1)我们发现混合字符-词分词妨碍了LLM有效理解CSC中的字符级约束。

(2)我们提出了C-LLM,该方法逐字符学习并能够检查错误。

(3)通过在通用和多领域数据集上的测试,我们发现C-LLM取得了当前最佳表现,为未来的错误纠正模型设计提供了见解。

2 相关工作

BERT风格的CSC模型

随着预训练语言模型的兴起,中文拼写检查(CSC)的主流方法转向了BERT风格的模型(Devlin et al., 2019),这些模型将CSC视为序列标注任务。

这些模型将句子中的每个字符映射到其正确的对应字符,并在源句子和参考句子的对上进行微调。

此外,一些研究还集成了语音学和形态学知识,以提高标注过程的效果(Cheng et al., 2020; Guo et al., 2021; Huang et al., 2021; Zhang et al., 2021)。然而,由于参数限制,这些模型在低频和复杂语义场景中的表现不如大语言模型(LLMs)。

自回归CSC模型

与BERT风格的模型可以并行推断每个标记不同,自回归CSC模型是按顺序处理标记的。

以往的研究(Li and Shi, 2021)表明,自回归模型如GPT-2(Radford et al., 2019)在CSC任务上可能表现不佳。

随着LLMs的进步,已有若干研究探讨了它们在文本修正方面的能力。

研究(Li et al., 2023b)发现,尽管ChatGPT知道中文字符的语音,但它无法理解如何发音,这使得语音错误修正变得困难。

其他研究(Fang et al., 2023; Wu et al., 2023a)指出,ChatGPT往往能够生成流畅的修正,但也会引入更多的过度修正。

这些发现与我们的观察一致,强调了提升LLMs在CSC任务中的表现的必要性。

结论

本文表明,现有的大型语言模型(LLMs)未能满足中文拼写纠错任务(CSC)的字符级约束条件,具体表现为字符长度一致性和语音相似性,这严重影响了它们的纠错性能。

我们发现,这一问题的根本原因在于标记化粒度的设置,当前模型将字符和词语混合处理,难以有效满足字符级约束。

为了解决这一问题,我们提出了 C-LLM,该模型建立了中文字符之间的映射关系,使模型能够学习字符之间的纠错关系和语音相似性。

通过这种方法,CSC 任务被简化为字符复制和替换问题。

实验结果表明,C-LLM 在通用基准和多领域基准上都优于以往的方法,并且达到了最先进的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关,除了反向代理后端服务外,还可对接口进行预处理。 比如本文提及的一个小功能,根据http header某个字段的值,等于多少的时候,返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…

Linux:进程概念

1.冯诺依曼体系结构 结论: --- CPU不和外设直接打交道,和内存直接打交道。 --- 所有的外设,有数据需要收入,只能载入到内存中;内存写出,也一定是写道外设中。 --- 为什么程序要运行必须加载到内存&#xf…

结构体(初阶)

结构体: 结构体类型的声明 结构体初始化 结构成员访问 结构体传参 1.结构体的声明 1.1结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag { member - list; }variable-lis…

设计模式的主要分类是什么?请简要介绍每个分类的特点。

大家好,我是锋哥。今天分享关于【设计模式的主要分类是什么?请简要介绍每个分类的特点。】面试题。希望对大家有帮助; 设计模式的主要分类是什么?请简要介绍每个分类的特点。 1000道 互联网大厂Java工程师 精选面试题-Java资源分…

显示 Windows 任务栏

显示 Windows 任务栏 1. 取消勾选自动隐藏任务栏2. 重启 Windows 资源管理器References 1. 取消勾选自动隐藏任务栏 Windows 任务栏具有自动隐藏功能,不使用时自动隐藏,使用时显示。 鼠标右键单击桌面上的空白区域,个性化 -> 任务栏。不…

c# RSA加解密工具,.netRSA加解密工具

软件介绍 名称: c# RSA加解密工具,.netRSA加解密工具依赖.net版本: .net 8.0工具类型: WinForm源码下载 c# RSA加解密工具,.netRSA加解密工具 依赖项 WinFormsRSA.csproj <Project

STM32-笔记17-PWM波型

一、介绍 PWM波形&#xff08;Pulse Width Modulation&#xff0c;脉冲宽度调制波形&#xff09;是一种占空比可变的脉冲波形。这种调制方式通过改变脉冲的宽度来控制电路中的信号强度和频率。具体来说&#xff0c;PWM波形中的高电平持续时间和低电平持续时间可以根据需要进行调…

【java面向对象编程】第九弹----抽象类、接口、内部类

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 一、抽象类 1.1基本介绍 &…

重温设计模式--迭代器模式

文章目录 迭代器模式&#xff08;Iterator Pattern&#xff09;概述迭代器模式的结构迭代器模式UML图C 代码示例应用场景 迭代器模式&#xff08;Iterator Pattern&#xff09;概述 定义&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问一个…

普通人怎么入门学习并使用AI?

前言 作为普通人看着AI一天一天变革&#xff0c;心急如焚&#xff0c;未来但是就是不知道怎么才算真正进入了AI&#xff0c;使用AI....作为从头至尾追随AI脚步的码农有几点小建议~ 一、&#x1f4bb;使用 AI 网站或软件&#xff0c;解决实际问题 不管用哪种AI&#xff0c;先用…

【Compose multiplatform教程08】【组件】Text组件

查看全部组件https://blog.csdn.net/b275518834/article/details/144751353 Text 功能说明&#xff1a;用于在界面上显示文本内容&#xff0c;支持设置字体、大小、颜色、样式&#xff08;如加粗、斜体、下划线&#xff09;等属性&#xff0c;满足不同的文本展示需求&#xf…

贪心算法(常见贪心模型)

常见贪心模型 简单排序模型 最小化战斗力差距 题目分析&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…

如何通过 360 驱动大师检查自己电脑上的显卡信息

在深入探讨如何查看显卡信息之前&#xff0c;首先需要了解显卡的基本概念。显卡&#xff08;Graphics Processing Unit, GPU&#xff09;&#xff0c;是计算机中负责处理图形输出到显示器的重要硬件。根据其集成度和性能&#xff0c;显卡通常被分为两类&#xff1a; 集成显卡&…

解线性方程组

直接三角分解&#xff08;LU分解&#xff0c;Doolittle分解&#xff09; ATM分解&#xff08;追赶法&#xff0c;Crout分解&#xff0c;克劳特分解&#xff09; 平方根法&#xff08;Cholesky分解&#xff0c;乔列斯基分解&#xff09; 矩阵的范数

实现点击表格中的邀请码并复制到剪贴板的功能

文章目录 实现步骤修改代码1. 添加复制邀请码的处理函数2. 在表格列中添加点击事件3. 添加样式完整的 invite-code-list.vue 文件 要实现点击表格中的邀请码并复制到剪贴板的功能&#xff0c;可以使用 JavaScript 的 Clipboard API。以下是如何在你的 invite-code-list.vue 文…

clickhouse解决suspiciously many的异常

1. 问题背景 clickhouse安装在虚拟机上&#xff0c;持续写入日志时&#xff0c;突然关机&#xff0c;然后重启&#xff0c;会出现clickhouse可以正常启动&#xff0c;但是查询sql语句&#xff0c;提示suspiciously many异常&#xff0c;如图所示 2. 问题修复 touch /data/cl…

本原多项式

将 G F ( p ) GF(p) GF(p)延伸为有 p m p^m pm个元素的域&#xff0c;称之为 G F ( p ) GF(p) GF(p)的扩域&#xff0c;表示为 G F ( p m ) GF(p^m) GF(pm). G F ( p ) GF(p) GF(p)是 G F ( p m ) GF(p^m) GF(pm)的子集。 G F ( p m ) GF(p^m) GF(pm)元素个数为 p m p^m pm。 …

编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法

在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法&#xff1a; yum install perl-Test-Simple

Milvus×EasyAi:如何用java从零搭建人脸识别应用

如何从零搭建一个人脸识别应用&#xff1f;不妨试试原生Java人工智能算法&#xff1a;EasyAi Milvus 的组合拳。 本文将使用到的软件和工具包括&#xff1a; EasyAi&#xff1a;人脸特征向量提取Milvus&#xff1a;向量数据库用于高效存储和检索数据。 01. EasyAi&#xff1a;…

7.C语言 宏(Macro) 宏定义,宏函数

目录 宏定义 宏函数 1.注释事项 2.注意事项 宏(Macro)用法 常量定义 简单函数实现 类型检查 条件编译 宏函数计算参数个数 宏定义进行类型转换 宏定义进行位操作 宏定义进行断言 总结 宏定义 #include "stdio.h" #include "string.h" #incl…