中文文本纠错工具推荐:pycorrector

pycorrector

https://github.com/shibing624/pycorrector

中文文本纠错工具。音似、形似错字(或变体字)纠正,可用于中文拼音、笔画输入法的错误纠正。python3开发。

Guide

  • Question

  • Solution

  • Feature

  • Evaluate

  • Install

  • Usage

  • Deep Model Usage

  • Dataset

  • Custom Language Model

  • Reference

Question

中文文本纠错任务,常见错误类型包括:

  • 谐音字词,如 配副眼睛-配副眼镜
  • 混淆音字词,如 流浪织女-牛郎织女
  • 字词顺序颠倒,如 伍迪艾伦-艾伦伍迪
  • 字词补全,如 爱有天意-假如爱有天意
  • 形似字错误,如 高梁-高粱
  • 中文拼音全拼,如 xingfu-幸福
  • 中文拼音缩写,如 sz-深圳
  • 语法错误,如 想象难以-难以想象

当然,针对不同业务场景,这些问题并不一定全部存在,比如输入法中需要处理前四种,搜索引擎需要处理所有类型,语音识别后文本纠错只需要处理前两种,
其中’形似字错误’主要针对五笔或者笔画手写输入等。本项目重点解决其中的谐音、混淆音、形似字错误、中文拼音全拼、语法错误带来的纠错任务。

Solution

规则的解决思路

  1. 中文纠错分为两步走,第一步是错误检测,第二步是错误纠正;
  2. 错误检测部分先通过结巴中文分词器切词,由于句子中含有错别字,所以切词结果往往会有切分错误的情况,这样从字粒度和词粒度两方面检测错误,
    整合这两种粒度的疑似错误结果,形成疑似错误位置候选集;
  3. 错误纠正部分,是遍历所有的疑似错误位置,并使用音似、形似词典替换错误位置的词,然后通过语言模型计算句子困惑度,对所有候选集结果比较并排序,得到最优纠正词。

PS: 友源码解读

深度模型的解决思路

  1. 端到端的深度模型可以避免人工提取特征,减少人工工作量,RNN序列模型对文本任务拟合能力强,rnn_attention在英文文本纠错比赛中取得第一名成绩,证明应用效果不错;
  2. CRF会计算全局最优输出节点的条件概率,对句子中特定错误类型的检测,会根据整句话判定该错误,阿里参赛2016中文语法纠错任务并取得第一名,证明应用效果不错;
  3. Seq2Seq模型是使用Encoder-Decoder结构解决序列转换问题,目前在序列转换任务中(如机器翻译、对话生成、文本摘要、图像描述)使用最广泛、效果最好的模型之一;
  4. BERT/ELECTRA/ERNIE/MacBERT等预训练模型强大的语言表征能力,对NLP届带来翻天覆地的改变,海量的训练数据拟合的语言模型效果无与伦比,基于其MASK掩码的特征,可以简单改造预训练模型用于纠错,加上fine-tune,效果轻松达到最优。

Feature

模型

  • kenlm:kenlm统计语言模型工具,规则方法,语言模型纠错,利用混淆集,扩展性强
  • deep_context模型:参考Stanford University的nlc模型,该模型是参加2014英文文本纠错比赛并取得第一名的方法
  • Seq2Seq模型:在Seq2Seq模型加上attention机制,对于长文本效果更好,模型更容易收敛,但容易过拟合
  • ConvSeq2Seq模型:基于Facebook出品的fairseq,北京语言大学团队改进ConvS2S模型用于中文纠错,在NLPCC-2018的中文语法纠错比赛中,是唯一使用单模型并取得第三名的成绩
  • transformer模型:全attention的结构代替了lstm用于解决sequence to sequence问题,语义特征提取效果更好
  • BERT模型:中文fine-tuned模型,使用MASK特征纠正错字
  • ELECTRA模型:斯坦福和谷歌联合提出的一种更具效率的预训练模型,学习文本上下文表示优于同等计算资源的BERT和XLNet
  • ERNIE模型:百度公司提出的基于知识增强的语义表示模型,有可适配中文的强大语义表征能力。在情感分析、文本匹配、自然语言推理、词法分析、阅读理解、智能问答等16个公开数据集上超越世界领先技术
  • MacBERT模型:来自哈工大SCIR实验室2020年的工作,改进了BERT模型的训练方法,使用全词掩蔽和N-Gram掩蔽策略适配中文表达,和通过用其相似的单词来掩盖单词,从而缩小训练前和微调阶段之间的差距

错误检测

  • 字粒度:语言模型困惑度(ppl)检测某字的似然概率值低于句子文本平均值,则判定该字是疑似错别字的概率大。
  • 词粒度:切词后不在词典中的词是疑似错词的概率大。

