本篇文章,主要来唠嗑下工业界的纠错系统怎么设计?包括:基于规则的纠错系统(简单的英文纠错、复杂的中文纠错)、基于NN的纠错系统。当然,在成熟的工业界纠错系统中,最好是结合规则&&NN方法。

此外,罗列工业界的解决方案,包括百度&&腾讯等解决方案。

好了,开始上干货!!!

一、英文纠错

英文的纠错比较简单,其犯错的类型不多,因此解决方案相对简单,代码开发量不大。

1、错误类型

拼写错误:插入、删除、替换、调序;

2、方法论

O:输入的词语;I:和O编辑距离接近的词语,这边词语是可能的正确拼写词语;

P(I|O):对应“输入词语->候选词语”的概率;

P(O|I):对应“候选词语->输入词语”犯错的可能性,这边为常说的混淆矩阵;

P(I):对应语言模型概率;

i)召回:先找到和输入词语编辑距离接近的词语候选;

ii)离线挖掘:基于“语料/搜索日志等”,计算出P(O|I)对应的混淆矩阵;

iii)解码:在召回的解码图上,利用LM Score计算出最优的路径最为纠错结果;此外在解码图上可以引入其他的一些特征,例如:词频信息等;

3、开源解决方案

https://github.com/barrust/pyspellchecker​github.com

一种简单的英文拼写纠错解决方案,基于编辑距离召回&&选取词频最高的词语作为候选。

二、中文纠错

工业界的纠错系统,是一套特别复杂的解决方案,代码开发量巨大。整体的纠正质量主要取决于:离线资源挖掘计算的混淆矩阵、词频信息、语言模型、PMI片段相关性等。

1、错误类型

• 谐音字词,如 配副眼睛-配副眼镜

• 混淆音字词,如 流浪织女-牛郎织女

• 字词顺序颠倒,如 伍迪艾伦-艾伦伍迪

• 字词补全,如 爱有天意-假如爱有天意

• 形似字错误,如 高梁-高粱

• 中文拼音全拼,如 xingfu-幸福

• 中文拼音缩写,如 sz-深圳

• 语法错误,如 想象难以-难以想象

2、方法论

i)检错

有些解决方案,例如:百度的纠错,会引入LSTM/Transformer+CRF的方案来检错;

ii)候选召回

离线挖掘:基于搜索日志,挖掘各种犯错可能性,并计算对应的混淆矩阵; (混淆矩阵的离线资源挖掘,决定了基于规则纠错系统的整体效果,正常query纠错一般是基于query日志数据进行挖掘,具体细节感兴趣的可以在评论区一起讨论)

索引:基于拼音&&字形&&词语&&片段索引进行召回;

iii)纠错排序

粗排:融合语言模型打分、词频、PMI片段相关性打分等特征,进行解码排序;

精排:使用wide&&deep模型,deep部分:当前错误点上下文表示,wide部分:基于形音、词法、语义、用户行为等特征学习原词与候选词的多维度距离表示;

3、开源解决方案

https://github.com/shibing624/pycorrector​github.com

包含基于规则&&NN模型的解决思路;

这个开源解决方案,是目前看到功能比较齐全&&方案设计比较靠谱的。

三、基于NN的纠错

构造纠错的pair对,使用encoder&&decoder框架进行纠错。总的来看,目前主要是基于transformer结构,并结合一些nmt的trick或者多目标来优化纠错。具体工业界上线,尤其是在搜索的query纠错场景,由于对时延的要求比较高(正常平均一个query的响应需要控制5ms附近),需要做蒸馏来推上线。

顺带提一下,基于ASR的纠错,纠错pair天然的可以引入nbest犯错可能性,很容易使用这个方向的解决方案。

1、2014英文文本纠错比赛第一名

Attention-based Encoder-Decoder Networks for Spelling and Grammatical Error Correction​arxiv.org

2、有道团队:2018年NLPCC中文纠错第一名

A Neural Machine Translation Approach to Chinese Grammatical Error Correction​tcci.ccf.org.cn

拼写错误:使用 SIGHAN 2013 CSC Datasets中提供字音、字形相似表召回候选,基于5-gram模型纠错;

语法纠错:采用transformer的seq2seq框架,基于word&&char粒度分别建模;

模型组合:character nmt + character&&subword nmt + subword nmt + subword&&character nmt,四种模型分别得到最优的纠错候选,最后靠5-gram评分得到ppl最低的句子作为纠错结果。

3、阿里巴巴:2018年NLPCC中文纠错第二名

Chinese Grammatical Error Correction Using Statistical and Neural Models​link.springer.com

i)基于规则方法;

ii)基于统计方法:SMT(计算错误句子和正确句子的条件概率)+LM+噪声信道模型,beam search得到最优候选作为纠错结果;

iii)基于nmt方法:seq2seq(encoder和decoder各2层lstm);

iv)模型组合:对上面的几路结果,引入5种冲突解决方案,选出最优的候选作为纠错结果。

4、北京语言大学团队:2018年NLPCC中文纠错第三名

A Sequence to Sequence Learning for Chinese Grammatical Error Correction​link.springer.com

采用Conv+MultiHopAttention+Seq2Seq模型进行纠错,这套方案是基于fairseq框架,在17年初是NMT的benchmark方案。在比赛中,是唯一使用单模型的队伍。

5、小米ASR纠错

https://zhuanlan.zhihu.com/p/160837451​zhuanlan.zhihu.com

