• [推荐系统]召回之引言


    引言

    其实最开始推荐系统根本就没召回,直接基于物料池进行排序就行,但是如果物料池变得超大,为了技术和业务发展,每个样本的特征越来越复杂,如果直接精排是没法工程的,所以增加召回,即用更简单的模型更少的特征或者直接规则对候选集快速筛选,减少排序阶段的耗时;同时召回的加入也能让业务更加丰富,如想对这个人增加热点物料,广告主重点推荐物料等等;

    召回在推荐中的作用也十分重要,召回的商品准确与否直接决定了推荐的上限。召回的目标是从千万级甚至亿级的候选中召回几千个item,很老的资料中都是诸如相似商品召回,协同过滤召回,买了又买召回等,但是以单路形式呈现,随着发展,现在召回基本都是由多路组成,每一路会有不同的侧重点(优化目标)。在推荐系统,不同路可能代表了不同的优化目标,如喜欢、关注、观看时长、评论这些都可以分不同的路召回。每一路的召回都会拉取前K个候选集,对于每一路的K的大小可以不同。K的大小一般需要通过离线评估加上线上A/B测试的方式确定合理的取值范围。

    • 召回:候选集规模大,模型和特征简单,速度快,尽可能增加多路业务性质的召回;
    • 排序: 候选集不大,目标是保证排序的精准,模型和特征都更复杂;

    但是多路召回仍存在一些不可避免的缺陷,比如说,从策略选择到候选集大小参数的调整都需要人工进行,另外不同策略之间的信息也是割裂的,无法综合考虑不同策略对同一个物品的影响。当然,现在针对这些缺陷已经有了较好的解决方法——基于Embedding的召回。
    下图是整体流程逻辑:

    而现在都是多路召回:

    召回涉及到的算法大纲

    模型类别角度划分

    目前召回常用的方法有:

    • 传统召回:规则召回;userCF;itemCF;CF;协同召回;fpGrowth;SVD;SVD++;MF;DeepMF;
    • 基于FM的召回:FM;FFM;DeepFM(2017);
    • 图召回:DeepWalk(2014);LINE(2015);SDNE;Node2Vec(2016);EGES(2018);GCN;GraphSAGE;
    • 内容语义i2i召回:word2vec;FastText;Bert;
    • embedding召回(也是现在发展的趋势):DSSM(2013);Item2vec(2016);YouTubeDnn(2016);NCF(2017);Airbnb Embedding(2018);MIND(2019);CrossTag;EGES(2018);GAT;SDM(2019);NIRSA;TDM(2019);

    ps:在实际使用中,往往不是如论文一样单一实现,如工业界常常会用FM、双塔模型等先学习user embedding、和 item embedding,然后用ball tree、fast ball tree 等近似最近邻算法进行检索,加快效率;

    业务角度划分

    借用下文章中的思维导图进行大纲式介绍

    如上图所示,召回涉及到的点还是蛮多的,分为非个性化和个性化,其中:

    • 非个性化可以离线提前做好,主要是针对全网而言,并非针对个人,如电商中可以通过点击访问热力图获取当前最热商品、或者小视频新闻领域通过高CTR,高阅读完整或者高停留时长获取的视频新闻等物料,这类可能是突然发生的爆款;

    个性化的:

    • 基于内容的(content—based): 如用户自身标签召回,
    • 基于行为的(behavior-based):如userCF和itemCF,其中userCF即通过相似的人找其他人的物料进行推荐;itermCF即通过物料之间相似性将该物料其他相似物料进行纳入
    • 基于特征的(feature-based):将用户的年龄,性别,地理位置,行为序列称为用户特征;对应的物料的熟悉称为物料特征,将其分别作为用户特征和物料特征进行召回,如i2i就是通过item embedding,找到与本item相似的其他item,可以通过在线学习不断的将商品生成的embedding作为商品向量特征传输进向量引擎如faiss进行直接的向量召回;
    • 基于社交网络(social-network):如通讯录关系进行寻找物料推送,比如妈妈在看婴儿产品,则直接将其推送给爸爸;

    召回中的问题

    文章中简要的提及了召回中的问题:
    1) 负样本构建问题
    在推荐中,正样本很容易获取,即哪些点击过,加购过,下单过的都是正样本,但是对应的负样本呢?但是不能简单的将未曝光过的样本当做负样本,因为假如某个样本能进召回池子,本身就可能是有用的,这时候将其作为负样本就不合适了;还有会遇到SSB(sample selection bias)问题,即正样本永远是整体推荐池的子集,而且很小,这样构建负样本会遇到采样偏差问题,故需要让选择出来的负样本,尽可能的能代表全体推荐池,特别是hard negative sample的问题;

    • 可以主动学习,人工选择选出hard negative sample;
    • 借助精排模型,将精排打分处于中间位置的item,如排名100~500左右的item,它们不是很靠前,可以看做负样本,也不是吊车尾,与正样本有一定相关性,区分起来有一定难度;
    • 业务规则:Airbnb论文的做法

    2)文章中介绍的竞争问题:各召回通路最终会做merge去重,各通道之间重复度过高则没有意义,特别是新增召回通路,需要对历史通路有较好的补充增益作用,各召回通路之间存在一定的重叠和竞争问题。同时,召回通路的候选item,不一定能在精排中竞争透出,特别是历史召回少的item,由于其曝光样本很少,精排中打分不高,所以不一定能透出。召回和精排的相爱相杀,还需要通过全链路优化来缓解。

    3)文章中介绍的目标不一致问题:目前的召回目标仍然是找相似,不论是基于内容的,还是基于行为和特征的。但精排和最终实际业务指标仍然看的是转化,相似不代表就能得到很好的转化,比如极端情况,全部召回与用户最近播放相似的短视频,显然最终整体的转化是不高的;

    多路召回融合

    在每个召回策略后都得到了一些候选集后,那么如何融合这些结果呢,这个可参考文章中的介绍

    简单来讲,如针对上述3路召回结果,可有:

    • 直接融合排序法:即按照权重排序即可;
    • 加权法:通过设定的规则对商品进行统计学加权,或者对整路进行加权;
    • 自适应加权:如利用机器学习方法对不同路算权值;

    常见术语解释

    如I2I、U2I、U2U2I、U2I2I、U2TAG2I,如下图所示,其中“2”代表的是下图中的边,“U”与“I”代表的事下图中的节点。

    • I2I:计算item-item相似度,用于相似推荐、相关推荐、关联推荐;
    • U2I:基于矩阵分解、协同过滤的结果、直接给u推荐i;
    • U2U2I:基于用户的协同过滤,先找相似用户,再推荐相似用户喜欢的item;
    • U2I2I:基于物品的协同过滤,先统计用户喜爱的物品,再推荐他喜欢的物品;
    • U2TAG2I:基于标签的泛化推荐,先统计用户偏好的tag向量,然后匹配所有的item,这个tag一般是item的标签、分类、关键词等tag。

    而大部分情况下,用的最多的还是i2i和u2i,下图是embedding召回中的模型列举

    规则召回

    即运营等基于人直接拍脑袋想到的规则

    • 基础属性召回:简单来讲就是人主观觉得有效的策略,比如热门召回、地域召回、家乡召回、标题召回,季节性召回等
    • 产品&运营策略召回:比如节日、活动等定制场景

    参考文献:
    【总结】推荐系统——召回篇【1】
    推荐系统召回策略之多路召回与Embedding召回
    推荐系统主流召回方法综述
    如何评价召回系统的好坏
    【推荐系统】召回模型线下评价指标
    推荐算法架构1:召回

  • 相关阅读:
    第七十三天 how can I 坚持
    [leetcode]Climbing Stairs
    poj1204之AC自动机
    [leetcode]Sqrt(x)
    hibernate配置文件hibernate.cfg.xml的详细解释
    画板社交工具开发分享——HTML5 canvas控件、PHP、社交分享学习(一)
    我的计算几何学题目分类
    追梦
    mysql实现增量备份
    [leetcode]Plus One
  • 原文地址:https://www.cnblogs.com/shouhuxianjian/p/16379580.html
Copyright © 2020-2023  润新知