错误纠正

  • 通过错误检测定位所有疑似错误后,取所有疑似错字的音似、形似候选词,
  • 使用候选词替换,基于语言模型得到类似翻译模型的候选排序结果,得到最优纠正词。

思考

  1. 现在的处理手段,在词粒度的错误召回还不错,但错误纠正的准确率还有待提高,更多优质的纠错集及纠错词库会有提升,我更希望算法上有更大的突破。
  2. 另外,现在的文本错误不再局限于字词粒度上的拼写错误,需要提高中文语法错误检测(CGED, Chinese Grammar Error Diagnosis)及纠正能力,列在TODO中,后续调研。

Demo

http://42.193.145.218/product/corrector/

Evaluate

查看评估结论

提供评估脚本pycorrector/utils/eval.py和评估执行脚本examples/evaluate_models.py,该脚本有两个功能:

  • 构建评估样本集:评估集pycorrector/data/eval_corpus.json, 包括字粒度错误100条、词粒度错误100条、语法错误100条,正确句子200条。用户可以修改条数生成其他评估样本分布。
  • 计算两个数据集的纠错准召率:采用保守计算方式,简单把纠错之后与正确句子完成匹配的视为正确,否则为错。

测试环境:

  • 机器:linux(centos7) 线上机
  • CPU:28核 IntelXeonGold 5117 CPU @ 2.00GHz
  • GPU:Tesla P40,显存 22919 MiB(22 GB)
  • 内存:251 GB
数据集 模型 cpu/gpu 准确率 召回率 每百条预测时长(秒) QPS
sighan_15 rule cpu 17.98% 15.37% 11 9
sighan_15 bert gpu 37.62% 36.46% 95 1.05
sighan_15 ernie gpu 29.70% 28.13% 102 0.98
sighan_15 macbert gpu 63.64% 63.64% 2 50
corpus500 rule cpu 48.60% 28.13% 11 9
corpus500 bert gpu 58.60% 35.00% 95 1.05
corpus500 ernie gpu 59.80% 41.33% 102 0.98
corpus500 macbert gpu 56.20% 42.67% 2 50

Install

  • 全自动安装:pip install pycorrector
  • 半自动安装:

通过以上两种方法的任何一种完成安装都可以。如果不想安装依赖包,直接使用docker拉取安装好的部署环境即可。

安装依赖

  • docker使用

后续调用python3使用即可,该镜像已经安装好kenlm、pycorrector等包,具体参见Dockerfile。

使用示例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ngSbsRv-1636205742536)(docs/git_image/docker.png)]

  • kenlm安装

安装kenlm-wiki

  • 其他库包安装

Usage

  • 文本纠错

示例base_demo.py

output:

规则方法默认会从路径加载kenlm语言模型文件,如果检测没有该文件,则程序会自动联 下载。当然也可以手动下载模型文件(2.8G)并放置于该位置。

查看更多使用说明

  • 错误检测

示例detect_demo.py

output:

返回类型是, ,索引位置以0开始。

  • 关闭字粒度纠错

示例disable_char_error.py

output:

上例中发生误纠,如下代码关闭字粒度纠错:

output:

默认字粒度、词粒度的纠错都打开,一般情况下单字错误发生较少,而且字粒度纠错准确率较低。关闭字粒度纠错,这样可以提高纠错准确率,提高纠错速度。

默认方法的参数为,即打开错字纠正,这种方式可以召回字粒度错误,但是整体准确率会低;

如果追求准确率而不追求召回率的话,建议将设为,仅使用错词纠正。

  • 加载自定义混淆集

通过加载自定义混淆集,支持用户纠正已知的错误,包括两方面功能:1)错误补召回;2)误杀加白。

示例use_custom_confusion.py

output:

具体demo见example/use_custom_confusion.py,其中的内容格式如下,以空格间隔:

方法的参数为用户自定义混淆集文件路径。

  • 加载自定义语言模型

默认提供下载并使用的kenlm语言模型文件是2.8G,内存较小的电脑使用程序可能会吃力些。

支持用户加载自己训练的kenlm语言模型,或使用2014版人民日 数据训练的模型,模型小(140M),准确率低些。

示例load_custom_language_model.py,其中people2014corpus_chars.klm(密码o5e9)是自定义语言模型文件。

output:

  • 英文拼写纠错

支持英文单词的拼写错误纠正。

示例en_correct_demo.py

output:

  • 中文简繁互换

支持中文繁体到简体的转换,和简体到繁体的转换。

示例traditional_simplified_chinese_demo.py

output:

  • 命令行模式

支持批量文本纠错

case:

输入文件:;输出文件:;关闭字粒度纠错;打印详细纠错信息;纠错结果以间隔

Deep Model Usage

安装依赖

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年10月4日
下一篇 2021年10月4日

相关推荐