自构造模糊音生成器进行候选召回,采用BERT进行纠错。

缺陷:基于bert的纠错只有一个encoder,只能进行序列对齐的纠错。

四、工业界解决方案

i)解决方案汇总

百度纠错解决方案

百度中文纠错技术 | ruilog​www.ruilog.com

腾讯纠错解决方案

https://cloud.tencent.com/developer/article/1030059 ​cloud.tencent.com

达观纠错解决方案

达观数据搜索引擎的Query自动纠错技术和架构 丨 达观动态-达观数据-企业大数据技术服务专家​www.datagrand.com

一些开源的解决方案

https://zhuanlan.zhihu.com/p/40806718​zhuanlan.zhihu.com

ii)api调用

百度纠错API

文本纠错_文本纠错算法_百度文本纠错-百度AI开放平台​ai.baidu.com

腾讯纠错API

纠错API - 腾讯开放平台​wiki.open.qq.com

lstm 文本纠错_工业界纠错系统相关推荐

  1. lstm 文本分类_带有lstm和单词嵌入的灾难推文上的文本分类

    lstm 文本分类 This was my first Kaggle notebook and I thought why not write it on Medium too? Ť他是我第一次Kag ...

  2. java 拼写纠错_拼写纠错的利器,BK树算法

    BK树或者称为Burkhard-Keller树,是一种基于树的数据结构,被设计于快速查找近似字符串匹配,比方说拼写纠错,或模糊查找,当搜索"aeek"时能返回"seek& ...

  3. delphi 停电文本数据丢失_概述DCS系统正确停电和上电的步骤

    欢迎关注"热控圈 " ID:rekongquan 传播热控知识,分享技术精华! 如何由入门到精通学会西门子PLC系统? 扫码关注"电力工程学",系列视频正在播出 ...

  4. error 系统错误 错误码10007_工业界纠错系统

    本篇文章,主要来唠嗑下工业界的纠错系统怎么设计?包括:基于规则的纠错系统(简单的英文纠错.复杂的中文纠错).基于NN的纠错系统.当然,在成熟的工业界纠错系统中,最好是结合规则&&NN方 ...

  5. nlp 中文文本纠错_百度中文纠错技术

    原标题:百度中文纠错技术 分享嘉宾:付志宏 百度资深研发工程师 编辑整理:李润顺 内容来源:Baidu Brain & DataFun AI Talk<百度中文纠错技术> 出品社区 ...

  6. 中文拼写纠错_[NLP]中文拼写检纠错

    一.基于统计语言模型的中文拼写纠错 1.流程图 2.实验结果 局部方法的实验结果: 全局方法的实验结果: 3.初步结论 缺点: a.SLM对训练语料的规模和质量敏感. b.错词检测策略灵活,变化较多. ...

  7. 多模型结合的等长拼写纠错 | 全国中文纠错大赛冠军方案

    每天给你送来NLP技术干货! 来自:达观数据 点击这里进群->加入NLP交流群 参与任务  DATAGRAND 中文拼写检查任务是中文自然语言处理中非常具有代表性和挑战性的任务,其本质是找出文本 ...

  8. ## 大一java课程设计_航班查询系统(我是小白)

    大一java课程设计_航班查询系统(我是小白) 备注:第一个java程序有借鉴别人的成分,因为忘了在哪个大佬上面借鉴的,所以在此备注,如有侵权,请联系删除,(仅用于学习使用,并未想盈利) 框体介绍 一 ...

  9. QT_文本编辑器_源码下载

    QT_文本编辑器_源码下载 源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光 ...

最新文章

  1. 【IntelliJ IDEA】tomcat启动,打印日志乱码问题
  2. Webkit Flex伸缩盒模型属性备忘
  3. 『JavaScript』利用Javascript获取IP地址内容方法
  4. make pycaffe 报错:“fatal error: numpy/arrayobject.h: No such file or directory” 解决方案
  5. 2021年12月Python小屋编程比赛获奖名单
  6. Eucalyptus EE的介绍及功能说明
  7. 廖雪峰python教程-福利 | 廖雪峰官方Python教程,拿走不谢!
  8. @media实现网页自适应中的几个关键分辨率
  9. 强命名防止dll被篡改
  10. 【8.16校内测试】【队列】【数学】【网络流/二分图最大匹配】
  11. Jack Lin tools 3Dmax批渲染插件
  12. 线性分类器(Linear Classifier)
  13. grafana配置alert
  14. 涉密台式计算机密码可以输入几次,涉密打印机、扫描仪等与涉密计算机之间不采用无线方式连接 - 作业在线问答...
  15. 工作流应用 电子表单签核
  16. pythondjango教程_【秒懂】号称最为简明实用的Django上手教程
  17. 视频教程-项目1——无线自助点餐平台-Java
  18. 数据仓库与元数据管理
  19. Shader——自发光效果
  20. git merge的三种操作merge, squash merge, 和rebase merge

热门文章

  1. Hadoop常见异常
  2. 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
  3. 人工神经网络之激活函数 -softmax函数
  4. 详解log4j2(下) - Log4j2在WEB项目中配置
  5. spark | scala | 线性代数库Breeze学习
  6. 雷林鹏分享:YAF 在Nginx环境下的Rewrite规则
  7. 93. Restore IP Addresses
  8. dlopen函数的用法
  9. Android里的shell的系统命令
  10. 每个开发人员现在应该下载的十种必备工具