做推荐系统必须懂各种算法吗(从零入门推荐系统)

作者 | gongyouliu

编辑 | gongyouliu

我们在第5章「推荐系统业务流程与架构」中讲到推荐系统一般会分为召回和排序两个阶段,召回可以看成是推荐前的初筛过程,排序是对初筛的结果进行精细打分的过程。我们在前面4章中介绍完了推荐系统召回算法相关的知识点,从本章开始,我们会花4章的篇幅来介绍排序算法。

本章是关于排序的第一章,在这一章我们会对排序算法的基本概念、常用的排序算法、排序算法的应用场景和使用排序算法的一些说明等4个方面来展开讲解,希望本章的知识点可以给大家做一个铺垫,方便大家可以更好地理解后面3章介绍的排序算法的细节知识。我们先来介绍一下排序算法的基本概念。

10.1 什么是排序算法

所谓推荐系统排序算法是采用某种机器学习算法来对召回阶段的结果(推荐系统一般会使用多种召回算法)进行二次打分排序,获得对召回结果的统一评价。这里的评价是指某种业务指标,比如评分、点击率、播放时长等,不同的产品,不同的业务形态关注的业务指标都是不一样的。业务指标一般是排序算法的目标函数。下面图1对排序算法的逻辑进行了简单说明,相信读者看完这个图可以更好地理解召回算法与排序算法的关系。

做推荐系统必须懂各种算法吗(从零入门推荐系统)(1)

图1:排序算法的逻辑说明

由于召回的结果一般不会很多(几十个到几百个),排序算法需要打分的物品是比较少的,所以在数据量比较大,特征比较丰富的情况下,排序算法一般可以用稍微复杂一些的算法来训练模型获得更好的排序结果,并且也能保证做完排序的时间控制在合理的范围,不影响用户体验。

任何机器学习模型都需要基于一定的特征来训练,排序模型也不例外。特征的丰富程度及有效性决定了模型的质量,所以一般排序算法可以使用各种类型的特征,包括用户相关的特征(比如年龄、性别、收入、用户id等)、行为相关的特征(点击、浏览、播放、购买、收藏、点赞、评论等)、物品相关的特征(标题、标签、价格、尺寸、产地等)、场景相关的特征(时间、地域、位置、天气、心情等)、交叉特征(前面几类特征之间的交叉或者同一类特征之间的交叉)等5大类特征。

排序算法需要充分利用上述介绍的5大类特征,以便更好地预测用户的行为,获得更好的商业价值。排序学习是机器学习中一个重要的研究领域,广泛应用于信息检索、搜索引擎、推荐系统、计算广告等的排序任务中,有兴趣的读者可以参考微软亚洲研究院刘铁岩博士的专著(见参考文献1)。排序算法根据预测对象的组织形式可以分为pointwise、pairwise、listwise三类,见下面图2。

做推荐系统必须懂各种算法吗(从零入门推荐系统)(2)

图2:三类排序学习算法框架

上图中x1,x2,... 代表的是训练样本1,2,... 的特征,y1,y12,s1,... 等是训练集的label(目标函数值)。pointwise学习单个样本,如果最终预测目标是一个实数值,就是回归问题,如果目标是概率预测,就是一个分类问题,例如CTR预估。pairwise和listwise分别学习一对有序对和一个有序序列的样本特征,考虑得更加精细。

在推荐系统中常用pointwise方法来做排序,它更直观,易于理解,也更简单。本系列文章中没有特别说明,我们的排序算法都是pointwise方法,我们不会对pairwise和listwise排序算法深入介绍,有兴趣的读者可以自行学习。介绍完了排序算法的一些基本概念,下面我们来介绍一下常用的排序算法。

10.2 常用的排序算法介绍

推荐系统的目标函数一般是一个分类问题或者回归问题,那么任何能够进行分类或者回归预测的算法都可以用来作为排序算法。本节我们主要根据算法本身的复杂度来对排序算法加以讲解,我们在本章中按照规则策略排序算法、简单排序算法和高阶排序算法3个部分来简单说明,在接下来的3章中我们也会按照这个分类来分别详细介绍排序算法的原理、实现方式等细节知识。

