最近在梳理中文文本纠错任务,文本根据搜集到的文章整理成的任务简介,在此先感谢大佬们分享的高质量资料。
中文文本纠错是针对中文文本拼写错误进行检测与纠正的一项工作,中文的文本纠错,应用场景很多,诸如输入法纠错、输入预测、ASR 后纠错等等,例如:
写作辅助:在内容写作平台上内嵌纠错模块,可在作者写作时自动检查并提示错别字情况。从而降低因疏忽导致的错误表述,有效提升作者的文章写作质量,同时给用户更好的阅读体验。
公文纠错:针对公文写作场景,提供字词、标点、专名、数值内容纠错,包含领导人姓名、领导人职位、数值一致性等内容的检查与纠错,辅助进行公文审阅校对。
搜索纠错:用户在搜索时经常输入错误,通过分析搜索query的形式和特征,可自动纠正搜索query并提示用户,进而给出更符合用户需求的搜索结果,有效屏蔽错别字对用户真实需求的影响。
语音识别对话纠错
将文本纠错嵌入对话系统中,可自动修正语音识别转文本过程中的错别字,向对话理解系统传递纠错后的正确query,能明显提高语音识别准确率,使产品整体体验更佳
图片来源—百度大脑AI开放平台-文本纠错:https://ai.baidu.com/tech/nlp_apply/text_corrector
错误类型 | 示例 |
---|---|
同音字相似错误 | 强烈推荐-墙裂推荐、配副眼睛-配副眼镜 |
近音字相似错误 | 牛郎织女-流浪织女 |
字形相似错误 | 顽强拼搏-顽强拼博 |
词序混乱 | 两户人家-两家人户 |
缺字少字 | 浩瀚星海-浩瀚星 |
中文全拼拼写 | 天下-tianxia |
中文首字母缩写 | 北京-bj |
中文简拼 | 明星大侦探-明侦 |
语法错误 | 无法言说-言说无法 |
我们把中文常见错误总结分为三类:
1、用词错误,由于输入法等原因导致的选词错误,其主要表现为音近,形近等;
2、文法/句法错误,该类错误主要是由于对语言不熟悉导致的如多字、少字、乱序等错误,其错误片段相对较大;
3、知识类错误,该类错误可能由于对某些知识不熟悉导致的错误,要解决该类问题,通常得引入外部知识、常识等。
当然,针对确定场景,这些问题并不一定全部存在,比如输入法中需要处理1234,搜索引擎需要处理1234567,ASR 后文本纠错只需要处理12,其中5主要针对五笔或者笔画手写输入等。
中文本纠错的 paper 很多,整体来看,可以统一在一个框架下,即三大步:
该阶段主要目的在于,判断文本是否存在错误需要纠正,如果存在则传递到后面两层。这一阶段可以提高整体流程的效率。
错误识别/检测的目标是识别输入句子可能存在的问题,采用序列表示(Transformer/LSTM)+CRF的序列预测模型,这个模型的创新点主要包括:
1、词法/句法分析等语言先验知识的充分应用;
2、特征设计方面,除了DNN相关这种泛化能力比较强的特征,还结合了大量hard统计特征,既充分利用DNN模型的泛化能力,又对低频与OOV(Out of Vocabulary)有一定的区分;
3、最后,根据字粒度和词粒度各自的特点,在模型中对其进行融合,解决词对齐的问题
候选召回指的是,识别出具体的错误点之后,需要进行错误纠正,为了达到更好的效果以及性能,需要结合历史错误行为,以及音形等特征召回纠错候选。主要可分为两部分工作:离线的候选挖掘,在线的候选预排序。离线候选挖掘利用大规模多来源的错误对齐语料,通过对其模型,得到不同粒度的错误混淆矩阵。在线候选预排序主要是针对当前的错误点,对离线召回的大量纠错候选,结合语言模型以及错误混淆矩阵的特征,控制进入纠错排序阶段的候选集数量与质量。
该阶段主要目的在于,利用一种或多种策略(规则或模型),生成针对原句的纠正候选。这一阶段是整体流程召回率的保证,同时也是一个模型的上限。
该阶段主要目的在于,在上一阶段基础上,利用某种评分函数或分类器,结合局部乃至全局的特征,针对纠正候选进行排序,最终排序最高(如没有错误识别阶段,则仍需比原句评分更高或评分比值高过阈值,否则认为不需纠错)的纠正候选作为最终纠错结果。
SIGHAN Bake-off 2013: [http://ir.itc.ntnu.edu.tw/lre/sighan7csc.html](http://ir.itc.ntnu.edu.tw/lre/sighan7csc.html)
SIGHAN Bake-off 2014 : [http://ir.itc.ntnu.edu.tw/lre/clp14csc.html](http://ir.itc.ntnu.edu.tw/lre/clp14csc.html)
SIGHAN Bake-off 2015 : [http://ir.itc.ntnu.edu.tw/lre/sighan8csc.html](http://ir.itc.ntnu.edu.tw/lre/sighan8csc.html)
中文输入纠错的评测数据主要包括SIGHAN Bake-off 2013/2014/2015这三个数据集,均是针对繁体字进行的纠错。其中,只有SIGHAN Bake-off 2013是针对母语使用者的,而另外两个是针对非母语使用者。
这里主要罗列一下常用的评测指标。在错误识别子任务中,常用的评测指标有:
FAR(错误识别率):没有笔误却被识别为有笔误的句子数/没有笔误的句子总数
DA(识别精准率):正确识别是否有笔误的句子数(不管有没有笔误)/句子总数
DP(识别准确率):识别有笔误的句子中正确的个数/识别有笔误的句子总数
DR(识别找回率):识别有笔误的句子中正确的个数/有笔误的句子总数
DF1(识别F1值):2 * DP * DR/ (DP + DR)
ELA(错误位置精准率):位置识别正确的句子(不管有没有笔误)/句子总数
ELP(错误位置准确率):正确识别出笔误所在位置的句子/识别有笔误的句子总数
ELR(错误位置召回率):正确识别出笔误所在位置的句子/有笔误的句子总数
ELF1(错误位置准确率):2ELPELR / (ELP+ELR)
在错误纠正任务中,常用的评测指标为:
LA位置精确率:识别出笔误位置的句子/总的句子
CA修改精确率:修改正确的句子/句子总数
CP修改准确率:修改正确的句子/修改过的句子
虽然文本纠错具体会分为错误识别和错误修正两部分,并分别构造评价指标。但考虑到端到端任务,我们评价完整的纠错过程:
整理来自:https://blog.csdn.net/qq_36426650/article/details/122807019
在OpenReview上提交至ARR2022的相关稿件有:
简单总结一下目前CSC的方法:
基于BERT:以为CSC时是基于token(字符)级别的预测任务,输入输出序列长度一致,因此非常类似预训练语言模型的Masked Language Modeling(MLM),因此现如今绝大多数的方法是基于MLM实现的。而在BERT问世前,CSC则以RNN+Decoder、CRF为主;
多模态融合:上文提到CSC涉及到字音字形,因此有一些方法则是考虑如何将Word Embedding、Glyphic Embedding和Phonetic Embedding进行结合,因此涌现出一些多模态方法;
技术方案 FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm
code: https://github.com/iqiyi/FASPell
技术方案 SpellGCN: Incorporating Phonological and Visual Similarities into Language Models for Chinese Spelling Check
code: https://github.com/ACL2020SpellGCN/SpellGCN
技术方案:Spelling Error Correction with Soft-Masked BERT
code: https://github.com/hiyoung123/SoftMaskedBert
技术方案 Spelling Correction as a Foreign Language
https://github.com/shibing624/pycorrector
中文文本纠错工具。支持中文音似、形似、语法错误纠正,python3开发。pycorrector实现了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多种模型的文本纠错,并在SigHAN数据集评估各模型的效果。
https://github.com/ccheng16/correction
大致思路:
https://github.com/PengheLiu/Cn_Speck_Checker
https://github.com/taozhijiang/chinese_correct_wsd
https://github.com/beyondacm/Autochecker4Chinese