概述
swing 是阿里原创的 i2i 召回算法,在阿里内部的多个业务场景被验证是一种非常有效的召回方法。据笔者了解,swing 在工业界已得到比较广泛的使用,抖音,小红书,B 站等推荐系统均使用了swing i2i。
1.传统 icf 算法
在介绍 swing 之前,我们先简单回顾下传统的 item-cf 是如何计算物品之间的相似度。最经典的 item-cf 算法基于 cosine 来计算相似度,下面是传统 item-cf 对于 item i i i 和 j j j 的相似度定义。
s ( i , j ) = ∣ U i ⋂ U j ∣ ∣ U i ∣ ⋅ ∣ U j ∣ s(i,j) = \frac{|U_i \bigcap U_j|}{\sqrt{|U_i|} \cdot \sqrt{|U_j|}} s(i,j)=∣Ui∣⋅∣Uj∣∣Ui⋂Uj∣
传统 icf 相似度定义公式 U i U_i Ui 表示喜欢物品i的用户集合, U j U_j Uj 表示喜欢物品j的用户集合。分子是 U i U_i Ui 和 U j U_j Uj 的交集大小,也就是喜欢 i i i 又喜欢 j j j 的用户数量。分母是 U i U_i Ui 和 U j U_j Uj 模的平方根,可以避免热门 item 与多数 item 都有很高的相似度。(注:由于热门 item 通常质量表现较好,在工业界实际使用时分母可能不会使用,特别是基于增量方式实现的 icf)传统 item-cf 背后的直觉是,如果大量用户同时喜欢两个物品,那么这两个物品之间应该有比较高的关联(相似度)。
2.Swing召回算法
下图红边为一个 swing 结构,共同评分过两个物品的用户集合中,每两个用户和这个两个物品形成了一个四边形,统计有多少个这样的结构,每一个结构的权重是不同的,这个结构里两个用户共同评分过的物品的数量越多权重就越小。
为了衡量物品
i
i
i 和
j
j
j 的相似性,考察都购买了物品
i
i
i 和
j
j
j 的用户
u
u
u 和
v
v
v , 如果这两个用户共同购买的物品越少,则物品
i
i
i 和
j
j
j 的相似性越高。极端情况下,两个用户都购买了某个物品,且两个用户所有购买的物品中,共同购买的物品只有这两个,说明这两个用户兴趣差异非常大,然而却同时购买了这两个物品,则说明这两个物品相似性非常大!相似度计算公式为:
3.其他角度理解
- 基于图结构的实时推荐算法 Swing,能够计算 item-item 之间的相似性。这种方法的一个直觉来源于,如果多个 user 在点击了 i i i 的同时,都只共同点了某一个其他的 j j j ,那么 i i i 和 j j j 一定是强关联的,这种未知的强关联关系相当于是通过用户来传递的。
- 比较传统icf和swing的相似度定义公式,可以看到,两者的共同点是都通过同时喜欢物品i和j的用户规模来表达相似度,共同喜欢两个物品的用户量越大,物品间的相似度越高。区别是,swing还考虑了用户之间的重合度,不仅希望用户交集的规模大,且要多样性好。
- 传统icf:如果同时喜欢两个物品的用户越多,那么这两个物品间的相似度越高。swing:如果同时喜欢两个物品的用户越多,且这些用户之间的重合度越低,那么这两个物品间的相似度越高。
[1].推荐召回-Swing
[2].推荐算法三视角:矩阵,图,时间线
[3].swing:一种工业界广泛使用的召回算法