lstm 文本纠错_中文文本纠错算法--错别字纠正的二三事
本文首先介绍一下:
1)错别字的类型有哪些
2)错别字纠正的关键技术和关键点
3)简要介绍我们项目中采用的文本纠错框架
4)介绍错别字项目的个人体会
5)几个现成的工具包 ,百度nlp平台最近也推出了文本纠错模块,处于内测中,所以没有进行比较。如果有小伙伴能告知比较好的中文文本纠错package,欢迎留言讨论!感谢!
简单总结了一下中文别字错误类型:
1. 别字:感帽,随然,传然,呕土
2. 人名,地名错误:哈蜜(正:哈密)
3. 拼音错误:咳数(ke shu)—> ke sou,
4. 知识性错误:广州黄浦(埔)
5. 用户发音、方言纠错:我系东北滴黑社会,俚蛾几现在在我手上。(我是东北的黑社会,你儿子现在在我手上。)
6. 重复性错误:在 上 上面 上面 那 什么 啊
7. 口语化问题:呃 。呃 ,啊,那用户名称是叫什么呢?(正:那用户名称是叫什么呢?)
错别字纠正的主要技术:
错别字词典,编辑距离,语言模型(ngram LM,DNN LM,基于字的模型?基于词的模型?)
三个关键点:分词质量、领域相关词表质量、语言模型的种类和质量
在最近的项目中,我们采用了pycorrector的纠错逻辑,如下图所示:
写在前面:
一点总结:
1. 效果:现有错别字纠正package大部分是通用领域的错别字检查,缺乏统一的评判标准,效果参差不齐。长句效果差,短句、单词效果好一些,未来应用到产品中,也要根据标点符号截成短句,再进行错别字检查。
2. 口语化、重复性的问题,所有package不能解决此类问题。
3.误判率的问题!!!错别字纠正功能有可能把正确的句子改成错误的。。这就要求,正确率x要远大于误判率y。假设有m个问题,其中2%是有错别字的,m*2%*x>m*(1-2%)*y,根据个人的经验,误判率y是可以控制在1%以下的,如果有比较好的词表,可以控制在0.5%以下。根据上述不等式,误判率控制在0.5%以下,正确率达到24.5%就能满足上述不等式。
4. 项目中,若测试数据不含重复错别字样本(错别字:帐单,其中的帐这个错别字只出现过一次),错别字纠正的正确率达到了50%,误判率0.49%左右。若包含重复样本,正确率达到了70%以上。
后面这三点比较关键:
5. 项目中使用了基于n-gram语言模型,使用kenLM训练得到的,DNN LM和n-gram LM各有优缺点,这里卖个关子,感兴趣的可以思考一下二者区别。另外,基于字的语言模型,误判率会较高;基于词的语言模型,误判率会低一些(符合我个人的判断,在我的实验里情况也确实如此)。
6. 训练语言模型的语料中并不clean,包含了很多错别字,这会提高误判率。使用更干净的语料有助于降低误判率,提高正确率。
7. 专业相关词表很关键,没有高质量的词表,很多字也会被误认为是错别字,所以也会提高误判率。
测试样本:
'感帽了','你儿字今年几岁了', '少先队员因该为老人让坐','随然今天很热','传然给我','呕土不止','哈蜜瓜','广州黄浦','在 上 上面 上面 那 什么 啊','呃 。呃 ,啊,那用户名称是叫什么呢?', '我生病了,咳数了好几天', '对京东新人度大打折扣','我想买哥苹果手机'
效果评价简介:
a. 单词、短句效果:一共13个测试样本,9/13表示13个样本中,纠正了9个错误。(长句效果差,没有考虑)
b. 速度:考虑了13个样本的总时间(用all表示,单位统一为秒),以及平均每个样本的纠错时间(用avg表示)
其中, with print 表示该纠错方法的用时包含了“输出到terminal的时间”,without print表示该纠错方法的用时没有包含“输出到terminal的时间”。这么划分的原因是 输出到terminal比较耗时,部分package可以选择输出or不输出。
c. 可扩展性:主要(1)考虑该纠错方法是否包含 自定义的错别字词典,方便个性化定制;(2)考虑该纠错方法,是否提供模型代码方便,在小娜的文本上进行训练语言模型。
几个现成的工具包:
1.https://github.com/shibing624/pycorrectorpycorrector
简介:考虑了音似、形似错字(或变体字)纠正,可用于中文拼音、笔画输入法的错误纠正,能够给出给出出错位置。
语言模型:
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使用的是人民日报数据。扩展性强。
测试样本效果:'感帽了','你儿字今年几岁了', '少先队员因该为老人让坐','随然今天很热','传然给我','呕土不止','哈蜜瓜','广州黄浦','在 上 上面 上面 那 什么 啊','呃 。呃 ,啊,那用户名称是叫什么呢?', '我生病了,咳数了好几天', '对京东新人度大打折扣','我想买哥苹果手机'
2.https://github.com/ccheng16/correction10 months ago
简介:
使用语言模型计算句子或序列的合理性
bigram, trigram, 4-gram 结合,并对每个字的分数求平均以平滑每个字的得分
根据Median Absolute Deviation算出outlier分数,并结合jieba分词结果确定需要修改的范围
根据形近字、音近字构成的混淆集合列出候选字,并对需要修改的范围逐字改正
句子中的错误会使分词结果更加细碎,结合替换字之后的分词结果确定需要改正的字
探测句末语气词,如有错误直接改正
特点:
训练的语言模型很多,根据介绍看,整体比较完善,看起来高大上。不过code跑不起来,作者没回应—--后面再改一下作者代码,看看能否跑起来。
3.https://github.com/PengheLiu/Cn_Speck_Checker2 years ago
简介:
针对医学数据训练出来的,基于编辑距离,可自行训练--效果一般,统计词频和共现信息,不太完善,返回大量candidates
特点:
人们通常越往后字打错的可能越大,因而可以考虑每个字在单词中的位置给予一定权重,这中方法有助于改进上面的第一种“传然”- "虽然"的情况;
考虑拼音的重要性,对汉语来讲,通常人们打错时拼音是拼对的,只是选择时候选择错了,因而对候选词也可以优先选择同拼音的字。
单词、短句效果:1/13 效果差,因为训练语料是医学文章
速度:None
可扩展性:词典+模型。扩展性还可以。
测试样本效果:'感帽了','你儿字今年几岁了', '少先队员因该为老人让坐','随然今天很热','传然给我','呕土不止','哈蜜瓜','广州黄浦','在 上 上面 上面 那 什么 啊','呃 。呃 ,啊,那用户名称是叫什么呢?', '我生病了,咳数了好几天', '对京东新人度大打折扣','我想买哥苹果手机'
4. proofreadv1 -- 效果一般,主要用于搜索引擎中的搜索关键词的别字纠错 5 years ago
词频字典+bi-gram
https://github.com/apanly/proofreadv1
模型比较老旧,不考虑
5.https://github.com/taozhijiang/chinese_correct_wsd3 years ago
京东客服机器人语料做的中文纠错--更接近我们的应用场景,主要解决同音自动纠错问
题,比如:
对京东新人度大打折扣 -- > 对京东信任度大打折扣
我想买哥苹果手机 纠正句:我想买个苹果手机
但代码多年未更新,目前跑不起来。
6.https://github.com/beyondacm/Autochecker4Chinese9 months ago
original sentence:感帽,随然,传然,呕土
corrected sentence:感冒,虽然,传染,呕吐
original sentence:对京东新人度大打折扣,我想买哥苹果手机
corrected sentence:对京东新人度大打折扣,我国买卖苹果手机
单词、短句效果:5/13 效果差
速度:2.860311 all , 0.220023 avg;with print
可扩展性:词典可扩展,不使用自己的语料进行训练。扩展性一般。
测试样本效果:'感帽了','你儿字今年几岁了', '少先队员因该为老人让坐','随然今天很热','传然给我','呕土不止','哈蜜瓜','广州黄浦','在 上 上面 上面 那 什么 啊','呃 。呃 ,啊,那用户名称是叫什么呢?', '我生病了,咳数了好几天', '对京东新人度大打折扣','我想买哥苹果手机'
7.https://github.com/SeanLee97/xmnlp3-4 months ago
nlp工具包,包含分词、情感分析,没有专注于错别字纠正,效果较差
单词、短句效果:3/13 效果差
速度:2.860311 all , 0.220023 avg;without print: 0:00:00.000017 all
可扩展性:既没发现词典、也没发现模型。扩展性较差。
测试样本效果:'感帽了','你儿字今年几岁了', '少先队员因该为老人让坐','随然今天很热','传然给我','呕土不止','哈蜜瓜','广州黄浦','在 上 上面 上面 那 什么 啊','呃 。呃 ,啊,那用户名称是叫什么呢?', '我生病了,咳数了好几天', '对京东新人度大打折扣','我想买哥苹果手机'
项目做的比较急,调研的package不多,如果有更好的方案,求告知,谢谢啦!
本文转载自公众号:机器学习小知识,作者 杨洋
推荐阅读
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。
lstm 文本纠错_中文文本纠错算法--错别字纠正的二三事相关推荐
- lstm 文本纠错_中文文本纠错算法错别字纠正的二三事
本文首先介绍一下: 1)错别字的类型有哪些 2)错别字纠正的关键技术和关键点 3)简要介绍我们项目中采用的文本纠错框架 4)介绍错别字项目的个人体会 5)几个现成的工具包 ,百度nlp平台最近也推出了 ...
- 中文拼写纠错_中文文本纠错算法--错别字纠正的二三事
本文首先介绍一下: 1)错别字的类型有哪些 2)错别字纠正的关键技术和关键点 3)简要介绍我们项目中采用的文本纠错框架 4)介绍错别字项目的个人体会 5)几个现成的工具包 ,百度nlp平台最近也推出了 ...
- 中文文本纠错算法--错别字纠正的二三事
转载: https://zhuanlan.zhihu.com/p/40806718?utm_source=ZHShareTargetIDMore 几个现成的工具包: 1. https://github ...
- python中文文本预处理_中文文本预处理及表示
文本分类 一.建立语料库 文本数据的获取方法一般有两种: 使用别人做好的语料库 爬虫去获取自己的预料数据 二.文本预处理 1.除去数据中非文本部分 一般可以使用正则表达式去进行删除 2.处理中文编码问 ...
- python中文文本分析_中文文本处理
斯坦福大学自然语言处理组是世界知名的NLP研究小组,他们提供了一系列开源的Java文本分析工具,包括分词器(Word Segmenter),词性标注工具(Part-Of-Speech Tagger), ...
- 中文拼写纠错_中英文拼写纠错开源框架梳理
一.中文: 1.Pycorrector:https://github.com/shibing624/pycorrector 当前主流的中文纠错框架,支持规则和端到端模型 2.FASPell:https ...
- 电商评论文本情感分类(中文文本分类)(第二部分-Bert)
电商评论文本情感分类(中文文本分类) 第二部分-Bert部分 第一部分:textcnn部分 本项目包含: 1.中文文本处理 2.中文词云图绘制(在第一部分) 3.中文词嵌入 4.基于textcnn的中 ...
- python 文本分类卡方检验_中文文本分类:你需要了解的10项关键内容
文本分类指的是计算机通过算法对输入的文本按照一定的类目体系进行自动化归类的过程.在人工智能浪潮席卷全球的今天,文本分类技术已经被广泛地应用在文本审核.广告过滤.情感分析和反黄识别等NLP领域.本文从达 ...
- 结巴分词关键词相似度_中文文本相似度计算工具集
[磐创AI导读]:前两篇文章中我们介绍了一些机器学习不错的项目合集和深度学习入门资源合集,本篇文章将对中文文本相似度计算工具做一次汇总.喜欢我们文章的小伙伴,欢迎大家点击上方蓝字关注我们的公众号:磐创 ...
最新文章
- 生活有时会有点苦涩——一位第六年还没发paper的PHD的自述
- retinaface 改进
- EXP、IMP 命令详解
- 1.5.2 在IIS上配置ASP.NET(转)
- c/c++排坑(4) -- c/c++中返回局部变量
- Python_目录的简单操作(新建/查看/删除)
- 蓝桥杯数字三角形java,蓝桥杯数字三角形(java)
- vb mysql 插入记录_vb实现数据库的连接,修改,删除,插入(ADO.Net)
- Python使用twisted包进行网络通信
- 40美元18分钟训练整个ImageNet!他们说,这个成绩人人可实现
- 数据结构与算法 第二章 数据结构中的线性结构
- raid及mdadm命令之一(含shell显示字体颜色等)
- php vm_facebook hiphop php vm 兑现概述(二)
- Badboy提示脚本错误解决方法
- 蓝桥杯 2015 javaB组 校赛
- Exp外贸/出口英文商城系统在国际电商贸易中的角色扮演
- 计算机网络笔记(复习)
- Python防微信撤回
- vue兼容IE11浏览器空白页等一系列问题之踩坑全过程
- 一元三次多项式因式分解的两种方法
热门文章
- oracle 分区表 变大,Oracle11G新特性:分区表分区默认segment大小64k变为8M
- 堆和栈得区别--向WXP学习
- [TOG2020](综述)3D Morphable Face Models—Past, Present, and Future
- C语言超出类型数值范围的表示方法
- LMG3410R050功率放大级解决方案
- 图像搜索引擎 - 原理篇
- 以色列技术!Amimon无线WHDI技术解析
- ZZULIOJ:1141: 进制转换
- Android自定义ViewGroup的布局,往往都是从流式布局开始
- 群晖NAS搭建测速网站,支持万兆