写点什么

一键式文本纠错工具,整合了 BERT、ERNIE 等多种模型,让您立即享受纠错的便利和效果

  • 2023-08-13
    浙江
  • 本文字数:10963 字

    阅读完需:约 36 分钟

一键式文本纠错工具,整合了BERT、ERNIE等多种模型,让您立即享受纠错的便利和效果

pycorrector 一键式文本纠错工具,整合了 BERT、MacBERT、ELECTRA、ERNIE 等多种模型,让您立即享受纠错的便利和效果


pycorrector: 中文文本纠错工具。支持中文音似、形似、语法错误纠正,python3 开发。实现了 Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer 等多种模型的文本纠错,并在 SigHAN 数据集评估各模型的效果。

1.中文文本纠错任务,常见错误类型:


当然,针对不同业务场景,这些问题并不一定全部存在,比如拼音输入法、语音识别校对关注音似错误;五笔输入法、OCR 校对关注形似错误,搜索引擎 query 纠错关注所有错误类型。


本项目重点解决其中的"音似、形字、语法、专名错误"等类型。

2.解决方案

2.1 规则的解决思路

依据语言模型检测错别字位置,通过拼音音似特征、笔画五笔编辑距离特征及语言模型困惑度特征纠正错别字。


  1. 中文纠错分为两步走,第一步是错误检测,第二步是错误纠正;

  2. 错误检测部分先通过结巴中文分词器切词,由于句子中含有错别字,所以切词结果往往会有切分错误的情况,这样从字粒度和词粒度两方面检测错误, 整合这两种粒度的疑似错误结果,形成疑似错误位置候选集;

  3. 错误纠正部分,是遍历所有的疑似错误位置,并使用音似、形似词典替换错误位置的词,然后通过语言模型计算句子困惑度,对所有候选集结果比较并排序,得到最优纠正词。

2.2 深度模型的解决思路

  1. 端到端的深度模型可以避免人工提取特征,减少人工工作量,RNN 序列模型对文本任务拟合能力强,RNN Attn 在英文文本纠错比赛中取得第一名成绩,证明应用效果不错;

  2. CRF 会计算全局最优输出节点的条件概率,对句子中特定错误类型的检测,会根据整句话判定该错误,阿里参赛 2016 中文语法纠错任务并取得第一名,证明应用效果不错;

  3. Seq2Seq 模型是使用 Encoder-Decoder 结构解决序列转换问题,目前在序列转换任务中(如机器翻译、对话生成、文本摘要、图像描述)使用最广泛、效果最好的模型之一;

  4. BERT/ELECTRA/ERNIE/MacBERT 等预训练模型强大的语言表征能力,对 NLP 届带来翻天覆地的改变,海量的训练数据拟合的语言模型效果无与伦比,基于其 MASK 掩码的特征,可以简单改造预训练模型用于纠错,加上 fine-tune,效果轻松达到最优。


PS:


2.2 模型推荐

  • Kenlm模型:本项目基于 Kenlm 统计语言模型工具训练了中文 NGram 语言模型,结合规则方法、混淆集可以纠正中文拼写错误,方法速度快,扩展性强,效果一般

  • MacBERT模型【推荐】:本项目基于 PyTorch 实现了用于中文文本纠错的 MacBERT4CSC 模型,模型加入了错误检测和纠正网络,适配中文拼写纠错任务,效果好

  • Seq2Seq模型:本项目基于 PyTorch 实现了用于中文文本纠错的 Seq2Seq 模型、ConvSeq2Seq 模型,其中 ConvSeq2Seq 在 NLPCC-2018 的中文语法纠错比赛中,使用单模型并取得第三名,可以并行训练,模型收敛快,效果一般

  • T5模型:本项目基于 PyTorch 实现了用于中文文本纠错的 T5 模型,使用 Langboat/mengzi-t5-base 的预训练模型 fine-tune 中文纠错数据集,模型改造的潜力较大,效果好

  • BERT模型:本项目基于 PyTorch 实现了基于原生 BERT 的 fill-mask 能力进行纠正错字的方法,效果差

  • ELECTRA模型:本项目基于 PyTorch 实现了基于原生 ELECTRA 的 fill-mask 能力进行纠正错字的方法,效果差

  • ERNIE_CSC模型:本项目基于 PaddlePaddle 实现了用于中文文本纠错的 ERNIE_CSC 模型,模型在 ERNIE-1.0 上 fine-tune,模型结构适配了中文拼写纠错任务,效果好

  • DeepContext模型:本项目基于 PyTorch 实现了用于文本纠错的 DeepContext 模型,该模型结构参考 Stanford University 的 NLC 模型,2014 英文纠错比赛得第一名,效果一般

  • Transformer模型:本项目基于 PyTorch 的 fairseq 库调研了 Transformer 模型用于中文文本纠错,效果一般

  • 思考


  1. 规则的方法,在词粒度的错误召回还不错,但错误纠正的准确率还有待提高,更多优质的纠错集及纠错词库会有提升,我更希望算法模型上有更大的突破。

  2. 现在的文本错误不再局限于字词粒度上的拼写错误,需要提高中文语法错误检测(CGED, Chinese Grammar Error Diagnosis)及纠正能力,列在 TODO 中,后续调研。

