1.何为相关query

我通常也把相关query称为相似query,搜索日志中一个用户在短时间内的一系列搜索词被称为相关query。相关就是两个query间有一定的关系,反映了用户在当时的需求。本文就以应用搜索为背景来介绍相关query。

2.有什么作用

相关query的作用就很多了:

  • 错词纠正:输入一个错误的词找不到应用,然后输入一个正确的词
  • 同名互换:和错词纠正是一个场景,如中英文名称(cytus和音乐世界),别名(艾达的梦和纪念碑谷)等
  • 同义词:对战和对打;台球和桌球等
  • 同类型应用:如微信和QQ,美团和糯米等
  • 内容补充:如ttkp和天天酷跑,土和土豆,天之痕和轩辕剑等

当用户输入一个query时,后台加入其相关query一起搜索,就可以更好的理解用户,返回更多、更准确的结果,减少搜索次数,提高下载次数,提高转化率。

3.如何挖掘

候选数据

分析每天的用户日志,从搜索日志中提取短时间(15分钟或30分钟)内的搜索词组成候选相关query对<a, b>。最后分析的日志天数越多越好,数据越多挖掘出的相关query对越多,结果也越准确。

特征抽取

  • 共现相似度:条件概率的变体,增加了对大query的惩罚(出现频率比较高的top query,如微信,大query和其他query共现的可能性更大)

              

  • 编辑距离:反映两个query词在内容上的相似程度,如天天赛车和天天飞车,它们都有天天,有一定的加分贡献,但应该以共现相似度为

模型训练

  • 人工标注样本数据,指出一定量的query对(query pair)是相关query或者不是
  • 确定候选机器学习算法,如逻辑回归、SVM或者决策树等,用样本数据训练模型
  • 用训练好的模型预测原始数据,根据实际效果最终确定一个算法

补招漏选数据

最终结果的多少的主要影响因素有用户搜索日志间隔、日志天数。具体实现过程中发现和大query相关的小众query招不回来,因为其本身搜索次数太多。但我们需要大query来为小query导流。

<纪念碑谷(44736次),天空迷宫(200次)>,共现次数是89次,相似度是0.004,相似度太低,导致纪念碑谷无法召回天空迷宫。

<天空迷宫,纪念碑谷>其相似度是0.069,被认为是相关query。

所以我们会反向找一次,对于相关query对<天空迷宫,纪念碑谷>会判断下其反向对<纪念碑谷,天空迷宫>的情况,如果发现纪念碑谷是大query(超过一定次数如1w)且其自身相似度超过一定域值(如0.003),我们也会把<纪念碑谷,天空迷宫>给招回来。

线上反馈

在线系统使用离线数据(相关查询对)进行了线上搜索结果的补充或召回,将相关query对应的应用展示给了用户,用户会选择下载与不下载。我们就获得这些数据来重新训练算法模型。

queryA的下载列表<appIds>

从appIds中找到queryA的相关queryB召回的应用:app应用名与queryB的编辑距离超过一定值,就认为该app是由queryB召回

如果queryB召回的应用下载数超过一定域值,我们就认为这是一个正向case,queryB是queryA的相关query

如果queryB召回的应用没有下载或下载小于一定数目,就认为是一个负向case,queryB不是queryA的相关query

这样我们就可以通过线上展示结果获取一份真实的标注数据,用该数据去重新训练算法,获得一个新模型来重新预测原始数据。

线上反馈的作用就是找到真实标注数据,替换旧样本获得新模型,从而不断提高模型的准确度

持久化good case,避免回退

最初<queryA, queryB>是相关query对,每当用户搜索queryA时,就会出来queryB的结果。时间久了,用户输入queryA后就不会再输入queryB,那就导致可能在某段时间后挖掘不出该相似对,那queryA下就无法显示queryB对应的应用;用户又会渐渐的在输入queryA后再次输入queryB才能获得想要的结果。这样就导致效果起伏,我们需要避免这种情况。

所以对每次线上反馈中的正向case,我们都做持久化,以白名单的形式强制加到最终的相关query中。以此来积累正向case,减少效果回退的情况。

