纠错是从互联网起始时就在一直解决的问题,但是一直作为一些重要技术的辅助、附属功能而默默无闻,譬如搜索引擎、譬如火热的智能写作等。
中文文本纠错任务,常见错误类型包括:
谐音字词,如 配副眼睛-配副眼镜
混淆音字词,如 流浪织女-牛郎织女
字词顺序颠倒,如 伍迪艾伦-艾伦伍迪
字词补全,如 爱有天意-假如爱有天意
形似字错误,如 高梁-高粱
中文拼音全拼,如 xingfu-幸福
中文拼音缩写,如 sz-深圳
语法错误,如 想象难以-难以想象
目前来看,纠错算法分为两个方向:基于规则、深度模型
规则的解决思路
中文纠错分为两步走,第一步是错误检测,第二步是错误纠正;
错误检测部分先通过结巴中文分词器切词,由于句子中含有错别字,所以切词结果往往会有切分错误的情况,这样从字粒度和词粒度两方面检测错误, 整合这两种粒度的疑似错误结果,形成疑似错误位置候选集;
错误纠正部分,是遍历所有的疑似错误位置,并使用音似、形似词典替换错误位置的词,然后通过语言模型计算句子困惑度,对所有候选集结果比较并排序,得到最优纠正词。
深度模型的解决思路
端到端的深度模型可以避免人工提取特征,减少人工工作量,RNN序列模型对文本任务拟合能力强,rnn_attention在英文文本纠错比赛中取得第一名成绩,证明应用效果不错;
CRF会计算全局最优输出节点的条件概率,对句子中特定错误类型的检测,会根据整句话判定该错误,阿里参赛2016中文语法纠错任务并取得第一名,证明应用效果不错;
seq2seq模型是使用encoder-decoder结构解决序列转换问题,目前在序列转换任务中(如机器翻译、对话生成、文本摘要、图像描述)使用最广泛、效果最好的模型之一。
那么笔者最近刚刚听了百度的纠错算法框架,就把听到的和之前收集到的一些材料整理如下。
百度智能纠错技术
可参考百度纠错开放平台:
https://ai.baidu.com/tech/nlp/text_corrector
百度智能纠错体系:
常见错误分三类:
用词错误
文法、句法错误
知识错误
百度纠错的整体框架:
其中核心的关键步骤为:
1 错误检测
2 候选召回