相关搜索是检索功能的一个扩展,用来告诉用户自己输入查询词的情况。

如果输入错了,可能会纠错提示用户:“想找的是不是”; 或者又叫拼写检查

另外还会在显著位置提供与输入查询词相关的其他查询词,例如百度结果页下面的提示,

而对于电商网站这两个功能会合在一起,下面分别说说我对这两个任务的理解。

一、纠错功能,英文叫做spellcheck,在英文上做纠错比较直接,就是看单词的编辑距离,目标当然就是对于任意一个输入,能在大量正确而靠谱的查询词中找出编辑距离满足要求的一个或者几个。

面对这样的spellcheck任务,模型上就是要推算用户输入错误单词w的条件下,是正确单词c的概率,也就是argmaxc P(c|w)。一般有两种方案:一种,是http://norvig.com/spell-correct.html 介绍的办法,另一种是lucene-suggest里spellchecker的方法。

1. 第一种,在norvig介绍的方法中,详细的阐述了argmaxc P(c|w)的转换和求解办法。 这个概率不好直接算,但可以根据贝叶斯定理等价于argmaxc P(w|c)*P(c) / P(w),因为是比较各个c之间的大小所以P(w)可以省略,最后就变成求argmaxc P(w|c)*P(c)就行了。P(c)可以看作是c在文本集合中出现的可能性;P(w|c)意味着本来心里想成是c结果打成了w的概率。那就很好办了,P(c)可以从靠谱的语料中统计;P(w|c)可以用编辑距离来模拟关系,即编辑距离小的概率大。在实现上,对一个输入word,产生出有编辑距离1的字符串,就包括几种情况:删除一个字符、交换临近字符、把一个字符改成另一个、增加一个字符。这样产生的候选集会比较大,接近80%的纠错要求是满足了。如果在编辑距离1的基础上再产生编辑距离为2的更大的候选集,几乎就覆盖所有错别字了。原文讲得比较精细,建模思路也很清晰,建议仔细阅读,这就不细说了。

2.第二种方案就是lucene的spellchecker方法,上面方案是把编辑距离的临时产生到词典中检查,这种方案就是预先进行词典索引,当然是ngram的,对一个word任意2位或者3位字符进行索引,对用户输入的一个字符,也同理按2或3位产生字符片段,利用OR的关系去检索,命中多的word得分更高最可能是拼写错误的。当然因为是OR查询关系,所以会有很多也只“沾边”的词也被命中,所以最后除了考虑查询命中高分的,还要对命中的和输入的进行一步编辑距离阈值过滤。举个例子“word”,我们会有n2:wo/n2:or/n2:rd/n3:wor/n3:ord 这些碎片进行索引,当用户输入一个worg,会产生n2:wo/n2:or/n2:rg/n3:wor/n3:org,这些检索条件,会查到很多work, worth等等。细节上可以有一些增强,比如单词两头的字符碎片权重更大等等。

这两种求解argmax P(c|w)的办法,norvig的办法比lucene-spellcheck的办法在线上的环节多一些,效率上估计还是差一点,但提供了很巧妙的求解思路,值得细细品味。

二、相关搜索的功能,学术界研究的比较多,有各种提法,query rewrite,query substitution, query extension等等,算法也五花八门,大多为了结果好看加入了复杂的计算,和针对数据情况的考量。一般工程上需要的是通用的办法,再增加一些特殊的考虑来提高效果。过去曾经有幸看到一篇貌似不是很正规的论文,方法非常简单,思路清晰,非常适合在实际工程上应用起来。论文也不记得标题了,不过思想还记得很清楚:就是寻找query词之间的强弱联系。

一般情况下构成query之间的关联有三种主要的因素:

     1. 字面意思的关联;如果一个query比另一个query 多了或者少了一个词,那么这两个词肯定是有关联的,长短语是短短语的具体化,反之是泛化,比如“笔记本 内存条 8G”就是“笔记本 内存条”的细化,反过来看“笔记本 内存条”不仅包括“8G”也包括其他容量,是更泛化的查询词。

     2. 用户输入行为的关联;用户在一个会话之中连续输入的多个词之间可以认为是有关联的,即做一个人的需求反应在查询词上。比如用户查询了“键盘”他可能还有需要去买点别的,例如“鼠标”之类的,如果这样的情况出现了多次,那么“键盘”和“鼠标”就可以看成是有强联系的。

     3. 用户点击行为的关联;用户为了找一个东西的时候可能词不对反复更换查询词,或者不同人用不同的表达,如果都点到一个结果,可以看做用了不同的办法找到同样的东西,殊途同归的味道。那么这些落到同一结果的路径,即query,也可以看做是有强关联的。

这三种是比较通用的关联关系,也很直接,并且数据能很容易获得或者被日志记录下来的。除了这几种,还可以根据具体业务情况增加其他关联考虑。最后,我们可以根据经验或者统计分析调整多种关联关系的权重。实现上,对一个query,需要让查那些和它有关联的queries,都能被找出来。于是想到可以用检索系统,传统的检索系统是对文档的内容直接分词出一个个token后建索引,这里是对query,进行特殊“分词”出那些关联的token去建索引。

最后,如果要把纠错和相关搜索结合在一起,就有很多综合考虑了。总之相关搜索是检索之外比较影响用户体验的一个服务,值得投入精力把它做好。

