转载出处:https://blog.csdn.net/HHTNAN
中文文本纠错任务,常见错误类型包括:
当然,针对不同业务场景,这些问题并不一定全部存在,比如输入法中需要处理前四种,搜索引擎需要处理所有类型,语音识别后文本纠错只需要处理前两种, 其中’形似字错误’主要针对五笔或者笔画手写输入等。
现在的处理手段,在词粒度的错误召回还不错,但错误纠正的准确率还有待提高,更多优质的纠错集及纠错词库会有提升,我更希望算法上有更大的突破。
另外,现在的文本错误不再局限于字词粒度上的拼写错误,需要提高中文语法错误检测(CGED, Chinese Grammar Error Diagnosis)及纠正能力,列在TODO中,后续调研。
中文文本纠错工具。音似、形似错字(或变体字)纠正,可用于中文拼音、笔画输入法的错误纠正。python3开发。
pycorrector依据语言模型检测错别字位置,通过拼音音似特征、笔画五笔编辑距离特征及语言模型困惑度特征纠正错别字。
pip install pycorrector
结果报错
根据报错继续执行pip install pypinyin 安装pypinyin模块。
之后执行pip install pycorrector还是报错。
算了还是换成半自动安装吧
我擦还是不行。经过辗转反侧的查询。最后执行
pip install https://github.com/kpu/kenlm/archive/master.zip
之后在执行pip install pycorrector/。。。成功了。
以上安装参考连接:
https://github.com/kpu/kenlm
https://github.com/shibing624/pycorrector
其工作流程如下:
简介:考虑了音似、形似错字(或变体字)纠正,可用于中文拼音、笔画输入法的错误纠正,能够给出给出出错位置。
语言模型:
Kenlm(统计语言模型工具)
RNNLM(TensorFlow、PaddlePaddle均有实现栈式双向LSTM的语言模型)
代码:
import pycorrector
corrected_sent, detail = pycorrector.correct(‘少先队员因该为老人让坐’)
print(corrected_sent, detail)
单词、短句效果:9/13 效果尚可
速度:0.366050 all, 0.028157692 avg ;
可扩展性:词典可扩展,可使用自己的语料进行训练,该repo使用的是人民日报数据。扩展性强。
测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’
简介:
使用语言模型计算句子或序列的合理性
bigram, trigram, 4-gram 结合,并对每个字的分数求平均以平滑每个字的得分
根据Median Absolute Deviation算出outlier分数,并结合jieba分词结果确定需要修改的范围
根据形近字、音近字构成的混淆集合列出候选字,并对需要修改的范围逐字改正
句子中的错误会使分词结果更加细碎,结合替换字之后的分词结果确定需要改正的字
探测句末语气词,如有错误直接改正
特点:
训练的语言模型很多,根据介绍看,整体比较完善,看起来高大上。不过code跑不起来,作者没回应—–后面再改一下作者代码,看看能否跑起来。
简介:
针对医学数据训练出来的,基于编辑距离,可自行训练–效果一般,统计词频和共现信息,不太完善,返回大量candidates
特点:
人们通常越往后字打错的可能越大,因而可以考虑每个字在单词中的位置给予一定权重,这中方法有助于改进上面的第一种“传然”- "虽然"的情况;
考虑拼音的重要性,对汉语来讲,通常人们打错时拼音是拼对的,只是选择时候选择错了,因而对候选词也可以优先选择同拼音的字。
单词、短句效果:1/13 效果差,因为训练语料是医学文章
速度:None
可扩展性:词典+模型。扩展性还可以。
测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’
词频字典+bi-gram
https://github.com/apanly/proofreadv1
模型比较老旧,不考虑
京东客服机器人语料做的中文纠错–更接近我们的应用场景,主要解决同音自动纠错问
题,比如:
对京东新人度大打折扣 – > 对京东信任度大打折扣
我想买哥苹果手机 纠正句:我想买个苹果手机
但代码多年未更新,目前跑不起来。
original sentence:感帽,随然,传然,呕土
corrected sentence:感冒,虽然,传染,呕吐
original sentence:对京东新人度大打折扣,我想买哥苹果手机
corrected sentence:对京东新人度大打折扣,我国买卖苹果手机
单词、短句效果:5/13 效果差
速度:2.860311 all , 0.220023 avg; with print
可扩展性:词典可扩展,不使用自己的语料进行训练。扩展性一般。
测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’
nlp工具包,包含分词、情感分析,没有专注于错别字纠正,效果较差
单词、短句效果:3/13 效果差
速度:2.860311 all , 0.220023 avg; without print: 0:00:00.000017 all
可扩展性:既没发现词典、也没发现模型。扩展性较差。
测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’
‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’
a. 单词、短句效果:一共13个测试样本,9/13表示13个样本中,纠正了9个错误。(长句效果差,没有考虑)
b. 速度:考虑了13个样本的总时间(用all表示,单位统一为秒),以及平均每个样本的纠错时间(用avg表示)
其中, with print 表示该纠错方法的用时包含了“输出到terminal的时间”,without print表示该纠错方法的用时没有包含“输出到terminal的时间”。这么划分的原因是 输出到terminal比较耗时,部分package可以选择输出or不输出。
c. 可扩展性:主要(1)考虑该纠错方法是否包含 自定义的错别字词典,方便个性化定制;(2)考虑该纠错方法,是否提供模型代码方便,在小娜的文本上进行训练语言模型。