10.2.1 规则策略排序算法

所谓规则策略排序算法,不是利用机器学习模型来进行排序,而是利用人工的经验(一般是基于对业务理解的经验)来对各种召回的结果按照某种规则或者策略来进行排序的过程。比如我们有4个召回策略,那么按照一定的顺序依次从每个召回策略中选择一个物品来排列,这就是一种非常简单的基于规则策略的排序。

初看起来这类排序算法有点无厘头,有点太主观,但是在某些业务场景中可能是唯一一种可供选择的排序算法。比如在新开发一个APP时,这时没有太多的用户行为数据,无法训练任何排序模型,这时只有采用基于规则策略的排序算法是可行的。这类算法的具体实现方案及应用场景我们会在第11章详细介绍,这里就不展开讲解了,读者现在只需要能够理解就好了。

10.2.2 简单排序算法

所谓简单排序算法,就是算法本身的结构是非常简单的,算法复杂度比较低,不需要大量的数据就可以训练出排序模型,这类排序算法工程实现也非常容易,非常容易应用到企业级推荐系统中。具体来说,我们会介绍logistics回归、分解机(FM)、树模型(如GBDT)这3类简单排序算法。

上述3类算法曾经是最主流的推荐排序算法,被用到各种规模公司的排序业务场景中。很多公司还基于这些算法进行了适当的修改、优化,获得了非常好的线上业务效果。即使在现在,这几类算法也会使用到,并没有过时。本节我们不详细说明算法原理,我们会在第12章中详细介绍。

10.2.3 高阶排序算法

这里指的高阶的算法是指在深度学习时代兴起的利用深度学习技术进行排序的算法。目前深度学习进行排序的算法非常多,可以说,现在主流的排序算法基本都用上了深度学习算法了。在各种各样的深度学习排序算法中,作者认为有几个算法是非常经典的,这就是wide & deep、deepFM、MMOE、YouTube深度学习排序这4个排序算法(参考文献2、3、4、5、6)。

这4个排序算法是国内外互联网大厂(如Google、华为、YouTube等)在真实业务场景中使用过并证明是非常高效的算法。这几个算法不光被业务经验证明有价值,并且它们的思路是非常有创新的,在工程实现上也有非常多的技巧值得大家借鉴,它们也对其它深度学习算法有比较大的启发作用。另外还有一点非常重要,那就是这4个算法也具有比较好的通用性,基于它们的实现思路,只要做简单的修改和优化就可以很好地用于各种公司的各种业务场景中。鉴于它们的普遍性和价值,本系列文章只介绍这4个高阶排序算法,其它深度学习排序算法读者可以自行去学习。

本节我们只是简单提到了这4个算法,我们会在第13章来详细说明这几个算法的算法原理、应用场景、工程实现技巧和优势,请读者拭目以待。

10.3 排序算法的2种应用场景

我们在第四章“推荐系统产品与运营”中提到有5种推荐产品形态,其中最核心的是物品关联物品推荐和个性化推荐。这两类场景也是排序算法最有用武之地的地方。下面我们简单来说明一下,在这两类场景(也是两种产品形态)中怎么去构建排序算法模型的训练集,方便大家更好地理解,然后可以利用后面几章介绍的算法来训练排序模型。

10.3.1 个性化推荐场景下的排序

一般来说,个性化猜你喜欢的样本是“用户物品对”,也即

做推荐系统必须懂各种算法吗(从零入门推荐系统)(3)

,这里 是用户, 是物品。那么样本集是所有这些用户 对物品 有操作行为的“用户物品对”构成的集合,即

做推荐系统必须懂各种算法吗(从零入门推荐系统)(4)

在选择训练样本时,存在两种情况可能影响模型效果。一是某些物品是热门物品,那么包含这个物品的“用户物品对”非常多,导致模型向热门物品偏移;二是某些用户非常活跃,行为非常多,而某些用户操作很稀少,这会导致行为多的用户“控制”了整个模型。这可以通过对热门物品或者行为多的用户进行下采样处理,反之,用上采样也是可以的。