3.Demo 演示

Official Demo: https://www.mulanai.com/product/corrector/


HuggingFace Demo: https://huggingface.co/spaces/shibing624/pycorrector



run example: examples/gradio_demo.py to see the demo:


python examples/gradio_demo.py
复制代码

4.模型评估(sighan15 评估集)

提供评估脚本examples/evaluate_models.py


  • 使用 sighan15 评估集:SIGHAN2015 的测试集pycorrector/data/cn/sighan_2015/test.tsv,已经转为简体中文。

  • 评估标准:纠错准召率,采用严格句子粒度(Sentence Level)计算方式,把模型纠正之后的与正确句子完成相同的视为正确,否则为错。


  • 评估结果评估数据集:SIGHAN2015 测试集


GPU:Tesla V100,显存 32 GB



  • 结论


  • 中文拼写纠错模型效果最好的是 MacBert-CSC,模型名称是 shibing624/macbert4csc-base-chinese,huggingface model:shibing624/macbert4csc-base-chinese

  • 中文语法纠错模型效果最好的是 BART-CSC,模型名称是 shibing624/bart4csc-base-chinese,huggingface model:shibing624/bart4csc-base-chinese

  • 最具潜力的模型是 Mengzi-T5-CSC,模型名称是 shibing624/mengzi-t5-base-chinese-correction,huggingface model:shibing624/mengzi-t5-base-chinese-correction,未改变模型结构,仅 fine-tune 中文纠错数据集,已经在SIGHAN 2015取得接近 SOTA 的效果

  • 基于 ChatGLM-6B 的纠错微调模型效果也不错,模型名称是 shibing624/chatglm-6b-csc-zh-lora,huggingface model:shibing624/chatglm-6b-csc-zh-lora,大模型不仅能改错还能润色句子,但是模型太大,推理速度慢

5.使用指南

pip install -U pycorrector
复制代码


or


pip install -r requirements.txt
git clone https://github.com/shibing624/pycorrector.gitcd pycorrectorpip install --no-deps .
复制代码


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


  • 安装依赖

  • docker 使用


docker run -it -v ~/.pycorrector:/root/.pycorrector shibing624/pycorrector:0.0.2
复制代码


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


使用示例:



  • kenlm 安装


pip install kenlm
复制代码


安装kenlm-wiki


  • 其他库包安装


pip install -r requirements.txt
复制代码

6.应用场景

6.1 文本纠错

example: examples/base_demo.py


import pycorrector
corrected_sent, detail = pycorrector.correct('少先队员因该为老人让坐')print(corrected_sent, detail)
复制代码


output:


少先队员应该为老人让座 [('因该', '应该', 4, 6), ('坐', '座', 10, 11)]
复制代码


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

6.2 错误检测

example: examples/detect_demo.py


import pycorrector
idx_errors = pycorrector.detect('少先队员因该为老人让坐')print(idx_errors)
复制代码


output:


[['因该', 4, 6, 'word'], ['坐', 10, 11, 'char']]
复制代码


返回类型是list, [error_word, begin_pos, end_pos, error_type]pos索引位置以 0 开始。

6.3 成语、专名纠错

example: examples/proper_correct_demo.py


import sys
sys.path.append("..")from pycorrector.proper_corrector import ProperCorrector
m = ProperCorrector()x = [ '报应接中迩来', '今天在拼哆哆上买了点苹果',]
for i in x: print(i, ' -> ', m.proper_correct(i))
复制代码