搜索词纠错(拼写检查)、相关搜索的原理与实现相关推荐

  1. dede搜索php在哪,dede搜索页面怎么调用及相关搜索调用

    dede搜索页面怎么调用,那几天有事情,所以导致博客几天都一直没有更新,之前我们讲过dede内容页面和dede列表模板的调用,今天我们一起来学习下搜索页面的调用,很多做企业站朋友们都不知道dede的搜 ...

  2. 搜索词纠错、相关搜索的原理与实现

    相关搜索是检索功能的一个扩展,用来告诉用户自己输入查询词的情况. 如果输入错了,可能会纠错提示用户:"想找的是不是" . 另外还会在显著位置提供与输入查询词相关的其他查询词,例如百 ...

  3. 百度搜索词API接口,淘宝搜索词API接口

    百度和淘宝并没有正式的提供一个公开API给我们用,但是经过分析他们的源代码,还是找到了解决方法. 1 2 3 4 5 6 7 8 9 /*baidu&taobao callback*/ fun ...

  4. php爬取百度相关关键词,PHP实现抓取百度搜索结果页面【相关搜索词】并存储到txt文件示例...

    本文实例讲述了PHP实现抓取百度搜索结果页面[相关搜索词]并存储到txt文件.分享给大家供大家参考,具体如下: 一.百度搜索关键词[脚本之家] [脚本之家]搜索链接 https://www.baidu ...

  5. 如何让关键词进入百度相关搜索列表?

    作者:常远远 链接:https://www.zhihu.com/question/53995333/answer/137422979 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  6. 通过搜索词挖掘关键词,关键词挖掘工具

    关键词和搜索词是我们经常容易混淆的SEO词汇.虽然关键词和搜索词之间有很多的相似之处,但它们并不是一回事,区别关键词和搜索词主要从使用角度出发,用户使用搜索词进行答案搜索,SEOER通过关键词优化排名 ...

  7. 刷百度相关搜索,刷百度下拉列表框

    人们在搜索某一类的关键词的时候,百度在下方给搜索者提供一些比较常用的或者是热门的相关关键词,来帮助搜索者寻找到自己所要找的价值信息.相关搜索的含义就是搜索引擎根据每天网络搜索动态的变化,告诉你大家每天 ...

  8. 每日top3热点搜索词统计案例

    数据格式: 日期,用户,搜索词,平台,版本 需求: 1.筛选出符合条件(城市,平台,版本)的数据 2.统计每天搜索uv排名前三的搜索词 3.按照每天的top3搜索词的uv搜索总次数,倒叙排序 4.将数 ...

  9. 什么是搜索词?有什么用?

    首先,当我们在任何一个搜索引擎搜索我们所感兴趣的东西时,我们所输入的词语被称为搜索词,每个人的搜索习惯不同,我们哪怕搜索同一个物品,所使用的关键词也会有所差别.比如女生有各式各样的首饰,为了不乱丢,我 ...

  10. 百度统计搜索词是广告怎么办?建议设置过滤规则排除

    最近经常在百度统计中看到有很多垃圾广告的搜索词,甚至连 Top 搜索词.Top 来源网站.Top 入口页面中都出现很多垃圾广告.比如老古的一个测试网站就出现这种情况,具体如下图所示: 据了解,网络上有 ...

最新文章

  1. 打开别人Xamarin项目找不到android.jar文件
  2. 在ubuntu16.4中安装mysql_【Linux】Ubuntu16.04环境下MySQL的安装与使用
  3. python期末考试编程题_Python_编程题期末必看
  4. WARNING: cell0 mapping not found - not syncing cell0
  5. java sunjce,无法初始化类javax.crypto.SunJCE_b
  6. utilities(matlab)—— PSNR 值的计算
  7. 性能测试的原则和方法
  8. 阿拉伯数字转中国人民币大写字符串
  9. 上拉电阻的作用原理_【连载九】手机维修电路基础电阻
  10. NTC功率型热敏电阻
  11. Server、Service和Servlet的区分
  12. LeetCode1-580题汇总
  13. 自己DIY一个pinephone——debian与主线linux在红米2(msm8916)上的移植 (二)
  14. 将距离度量学习应用于购物问题
  15. 利用mininet模拟SDN架构并进行DDoS攻击与防御模拟(Ryu+mininet+sflow+postman)
  16. 汇编语言|实例1——大写字母转换成小写字母
  17. android 组件透明,万能小组件透明小组件-万能小组件透明背景设置v1.0.0 安卓版_永辉资源网...
  18. HP WINDOWS XP PRO SP3 OEM 中文简体完整版
  19. 解决无法从公司 Maven 私服下载依赖的问题
  20. 卫健委最新报告对医疗设备售后服务产生了什么影响

热门文章

  1. 梦幻星空html,如何使用HTML5的canvas来画一个梦幻星空,快来学习一下吧 | 龙奔网...
  2. codeforces GYM 101431B (后缀数据结构)
  3. 算法练习, 红白花放置方法数
  4. 秋来秋去,飘他方的你可有着凉
  5. java基于ssm的校车车辆调度管理系统
  6. r语言员工离职_基于随机森林的优秀员工离职因素实证分析及预测
  7. 数据挖掘实战:员工离职预测(训练赛)
  8. 《人类简史》读书笔记
  9. 微信分享图标设置,以及wx.config配置
  10. 微服务Feign调用后开启Schedule报错No thread-bound request found: Are you referring to request attributes outsid