推荐算法工程师必备技能储备

推荐算法工程师必备技能储备


一、推荐解决的问题和优化目标是什么?

推荐算法虽然本质上也是为了增加公司收入,但其直接目标是为了增加用户的参与度。只有用户的参与度高了,才能让广告系统有更多的inventory,进而增加公司营收。

推荐算法的预估目标就不尽相同,视频类更多倾向于预测观看时长,新闻类预测CTR,电商类预估客单价等等这些跟用户参与度最相关的业务指标。而且由于推荐系统的推荐场景是生成一个列表,所以更加关注item间的相对位置,因此评估阶段更倾向于用AUC,gAUC,MAP这些指标作为评价标准。

二、模型:

推荐算法的结果往往以列表的形式呈现,因此不用估的那么准,而是要更多照顾一个列表整体上,甚至一段时间内的内容多样性上对于用户的“吸引力”,让用户的参与度更高。因此现在很多头部公司在算法设计时,不仅要考虑当前推荐的item的吸引力,甚至会有一些list level,page level的算法去衡量整体的效果进行优化。也正因为这一点,推荐算法有大量不同的训练方式,除了point-wise,还有pair-wise,list-wise等等。此外为了增加用户的长期参与度,还对推荐内容的多样性,新鲜度有更高的要求,这就让探索与利用,强化学习等一些列方法在推荐场景下更受重视。

由于需要更多照顾用户的长期兴趣,需要一些补充策略做出一些看似“非最优”的选择,比如探索性的尝试一些长尾内容,在生成整个推荐列表时要加入多样性的约束,等等。这一点上,广告系统也需要,但远没有推荐系统的重视程度高。

推荐模型中,如果不抓住用户兴趣的连续变化,是很难做好推荐模型的,因此利用sequential model来模拟用户兴趣变化往往是有收益的。

三、整个流程相关技术:

在这里插入图片描述

模型层面:CF,LR,SVM,FM,FTRL,GBDT,RF,SVD,RBM,RNN,LSTM,RL
逻辑回归、SVM、树模型、集成学习、朴素贝叶斯、K-Means聚类、PCA。(EM、最大熵、概率图这些考的少,能了解是加分项)。

逻辑回归=线性回归+sigmoid激活函数,从而将回归问题转换为分类问题
逻辑回归+矩阵分解,构成了推荐算法中常用的FM模型
逻辑回归+softmax,从而将二分类问题转化为多分类问题
逻辑回归还可以看做单层神经网络,相当于最简单的深度学习模型

再比如树模型。我们把以决策树为基础的一系列模型统称为树模型,也是AI比赛中最常用的模型。
决策树经历了三次改进,ID3、C4.5、CART,主要区别在于一个根据信息增益划分特征、一个根据信息增益率、一个根据基尼指数。
随机森林=决策树+Bagging集成学习
GBDT=决策树+AdaBoost集成学习
XGB是陈天奇2014年提出,相当于GBDT的工程改进版,在实用性和准确度上有很大提升。比如:使用泰勒二阶展开近似损失函数,支持处理缺失值、在特性粒度上并行计算等等特性。
LGB是微软2016年提出,对XGB进行了改进,使用单边梯度采样算法减少不必要的样本;在寻找最优分割点时采用直方图算法使计算代价更小;支持类别特征…
CGB是Yandex2017年提出,对类别特征进行了更完美的支持。