output:


报应接中迩来  ->  ('报应接踵而来', [('接中迩来', '接踵而来', 2, 6)])今天在拼哆哆上买了点苹果  ->  ('今天在拼多多上买了点苹果', [('拼哆哆', '拼多多', 3, 6)])
复制代码

6.4 自定义混淆集

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


example: examples/use_custom_confusion.py


import pycorrector
error_sentences = [ '买iphonex,要多少钱', '共同实际控制人萧华、霍荣铨、张旗康',]for line in error_sentences: print(pycorrector.correct(line))
print('*' * 42)pycorrector.set_custom_confusion_path_or_dict('./my_custom_confusion.txt')for line in error_sentences: print(pycorrector.correct(line))
复制代码


output:


('买iphonex,要多少钱', [])   # "iphonex"漏召,应该是"iphoneX"('共同实际控制人萧华、霍荣铨、张启康', [['张旗康', '张启康', 14, 17]]) # "张启康"误杀,应该不用纠*****************************************************('买iphonex,要多少钱', [['iphonex', 'iphoneX', 1, 8]])('共同实际控制人萧华、霍荣铨、张旗康', [])
复制代码


其中./my_custom_confusion.txt的内容格式如下,以空格间隔:


iPhone差 iPhoneX张旗康 张旗康
复制代码


混淆集功能在correct方法中生效;set_custom_confusion_dict方法的path参数为用户自定义混淆集文件路径(str)或混淆集字典(dict)。

6.5 自定义语言模型

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


支持用户加载自己训练的 kenlm 语言模型,或使用 2014 版人民日报数据训练的模型,模型小(140M),准确率稍低,模型下载地址:people2014corpus_chars.klm(密码o5e9)


example:examples/load_custom_language_model.py


from pycorrector import Correctorimport os
pwd_path = os.path.abspath(os.path.dirname(__file__))lm_path = os.path.join(pwd_path, './people2014corpus_chars.klm')model = Corrector(language_model_path=lm_path)
corrected_sent, detail = model.correct('少先队员因该为老人让坐')print(corrected_sent, detail)
复制代码


output:


少先队员应该为老人让座 [('因该', '应该', 4, 6), ('坐', '座', 10, 11)]
复制代码

6.6 英文拼写纠错

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


example:examples/en_correct_demo.py


import pycorrector
sent = "what happending? how to speling it, can you gorrect it?"corrected_text, details = pycorrector.en_correct(sent)print(sent, '=>', corrected_text)print(details)
复制代码


output:


what happending? how to speling it, can you gorrect it?=> what happening? how to spelling it, can you correct it?[('happending', 'happening', 5, 15), ('speling', 'spelling', 24, 31), ('gorrect', 'correct', 44, 51)]
复制代码

6.7 中文简繁互换

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


example:examples/traditional_simplified_chinese_demo.py


import pycorrector
traditional_sentence = '憂郁的臺灣烏龜'simplified_sentence = pycorrector.traditional2simplified(traditional_sentence)print(traditional_sentence, '=>', simplified_sentence)
simplified_sentence = '忧郁的台湾乌龟'traditional_sentence = pycorrector.simplified2traditional(simplified_sentence)print(simplified_sentence, '=>', traditional_sentence)
复制代码


output:


憂郁的臺灣烏龜 => 忧郁的台湾乌龟忧郁的台湾乌龟 => 憂郁的臺灣烏龜
复制代码

6.8 命令行模式

支持批量文本纠错


python -m pycorrector -husage: __main__.py [-h] -o OUTPUT [-n] [-d] input
@description:
positional arguments: input the input file path, file encode need utf-8.
optional arguments: -h, --help show this help message and exit -o OUTPUT, --output OUTPUT the output file path. -n, --no_char disable char detect mode. -d, --detail print detail info
复制代码


case:


python -m pycorrector input.txt -o out.txt -n -d
复制代码


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


本项目的初衷之一是比对、共享各种文本纠错方法,抛砖引玉的作用,如果对大家在文本纠错任务上有一点小小的启发就是我莫大的荣幸了。


