0%

推荐系统召回算法

推荐系统整体流程

img

  • 多路召回:首先召回阶段是会配置召回的请求个数,通常会根据每路召回的后验表现设置动态配比,或者是根据业务的需求进行设置。所有的召回并发请求并设置 timeout,防止系统雪崩。
  • 所有的召回结果 merge。
  • 过滤:系统整体的黑名单,以及 by user 的黑名单过滤都可以在此处实现。
  • 去重:此处通常都是简单的指纹去重,不做特别精细的多样性去重(比如相似新闻通常在排序后做)。(过滤和去重都是为了减少后续系统的压力,防止浪费算力进行后续步骤。)
  • 粗排后截断。当然粗排也可以放在每个召回队列中做,也是根据业务而定。
  • 进行精排。
  • 排序后的 rerank 处理,包括多样性去重,产品的特殊 boost 逻辑等。

什么是召回

召回系统,本质上是个信息漏斗,负责快速从海量信息中筛选出有价值的信息,缩小排序算法的搜素范围;也负责将多路召回的数据,进行信息融合,最后得到一个精简的候选集。

召回的特性

处理的数据量非常大,速度要求快,所有使用的模型和特征都不能太复杂。

召回的重要性

  • 奠基性:后续流程,基于召回数据展开
  • 桥接性:建立用户和内容的桥梁
  • 决定性:召回质量决定推荐质量

多路召回

如下图所示,每种算法按照各自的召回配比份额,进行召回对应数目的 item, 再进行去重 merge; 或者排序无性能压力的情况下,分别召回各自子召回域,再去重 merge; 亦或投票等等规则,得到我们推荐系统想要的召回池。
img

多路召回的演进

  • 基于内容的召回:使用 item 之间的相似性来推荐与用户喜欢的 item 相似的 item
  • 协同过滤:同时使用 query 和 item 之间的相似性来进行推荐。
  • 基于 FM 模型召回:FM 是基于矩阵分解的推荐算法,其核心是二阶特征组合。
  • 基于深度神经网络的方法:利用深度神经网络生成相应的候选集。

image-20200831213318505

评价指标

真假正负

举一个狼来了的例子:

image-20200831204815515

  • 真正例是指模型将正类别样本正确地预测为正类别。
  • 真负例是指模型将负类别样本正确地预测为负类别。
  • 假正例是指模型将负类别样本错误地预测为正类别
  • 假负例是指模型将正类别样本错误地预测为负类别。

准确率

准确率是指我们的模型预测正确的结果所占的比例,定义如下

image-20200831205400100

对于二分类,也可以根据正类别和负类别按如下方式计算准确率:

image-20200831205509668

其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。

但是这个评估指标对于样本不均衡问题并不起作用。假设有下面的模型可以将 100 个肿瘤分为恶性(正类别)或良性(负类别):

image-20200831205716662

按照正确率的计算公式:

image-20200831205755291

看起来这个肿瘤分类器在识别恶性肿瘤方面表现得非常出色,对吧?但是实际上,只要我们仔细分析一下正类别和负类别,就可以更好地了解我们模型的效果。

在 100 个肿瘤样本中,91 个为良性(90 个 TN 和 1 个 FP),9 个为恶性(1 个 TP 和 8 个 FN)。在 91 个良性肿瘤中,该模型将 90 个正确识别为良性。这很好。不过,在 9 个恶性肿瘤中,该模型仅将 1 个正确识别为恶性。这是多么可怕的结果!9 个恶性肿瘤中有 8 个未被诊断出来!这说明我们的模型并没有区分恶性肿瘤和良性肿瘤的能力。

对于分类不平衡的数据集(比如正类别标签和负类别标签的数量之间存在明显差异)时,单单准确率一项并不能反映全面情况。在下一部分中,我们将介绍两个能够更好地评估分类不平衡问题的指标:精确率和召回率。

精确率和召回率

image-20200831210059135

image-20200831210246036

要全面评估模型的有效性,必须同时检查精确率和召回率。精确率和召回率往往是此消彼长的情况,也就是说,提高精确率通常会降低召回率值,反之亦然。

召回的评测方法

在现有的个性化召回体系下,如果要新增一种个性化召回算法,需要知道这种个性化召回算法会对系统造成怎样的影响,是正向收益还是负向收益。所以经过离线和在线两个步骤的评测:

  1. 离线评测:是作为能否进入线上的标准,主要是通过历史数据,场景重现,看用户反馈的各项指标是否有所提升,指标包括模型指标(P 值,r 值,F1 值等),业务指标 (CTR,CVR)。
  2. 在线评测:主要是通过逐级增大流量的 AB 实验的方法,进行测试,观察各种业务的在线指标,比如 CTR,CVR,GMV 等。

img

支持一根棒棒糖!