搜索系统(一)

爬虫

索引建立

正排:由key查找实体,拿url查找web page(title,anchor,content)

倒排:由term查询key,拿term查找 url list

rank打分排序

召回

倒排拉链后,过最小堆,然后算基础相关性 & 权威性 & 时效性,拟合得到score,筛选后,透传结果给粗排

粗排

拿到召回结果后,综合各类特征做一个简单的筛选后,透传给精排

精排

针对粗排结果上复杂NN模型算score

rerank

结合业务特点,对精排结果做筛选

人工先验:以先验知识为主,构建特征,设计排序算法

优点:业务迭代周期和效果非常清晰,可控

缺点:过度依赖于对于业务系统认知 & 人工拟合方式泛化能力不行,属于原始社会阶段

机器学习:结合特征工程用l2r替代排序算法拟合特征

优点:整个搜索迭代框架非常简便,根据不同目标拆解到不同team,各个team根据自己的目标喂特征进l2r

缺点:业务边界导致不同team对于搜索业务理解片面,很快进入瓶颈期,因为人工特征也有镜头,且一味喂特征进入,往往是换汤不换药,容易造成系统过早陷入瓶颈

深度学习:标注数据喂入NN模型,end to end解决问题

优点:结合深度学习泛化能力强的优点,通过大规模训练NN模型,帮助搜索彻底解决语义理解难题。

缺点:标注语料要求整体具有区分度,数据一旦有偏,整个模型就跪掉

编辑切换为居中

添加图片注释,不超过 140 字(可选)

1.需求侧:与搜索词分析交互,分析当前搜索词是否包含特殊要求(地域扩展、相关搜索)

2.调度侧:根据搜索词需求分析结果,调度下游(搜索中控、搜索广告、阿拉丁模块、知识图谱)

3.混排侧:合并结果(相关检索、特殊需求),进行去重、排序和调整,返回

4.提供纠错交互信息与相关检索词

1.调度:是否要查重 or 穿透小库去查大库

2.需求识别:配合查询词分析做需求识别,为检索查询和组合调序提供数据

3.在线特征统计

4.统一调权:以相关性为主干,叠加url级别的特征,进行队列内排序

5.组合调序:多队列结果做merge

6.风控:对merge结果进行屏蔽和升降权

7.整体控制和调度

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  1. 漏斗中每个层按照时效性为多个库种:实时、小时、天级

  2. 每台服务器的承载能力有限,所以网页集合会分成shard存储,一次查询并行发给这些shard,在上有汇聚结果

  3. 搜索的查询流量到峰值的时候会比较大,一台服务器能装下一个shard,但却无法承担全部查询流量,因此可以针对每个shard复制出N个副本,每个副本承担对应shard的1/N的流量,同时副本之间还起到了容灾的作用

索引

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

网页的自身结构(url, title, content)以及anchor(前链)

逻辑上,网页可以分为多个field,url域,title域,anchor域,content域,将title与anchor打包统一叫做AT索引,title与content打包统一叫做CT索引

trunc中包含了更短的高权截断拉链,是从被截断的索引中筛选得到的,term和网页匹配得更好的倒排子集。

在建库的时候,会把term与网页的匹配划分为8档,6档以上是title/anchor精准命中;

5档是title命中或内容关键词;4档是一个分水岭,代表一个“模糊命中”2档以下是非常差的命中。高权拉链截断主要是效率和效果的平衡:

在计算资源有限,且已经召回了一些好结果的情况下,让召回过程提前终止。此处会有ACtrunc和CTtrunc两种索引

相对AT索引而言,CT索引中的content内容会更多,同一个term,CT拉链会比AT拉链更长,包含的offsets(term在网页中的位置信息)也会更多,这给召回带来很大的压力,

为了解决存储和计算双压力,CT拉链长度设定了一个上限:对于热门term,如果CT拉链的长度N超过一个阈值eta,就将匹配最好的eta个网页跳出,组成长度为eta的CT拉链;

剩下的N-eta网页,组成DIFF拉链

除去将anchor、content、title入索引之外,也会将clicked query做倒排拉链

如果线上系统没有挖掘到LOL是英雄联盟的缩写,有不少用户搜“LOL英雄联盟”点击了一个很好的游戏网站“game.tencent.com”,

该页面只包含了英雄联盟,不包含了LOL,且它的anchor中也没有LOL,这个时候可以考虑将game.tencent.com的构建入LOL的click query域,

未来其他用户输入LOL 攻略的时候,也可以将game.tencent.com召回,此外click query域还可以包含“点击次数”、“满意点击次数”等信号,

为网页和term的匹配提供了更丰富的特征

此外click query还兼有补充bigram的作用,可以更好的支持大粒度的检索,例如网页title “奥运会男单啥时候直播”,queryterm “男单直播”虽然不在title中,但在click query中

倒排索引是搜索中最核心的数据源,驱动搜索引擎在短时间内筛选一个小而准的候选网页集合

一条倒排拉链保存了对应term在当前的分域下,命中的所有网页的id,以及term在网页中的命中情况(匹配的weight,是否在title中,是否是网页关键词,是否是关键词的同义词),

这些信息会组织成64bits的结构体,一同放在倒排索引中;最后还需要保存term在网页中的命中频率和命中位置(offsets),用于query在网页中紧密度的计算

召回

AT查询 & CT查询,高级语法树,过滤结果,提前终止,省词,改写,粒度,预查询

编辑切换为居中

添加图片注释,不超过 140 字(可选)

基本功能

根据搜索中控请求检索页面拉链,归并各拉链,截断,基础特征计算

双层循环,时间复杂度O(N^2)

有序链表求交,两个指针分别指向两个链表的队首,如果相同,放入结果集,随意的移动一个指针,否则移动较小的指针,直到队尾,时间复杂度O(N)

分桶并行优化,对于链表通过分桶,将一个链表按照范围拆分成多个桶,然后采用多线程并行计算,最后做合并

采用跳表,时间复杂度O(logN)

AT & CT查询

编辑切换为居中

添加图片注释,不超过 140 字(可选)

原始query: 苏炳添亚洲记录 site: sports.sina.cn

多个SubQuery共同描述用户查询需求

多个QuerySyntax组成逆波兰式,描述不同SubQuery之间的关系

SubQuery包含at_query和ct_query,分别查询AT索引和CT索引. AT索引和CT索引是或的关系,如果一张网页同时被AT索引和CT索引召回,

将会取最好的命中返回,AT索引和CT索引一起查询主要是性能优化的原因,如果AT索引已经满足很好了,就没有必要费大力气去查CT索引了

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

高级语法树

编辑切换为居中

添加图片注释,不超过 140 字(可选)

奥运会赛程|奥林匹克运动会赛程-国乒赛程 site: sina.com

提前终止

通过减少树弹出的接过数,降低索引召回的cpu负载,减少响应时间,我们将其视为“有损”的性能优化,也叫做折中截断

原则

根据经验指定一些静态规则,对刚建完的树进行裁剪

在结果数或者好结果达到一定阈值后,开始减少召回(内在逻辑:系统已经有了令人满意的好结果,那么后面就可以少做一些工作)

做法

用轻量级的指标,预测一张网页的相关性得分,筛掉那些“没有希望进入topk的网页结果”,topk是信息检索领域的经典问题,如果能召回N个网页

理想状态,不需要省词的概念,命中了任何一个query的term的网页都应该被召回(高级语法那都是或)

从效率角度出发,过大的召回量给整个系统后端带来了非常大的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值