前言
推荐系统的链路通常包括召回、粗排、精排、混排等,打散一般在混排阶段。
打散规则库
推荐系统中的打散规则库是用于规定如何对推荐结果进行打散处理的一系列规则。打散的目的是避免同类目、同作者、相似封面图等具有相似属性的推荐项集中出现,以提升用户体验,防止用户疲劳和系统过度个性化,同时有利于探索和捕捉用户的潜在兴趣。
打散方法
以下是一些常见的基于规则的打散方法:
- 分桶打散法:将不同属性的推荐项放入不同的桶中,然后依次从各桶中取出推荐项。这种方法实现简单,打散效果较好,但末尾容易扎堆,且对原始序列改变较大,多属性叠加困难,扩展性也较差。也可以考虑每个桶内推荐项的个数,进行分比例分桶打散。
- 权重分配法:对每个推荐项定义一个分数,计算公式为:$f(x) = w \times (1 + count)^{-1}$,其中$w$为每个属性的权重,代表属性打散需求的优先级;$count$为同属性推荐项已经出现的次数。按照$f(x)$从低到高对推荐项进行排序,即可完成打散。这种方法实现相对容易,可以充分考虑多种属性的叠加,扩展性较强,但仍然容易出现末尾扎堆的情况。
- 滑动窗口法:在一个长度可控的滑动窗口(session)内,当同属性推荐项超过一定次数后,就与后续序列中满足条件的推荐项进行位置交换。这种方法只需考虑局部,不需要全局计算,因此计算量较低,同时对原序的破坏也比较低,能最大限度保留相关性,但也可能会出现末尾扎堆的现象。
在实际应用中,通常需要根据具体的业务需求和数据特点选择合适的打散方法,或者结合多种方法来达到更好的打散效果。同时,基于 embedding 的打散方法也较为常见,其具有较强的泛化能力,但可能容易出现 bad case。目前主流方法仍然是基于规则的打散,因为其相对简单可控。然而,由于推荐项属性枚举值可能较多,基于规则的打散可能需要频繁更新,扩展性方面存在一定限制。
MMR
参考
- https://zhuanlan.zhihu.com/p/566498545