主要使用了多种深度模型应用于文本纠错任务,分别是前面模型小节介绍的macbertseq2seqbertelectratransformerernie-cscT5,各模型方法内置于pycorrector文件夹下,有README.md详细指导,各模型可独立运行,相互之间无依赖。


  • 安装依赖


pip install -r requirements-dev.txt
复制代码

8. 模型推荐

各模型均可独立的预处理数据、训练、预测。

8.1 MacBert4csc 模型[推荐]

基于 MacBERT 改变网络结构的中文拼写纠错模型,模型已经开源在 HuggingFace Models:https://huggingface.co/shibing624/macbert4csc-base-chinese


模型网络结构:


  • 本项目是 MacBERT 改变网络结构的中文文本纠错模型,可支持 BERT 类模型为 backbone。

  • 在原生 BERT 模型上进行了魔改,追加了一个全连接层作为错误检测即 detection ,MacBERT4CSC 训练时用 detection 层和 correction 层的 loss 加权得到最终的 loss。预测时用 BERT MLM 的 correction 权重即可。



详细教程参考pycorrector/macbert/README.md


example:examples/macbert_demo.py


  • 8.1.1 使用 pycorrector 调用纠错:


import sys
sys.path.append("..")from pycorrector.macbert.macbert_corrector import MacBertCorrector
if __name__ == '__main__': error_sentences = [ '真麻烦你了。希望你们好好的跳无', '少先队员因该为老人让坐', '机七学习是人工智能领遇最能体现智能的一个分知', '一只小鱼船浮在平净的河面上', '我的家乡是有明的渔米之乡', ]
m = MacBertCorrector("shibing624/macbert4csc-base-chinese") for line in error_sentences: correct_sent, err = m.macbert_correct(line) print("query:{} => {}, err:{}".format(line, correct_sent, err))
复制代码


output:


query:真麻烦你了。希望你们好好的跳无 => 真麻烦你了。希望你们好好的跳舞, err:[('无', '舞', 14, 15)]query:少先队员因该为老人让坐 => 少先队员应该为老人让坐, err:[('因', '应', 4, 5)]query:机七学习是人工智能领遇最能体现智能的一个分知 => 机器学习是人工智能领域最能体现智能的一个分知, err:[('七', '器', 1, 2), ('遇', '域', 10, 11)]query:一只小鱼船浮在平净的河面上 => 一只小鱼船浮在平净的河面上, err:[]query:我的家乡是有明的渔米之乡 => 我的家乡是有名的渔米之乡, err:[('明', '名', 6, 7)]
复制代码


  • 8.1.2 使用原生 transformers 库调用纠错:


import operatorimport torchfrom transformers import BertTokenizerFast, BertForMaskedLMdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = BertTokenizerFast.from_pretrained("shibing624/macbert4csc-base-chinese")model = BertForMaskedLM.from_pretrained("shibing624/macbert4csc-base-chinese")model.to(device)
texts = ["今天新情很好", "你找到你最喜欢的工作,我也很高心。"]
text_tokens = tokenizer(texts, padding=True, return_tensors='pt').to(device)with torch.no_grad(): outputs = model(**text_tokens)
def get_errors(corrected_text, origin_text): sub_details = [] for i, ori_char in enumerate(origin_text): if ori_char in [' ', '“', '”', '‘', '’', '\n', '…', '—', '擤']: # add unk word corrected_text = corrected_text[:i] + ori_char + corrected_text[i:] continue if i >= len(corrected_text): break if ori_char != corrected_text[i]: if ori_char.lower() == corrected_text[i]: # pass english upper char corrected_text = corrected_text[:i] + ori_char + corrected_text[i + 1:] continue sub_details.append((ori_char, corrected_text[i], i, i + 1)) sub_details = sorted(sub_details, key=operator.itemgetter(2)) return corrected_text, sub_details
result = []for ids, (i, text) in zip(outputs.logits, enumerate(texts)): _text = tokenizer.decode((torch.argmax(ids, dim=-1) * text_tokens.attention_mask[i]), skip_special_tokens=True).replace(' ', '') corrected_text, details = get_errors(_text, text) print(text, ' => ', corrected_text, details) result.append((corrected_text, details))print(result)
复制代码


output:


今天新情很好  =>  今天心情很好 [('新', '心', 2, 3)]你找到你最喜欢的工作,我也很高心。  =>  你找到你最喜欢的工作,我也很高兴。 [('心', '兴', 15, 16)]
复制代码


