搜索系统中的纠错问题

标签: | 发表时间:2021-02-12 23:59 | 作者:
出处:https://mp.weixin.qq.com
纠错是搜索引擎中一个非常有特色的模块,对用户输入的内容进行改写从而让用户得到正确的结果,有的时候也会带有一些惊喜度,所以纠错技术是一个搜索体验的加分项,近期突然对这块有兴趣,所以就了解了一下。 (学习周报本周停,学习内容都在这了)

纠错技术的背景

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

错误是如何产生的

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

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

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

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

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

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

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

  • 谐音。深圳-森圳。

  • 别字。师傅-师博。

  • 中英文。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



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

(1)点击页面 最上方"AINLP",进入公众号主页。

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

感谢支持,比心

欢迎加入搜索技术交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注搜索技术

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

相关 [搜索 系统 问题] 推荐:

搜索系统中的纠错问题

- -
纠错是搜索引擎中一个非常有特色的模块,对用户输入的内容进行改写从而让用户得到正确的结果,有的时候也会带有一些惊喜度,所以纠错技术是一个搜索体验的加分项,近期突然对这块有兴趣,所以就了解了一下. (学习周报本周停,学习内容都在这了). 人非圣贤,孰能无过,别说是搜索的时候,哪怕是我们打字、写作文的时候,都会出现错字,一般的错别字不会对最终目标带来很大影响,且出现频率很低,不拘小节的我们常常会忽略这样的小问题,但是,在搜索场景下,错别字意味着可能就搜不到内容了,对于用户而言,就是需求无法满足,造成了很差的体验,因此在搜索场景中,就很有必要去纠错.

Twitter实时搜索系统EarlyBird

- - CSDN博客互联网推荐文章
twitter对存档的tweet使用lucene做全量索引,新发的推文则是实时索引,实时检索(10秒之内索引). 实时索引和检索系统叫EarlyBird. 感觉写得比较清楚简洁,只要这些信息足够真实可信,完全可以做实现参考. 1)基于lucene + java,michael busch是lucene committer.

4个步骤,小结搜索系统

- - 人人都是产品经理
搜索系统作为用户自行使用的引导工具,重要程度不言而喻;本文主要从4步:需求识别、检索、排序、展现来总结搜索系统的工作机制. 搜索是一个比较有年份的功能,他不是一个简单的搜索框,毕竟搜索造就了一个百度帝国. 搜索系统在产品架构中是帮助用户搜索到他们想要的内容,当用户不知道如何通过其他路径直接获取特定内容的时候才会使用,也就是说搜索是用户自行使用最后的一个引导工具,重要程度不言而喻.

分布式向量搜索系统 Vearch

- - OSCHINA 社区最新软件
Vearch 是一个分布式向量搜索系统,可以用来计算向量相似度,或用于机器学习领域,如:图像识别、视频识别或自然语言处理等各个领域. 本系统基于 Faiss 实现, 提供了快速的向量检索功能. 提供类似 Elasticsearch 的 Restful API 可以方便地对数据及表结构进行管理查询等工作.

思考系统API设计的问题

- edware_love - C++博客-首页原创精华区
最近正好在思考系统API设计中考量的一些问题,. 我现在的理解是这样的,假设有巨大的真实内存. windows首先将高2G的内存自己占了,用作各种内核对象. 这2G内存共享给每个进程,但进程不能直接访问,只能通过windows给定的函数访问. : 然后每个进程都给他2G内存,进程如果创建自己的对象就放到自己那2G内存里面,如果要建立内核对象就放到共享的那高2G里面去.

电商搜索里都有啥?详解闲鱼搜索系统(长文)

- - 掘金 后端
搜索是电商平台的核心流量入口,承载着平台主要的 成交引导、 意图收敛、 活动投放. 一个稳定、高效、可扩展的搜索系统是电商平台得以生存发展的基石. 本文探讨如何构建 完善的商品搜索系统, 并根据闲鱼二手交易的差异化特性介绍 闲鱼搜索系统的时效性优化. 首先,构建一个搜索系统——电商场景的搜索.

关于搜索建议的两点小问题

- 电饭锅 - 所有文章 - UCD大社区
最近在做搜索设计时,发现了两个容易纠结的小问题,在这里谈谈自己的一些分析. 问题一:提交的关键字是哪个. 凡客的这个例子中,搜索建议“时尚斜拉链”高亮显示,这个时候点击“搜索”,提交的关键字是输入框中的“s”还是“时尚斜拉链”呢. 再看看百度,当搜索建议中的“sina微博”高亮(鼠标悬停)时,点击“百度一下”,提交的关键字是输入框中的“s”,而不是高亮的“sina微博”.

二分搜索的基本相关问题

- - 博客园_首页
二分查找是基于分治思想的一种算法,所谓分治思想就是将一些规模很大难于直接解决的问题,缩小为一个较小的问题就很容易解决的思想,(当然它的子问题仍可以继续分解为相同的子问题). 归结为一句话就是:“以大化小,各个击破,分而治之,组合取果”. 二分查找作为一种高效的查找算法,是解决一些有序序列查找的不二之选.

使用elasticsearch+simple_flow搭建实时日志搜索系统

- - ITeye博客
    在实际的系统中,我们经常会进行分布式的系统部署,但是这样会导致一个问题,系统日志也被分散开了,导致根据日志进行错误定位不太方便,所以,利用simple_flow实时流的特点,再配合elasticsearch建立索引,搭配构建一个实时日志搜索系统.具体流程图如下:. 1.启动elasticsearch, 这个参考官方文档  http://www.elasticsearch.org/.