1、召回
召回的目的是根据用户部分特征,从海量物品库快速找到小部分用户感兴趣的物品交给精排,重点是强调快。主要有两大类召回方式,一类是策略规则,一类是监督模型+embedding。其中策略规则,往往和业务场景是强相关,不同的场景会有不同的召回方式,这部分知识"特异性"比较强,一篇文章讲不清楚。这里可以简单讲讲比较普适的方法,也就是监督模型+embedding。该领域比较主流的方法, 比如FM系列(FM,FFM等), 用户行为序列,基于图和知识图谱系列,经典双塔系列等。这些方法看似很多很复杂,其实本质上还是给用户和物品打embedding而已,只不过考虑的角度方式不同。这一块的内容,几乎每个模型都对应着经典paper,大家如果要学习推荐系统,这些经典paper是必须要去阅读学习的,并且在阅读过程中,对于一些重要模型,要会进行代码复现,并应用到一些真实的实践任务中。
2、粗排
有时候召回环节返回的物品数量太多,精排速度跟不上,所以需要在召回和精排之间加一个粗排环节,通过少量用户和物品特征,简单模型,来对召回的结果进行个粗略的排序,在保证一定精准的前提下,进一步减少往后传送的物品数量,这就是粗排的作用。粗排用到的很多技术与召回重合,粗排不是必需的环节。如果你的候选数量非常少,那连召回都不需要了;如果你的精排能吃的下召回的输出,那可以考虑实验对比是不是需要粗排。但是假如不加粗排,总感觉欠缺点什么。有时候甚至会出现粗排输出候选变少,整个系统反而涨点的情况。像这样的情况出现,就说明整个链路设计存在不合理的地方。
3、精排
精排阶段使用你能想到的任何特征,可以上你能承受速度极限的复杂模型,尽可能精准地对物品进行个性化排序,强调准确性。这一块关键技术主要分为三大块:CTR预估:LR、FM家族、自动特征交叉的DNN家族。多任务学习(Multi-Task Learning,也称为多目标学习)。多任务是很常见的,比如视频推荐中,用户喜欢、收藏、评论。而不同的任务可能会互相冲突,互相影响,造成模型学习起来十分困难。所以这一块是重难点,也是很多大公司的研究重点,更是未来的一大发展趋势。但好在这里每个模型或者技术有对应paper,所以和召回一样,这里依然可以利用解读paper的方式,把这些模型和技术娓娓道来。排序打分公式融合。
4、重排
考虑到上面的三块是核心,这块没有详细的展开整理,并且这块和业务场景策略强相关,很依赖工作经验,目前了解的也不是很多。后续先解读几篇重排模型的经典论文,等学习了相关技术,再来不断完善这块。
5、冷启动
冷启动问题是指对于新用户和新商品,他们没有历史交互数据,无法分析历史喜好,这个时候我们应该如何做推荐。冷启动技术会穿插到召回或者重排中,有时也会和上面推荐系统做成并行的两路,专门应对冷启动场景。

算法层面:分类,聚类,回归,降维,特征选择,模型评价

熟悉常见离线效果指标:
1、准确率,召回率,AUC,基尼系数;

2、能够定义产品效果指标:点击率,留存率,转换率,观看完整率;

3、会做对比试验并分析实验结果:指标数据可视化;

4、知道常见推荐产品的区别: Feed流推荐,相关推荐,TopN推荐,个性化推送;

