推荐算法从业者肯定知道,在企业级推荐系统中,一般将推荐算法业务流程拆分为召回和排序两个阶段(有些公司还将排序分为粗排和精排,我们这里不加区分了,见下面图)。为什么这么做呢?这样做有什么好处吗?将推荐算法流程分为召回和排序两个阶段,好处是非常多的,本文我们就从多个角度来解释这么做的价值主要体现在哪里。
在讲解之前,简单说一个召回和排序这两个阶段分别解决的问题,方便大家更好地理解下面的讲述。召回就是采用比较多的方法和策略从物品库中将用户可能喜欢的物品挑选出来,一般召回的是几十到几百个物品。排序阶段是将不同召回算法获得的结果采用一个统一的模型进行重新打分排序,将得分最高的几十个作为最终的物品推荐给用户。通过召回,我们事先就从海量的全物品库中过滤出了少量的用户可能喜欢的物品了,这大大减少了排序阶段需要处理的物品数量。
讲解完了召回和排序两个阶段的作用,下面我们从4个维度来说明企业级推荐算法流程为什么拆解为召回和排序两个阶段。
1.推荐算法流程解耦合
我们知道推荐系统是一个偏工程的计算机与机器学习的交叉学科,那么软件工程的一些思路和做法也是适合推荐系统的。将推荐算法流程拆分为召回和排序两个阶段,那么推荐算法就分解为两个相对独立的子系统了。我们可以分别对每个子系统进行迭代、优化、升级,出了问题也方便我们去分析、定位、排查、修复、优化。总之,拆分为两个系统,更易于进行系统开发与维护。软件工程的思路就是分而治之的思路,这个做法是跟软件工程的思路一脉相承的。
2.有利于团队的分工协作
将推荐算法流程拆分为召回、排序两个阶段,这对于规模比较大的算法团队,也方便进行更精细化的任务安排和人员职能分派。让不同的人聚焦在某一个小的领域,这样更容易让员工在这个方向上做到极致。毕竟召回、排序的思路、方法、策略还有有差异的,让不同的人分工做不同的模块,更聚焦。
3.可实现性上的考虑
随着深度学习技术的发展,我们知道深度学习技术等复杂推荐模型可以达到比传统模型好得多的推荐效果。因此,大家肯定愿意去尝试更复杂的模型。但是复杂的模型在特征预处理、推断时间花费、推荐服务延迟等方面相对传统简单的模型有更高的要求。这里举个推断时间花费的例子,在一个用户规模和物品规模都非常大的应用场景中(比如抖音、淘宝等),用一个复杂的深度学习模型去对每个用户物品组合进行打分是非常耗时的,也是不现实的。如果召回阶段事先筛选出了少量的用户可能喜欢的物品,那么排序阶段的工作量就小了很多了。