有了样本集,剩下的就是需要考虑怎么从单个样本中构建特征,由于每一个样本包含用户和物品,我们可以从10.1节中讲解的5个维度(即用户维度、物品维度、用户行为维度、场景化、交叉)来构建特征,将这5个维度的特征进行拼接,就获得了样本

做推荐系统必须懂各种算法吗(从零入门推荐系统)(5)

的特征

做推荐系统必须懂各种算法吗(从零入门推荐系统)(6)

了,构建这5类特征的过程就是特征工程。下面图3以可视化的形式展示了每个样本按照5个维度的特征拼接获得的训练样本。

做推荐系统必须懂各种算法吗(从零入门推荐系统)(7)

图3:个性化推荐样本的特征构建(注意这里为了简单起见,上面特征中的值都用了0、1,并且label也是2分类,多分类或者回归也是可以的,下面图4类似,不再说明)

有了训练样本,我们就可以选择合适的排序模型进行训练,当排序模型训练好后,我们就可以针对未知“用户物品对”

做推荐系统必须懂各种算法吗(从零入门推荐系统)(8)

,采用跟训练集中样本一样的方法构建这个待预测的“用户物品对”的特征,然后灌入训练好的排序模型获得最终的预测结果。

当某个用户没有操作行为的所有物品(或者是召回的所有物品)都采用上面的方式进行预测后,那么根据预测评分进行降序排列,取TopN就可以作为给该用户的最终推荐了。

10.3.2 物品关联物品推荐场景下的排序

针对物品关联物品推荐(为了简单起见,下面简称关联推荐),我们这里只讲非个性化的关联推荐场景,这时所有用户在某个物品上的关联推荐是一样的。个性化的跟上面介绍的是类似的,只不过这时的特征部分要加上用户相关的特征,这里的个性化是指每个用户在同一个物品下的关联推荐都不一样。那么针对关联推荐,怎么选择训练样本呢?

如果你们的产品形态已经有了关联推荐,那么用户在关联推荐下的点击行为就可以当成一个样本,比如用户在物品的关联推荐下点击了,那么三元组

做推荐系统必须懂各种算法吗(从零入门推荐系统)(9)

就可以作为一个样本。如果你的产品没有关联推荐,那么我们可以将用户在相近时间浏览的两个商品(比如用户搜索手机这个关键词,在搜索结果中同时浏览了iPhone13和华为P50)可以构成一个正样本对。之所以选择时间相近的,是考虑到用户在相近时间点兴趣点是一致的,这个一致性刚好是关联推荐需要挖掘出的关键信息。这里提一下,负样本对可以是当两个物品同时曝光时,用户点击了其中一个,另外一个没点击,那么这个样本对可以作为负样本对,或者通过随机选择两个物品来作为负样本对。

这里有一点需要提的是,虽然样本中存在用户(因为样本是

做推荐系统必须懂各种算法吗(从零入门推荐系统)(10)

三元组),但是我们这里讲的是非个性化的关联推荐,所以特征中不应该包含用户特征,同时行为特征中也不是单个用户的特征,而是群体相关的特征(比如的平均播放时长等),由于是两个物品

做推荐系统必须懂各种算法吗(从零入门推荐系统)(11)

的关联推荐,那么特征中是可以包含两个物品的特征的。读者可以参见下面图4直观地看看具体的特征情况。

做推荐系统必须懂各种算法吗(从零入门推荐系统)(12)

图4:关联推荐样本的特征构建

构建好了模型的特征,那么就可以选择具体算法再利用测试数据训练排序算法,当算法训练好后,可以将任何两个物品对

做推荐系统必须懂各种算法吗(从零入门推荐系统)(13)

的特征灌入训练好的算法模型获得它们之间的关联度。有了任何两个物品的关联度。我们就可以将与最相关的N个物品按照相似度降序排列作为的关联推荐了。

10.4 关于排序算法的3点说明

