1. 核心模块解析
项目代码结构清晰,核心模块位于 pycorrector
目录下:
1.1 纠错模型实现
统计模型 (KenLM)
代码路径:
pycorrector/corrector.py
→Corrector
类功能:基于 N-Gram 语言模型 + 混淆集进行纠错
关键方法:
detect()
: 错误检测correct()
: 错误纠正依赖文件:
zh_giga.no_cna_cmn.prune01244.klm
(默认语言模型)
基于规则的语言纠错模型
依据语言模型检测错别字位置,通过拼音音似特征、笔画五笔编辑距离特征及语言模型困惑度特征纠正错别字。
1. 中文纠错分为两步走,第一步是错误检测,第二步是错误纠正;
2. 错误检测部分先通过结巴中文分词器切词,由于句子中含有错别字,所以切词结果往往会有切分错误的情况,这样从字粒度和词粒度两方面检测错误, 整合这两种粒度的疑似错误结果,形成疑似错误位置候选集;
3. 错误纠正部分,是遍历所有的疑似错误位置,并使用音似、形似词典替换错误位置的词,然后通过语言模型计算句子困惑度,对所有候选集结果比较并排序,得到最优纠正词。
深度学习模型 (MacBERT/T5/GPT等)
代码路径:
pycorrector/macbert/
,pycorrector/t5/
,pycorrector/gpt/
示例:
MacBERT →
pycorrector/macbert/macbert_corrector.py
→MacBertCorrector
类T5 →
pycorrector/t5/t5_corrector.py
→T5Corrector
类GPT →
pycorrector/gpt/gpt_corrector.py
→GptCorrector
类
功能:调用预训练模型进行端到端纠错
基于深度学习的语言纠错模型
1. 端到端的深度模型可以避免人工提取特征,减少人工工作量,RNN序列模型对文本任务拟合能力强,RNN Attn在英文文本纠错比赛中取得第一名成绩,证明应用效果不错;
2. CRF会计算全局最优输出节点的条件概率,对句子中特定错误类型的检测,会根据整句话判定该错误,阿里参赛2016中文语法纠错任务并取得第一名,证明应用效果不错;
3. Seq2Seq模型是使用Encoder-Decoder结构解决序列转换问题,目前在序列转换任务中(如机器翻译、对话生成、文本摘要、图像描述)使用最广泛、效果最好的模型之一;
4. BERT/ELECTRA/ERNIE/MacBERT等预训练模型强大的语言表征能力,对NLP届带来翻天覆地的改变,海量的训练数据拟合的语言模型效果无与伦比,基于其MASK掩码的特征,可以简单改造预训练模型用于纠错,加上fine-tune,效果轻松达到最优。
1.2 工具模块
文本处理工具
代码路径:
pycorrector/utils/text_utils.py
功能:简繁转换、同音字替换、形似字生成等
关键函数:
traditional2simplified()
: 繁体转简体get_homophones_by_char()
: 生成同音字
评估模块
代码路径:
pycorrector/utils/evaluation.py
功能:计算纠错准确率、召回率、F1值
2. 关键代码示例
2.1 KenLM 纠错调用
from pycorrector import Corrector
corrector = Corrector()
result = corrector.correct("少先队员因该为老人让坐")
print(result)
输出:
{ "source": "少先队员因该为老人让坐", "target": "少先队员应该为老人让座", "errors": [("因该", "应该", 4), ("坐", "座", 10)] }
2.2 MacBERT 纠错调用
from pycorrector import MacBertCorrector
corrector = MacBertCorrector("shibing624/macbert4csc-base-chinese")
result = corrector.correct("今天新情很好")
print(result)
输出:
{ "source": "今天新情很好", "target": "今天心情很好", "errors": [("新", "心", 2)] }
3. 训练代码指引
3.1 MacBERT 模型训练
代码路径:
examples/macbert/train.py
关键步骤:
加载预训练模型
hfl/chinese-macbert-base
在纠错数据集(如 SIGHAN+Wang271K)上微调
保存模型至
output/macbert4csc
3.2 T5 模型训练
代码路径:
examples/t5/train.py
关键配置:
model = T5ForConditionalGeneration.from_pretrained("Langboat/mengzi-t5-base") trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset )
4. 数据集处理
数据加载:
代码路径:
pycorrector/data_reader.py
支持格式: JSON(需包含
original_text
、wrong_ids
、correct_text
字段)
自定义数据集示例:
[ { "id": "example_1", "original_text": "这是一个测试句子。", "wrong_ids": [3], "correct_text": "这是一个测试样例。" } ]
5. 扩展与二次开发
5.1 添加新模型
在
pycorrector/
下新建模块(如my_model/
)实现
detect()
和correct()
方法在
__init__.py
中暴露接口
5.2 自定义混淆集
创建
my_confusion.txt
:苹果 苹果 # 白名单 未 末 # 纠错规则
调用时加载:
corrector = Corrector(custom_confusion_path_or_dict="my_confusion.txt")
6. 性能优化建议
GPU 加速:所有深度学习模型默认支持 GPU(需安装 PyTorch GPU 版本)
批处理:使用
correct_batch()
替代单句处理语言模型轻量化:替换为
people2014corpus_chars.klm
(140MB)
7. 完整代码文档
GitHub 地址: https://github.com/shibing624/pycorrector
详细文档:查阅
docs/
目录下的技术文档
评论