本篇文章,主要来唠嗑下工业界的纠错系统怎么设计?包括:基于规则的纠错系统(简单的英文纠错、复杂的中文纠错)、基于NN的纠错系统。当然,在成熟的工业界纠错系统中,最好是结合规则&&NN方法。
此外,罗列工业界的解决方案,包括百度&&腾讯等解决方案。
好了,开始上干货!!!
一、英文纠错
英文的纠错比较简单,其犯错的类型不多,因此解决方案相对简单,代码开发量不大。
1、错误类型
拼写错误:插入、删除、替换、调序;
2、方法论
O:输入的词语;I:和O编辑距离接近的词语,这边词语是可能的正确拼写词语;
P(I|O):对应“输入词语->候选词语”的概率;
P(O|I):对应“候选词语->输入词语”犯错的可能性,这边为常说的混淆矩阵;
P(I):对应语言模型概率;
i)召回:先找到和输入词语编辑距离接近的词语候选;
ii)离线挖掘:基于“语料/搜索日志等”,计算出P(O|I)对应的混淆矩阵;
iii)解码:在召回的解码图上,利用LM Score计算出最优的路径最为纠错结果;此外在解码图上可以引入其他的一些特征,例如:词频信息等;
3、开源解决方案
/barrust/pyspellchecker一种简单的英文拼写纠错解决方案,基于编辑距离召回&&选取词频最高的词语作为候选。
二、中文纠错
工业界的纠错系统,是一套特别复杂的解决方案,代码开发量巨大。整体的纠正质量主要取决于:离线资源挖掘计算的混淆矩阵、词频信息、语言模型、PMI片段相关性等。
1、错误类型
• 谐音字词,如 配副眼睛-配副眼镜
• 混淆音字词,如 流浪织女-牛郎织女
• 字词顺序颠倒,如 伍迪艾伦-艾伦伍迪
• 字词补全,如 爱有天意-假如爱有天意
• 形似字错误,如 高梁-高粱
• 中文拼音全拼,如 xingfu-幸福
• 中文拼音缩写,如 sz-深圳
• 语法错误,如 想象难以-难以想象
2、方法论
i)检错
有些解决方案,例如:百度的纠错,会引入LSTM/Transformer+CRF的方案来检错;
ii)候选召回
离线挖掘:基于搜索日志,挖掘各种犯错可能性,并计算对应的混淆矩阵; (混淆矩阵的离线资源挖掘,决定了基于规则纠错系统的整体效果,正常query纠错一般是基于query日志数据进行挖掘,具体细节感兴趣的可以在评论区一起讨论)
索引:基于拼音&&字形&&词语&&片段索引进行召回;
iii)纠错排序
粗排:融合语言模型打分、词频、PMI片段相关性打分等特征,进行解码排序;
精排:使用wide&&deep模型,deep部分:当前错误点上下文表示,wide部分:基于形音、词法、语义、用户行为等特征学习原词与候选词的多维度距离表示;
3、开源解决方案
/shibing624/pycorrector包含基于规则&&NN模型的解决思路;
这个开源解决方案,是目前看到功能比较齐全&&方案设计比较靠谱的。
三、基于NN的纠错
构造纠错的pair对,使用encoder&&decoder框架进行纠错。总的来看,目前主要是基于transformer结构,并结合一些nmt的trick或者多目标来优化纠错。具体工业界上线,尤其是在搜索的query纠错场景,由于对时延的要求比较高(正常平均一个query的响应需要控制5ms附近),需要做蒸馏来推上线。
顺带提一下,基于ASR的纠错,纠错pair天然的可以引入nbest犯错可能性,很容易使用这个方向的解决方案。
1、英文文本纠错比赛第一名
Attention-based Encoder-Decoder Networks for Spelling and Grammatical Error Correction2、有道团队:NLPCC中文纠错第一名
A Neural Machine Translation Approach to Chinese Grammatical Error Correction.cn拼写错误:使用SIGHAN CSC Datasets中提供字音、字形相似表召回候选,基于5-gram模型纠错;
语法纠错:采用transformer的seq2seq框架,基于word&&char粒度分别建模;
模型组合:character nmt + character&&subword nmt + subword nmt + subword&&character nmt,四种模型分别得到最优的纠错候选,最后靠5-gram评分得到ppl最低的句子作为纠错结果。
3、阿里巴巴:NLPCC中文纠错第二名
Chinese Grammatical Error Correction Using Statistical and Neural Modelsi)基于规则方法;
ii)基于统计方法:SMT(计算错误句子和正确句子的条件概率)+LM+噪声信道模型,beam search得到最优候选作为纠错结果;
iii)基于nmt方法:seq2seq(encoder和decoder各2层lstm);
iv)模型组合:对上面的几路结果,引入5种冲突解决方案,选出最优的候选作为纠错结果。
4、北京语言大学团队:NLPCC中文纠错第三名
A Sequence to Sequence Learning for Chinese Grammatical Error Correction采用Conv+MultiHopAttention+Seq2Seq模型进行纠错,这套方案是基于fairseq框架,在初是NMT的benchmark方案。在比赛中,是唯一使用单模型的队伍。
5、小米ASR纠错
/p/160837451自构造模糊音生成器进行候选召回,采用BERT进行纠错。
缺陷:基于bert的纠错只有一个encoder,只能进行序列对齐的纠错。
四、工业界解决方案
i)解决方案汇总
百度纠错解决方案
百度中文纠错技术 | ruilog
腾讯纠错解决方案
/developer/article/1030059
达观纠错解决方案
达观数据搜索引擎的Query自动纠错技术和架构 丨 达观动态-达观数据-企业大数据技术服务专家
一些开源的解决方案
/p/40806718
ii)api调用
百度纠错API
文本纠错_文本纠错算法_百度文本纠错-百度AI开放平台
腾讯纠错API
纠错API - 腾讯开放平台wiki.