4.整体流程

到现在为止,我们就拥有了一个动态、完整、可持续的离线在线相互反馈促进的系统了。

相关query挖掘的更多相关文章

  1. 查询改写(Query Rewrite)方法总结

    为何需要Query改写 Query分析是搜索引擎的一个重要模块,对搜索结果的覆盖率和相关性至关重要.搜索引擎的检索过程包含了两个重要的阶段:匹配和排序.匹配也叫召回,表示根据用户的查询条件,尽可能多地 ...

  2. HipHop算法:利用微博互动关系挖掘社交圈

    /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/                  CopyMiddle: 张俊林 TimeStamp:2012年3 月 在微博环境下,如何 ...

  3. 搜索广告与广告网络Demand技术-搜索广告

    搜索广告 搜索广告就是一个典型的Ad Network,但是搜索广告非常重要,它的收入非常高,所以它有其独特之处,复杂度也比展示广告要高.它与展示广告在点击率预测,检索部分差不多,它的特点:1. 用户定 ...

  4. CIKM Competition数据挖掘竞赛夺冠算法陈运文

    CIKM Competition数据挖掘竞赛夺冠算法陈运文 背景 CIKM Cup(或者称为CIKM Competition)是ACM CIKM举办的国际数据挖掘竞赛的名称.CIKM全称是Intern ...

  5. 地图POI类别标签体系建设实践

    导读 POI是“Point of interest”的缩写,中文可以翻译为“兴趣点”.在地图上,一个POI可以是一栋房子.一个商铺.一个公交站.一个湖泊.一条道路等.在地图搜索场景,POI是检索对象, ...

  6. logstash日志分析的配置和使用

    logstash是一个数据分析软件,主要目的是分析log日志.整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是v ...

  7. Atitti 知识图谱构建方法attilax 总结

    Atitti 知识图谱构建方法attilax 总结   1.1. 知识图谱schema构建(体系化)1 1.2. 纵向垂直拓展(向上抽象,向下属性拓展)2 1.3. 横向拓展2 1.4. 网拓展2 1 ...

  8. Apriori原理与实践

    Apriori: 其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集.经典的关联规则数据挖掘算法Apriori 算法广泛应用于各种领域,通过对数据的关联性进行了分析和挖掘,挖掘出的这 ...

  9. Apriori算法

    APRIORI Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集.而且算法已经被广泛的应用到商业.网络安全等各个领域. Apri ...

随机推荐

  1. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  2. CLR 这些年有啥变化吗?

    引言 首先想给初学者推荐下<CLR via C#>这本好书,做.Net开发的开发者应该都读一下.为避免广告之嫌,所以这里只提供豆瓣书评的链接. CLR 作为.Net 程序跨平台运行的载体, ...

  3. 千呼万唤始出来,微软Power BI简体中文版官网终于上线了,中文文档也全了。。

    前几个月时间,研究微软Power BI技术,由于没有任何文档和资料,只能在英文官网瞎折腾,同时也发布了英文文档的相关文章:系列文章,刚好上周把文章发布完,结果简体中文版上线了.哈哈,心里有苦啊,早知道 ...

  4. 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)

    前面我们是直接用 curl 测试 VIP,在更为真实的场景中通常会使用 floating IP 访问 VIP. 下面我们给 VIP 关联一个 floating IP,再进行测试. 访问 Project ...

  5. 使用C/C++写Python模块

    最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...

  6. JS继承类相关试题

    题目一: //有关于原型继承的代码如下:function Person(name) {   this.name = name;}Person.prototype = {     getName : f ...

  7. linux应用调试技术之GDB和GDBServer

    1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...

  8. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  9. 修改MySQL默认字符集编码

    好记心不如烂笔头,很多东西当时没记下来,过了就忘了,下次用到时又得浪费好多时间才能解决.今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了. 查看MyS ...

  10. C#编写windows服务,多服务为什么只启动一个(ServiceBase.Run)

    https://zhidao.baidu.com/question/380395667.html //多服务一个宿主程序时必须注间以下要点: Service1的ServiceName 必须 Insta ...