来自:CS的陋室

纠错是搜索引擎中一个非常有特色的模块,对用户输入的内容进行改写从而让用户得到正确的结果,有的时候也会带有一些惊喜度,所以纠错技术是一个搜索体验的加分项,近期突然对这块有兴趣,所以就了解了一下。

纠错技术的背景

人非圣贤,孰能无过,别说是搜索的时候,哪怕是我们打字、写作文的时候,都会出现错字,一般的错别字不会对最终目标带来很大影响,且出现频率很低,不拘小节的我们常常会忽略这样的小问题,但是,在搜索场景下,错别字意味着可能就搜不到内容了,对于用户而言,就是需求无法满足,造成了很差的体验,因此在搜索场景中,就很有必要去纠错。

错误是如何产生的

要去纠错,先要去看看错误是怎么产生的。

首先是误操作类型,这种类型可以从输入法角度去看。

  • 拼音输入法。常会出现同音异形字,例如周节伦等。

  • 笔画输入法或者手写输入法。常会出现形似字,例如博和傅。

然后是用户的主观理解,有的时候用户只是听说过而没见过,或者就是理解问题,导致主动地出入了错误的内容,例如飞扬拔(跋)扈,然后有一些名词,例如小说、音乐、电影等,写错字是非常容易的。

当然,也有用户图方便,或者输入问题,导致直接输入拼音或者拼音前缀,或者就是因为记忆的原因,输错了。

当然这里也要补充一些常见的问题举例:

  • 谐音。深圳-森圳。

  • 别字。师傅-师博。

  • 中英文。Taylor swift-泰勒斯威夫特。

  • 近义词。爱情呼叫转移-恋爱呼叫转移。

  • 形近字。高粱-高梁。

  • 全拼。深圳-shenzhen。

  • 拼音前缀。北京-bj。

  • 内容不完整。唐人街探案-唐人。

总之错误千奇百怪。理解错误产生的机理,我们就可以尝试去处理这些问题。

词典与规则方法

词典是搜索系统中非常常用的方法,词典具有高速、高准的优点,如果词典的覆盖度高,甚至可以达到高召回的效果,因此词典基本是搜索系统中的核心存在,我们不应该小看他,而是尽可能挖掘他的潜能。

词典方法,说白了就是对query找对应词典里有没有,如果有就改写过去,这种方法的优点在于速度快,而难点在于怎么去挖掘这个词典。

至于怎么挖掘这个词典,方法有很多底层数据库抽取,用户日志等,都有很多构建起这样的词典,能够大大降低耗时,复杂度至于query和单词长度有关。那么一般都有什么词典呢,我们来一个一个看看。

  • 拼音和拼音前缀词典。先将query或者单词转为拼音,然后通过通过拼音召回对应的结果,完成纠错。

  • 别字词典,记录一些常见的错别字,例如百度的形近词表就很不错(就在百度百科里面)。

  • 其他改写字典。一般基于具体业务来改写,例如用户输入唐人街探案,其实唐人街探案有3部,我们应该给那个,需要基于热度等方面去改写到具体最合适的一部。

词典只是能够匹配到合适的结果,但是我们需要知道的是,改写的内容不能和原来差距太远,否则会出现很多意料之外的结果,因此改写不能大改,只能改微调,否则出来的结果会让用户感到很懵逼。控制的方法主要是编辑距离

所谓的编辑距离,就是改写前到改写后,需要经过的操作多少,说人话就是两句话的不同点有几个,精确到字级别。深圳-森圳的编辑距离就是1。通过编辑距离的约束,一般能够让两者的差距不是很大。

我知道很多人热衷于用语义相似度之类的操作,不管别的什么方法,编辑距离一定要约束,用户强调的是直观感受,语义相近与否不是他们第一个关心的,只有当字相近的结果不好的时候考虑语义相近才是用户的实际反映,且错别字带来的语义变化非常大,此处用予以相似度其实不完全合适。

模型类方法

说是词典和规则好处很多,但是在泛化能力上,模型还是很强的。那么在模型视角下,其实会分为下面3个步骤进行分析处理。

  • 错误诊断。即判断有没有错。

  • 修正召回。召回可能的修改项。保证召回率

  • 修正确认。判断最终需要的修改项。保证准确率。

当然,如果模型足够强力,召回和确认两个步骤也可以合并,具体看准招和耗时了。

其实这个思路最广泛的应用就是推荐系统,召回和排序分离,这个我在大概是去年很早的一篇文章里谈到在这个,这是推荐系统里面非常重要的思想,这个思想其实在很多地方可以迁移下面的一条公众号文章。

至于模型层面,有下面的思路。

  • kenlm统计语言工具。运用统计学方法进行语言建模从而检测和修正错误。

  • rnn_attention。RNN加上attention还是一个非常有意思的方法。

  • rnn_crf模型:说起来你们可能不信,这个思路来自阿里2016参赛中文语法纠错比赛的第一名的方法。

  • seq2seq_attention模型:比RNN强一些,长文本效果不错,但是容易过拟合。

  • transformer:线性优秀的序列表征模型,大家懂的。

  • bert:中文微调,最妙的是mask可协助纠正错别字。

  • conv_seq2seq模型:基于Facebook出品的fairseq,在NLPCC-2018的中文语法纠错比赛中,是唯一使用单模型并取得第三名的成绩。

小结