模型文件:


macbert4csc-base-chinese    ├── config.json    ├── added_tokens.json    ├── pytorch_model.bin    ├── special_tokens_map.json    ├── tokenizer_config.json    └── vocab.txt
复制代码

8.2 ErnieCSC 模型

基于 ERNIE 的中文拼写纠错模型,模型已经开源在PaddleNLP的模型库中https://bj.bcebos.com/paddlenlp/taskflow/text_correction/csc-ernie-1.0/csc-ernie-1.0.pdparams


模型网络结构:



详细教程参考pycorrector/ernie_csc/README.md


example:examples/ernie_csc_demo.py


  • 使用 pycorrector 调用纠错:



from pycorrector.ernie_csc.ernie_csc_corrector import ErnieCSCCorrector
if __name__ == '__main__': error_sentences = [ '真麻烦你了。希望你们好好的跳无', '少先队员因该为老人让坐', '机七学习是人工智能领遇最能体现智能的一个分知', '一只小鱼船浮在平净的河面上', '我的家乡是有明的渔米之乡', ] corrector = ErnieCSCCorrector("csc-ernie-1.0") for line in error_sentences: result = corrector.ernie_csc_correct(line)[0] print("query:{} => {}, err:{}".format(line, result['target'], result['errors']))
复制代码


output:



query:真麻烦你了。希望你们好好的跳无 => 真麻烦你了。希望你们好好的跳舞, err:[{'position': 14, 'correction': {'无': '舞'}}]query:少先队员因该为老人让坐 => 少先队员应该为老人让座, err:[{'position': 4, 'correction': {'因': '应'}}, {'position': 10, 'correction': {'坐': '座'}}]query:机七学习是人工智能领遇最能体现智能的一个分知 => 机器学习是人工智能领域最能体现智能的一个分知, err:[{'position': 1, 'correction': {'七': '器'}}, {'position': 10, 'correction': {'遇': '域'}}]query:一只小鱼船浮在平净的河面上 => 一只小鱼船浮在平净的河面上, err:[]query:我的家乡是有明的渔米之乡 => 我的家乡是有名的渔米之乡, err:[{'position': 6, 'correction': {'明': '名'}}]
复制代码


  • 使用 PaddleNLP 库调用纠错:


可以使用 PaddleNLP 提供的 Taskflow 工具来对输入的文本进行一键纠错,具体使用方法如下:



from paddlenlp import Taskflow
text_correction = Taskflow("text_correction")text_correction('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。')text_correction('人生就是如此,经过磨练才能让自己更加拙壮,才能使自己更加乐观。')
复制代码


output:



