相关query挖掘
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挖掘的更多相关文章
- 查询改写(Query Rewrite)方法总结
为何需要Query改写 Query分析是搜索引擎的一个重要模块,对搜索结果的覆盖率和相关性至关重要.搜索引擎的检索过程包含了两个重要的阶段:匹配和排序.匹配也叫召回,表示根据用户的查询条件,尽可能多地 ...
- HipHop算法:利用微博互动关系挖掘社交圈
/* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ CopyMiddle: 张俊林 TimeStamp:2012年3 月 在微博环境下,如何 ...
- 搜索广告与广告网络Demand技术-搜索广告
搜索广告 搜索广告就是一个典型的Ad Network,但是搜索广告非常重要,它的收入非常高,所以它有其独特之处,复杂度也比展示广告要高.它与展示广告在点击率预测,检索部分差不多,它的特点:1. 用户定 ...
- CIKM Competition数据挖掘竞赛夺冠算法陈运文
CIKM Competition数据挖掘竞赛夺冠算法陈运文 背景 CIKM Cup(或者称为CIKM Competition)是ACM CIKM举办的国际数据挖掘竞赛的名称.CIKM全称是Intern ...
- 地图POI类别标签体系建设实践
导读 POI是“Point of interest”的缩写,中文可以翻译为“兴趣点”.在地图上,一个POI可以是一栋房子.一个商铺.一个公交站.一个湖泊.一条道路等.在地图搜索场景,POI是检索对象, ...
- logstash日志分析的配置和使用
logstash是一个数据分析软件,主要目的是分析log日志.整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是v ...
- Atitti 知识图谱构建方法attilax 总结
Atitti 知识图谱构建方法attilax 总结 1.1. 知识图谱schema构建(体系化)1 1.2. 纵向垂直拓展(向上抽象,向下属性拓展)2 1.3. 横向拓展2 1.4. 网拓展2 1 ...
- Apriori原理与实践
Apriori: 其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集.经典的关联规则数据挖掘算法Apriori 算法广泛应用于各种领域,通过对数据的关联性进行了分析和挖掘,挖掘出的这 ...
- Apriori算法
APRIORI Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集.而且算法已经被广泛的应用到商业.网络安全等各个领域. Apri ...
随机推荐
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- Kali对wifi的破解记录
好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...
- C# 注册 Windows 热键
闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...
- OpenCASCADE AIS Manipulator
OpenCASCADE AIS Manipulator eryar@163.com Abstract. OpenCASCADE7.1.0 introduces new built-in interac ...
- HTTP常用状态码分析
不管是面试还是工作中,经常会碰到需要通过HTTP状态码去判断问题的情况,比如对于后台RD,给到前端FE的一个接口,出现502或者504 error错误,FE就会说接口存在问题,如果没有知识储备,那就只 ...
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- C# BackgroundWorker 详解
在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...
- IteratorPattern(迭代子模式)
/** * 迭代子模式 * @author TMAC-J * 聚合:某一类对象的集合 * 迭代:行为方式,用来处理聚合 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离 * Java中的COLL ...
- Java—恶心的java.lang.NumberFormatException解决
项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.NumberFormatException异常 ...
- mysql 写入优化
1 主从分离 从表读取,主表可以去掉索引 2 先写入到文件或redis,定时刷新到库 3 用nginx 4 分库 分表 每个库表的数据总量少了 插入会快一点 5 最大限度减少查库的次数 6 一条sql ...