怎么说呢,目前我还只是在探索,深度不是很够,后面有所补充,再和大家交流,参考文献放这里吧:

  • 中文文本纠错算法--错别字纠正的二三事:https://zhuanlan.zhihu.com/p/40806718

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

  • 中文文本纠错算法走到多远了?:https://blog.csdn.net/sinat_26917383/article/details/86737361

下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!后台回复【五件套】
下载二:南大模式识别PPT后台回复【南大模式识别】

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家:

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读

专辑 | 情感分析


整理不易,还望给个在看!

搜索系统中的纠错问题相关推荐

  1. 搜索系统中的Learning To Rank模型:GBRank

    搜索系统中的Learning To Rank模型:GBRank FesianXu 20220326 at Baidu Search Team 前言 Learning To Rank(LTR)模型是对搜 ...

  2. 搜索系统中的文本相关性实践经验

    前言 文本相关性问题就是判断两个文本之间的相关程度,也是搜广推中的重点问题之一.本篇文章主要粗略总结这方面的一些实践经验,包括特征.模型以及部署上需要注意的问题,都是本人在工作中积累的实际经验,非综述 ...

  3. 搜索系统中所有以.repo结尾的文件并删除(find命令详解及xargs命令详解)

    find / -name *.repo | xargs rm –rf //搜索以.repo结尾的文件并删除 find命令详解 精细查找文件或目录d find [ 查找范围 ] [ 查找条件表达式 ]常 ...

  4. 推荐搜索系统中关于多场景学习的常见方法

    今天的博文主要参考了以下材料: 1 2020年阿里<Scenario-aware and Mutual-based approach for Multi-scenario Recommendat ...

  5. Linux系统中搜索文件的方法有哪些?(最全总结,建议收藏)

    搜索文件专栏全部文章: Linux系统中搜索文件的方法有哪些 如何使用find命令搜索到自己想要的文件 ack 命令的基本用法详解 ag命令的使用详解 在Linux系统中,常用的搜索文件的方法有以下几 ...

  6. 百度信息流和搜索业务中的弹性近线计算探索与应用

    导读:在生产环境的PaaS平台中,为了应对流量增长.负载尖峰.软硬件升级.大规模局部故障等,通常需要留有一定的资源冗余.百度信息流和搜索服务在全网提供超过5个9的可用性,为了应对极端情况,各个地域的P ...

  7. 京东到家搜索系统架构演进

    目录 一. 前言 二. 搜索系统架构演进 2.1 到家搜索系统1.0 基于LBS搜索召回场景 建立"可用"的搜索系统 小结 2.2 到家搜索系统2.0 重构召回 排序模型小试牛刀 ...

  8. 百度信息流和搜索业务中的弹性近线计算探索与应用 | 文末送福利

    导读:在生产环境的PaaS平台中,为了应对流量增长.负载尖峰.软硬件升级.大规模局部故障等,通常需要留有一定的资源冗余.百度信息流和搜索服务在全网提供超过5个9的可用性,为了应对极端情况,各个地域的P ...

  9. linux搜索关键字并定位,Linux系统中文件定位与查找(示例代码)

    Linux系统中文件查找 关键词 文件查找 | find | locate 本文主要介绍有关文件查找的两个命令--find和locate,以及压缩打包的命令--compress, gzip,bzip2 ...

  10. 计算机硬盘无法查找文件,硬盘系统中的文件搜索技巧整理

    硬盘系统中的文件搜索技巧整理 发布时间:2014-03-04 09:07:58   作者:佚名   我要评论 电脑已成为一个知识库,许多文件都可以从里面找到,当我们要寻找以前看过的某个文件时,如果记不 ...

最新文章

  1. 看傻眼了,真的是软件测试福利来了,最全资料包
  2. aspx 使用什么中间件_.NET Core中间件与依赖注入的一些思考
  3. (Incomplete) UVa 719 Glass Beads
  4. emf java_Java实现emf图片字节流转png(jpg)图片字节流
  5. 看一下iFM最新文章
  6. hdu 1394(树状数组求逆序数)
  7. Benelux Algorithm Programming Contest 2016 Preliminary 题解
  8. 精简SWT FormLayout的用法
  9. 通过在Chipotle用餐了解模板方法设计模式
  10. Spring事务操作-事务引入
  11. sprinboot中编程式事务_SpringBoot系列教程之事务传递属性
  12. ubuntu如何查看网卡名称_ubuntu更改网卡设备名称
  13. 个人随笔——衰人自叙卷贰
  14. 计算机等级考试一级宝典,计算机等级考试一级通关宝典.doc
  15. ktv收银管理系统服务器,KTV收银管理软件
  16. 上传本地网页到github网址完整详细步骤
  17. 数据分析——实习僧数据分析岗招聘信息分析
  18. window启动activemq失败
  19. 剑指Offer面试题22(Java版):栈的压入、弹出序列
  20. 问答ChatGPT-4:探索未来微数据中心IDC的发展趋势

热门文章

  1. .NET Core全面扫盲贴
  2. Jsoncpp 使用方法大全
  3. 类扩展(Class Extension)
  4. spring+hibernate 下载
  5. 天翼空间应用商城 App Market体验
  6. FastSpring.NET V2.05 final 发布[集成Spring.net NHibernate Ajax]
  7. AS数据库自动备份的DOS语句
  8. 【vue】--路由解耦 传值的方式
  9. 2019年新年第一天,我也制定一下2019年计划,
  10. Django中请求的生命周期