‘早期排名阶段的原则方法’
早期排名阶段的有效方法与原则
一个系统化的方法,用于设计和评估推荐系统中的候选生成和早期排名阶段,并深入分析核心指导原则。
众所周知,在推荐系统中,有几个建立推荐的阶段:首先是候选生成,也经常被称为检索,然后是一个或多个排名阶段。学术论文对早期阶段并没有给予太多关注。但在实践中,它们非常重要。而且如何衡量它们的质量是很重要的。
候选生成通常是由不同来源的组合组织的:
尽管这里的每种方法本身可能并不复杂,但整个组合却相当复杂,引人深思:如何优化它呢? 当然,需要定义确切需要优化的内容,也就是说,需要使用什么指标来衡量候选生成的质量。
虽然我们的讨论重点是候选生成阶段,但值得注意的是,这些原则同样适用于所有早期排名阶段,因为它们也为后续阶段提供候选人。
有各种不同的方法。有时质量只是简单地没有被衡量(或只是“肉眼测量”),这个阶段没有得到系统性的优化。有时候,候选人的整体相关性会以某种方式进行衡量。如果系统推荐了一些奇怪的东西,这也被认为是候选生成中的一个错误。有时,这种相关性甚至与最终阶段进行对比。也就是说,无论如何测量,候选人应该已经足够相关,而最终的排名将选择最具吸引力的候选人(有吸引力的、可点击的等)
有时,在论文中使用像HitRate@k,Recall@k,Precision@k,MRR,NDCG等指标,只关注正面(相关)文档。如果用户随后与该文档互动,该文档被认为是相关的。相比之前的方法,我更喜欢这种方法,尽管它存在一些与各种偏见有关的问题:例如,用户更倾向于更频繁地与系统推荐的物品进行互动。
在某些时候,我尝试了一个不同的候选生成方法,并一直支持它。幸运的是,我并不是唯一一个这样做的人 —— 这种方法已经在各种系统中使用(例如,如这篇关于Instagram探索推荐系统的扩展文章所详述的那样)。然而,我不确定它是否可以称为行业标准 —— 肯定有一些主要系统没有使用这种方法。
这种方法基于以下原则:
早期阶段的主要任务是从最终排名的角度找到最佳文档。
换句话说,目标就是要找出前几名。前几名由当前的最终排名者定义,而不是由相关性决定。最终排名者最终选择的候选人是好的,其他人则相对不太好。如果排名者发生变化(并且变化可能相当频繁),那么质量评估也会有所变化。
(对于多阶段排名,可以对早期阶段的质量进行评估,可以是与最终排名者特定相关的,也可以是与下一阶段排名者相关的。也就是说,通过了下一阶段但未通过最终阶段的候选人可以被认为是负面或正面的。我不确定哪种方法更好。)
尽管这种方法并不完美,但我个人认为它是唯一可行的方法,也就是说,只有通过这种方法才能在长期内系统地提高所有阶段的质量,而不会遇到根本问题。至少,我不知道如何用其他方法达到这个目标。
在概述了这种方法的基本原理之后,让我们深入探讨它的优点和缺点,首先从审视其潜在的缺点开始。
这种方法的缺点
- 包括其质量评估方式在内,候选人生成过程的整体依赖于当前的排名方法。这增加了复杂性,在进行比较时需要考虑此因素。当排名器发生变化时,需要重新训练早期阶段。
- 大多数情况下,系统最初在不遵循这个原理的情况下构建。将系统从另一种状态转变为符合这个原理可能非常具有挑战性。特别是,如果系统的排名相当糟糕(但由于各种技巧而产生的推荐结果是可接受的),遵循这个原理不会改善系统,反而可能显著恶化推荐结果。
- 这个原理假设排名器应该能够在整个文档库上工作良好。否则,如果排名器会错误地推荐一些糟糕的文档,那么候选人生成过程为了取悦排名器,最终也会找到这些糟糕的文档。这使得排名器的训练相对于只在一组已经相当良好的候选人上操作的情况更加复杂。
- 候选人生成过程并不试图改进服务的端到端指标。按照这个原则进行改进是可能的,但最终可能会导致失败的实验。(然而,这恰好表明排名存在问题,比如错误的目标。)这增加了工作的复杂性:您不断在改进,但无法部署它。
- 对于产品规则的有限支持。该原理规定,除了硬规则之外,所有这些规则都应在最后阶段应用,而前期阶段将适应它们。这不仅涉及到技巧,还包括改进推荐的各个方面(如探索性、多样性等)的合理方法。您必须提供多样的候选人,因为排名器会选择它们。
从技巧到和谐:推荐中的产品规则结构
不要让启发式方法破坏机器学习,学会将它们结合起来
towardsdatascience.com
在探讨了局限性之后,让我们将注意力转向这种方法的优点。
这种方法的优点
- 该原理是基于分解的。它为早期阶段提供了一个更清晰和可衡量的目标,极大地简化了系统。推荐的目标和损失的选择所涉及的复杂性集中在排名阶段(这是无法避免的),而早期阶段主要关注高效地找到前几个候选人这一功利性任务。因此,早期阶段只是加速排名过程的工具。
- 在这种原理中,没有基本限制。如果人们想象一个理想的推荐系统,没有什么能阻止它以这种方式进行结构化。(对于其他方法来说不能这么说——完美的推荐并不一定要猜测用户将与之交互的内容!)随着排名的改进,这种对候选人生成的简化度量逐渐接近于端到端的度量。这类似于某些领域中众所周知的迭代方法:“改进指标——基于这些指标改进产品。”
- 排名的不同阶段彼此协调;它们不尝试优化不同的东西。在不符合此条件的系统中,例如,如果将候选人总数翻倍,则系统的整体质量可能不会提高,反而可能下降。例如,如果早期阶段优化某种相关性形式,那么额外的候选人将更不相关,整体相关性将降低(尽管可点击性可能会增加)。
- 作为分解点有关的结果:早期阶段的度量要容易得多(因此易于优化)。评估过程将在下面的部分介绍。训练主要归结为提炼排名模型。(尽管有一些细微差别。例如,最好记录一些未进入排名前几个名次的候选人。)
- 此外,对于早期阶段的训练和度量,我们不再需要用户,这意味着不需要在他们身上推出新方法。例如,可以使用爬虫,我们将在稍后讨论,通过向排名服务发送一些使用新候选人的请求。
衡量候选人生成
现在,让我们深入探讨文章中最实际的部分,讨论如何实际上衡量候选人生成(或者排名的早期阶段)的质量,根据我们之前概述的原则。
首先,让我们考虑一个简化但非常重要的情况:当排名仅基于一个最终模型的分数时。在这种情况下,我们只需要比较该模型对两组候选人的平均分数。如果一种方法找到的候选人比另一种方法的平均分数更高,则第一种方法更好。
无论是整个输出的平均预测,还是仅针对前几个位置,或者在某些位置上进行衰减(类似于IDCG中的分母在NDCG中)似乎都不是非常关键。可以根据个人喜好选择其中任何一种选项。
然而,需要考虑一个技术细节。如果这样的指标是离线测量的,那么就需要能够在自定义候选人上运行排名(或者整个推荐系统堆栈)。这可以通过仿真(离线重播 – 即试图回顾性地重现所有实体的所有信息)在历史查询上进行,或者通过抓取 – 如前所述,向推荐服务发送大量新查询,以使用所感兴趣的候选人生成方法。在这两种情况下,对于相同的查询,获得不同生成方法的结果(最终模型的预测)。这有助于指标的敏感性。
然而,如果这个指标是在线测量的,即在生产服务上测量,那么可以简单地基于模型的记录预测进行计算。这样做更简单,但不太灵活,并且比较会涉及不同的查询。指标的敏感性下降(可能其中一种方法只是碰巧收到了更复杂的查询)。
现在让我们转向一般情况:最终排名不仅仅是某个模型的预测,还涉及许多其他逻辑、二次排序、业务规则、随机化等等。当你思考如何在这样松散的形式中比较不同候选人集时(什么是好的和什么是坏的),这一点一点都不明显。
然而,我曾经设计了一个非常简单而有效的方法。到目前为止,我还没有看到它在其他地方被提到。
这个方法如下所示。我们将一个特殊的来源添加到候选人来源列表中,该来源生成随机候选人(例如,均匀分布)。我们为这个来源分配一个小的固定配额(例如,50个候选人)。然后我们观察最终建议的文档中有多少来自这个来源。如果我们的主要候选人生成足够好,那么随机候选人很少会超越它,即进入前几位。如果它很差,它们将经常这样做。
当然,在这里我们假设添加随机候选人不会显着恶化系统:它们中的大多数不会被推荐,而被推荐的那些也不会大大恶化用户体验,并且甚至为用户和排名模型的探索增加了可能性(它们将进一步训练这些示例)。如果不是这种情况,则首先需要“修复排名”。 😉
这种方法最酷的地方是,它不仅可以作为候选人生成的衡量标准,还可以作为整个系统(包括最终排名)健康情况的监控工具。它检查候选人生成与排名(为排名进行优化)的对齐程度。如果由于某种原因排名本身变差,那么候选人也变得不太适用于它。我们在实践中曾看到过这种情况,当其中一个组件出现故障时,随机候选人在响应中的比例增加。
顺便说一下,这个特殊来源的随机性可以进行调整。如果使用与文档流行度成比例而不是均匀分布,那么它会成为一个更强的“对抗性”参与者(也可以增加敏感性)。然而,使用均匀采样可以提供对查询的比例进行分析估计,我们的候选人生成是理想的(即使将整个数据库添加到候选人中,结果也不会改变):
在这个公式中,N代表数据库中候选人的总数,k是使用的随机候选人的数量,R表示至少有一个随机候选人出现在输出中的查询比率。
结论
在这个探索过程中,我们集中讨论了推荐系统中候选人生成和早期排名阶段的一个特定原则。通过彻底研究其优势和挑战,并提出实用的评估方法,我们强调了这一原则作为完善这些系统的强大工具的潜力。采纳这一原则不仅简化了推荐过程的复杂性,还确保了效率和效果。随着我们继续完善和应用这一原则,它将成为推动推荐系统领域发展的一个有希望的方向。