[{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]
[{'source': '人生就是如此,经过磨练才能让自己更加拙壮,才能使自己更加乐观。', 'target': '人生就是如此,经过磨练才能让自己更加茁壮,才能使自己更加乐观。', 'errors': [{'position': 18, 'correction': {'拙': '茁'}}]}]
复制代码

8.3 Bart 模型

from transformers import BertTokenizerFastfrom textgen import BartSeq2SeqModel
tokenizer = BertTokenizerFast.from_pretrained('shibing624/bart4csc-base-chinese')model = BartSeq2SeqModel( encoder_type='bart', encoder_decoder_type='bart', encoder_decoder_name='shibing624/bart4csc-base-chinese', tokenizer=tokenizer, args={"max_length": 128, "eval_batch_size": 128})sentences = ["少先队员因该为老人让坐"]print(model.predict(sentences))
复制代码


output:


['少先队员应该为老人让座']
复制代码


如果需要训练 Bart 模型,请参考 https://github.com/shibing624/textgen/blob/main/examples/seq2seq/training_bartseq2seq_zh_demo.py


  • Release models


基于 SIGHAN+Wang271K 中文纠错数据集训练的 Bart 模型,已经 release 到 HuggingFace Models:



#3 8.4 ConvSeq2Seq 模型pycorrector/seq2seq 模型使用示例:


  • 训练 data example:


#train.txt:你说的是对,跟那些失业的人比起来你也算是辛运的。  你说的是对,跟那些失业的人比起来你也算是幸运的。
复制代码


cd seq2seqpython train.py
复制代码


convseq2seq训练 sighan 数据集(2104 条样本),200 个 epoch,单卡 P40GPU 训练耗时:3 分钟。


  • 预测


python infer.py
复制代码


output:



  1. 如果训练数据太少(不足万条),深度模型拟合不足,会出现预测结果全为unk的情况,解决方法:增大训练样本集,使用下方提供的纠错熟语料(nlpcc2018+hsk,130 万对句子)试试。

  2. 深度模型训练耗时长,有 GPU 尽量用 GPU,加速训练,节省时间。


  • Release models


基于 SIGHAN2015 数据集训练的 convseq2seq 模型,已经 release 到 github:


  • convseq2seq model url: https://github.com/shibing624/pycorrector/releases/download/0.4.5/convseq2seq_correction.tar.gz

9.数据集

9.1 开源数据集


说明:


  • 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": "B2-4029-3",        "original_text": "晚间会听到嗓音,白天的时候大家都不会太在意,但是在睡觉的时候这嗓音成为大家的恶梦。",        "wrong_ids": [            5,            31        ],        "correct_text": "晚间会听到噪音,白天的时候大家都不会太在意,但是在睡觉的时候这噪音成为大家的恶梦。"    }]
复制代码


字段解释:


  • id:唯一标识符,无意义

  • original_text: 原始错误文本

  • wrong_ids: 错误字的位置,从 0 开始

  • correct_text: 纠正后的文本

9.2 自有数据集

可以使用自己数据集训练纠错模型,把自己数据集标注好,保存为跟训练样本集一样的 json 格式,然后加载数据训练模型即可。


  1. 已有大量业务相关错误样本,主要标注错误位置(wrong_ids)和纠错后的句子(correct_text)

  2. 没有现成的错误样本,可以写脚本生成错误样本(original_text),根据音似、形似等特征把正确句子的指定位置(wrong_ids)字符改为错字,附上第三方同音字生成脚本同音词替换

10.总结

什么是语言模型?-wiki


语言模型对于纠错步骤至关重要,当前默认使用的是从千兆中文文本训练的中文语言模型zh_giga.no_cna_cmn.prune01244.klm(2.8G),提供人民日报 2014 版语料训练得到的轻量版语言模型people2014corpus_chars.klm(密码o5e9)


大家可以用中文维基(繁体转简体,pycorrector.utils.text_utils 下有此功能)等语料数据训练通用的语言模型,或者也可以用专业领域语料训练更专用的语言模型。更适用的语言模型,对于纠错效果会有比较好的提升。


  1. kenlm 语言模型训练工具的使用,请见博客:http://blog.csdn.net/mingzai624/article/details/79560063

  2. 附上训练语料<人民日报 2014 版熟语料>,包括: 1)标准人工切词及词性数据 people2014.tar.gz, 2)未切词文本数据 people2014_words.txt,3)kenlm 训练字粒度语言模型文件及其二进制文件 people2014corpus_chars.arps/klm, 4)kenlm 词粒度语言模型文件及其二进制文件 people2014corpus_words.arps/klm。


  • Todo


  • [x] 优化形似字字典,提高形似字纠错准确率

  • [x] 整理中文纠错训练数据,使用 seq2seq 做深度中文纠错模型

  • [x] 添加中文语法错误检测及纠正能力

  • [x] 规则方法添加用户自定义纠错集,并将其纠错优先度调为最高

  • [x] seq2seq_attention 添加 dropout,减少过拟合

  • [x] 在 seq2seq 模型框架上,新增 Pointer-generator network、Beam search、Unknown words replacement、Coverage mechanism 等特性

  • [x] 更新 bert 的 fine-tuned 使用 wiki,适配 transformers 2.10.0 库

  • [x] 升级代码,兼容 TensorFlow 2.0 库

  • [x] 升级 bert 纠错逻辑,提升基于 mask 的纠错效果

  • [x] 新增基于 electra 模型的纠错逻辑,参数更小,预测更快

  • [x] 新增专用于纠错任务深度模型,使用 bert/ernie 预训练模型,加入文本音似、形似特征。



参考链接:https://github.com/shibing624/pycorrector


更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。



发布于: 2023-08-13阅读数: 20
用户头像

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
一键式文本纠错工具,整合了BERT、ERNIE等多种模型,让您立即享受纠错的便利和效果_人工智能_汀丶人工智能_InfoQ写作社区