pycorrector: 中文文本纠错工具。支持中文音似、形似、语法错误纠正,python3.8开发。
pycorrector实现了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、GPT等多种模型的文本纠错,评估各模型的效果。
Guide
- Features
- Evaluation
- Usage
- Dataset
- Contact
- References
本项目重点解决其中的"音似、形字、语法、专名错误"等类型。
[2024/10/14] v1.1.0版本:新增了基于Qwen2.5的中文文本纠错模型,支持多字、少字、错字、词序、语法等错误纠正,发布了shibing624/chinese-text-correction-1.5b和shibing624/chinese-text-correction-7b模型,及其对应的LoRA模型。详见Release-v1.1.0
[2023/11/07] v1.0.0版本:新增了ChatGLM3/LLaMA2等GPT模型用于中文文本纠错,发布了基于ChatGLM3-6B的shibing624/chatglm3-6b-csc-chinese-lora拼写和语法纠错模型;重写了DeepContext、ConvSeq2Seq、T5等模型的实现。详见Release-v1.0.0
- Kenlm模型:本项目基于Kenlm统计语言模型工具训练了中文NGram语言模型,结合规则方法、混淆集可以纠正中文拼写错误,方法速度快,扩展性强,效果一般
- DeepContext模型:本项目基于PyTorch实现了用于文本纠错的DeepContext模型,该模型结构参考Stanford University的NLC模型,2014英文纠错比赛得第一名,效果一般
- Seq2Seq模型:本项目基于PyTorch实现了用于中文文本纠错的ConvSeq2Seq模型,该模型在NLPCC-2018的中文语法纠错比赛中,使用单模型并取得第三名,可以并行训练,模型收敛快,效果一般
- T5模型:本项目基于PyTorch实现了用于中文文本纠错的T5模型,使用Langboat/mengzi-t5-base的预训练模型finetune中文纠错数据集,模型改造的潜力较大,效果好
- ERNIE_CSC模型:本项目基于PaddlePaddle实现了用于中文文本纠错的ERNIE_CSC模型,模型在ERNIE-1.0上finetune,模型结构适配了中文拼写纠错任务,效果好
- MacBERT模型【推荐】:本项目基于PyTorch实现了用于中文文本纠错的MacBERT4CSC模型,模型加入了错误检测和纠正网络,适配中文拼写纠错任务,效果好
- MuCGECBart模型:本项目基于ModelScope实现了用于文本纠错的Seq2Seq方法的MuCGECBart模型,该模型中文文本纠错效果较好
- NaSGECBart模型: MuCGECBart的同作者模型,无需modelscope依赖,基于中文母语纠错数据集NaSGEC在Bart模型上微调训练得到,效果好
- GPT模型:本项目基于PyTorch实现了用于中文文本纠错的ChatGLM/LLaMA模型,模型在中文CSC和语法纠错数据集上finetune,适配中文文本纠错任务,效果很好
- 延展阅读:中文文本纠错实践和原理解读
-
Official demo:
-
HuggingFace demo:
run example: examples/macbert/gradio_demo.py to see the demo:
评估脚本examples/evaluate_models/evaluate_models.py:
- 评测集:SIGHAN-2015(sighan2015_test.tsv)、
EC-LAW(ec_law_test.tsv)、MCSC(mcsc_test.tsv) - 评估标准:纠错准召率,采用严格句子粒度(Sentence Level)计算方式,把模型纠正之后的与正确句子完成相同的视为正确,否则为错
- 评估指标:F1
- CSC(Chinese Spelling Correction): 拼写纠错模型,表示模型可以处理音似、形似、语法等长度对齐的错误纠正
- CTC(CHinese Text Correction): 文本纠错模型,表示模型支持拼写、语法等长度对齐的错误纠正,还可以处理多字、少字等长度不对齐的错误纠正
- GPU:Tesla V100,显存 32 GB
or
通过以上两种方法的任何一种完成安装都可以。如果不想安装依赖包,可以拉docker环境。
- docker使用
本项目的初衷之一是比对、调研各种中文文本纠错方法,抛砖引玉。
项目实现了kenlm、macbert、seq2seq、 ernie_csc、T5、deepcontext、GPT(Qwen/ChatGLM)等模型应用于文本纠错任务,各模型均可基于已经训练好的纠错模型快速预测,也可使用自有数据训练、预测。
中文拼写纠错
example: examples/kenlm/demo.py
output:
- 类是kenlm统计模型的纠错方法实现,默认会从路径加载kenlm语言模型文件,如果检测没有该文件,
则程序会自动联网下载。当然也可以手动下载模型文件(2.8G)并放置于该位置 - 返回值: 方法返回,{'source': '原句子', 'target': '纠正后的句子', 'errors': [('错误词', '正确词', '错误位置'), ...]},方法返回包含多个的
错误检测
example: examples/kenlm/detect_demo.py
output:
- 返回值:, ,索引位置以0开始。
成语、专名纠错
example: examples/kenlm/use_custom_proper.py
output:
自定义混淆集
通过加载自定义混淆集,支持用户纠正已知的错误,包括两方面功能:1)【提升准确率】误杀加白;2)【提升召回率】补充召回。
example: examples/kenlm/use_custom_confusion.py
output:
- 其中的内容格式如下,以空格间隔:
自定义混淆集类,除了上面演示的和类一起使用,还可以和一起使用,也可以独立使用。示例代码 examples/macbert/model_correction_pipeline_demo.py
自定义语言模型
默认提供下载并使用的kenlm语言模型文件是2.8G,内存小的电脑使用程序可能会吃力些。
支持用户加载自己训练的kenlm语言模型,或使用2014版人民日报数据训练的模型,模型小(140M),准确率稍低,模型下载地址:shibing624/chinese-kenlm-klm | people2014corpus_chars.klm(密码o5e9)。
example:examples/kenlm/load_custom_language_model.py
英文拼写纠错
支持英文单词级别的拼写错误纠正。
example:examples/kenlm/en_correct_demo.py
output:
中文简繁互换
支持中文繁体到简体的转换,和简体到繁体的转换。
example:examples/kenlm/traditional_simplified_chinese_demo.py
output:
命令行模式
支持kenlm方法的批量文本纠错
case:
- 输入文件:;输出文件:;关闭字粒度纠错;打印详细纠错信息;纠错结果以间隔
基于MacBERT改变网络结构的中文拼写纠错模型,模型已经开源在HuggingFace Models:
模型网络结构:
- 本项目是 MacBERT 改变网络结构的中文文本纠错模型,可支持 BERT 类模型为 backbone
- 在原生 BERT 模型上进行了魔改,追加了一个全连接层作为错误检测即 detection ,
MacBERT4CSC 训练时用 detection 层和 correction 层的 loss 加权得到最终的 loss,预测时用 BERT MLM 的 correction 权重即可
详细教程参考examples/macbert/README.md
pycorrector快速预测
example:examples/macbert/demo.py
output:
transformers快速预测
见examples/macbert/README.md
基于T5的中文拼写纠错模型,模型训练详细教程参考examples/t5/README.md
pycorrector快速预测
example:examples/t5/demo.py
output:
基于ChatGLM3、Qwen2.5等模型微调训练纠错模型,训练方法见examples/gpt/README.md
pycorrector快速预测
example: examples/gpt/demo.py
output:
pycorrector快速预测
example:examples/ernie_csc/demo.py
output:
基于SIGHAN+Wang271K中文纠错数据集训练的Bart4CSC模型,已经release到HuggingFace Models:
output:
如果需要训练Bart模型,请参考
模型在第一次运行时,会自动下载到"~/.cache/modelscope/hub/"子目录。
注意该模型在python=3.8.19环境下通过测试,其它依赖包版本可能会有问题。
安装依赖
使用示例
output:
shibing624/CSC
飞书(密码gl9y)
飞书(密码Q9LH)
说明:
- SIGHAN+Wang271K中文纠错数据集(27万条),是通过原始SIGHAN13、14、15年数据集和Wang271K数据集格式转化后得到,json格式,带错误字符位置信息,SIGHAN为test.json,
macbert4csc模型训练可以直接用该数据集复现paper准召结果,详见pycorrector/macbert/README.md。 - NLPCC 2018 GEC官方数据集NLPCC2018-GEC,
训练集trainingdata[解压后114.5MB],该数据格式是原始文本,未做切词处理。 - 汉语水平考试(HSK)和lang8原始平行语料[HSK+Lang8]百度网盘(密码n31j),该数据集已经切词,可用作数据扩增。
- NLPCC 2018 + HSK + CGED16、17、18的数据,经过以字切分,繁体转简体,打乱数据顺序的预处理后,生成用于纠错的熟语料(nlpcc2018+hsk)
,百度网盘(密码:m6fg) [130万对句子,215MB]
SIGHAN+Wang271K中文纠错数据集,数据格式:
字段解释:
- id:唯一标识符,无意义
- original_text: 原始错误文本
- wrong_ids: 错误字的位置,从0开始
- correct_text: 纠正后的文本
自有数据集
可以使用自己数据集训练纠错模型,把自己数据集标注好,保存为跟训练样本集一样的json格式,然后加载数据训练模型即可。
- 已有大量业务相关错误样本,主要标注错误位置(wrong_ids)和纠错后的句子(correct_text)
- 没有现成的错误样本,可以写脚本生成错误样本(original_text),根据音似、形似等特征把正确句子的指定位置(wrong_ids)字符改为错字,附上
第三方同音字生成脚本同音词替换
什么是语言模型?-wiki
语言模型对于纠错步骤至关重要,当前默认使用的是从千兆中文文本训练的中文语言模型zh_giga.no_cna_cmn.prune01244.klm(2.8G),
提供人民日报2014版语料训练得到的轻量版语言模型people2014corpus_chars.klm(密码o5e9)。
APA:
BibTeX:
pycorrector 的授权协议为 Apache License 2.0,可免费用做商业用途。请在产品说明中附加pycorrector的链接和授权协议。
项目代码还很粗糙,如果大家对代码有所改进,欢迎提交回本项目,在提交之前,注意以下两点:
- 在添加相应的单元测试
- 使用来运行所有单元测试,确保所有单测都是通过的