常见问题:

  1. 模型的样本数据源?
    在C端互联网电商场景中,样本数据可以是前端埋点日志表,或者是服务端落库的请求日志表。在传统行业的场景中,样本数据可以是一个季度的销量信息等等。
  2. 正负样本的选取?通常情况下,如果我们关心的是商品的转化cvr(购买),那么我们将数据中被购买的商品作为正样本,未被购买的作为负样本;同理,如果我们关心商品的点击率ctr,那么将用户点过的商品作为正样本,没点击的作为负样本。那么是否可以对这种样本选取做优化呢?可以的。对于CVR预估来说,以上方法中,负样本包括了用户没有购买的商品,但这其中可能包括了用户点击过的商品。我们在建模的时候,可以显式的把这类负样本去掉,只留下曝光但未点击未购买的商品。另外,如果能够取得用户的负反馈信息,那么我们可以把这类商品作为负样本
  3. 排序模型的特征有哪些维度?我们通常把特征分为四个维度:用户,商品,用户行为(用户和商品的交互信息),上下文特征(context)。下面分别对这四个维度的特征做说明。用户特征是值用户自带的属性:比如用户在注册app的时候输入的性别、年龄、位置等信息。用户特征还包括我们对用户属性的挖掘,比如用户过去一个月内下单的总次数、总金额等。除此之外,我们可以通过一些其他的信息对用户属性做一些扩展,比如用户在下单的时候,我们可以获取到下单的地理位置,那么我们可以对这个地理位置建模。简单粗暴的方法可以是对于经纬度取某个精度然后做个编码,这样我们就把地理位置转化成为了一个id类特征;进一步,我们可以通过对地理位置做分析,得到某个街道或者小区的居民消费水平系数。商品特征是指商品的属性和标签。它通常包括商品的id,商品的类目以及品牌的标签等等。取决于业务场景,商品的id类标签可以包括商品的产地、规格、材质等标签。连续型特征包括商品的价格、销量、曝光、点击率、转化率等统计值。用户行为特征通常是用户和商品的交互的统计值。我们可以计算用户在不同窗口内对于某个商品交互的次数,交互可以包括曝光,点击,购买,或者点击不喜欢按钮的次数等等。注意,这是一类很重要的特征,因为它包括了用户主动的行为。我们有理由相信用户对于购买过的商品或购买过商品的相似品再次购买的概率会很大。因此在特征工程中,我们可以通过扩展用户商品行为交互的窗口(3/7/15/30/90天等)对用户和商品交互行为更精准的刻画。上下文特征通常是实时的特征。比如当前的时间,用户设备的信息,用户地理位置等。
  4. 强相关的特征会带来什么样的问题?如何处理?假如特征a和特征b是强相关的,那么在已有a的情况下引入b特征,对于模型的效果提升是微乎其微的。同时,增加特征会带来额外的存储以及线上推理耗时的开销(如何实现工程与模型之间的平衡?),因此我们需要思考如何识别特征之间的相关性,以留下信息量最大的特征。我们可以通过奇异值分解(SVD)的方法,保留奇异值最大的k个特征(特征的方差越大,它所包含的信息就越多)。
  5. 热品会带来什么模型训练的问题?如何解决热品问题?热品指的是平台中曝光或者销量特别高的商品。在电商场景中,热品的销量可以是普通商品的十几倍甚至更多!这就意味着训练数据中有很大一部分商品是热品。与此而来的问题是,模型对于非热品的学习是欠拟合的。我们可以对热品进行降采样。通过分箱的方法,得到不同程度的热品区间(假设通过商品的销量来分箱),然后对于各个区间的热品进行不同概率的降采样。
  6. 用户维度的特征在用户个人的商品排序中起到了什么作用?模型通常包含用户画像类特征,但是对于某一个用户来说,他自己的画像类特征是一样的,那么这类特征对于当前用户的商品打分排序起到了什么作用呢?对于LR模型来说,LR模型认为对数几率(log odds) 是所有特征的线性组合,其中每个特征是独立的。因此对于当前用户来说,用户画像类特征对于所有商品的影响都是一样的。也就是说,用户画像不会影响商品的相对排序。但是对于非线性模型来说,比如树类模型,用户画像类特征可以存在于任何内部节点,从而只影响到一部分商品。因此,用户粒度的特征是有区分度的。同理对于深度模型也适用。
  7. 如何做特征筛选?lightGBM feature importance离线可以直接通过树类模型得到特征重要性的排序。比如LightGBM模型的特征重要性是通过总的信息增益或者覆盖的样本数量算出的。
  8. 如何解决推荐系统的信息茧房问题?首先,什么是信息茧房?简单来说,用户每次看到的都是推荐算法推给用户的物品,那么假如模型的训练数据又是从这部分数据选取的话,模型是没有办法感知到用户对于没有浏览过的商品的反馈的。那么怎么解决呢?我们可以通过增加一路召回的方式,从总的商品池中随机抽一部分用户没有见过的商品,以此让模型来学习到用户对于这类商品的反馈。
  9. 用过哪些模型?分别有什么优缺点?
  10. 推荐模型演化推荐模型包括逻辑回归LR,树类模型(XGBoost, LightGBM), 深度模型(wide&deep, DeepFM, DIN, DIEN等)。
  • LR通常作为baseline模型,可以理解为对数几率(log odds)的线性回归。它的优点在于模型简单且具有可解释性,对于高维稀疏特征效果好等。在线上预测方面,它可以支持实时的增量训练。它的缺点在于拟合能力不如非线性模型。
  • 基于GBDT的树类模型里每棵树的生成,可以理解为人类的习惯的if-else的决策过程。我们每次选取最有区分度的特征以及最优的分裂点,然后递归的把样本分到叶子节点中。它同样具有较好的可解释性。由于boosting串行的训练过程(每次拟合上一颗树的残差),模型的准确率是比较高的。它的缺点在于,由于串行训练,模型训练时间会较长(注意,预测时并行的),不支持增量训练。
  • XGBoost和LightGBM都是对于GBDT的工程实现。XGB使用了二阶导,显式加入了正则项,同时采用了预排序的方法加快分类点的并行查找速度。LGB采用了直方图(histogram)算法,大大的减少了找分裂点的时间复杂度。但是,对于稀疏的特征,直方图算法不如预排序算法,因此LGB又引入了两个优化:分别是EFB(互斥特征捆绑:以此来减少特征的个数)和GOSS(单边负梯度采样:对梯度小的样本随机抽样,用剩下的样本去估计信息增益,以此来选择特征)。具体细节请参考原论文 LightGBM: A Highly Efficient Gradient Boosting Decision Tree FM模型对特征之间两两做交叉,得到更高阶的特征组合。对于稀疏的标签类特征效果会比较好。深度模型具有更强的拟合能力,但是很容易过拟合。我们可以对历史序列进行建模。比如DIN模型用当前商品和用户历史点击过的商品做attention,来刻画历史商品对当前排序品的影响。如果数据量足够大,那么深度模型会有较大的用武之地。
  1. 为何用AUC作为离线指标?怎么理解AUC?首先,什么是ROC?ROC是以TPR为纵轴,FPR为横轴,通过不断地移动截断点来画出的ROC曲线。AUC是ROC曲线的积分,它衡量的是模型把正样本排在负样本前面的概率(事实上,我们可以通过这个方法近似地求解AUC的值)。对于推荐模型来说,转化/点击率的估值绝对值意义不大,物品排序的相对顺序才是我们要关心的。因此,AUC把用户真正感兴趣的物品排在前面的能力可以作为离线衡量的指标。
  2. 如何处理用户和物品的冷启动问题?冷启动可以分为用户冷启动和物品冷启动两个部分。第一,对于用户冷启动,通常是一个新的用户首次登录APP,那么如何捕捉到这个用户的兴趣呢?我们可以在用户登录的时候要求用户选择符合自己的标签的形式,采集到新用户的信息。或者,可以接入第三方数据的方法丰富用户画像特征。第二,对于物品的冷启动,假如平台上架了一件新商品,那么该商品的销量、转化率等特征是缺失的。我们可以通过扩展商品类目体系的方法,缓解新品特征缺失的问题。简单来说,即使我们不知道当前这个商品的销量、转化率等信息,我们对于该商品所处类目的特征是知道的,模型可以用这些已知特征做推理。另外一个方法是,我们可以通过增加一路新品召回的方法,迅速给新品“预热”,增加新品的曝光,从而迅速的补全缺失的销量等信息。
  3. 如何解决推荐系统的偏置(bias)问题?离线和线上的区别?商品在APP中的位置对于商品的点击、转化来说至关重要。一个物品排在前面的物品,即使用户购买意愿不是很高,通常也会有较高的转化率,这就是推荐系统中的positional bias。其他的bias还包括了推荐tab的位置,app前端展示的排版等。解决bias的方法通常是把bias信息(商品的曝光位,页面tab位等等)作为类别特征加入模型中。但是这也产生了一个问题,那就是离线训练和线上预测的不一致。离线我们可以拿到商品排序的位置。但是线上预测的时候,我们是没有办法拿到这个位置的。为什么呢?因为在cvr预估打分的阶段,我们没有办法知道cvr的相对排序,同样也没办法知道经过打散、重排等策略后商品排序的变化(如果知道的话那么就没必要预测了,嘻嘻)。那么面对预测阶段的缺失位置特征怎么办呢?答案很简单,就是给个默认值。这样,所有数据的这个特征都一样。我们也可以认为,我们离线对偏置建模,偏置的特征把自己部分的影响给独立出来;线上预测的时候,大家都一视同仁(给同样的默认值0),也就相当于是拿掉了偏置对模型的影响。
  4. 如何做A/B实验?ab testAB实验是验证模型的最有效方法。这里需要注意两个问题:第一,实验和实验之间是正交的。线上由于分流的逻辑,有时可能出现实验嵌套的问题,举例来说,就是某个实验只出现在另一个实验的流量中。导致的问题是,我们没有办法衡量当前实验在整体流量中的有效性第二,实验和特征之间是正交的。假设某个实验只是对于男性用户投放,同时假设男性用户的cvr普遍高于女性用户。如果我们选取男性作为实验桶,女性作为对照桶的话,我们没有办法区分是实验导致cvr升高,还是用户本身属性导致的。因此好的ab实验设计应该使实验和所有特征是正交的。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值