pycorrector: useful python text correction toolkit

   日期:2024-12-25    作者:youxico 移动:http://oml01z.riyuangf.com/mobile/quote/15328.html

pycorrector: 中文文本纠错工具。支持中文音似、形似、语法错误纠正,python3.8开发。

pycorrector: useful python text correction toolkit

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
Model Name Model Link Base Model Avg SIGHAN-2015 EC-LAW MCSC GPU QPS Kenlm-CSC shibing624/chinese-kenlm-klm kenlm 0.3409 0.3147 0.3763 0.3317 CPU 9 Mengzi-T5-CSC shibing624/mengzi-t5-base-chinese-correction mengzi-t5-base 0.3984 0.7758 0.3156 0.1039 GPU 214 ERNIE-CSC PaddleNLP/ernie-csc PaddlePaddle/ernie-1.0-base-zh 0.4353 0.8383 0.3357 0.1318 GPU 114 MacBERT-CSC shibing624/macbert4csc-base-chinese hfl/chinese-macbert-base 0.3993 0.8314 0.1610 0.2055 GPU 224 ChatGLM3-6B-CSC shibing624/chatglm3-6b-csc-chinese-lora THUDM/chatglm3-6b 0.4538 0.6572 0.4369 0.2672 GPU 3 Qwen2.5-1.5B-CTC shibing624/chinese-text-correction-1.5b Qwen/Qwen2.5-1.5B-Instruct 0.6802 0.3032 0.7846 0.9529 GPU 6 Qwen2.5-7B-CTC shibing624/chinese-text-correction-7b Qwen/Qwen2.5-7B-Instruct 0.8225 0.4917 0.9798 0.9959 GPU 3

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:

数据集 语料 下载链接 压缩包大小 SIGHAN+Wang271K(27万条) 百度网盘(密码01b9)
shibing624/CSC 106M SIGHAN13 14 15 官方csc.html 339K Wang271K Automatic-Corpus-Generation dimmywang提供 93M 人民日报2014版 飞书(密码cHcu) 383M NLPCC2018-GEC 官方trainingdata 114M nlpcc2018+hsk+CGED 百度网盘(密码m6fg)
飞书(密码gl9y) 215M HSK+Lang8 百度网盘(密码n31j)
飞书(密码Q9LH) 81M Chinese Text Correction(CTC) 中文纠错汇总数据集(天池) - NLPCC 2023 Sharedtask1 Task 1: Chinese Grammatical Error Correction(Training Set) 125M 中文真实场景纠错数据 shibing624/chinese_text_correction 10M

说明:

  • 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格式,然后加载数据训练模型即可。

  1. 已有大量业务相关错误样本,主要标注错误位置(wrong_ids)和纠错后的句子(correct_text)
  2. 没有现成的错误样本,可以写脚本生成错误样本(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的链接和授权协议。

项目代码还很粗糙,如果大家对代码有所改进,欢迎提交回本项目,在提交之前,注意以下两点:

  • 在添加相应的单元测试
  • 使用来运行所有单元测试,确保所有单测都是通过的

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号