ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于中文的搜索拼写纠错,大厂是如何实现的?

2021-07-06 08:52:04  阅读:259  来源: 互联网

标签:BERT 困惑 模型 拼写 大厂 纠错 句子 字典


中文拼写检查一直以来都是研究中的难题,目前主要采用的是基于规则的方法和基于统计的方法,此外再增加人工校验的方式来提升效果。

基于规则的方法思想简单、易于实现,但是由于不能覆盖所有的错误现象,因而其查错纠错的能力极其有限。
基于统计的方法主要使用基于N元语法模型(N-Gram)的查询纠错技术,N-gram的优点是对在训练集测试集同分布的要求比较低、解释性强、原理清晰,但是对语料数目要求则非常高,而且无法利用好词语在句子中的上下文环境,不能捕获长距离的依赖。

那么如何更好的实现中文拼写纠错呢?

 

 

本方案主要分为三部分,包含建立规则字典、字词纠错检测模块、评价纠错模块。

1.建立规则字典

建立常用字字典、相似音字典、相似字字典,这些都可以从网上进行获取。

根据场景建立自定义词典,作为检测白名单。

基于搜索历史query简历词频表,将用户自定义词典也添加到词频表里。

根据历史搜索数据自定义困惑集,可用于后续直接纠正,提升最终纠正效果。

 

2.字词纠错检测模块

2.1 基于HanLP平台的“错词检测模块

HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。

HanLP主要功能包括分词、词性标注、关键词提取、自动摘要、依存句法分析、命名实体识别、短语提取、拼音转换、简繁转换等等。
Github地址:https://github.com/hankcs/HanLP
官网地址:http://hanlp.linrunsoft.com/

利用HanLP分词模型对query进行分词得到word序列[word1,word2,word3,...,wordn],并进行词性标注。将分词和词性标注后的结果进行NER,识别人名(nr)、机构名(nt)或者地名(ns)的词加入至白名单。最好将不在白名单的word加入到疑似错误集中,对于单字词则指定错误类型为字粒度,对于多字词则指定错误类型为词粒度。

 

备注:此实验使用HanLP可以达到目标,如若追求更高精度,也可以基于自己搜索场景的历史数据训练分词模型和NER模型。

2.2 基于BERT预训练模型的错字检测模块

BERT模型此前讲过多次,本次实验使用Bert原因是采用其强大的语义表征能力,BERT拥有多层注意力结构(12层或24层),并且在每个层中都包含有多个“头”(12头或16头)。由于模型的权重不在层与层之间共享,一个BERT模型相当于拥有12×12=224或24×16=384种不同的注意力机制,不同层能够提取不同层次的文本或语义特征,因此BERT具有超强的文本表征能力。

步骤如下:

1. 提取query特征——将query中的每个字符转换为其在BERT中文模型字典里的字典序号即为句子的特征,此外还有位置特征Position Embedding,如果句子长度小于序列最大长度,则补0直到长度满足。

2. 计算query中每个字符出现的概率——在BERT模型框架的基础上添加一个Softmax层。将句子特征从BERT的输入层输入到模型里,通过中间隐藏层复杂的计算后,Softmax层的输出结果即为BERT字典中每个字出现在句子每个位置的概率(矩阵维度:序列最大长度*BERT字典大小)。

3.找出疑似错字——在剔除白名单中出现的字符的概率后,对剩下的所有字符的概率计算其平均绝对离差值,并且通过变量值与其中位数的离差除以平均绝对离差计算标准得分。对于概率小于平均绝对离差并且标准得分大于阈值的字符,我们认为是疑似错字,将其加入到疑似错误集中。

 

 

3.评价纠错模块

对于单字词,取其近音字(同音同调字、同音异调字、近音同调字、近音异调字)、同形字以及原字作为纠正候选,按照词频大小进行排列;
对于多字词,对词语里的所有字符的近音字、同形字以及原字做笛卡尔积,如果新组成的多字词存在于词频表里,则加入纠正候选,最后按照词频大小进行排列。

针对纠正候选池,遍历自定义困惑集的所有变体,如果变体在句子中,则直接将变体加入到疑似错误集中,纠正的时候直接用困惑集里对应的本体替换即可。如若不在困惑集中的变体,则利用句子困惑度作为评价函数进行排序。如何计算句子困惑度?首先将纠正候选逐个替换到错误位置上,生成新的句子。提取新句子特征,计算每个字出现的概率,然后将每个字出现的概率取log累加起来求平均最后取反,则可得句子困惑度。

困惑度越低表示句子越流畅,最终取困惑度最低的纠正候选作为最终纠错结果。

 

本实验充分发挥了BERT的强文本表征能力,利用BERT检测错字及HanLP辅助检测错词和筛选检测结果,使用NER模型避开人名、地名、机构名等命名实体之类,从而降低误检率。在评价纠正候选阶段,利用BERT语言模型计算句子困惑度,作为纠正候选的评分函数。在实际场景中,也加入了用户自定义词典、自定义困惑集模块以及检测白名单或者指定纠正结果来提升纠错准确率,在实际线上取得了比较好的结果。

 


4e16f6e28ab354f0f7fde0bed8294b21.jpeg

最后欢迎关注同名微信公众号:药老算法(yaolaosuanfa),带你领略搜索、推荐等数据挖掘算法魅力。

标签:BERT,困惑,模型,拼写,大厂,纠错,句子,字典
来源: https://blog.51cto.com/u_15277918/2985381

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有