关于排序算法基本概念的介绍就差不多了,本节我们再简单说明3个跟排序相关的现实问题,方便大家更好地在真实业务场景中理解和运用排序算法。

10.4.1 是否一定要用排序算法

我们在第五章提到过,推荐系统一般分类召回和排序两个阶段,那么在实际业务场景中是否一定要这么做呢?答案是未必。有些召回算法本身是可以对物品进行排序的,那么在某些场景下,只用这一个召回的结果就可以作为最终推荐了(除非用多个召回算法,才有排序的必要)。下面对几种可能不需要排序的情况进行说明,让读者可以更好地理解。

有些产品形态,比如热门推荐(比如热门榜单),一般是基于某种行为(比如播放量)进行统计排序获得的(即热门召回),这个时候就没必要再进行排序了,直接用热门召回的结果就可以了。

如果你的团队刚起步,目前还没有非常多的技术积累,这个时候也可以先用协同过滤、矩阵分解等简单召回算法的结果直接作为最终的推荐结果。没必要在一开始就花太多的精力去做这么多的模型,先将业务上线跑起来是最重要的事情。

对于非核心的推荐场景(比如推荐模块隐藏比较深,没有太多流量,对业务价值不大),一般可以用简单的召回算法(协同过滤、矩阵分解等)的结果作为推荐也是可以的。对这些业务价值不大的场景,就没有必要花费太多的人力物力去优化了,我们要将精力放到最重要、最有业务价值的推荐模块上(比如产品的首页信息流推荐)。

10.4.2 粗排和精排

一般业务场景比较复杂的公司,特征维度和规模比较大,物品数量也非常多(比如像阿里、美团这类公司的推荐系统),这时可能会将排序阶段分为粗排和精排两个阶段(粗排是用简单的算法进行排序选择一部分物品,减少召回的物品数量,然后精排就是对粗排后的物品利用更加复杂的模型进行更精准的排序过程)。这么做的目的是进一步将排序阶段的复杂度降低并进行解耦,提升整个推荐系统的效率和响应速度。一般小的公司和业务没那么复杂的产品是不建议分这么细的,只用一个排序阶段足矣。

10.4.3 排序后的业务调控

这个阶段一般是在排序之后,是基于产品、运营上的诉求对排序结果进行微调的过程。比如因为运营活动需要,在推荐列表中插入相关运营物品;或者是因为有相关风险(监管风险、版权风险等)而对相关物品进行下架处理;亦或是为了增加推荐的多样性和惊喜度进行调整等等,调控的原因和策略不一而足,这里不细说,读者可以基于自己公司的业务情况多思考一下。

总结

本章我们简单介绍了排序算法的基本概念,排序算法是推荐系统中最重要的算法之一(另外一个是召回算法),它的价值、原理大家都需要掌握得非常好。

本章我们还简单介绍了常用的排序算法,我们按照算法复杂度将排序算法分为基于规则策略的排序、简单排序、高阶排序这3大类,对于每类算法我们做了简单说明,接下来的3章我们会重点介绍这3类算法。

本章我们还介绍了排序算法的两种应用场景,分别是关联推荐和个性化推荐,我们讲解了怎么在这两类场景中基于各类特征构建训练样本,可以更好地指导大家去构建推荐系统排序模型。

最后我们还介绍了排序算法相关的3个问题,分别是是否一定要排序算法、粗排和精排、业务调控,这些知识点也是在实际业务场景中必须要关注的,不过我们没有重点展开说明,希望读者结合自己公司的业务去思考,也可以参考相关的资料自行学习。

参考文献

1、Learning to Rank for Information Retrieval

2、[YouTube 2016] Deep Neural Networks for YouTube Recommendations

3、[Google 2016] Wide & Deep Learning for Recommender Systems

4、[2017 华为诺亚实验室] DeepFM- A Factorization-Machine based Neural Network for CTR Prediction

5、KDD 2018 Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts

6、2019 Recommending what video to watch next:a multitask ranking system

做推荐系统必须懂各种算法吗(从零入门推荐系统)(14)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。