大家好,我是强哥。一个爱跑步、爱读书、爱写作的人!推荐算法从业者一定知道,在一个企业级的推荐系统中,推荐算法的业务流程一般分为召回和排序两个阶段(有的公司也把排序分为粗排序和细排序,我们这里不区分,见下图)。你为什么这么做?有什么好处吗?将推荐算法过程分为召回和排序两个阶段,有很多好处。在本文中,我们将从多个角度解释这样做的价值。在讲解之前先简单说一下召回和排序这两个阶段解决的问题,让大家更好的理解下面的描述。召回就是用更多的方法和策略从物品库中挑选出用户可能喜欢的物品。通常,召回数十到数百件物品。在排序阶段,将不同召回算法得到的结果用统一的模型重新打分排序,将得分最高的几十个item作为最终item推荐给用户。通过召回,我们提前从海量的全物品库中筛选出用户可能喜欢的少量物品,大大减少了排序阶段需要处理的物品数量。说完召回和排序两个阶段的作用,我们从四个维度来解释为什么企业级推荐算法流程要分解为召回和排序两个阶段。1.推荐算法过程的解耦我们知道,推荐系统是一门面向工程的计算机与机器学习的交叉学科,所以软件工程的一些思想和实践也适用于推荐系统。将推荐算法过程拆分为召回和排序两个阶段,将推荐算法分解为两个相对独立的子系统。我们可以对每个子系统分别进行迭代、优化、升级,方便我们在出现问题时进行分析、定位、排查、修复、优化。简而言之,将系统拆分成两个系统,更容易开发和维护系统。软件工程的思想是分而治之的思想,这种做法很符合软件工程的思想。2、便于团队的分工协作。推荐算法过程分为召回和排序两个阶段。这也便于一个比较大规模的算法团队进行更精细化的任务安排和人员职能分配。让不同的人专注于一个小领域,更容易让员工在这个方向上做到极致。毕竟召回和排序的思路、方法、策略还是有差异的。让不同的人在不同的模块上工作,更加专注。3.可实现性考虑随着深度学习技术的发展,我们知道深度学习技术等复杂的推荐模型能够取得比传统模型好得多的推荐效果。所以,大家肯定愿意去尝试更复杂的模型。然而,复杂模型在特征预处理、推理时间消耗、推荐服务延迟等方面比传统的简单模型有更高的要求。这是推断花费时间的示例。在用户规模和物品规模都非常大的应用场景中(比如抖音、淘宝等),需要使用复杂的深度学习模型对每个用户的物品组合进行打分。非常耗时且不切实际。如果recall阶段提前筛选出少量用户可能喜欢的item,那么ranking阶段的工作量就小很多。另外,目前的信息流推荐是推荐系统的标准技术。在实时推荐场景下,对时效性的要求更高。推荐算法的拆解对于推荐推理过程的近实时完成是非常关键和不可或缺的。4.考虑到提高推荐准确率,推荐算法过程分为召回和排序两个阶段。那么每个阶段都可以解决这个阶段的核心问题。最后,可以更好地提高推荐的准确性。下面分别说明。推荐系统召回阶段的主要目标是筛选出用户可能喜欢的项目,目的是不遗漏用户可能喜欢的项目。在一般召回阶段,可以采用多种方式进行召回,如基于内容标签的召回、基于用户画像的召回、基于近期用户行为的召回、基于热度的召回、基于地域(或位置)的召回等基于特殊事件的召回、基于时间的召回、基于协同过滤的召回等(参考下图)。不同的召回算法考虑的是用户兴趣点的某一方面,因此多种召回算法可以更好地覆盖用户更多样化的兴趣点,最终过滤掉用户喜欢的所有项目,避免遗漏重要的项目。兴趣点。在排序阶段,只对召回阶段筛选出的少量项目进行评分,因此可以选择效果较好的复杂算法模型(如深度学习模型等)。这个阶段我们可以关注模型的效果。如果我们用统计误差的思想来看待召回和排序的拆解过程,那么每一次召回算法就相当于一次随机变量抽样(抽样是用户感兴趣的随机变量)。由于其方法不同,每种召回算法都存在一定的误差,不同召回算法的误差方向不同。然后,当我们在排序阶段聚合所有召回算法的结果时,各个召回算法的误差可能会相互抵消,最终可以得到更准确的推荐结果。推荐系统将算法过程分解为召回和排序两个阶段。这种做法也可以用集成学习的思想来解释:通过多个模型的融合,获得整体更好的效果。在召回阶段,使用了多个模型。每个模型都可以描述用户兴趣的某个方面。它不准确,但没关系。找到用户的某个兴趣点就足够了。在排序阶段,我们会综合这些召回算法的结果,得到最能描述用户兴趣的最终结果。以上,我们从四个角度解释了为什么企业级推荐系统的推荐算法过程要拆解为召回和排序两个阶段。希望通过本文的学习,能够让读者更好的理解这种设计的理念,同时也希望读者能够对推荐算法的过程有更深入的理解。
