通用搜索引擎体系

现在搜索引擎体系主要包含三大部分:

  1. query理解(包含query类目预测、query改写、分词、实体识别、词权重):好的query理解可以应用于后面的召回和精排重排阶段,提高准确度
  2. 召回:主要是粗召回,通过统计向量等方式从上亿的文档中粗略召回几百个候选集
  3. 精排:针对召回的几百候选集加入更多细粒度的特征进行精确再排序,并且也会加入很多用户特征以实现个性化需求

接下来就详细分开聊聊这三大部分

一、query理解

1. query类目预测

具体实现方式有三种:

  1. 基于统计:借助于url和类目系统的映射关系,通过收集用户搜索后的点击等行为获取到url进而反推出类目,对于行为较少的长尾数据可以通过痛session内query来预测(同一个session内的不同query可以认为是有相同的搜索诉求)
  2. 基于内容理解:通过bert等深度学习模型训练query到标签的映射关系,对于长尾数据,只要训练的模型泛化能力够好,就有可能进行覆盖
  3. 基于模型融合:基于统计和内容理解得到的多个不同维度的特征再通过GBDT等模型进行特征融合得到比较准确的结果
    参考:https://zhuanlan.zhihu.com/p/351083652

2. query改写

具体实现方式有四种:

  1. 基于规则:比如扩展(同义词,相似词)、归一化(统一大小写)、纠错(错别字改正)、丢词(将非核心词去掉 一般是在二次召回时)等
  2. 基于用户行为挖掘:通过点击日志挖掘相同item不同的query,可以认为是相同意图但是不同表达的query
  3. 基于内容理解:通过bert等模型进行query-query的相似性训练构建一个相似query引擎,进行相似query的召回
  4. 基于模型融合:将以上方法得到的特征进行GBDT等模型进行融合综合得到一个打分再进行相似query召回,从而丰富原始query的表达,达到query改下提高召回准确度的目的
    参考:https://zhuanlan.zhihu.com/p/351084105

3. query term权重

可以分为静态分和动态分,静态分是使用tfidf等算法统计得到,但是这种没有考虑到具体的上下文环境导致对于所有的query都是一样的,缺乏准确性,而动态分会考虑上下文,具体分为两种方法:

  1. 传统的方法
    获取query中各种维度的特征,包括一些静态特征比如长度,和一些统计特征比如频次,然后通过GBDT等方法进行特征融合最终拟合到label上
  2. 深度学习方法
    直接进行end to end的方法,将数据输入网络模型,自己学习特征,比如bert中该问题就是一个序列标注问题
    参考:https://zhuanlan.zhihu.com/p/351085094

4. query-item的相关性匹配

query-item相关性大体可以分为三种:

  1. 结构化信息匹配:通用搜索中由于类目信息不够强烈所以使用优先级并不高,但是在淘宝等垂直领域的搜索系统中由于有比较强的类目信息,所以可以通过结构化信息作为第一阶段的粗筛,保证了召回准确性,增加了类目约束也不容易出恶劣的badcase,具体来说item侧的则需要商家和平台维护来保证item的类目准确性,query侧的可以通过深度模型进行类目预测
  2. 文本匹配:可以通过统计等方式(比如词频,带权重词频,覆盖度,tfidf和bm25算法)构建词袋模型,再通过计算query和item的cos分来打分,计算相似度
  3. 语义匹配:由于自然语言表达方式的丰富多彩,文本匹配即使加上同义词也无法覆盖所有结果,很可能导致漏召回从而导致召回能力不足,所以需要基于奇异值分解的潜在语义分析算法(LSA)、主题模型PLAS、LDA和基于深度学习模型比如bert来构建语义向量模型,来挖掘文本后面的深层次语义。更进一步,仅仅通过文本语义已经不能满足要求,近年来融合文本图像视频音频的多模态语义匹配开始流行,通过深度模型将文本图像视频音频等信息通过不同的网络结构(比如文字用bert,图片用cnn)转化为embedding,然后通过上层网络将这多个embedding再次进行融合
    参考:https://zhuanlan.zhihu.com/p/351163627

二、召回

相比如精排,召回面对的是海量的候选集,需要的是从海量的候选集中粗筛选出几千个可能相关的候选集送给精排模型,所以要求召回算法的复杂度不能太高,满足线上的召回实时性。而现代召回体系大多是采用多路召回,然后合并阶段的方式,这种方式保证了各种维度的召回力度,避免召回不足的情况,多路召回主要分为以下几种方式:

  1. 文本召回:倒排索引,这是最经典最快捷的一种方式,广泛应用于现在各种通用和垂直搜索引擎中,代表的有es和solr。但是由于是term粒度的精确匹配,所以会存在召回不足的情况,解决方法是针对query侧可以进行同义词等query改写进行query语义扩充,doc侧的就是增加商品尽可能详细的描述,主要是人工维护
  2. 结构化信息召回:通过丰富的目录结构进行精确匹配,query侧主要是进行类目预测,doc侧除了类目预测更多的还是依赖人工维护
  3. 个性化召回:以上两点都是基于文本内容的理解进行召回的,但是我们也可以基于用户行为进行挖掘,常用的u2i和i2i,通过协同过滤算法和swing等扩充候选集,但是要注意的是这种召回方式需要再进行相关性的过滤,不然会召回很多无关的恶劣case
  4. 语义召回:由于文本精确匹配天然的缺陷,所以基于语义向量的召回是必须要考虑的,采用bert的双塔模型构建query和item的embedding再根据ANN最邻近算法快速召回语义相近的doc作为候选集
    参考:https://zhuanlan.zhihu.com/p/395626828
tips:向量召回中有很多细节问题
  • 向量召回中除了要考虑文本本身的语义相关性还需要考虑个性化,但是相关性和个性化是一对相互排斥的目标,想要更多的相关性必然要牺牲个性化,想要更多的个性化结果必然要牺牲相关性,所以如果权衡两者需要视业务场景而定
  • 向量是一个高维空间矩阵,在实践过程中容易产生语义漂移问题进而导致恶劣的badcase,所以单纯的使用向量召回而不加任何约束的话会产生大量恶劣case而且想通过向量模型调整来解决这类case也是比较困难的,所以一般都会加上一些相关性的约束,比如类目分类的约束,排除掉一些无关类目的结果
  • 加入个性化特征后如何设计模型结构来融合文本特征和个性化特征?如何设计loss来优化目标?都是需要基于对业务的理解来不断探索优化的
  • 关于数据样本构建,如何获取置信度高的正样本?如何获取简单负样本和困难负样本?已经他们直接配置的比例是多少?也是值得探索的方向
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值