Swing Arithmetic

swing是阿里原创的i2i召回算法(论文具体参考附录[1]),在阿里内部的多个业务场景被验证是一种非常有效的召回方法。swing在工业界已得到比较广泛的使用,抖音,小红书,B站等推荐系统均使用了swing i2i

传统icf算法

在介绍swing之前,我们先简单回顾下传统的item-cf是如何计算物品之间的相似度。
最经典的item-cf算法基于余弦来计算相似度,下面是传统item-cf对于item $i$和$j$的相似度定义。

$U_i$表示喜欢物品$i$的用户集合,$U_j$表示喜欢物品$j$的用户集合。分子是$U_i$和$U_j$的交集大小,也就是喜欢$i$又喜欢$j$的用户数量。分母是$U_i$和$U_j$模的平方根,可以避免热门item与多数item都有很高的相似度。

传统item-cf背后的直觉是:如果大量用户同时喜欢两个物品,那么这两个物品之间应该有比较高的关联(相似)

swing算法

与传统item-cf类似,swing也是用来衡量物品之间的相似度。swing相似度的定义如下:

  • $U_i$表示喜欢物品$i$的用户集合,$U_j$表示喜欢物品$j$的用户集合,$I_u$表示用户$u$喜欢的item集合,$I_v$表示用户$v$喜欢的item集合。
  • 公式中有两个$\sum$求和符号,表示的是在同时喜欢物品$i$和$j$的用户集合内两两取$pair$,因此分子的1可以理解为表示一个用户$pair(u,v)$。
  • 分母中的$I_u$和$I_v$交集的用来表示用户$u$和$v$之间的相似度,等于两个用户共同点击的item数量。这个值越高,说明两个用户的重合度越高,就要降低它的贡献度。
  • 分母中的$\alpha$是一个平滑项,可以避免分母为零,可以取一个较小的正数,例如1。

swing的直觉来源是:如果大量用户同时喜欢两个物品,且这些用户之间的相关性低,那么这两个物品一定是强关联(相似)

传统icf与swing的异同点

比较传统icf和swing的相似度定义公式,可以看到,两者的共同点是都通过同时喜欢物品$i$和$j$的用户规模来表达相似度,共同喜欢两个物品的用户量越大,物品间的相似度越高。区别是,swing还考虑了用户之间的重合度,不仅希望用户交集的规模大,且要多样性好。
用一句话来分别概括传统icf和swing的特点:
传统icf:如果同时喜欢两个物品的用户越多,那么这两个物品间的相似度越高。
swing:如果同时喜欢两个物品的用户越多,且这些用户之间的重合度越低,那么这两个物品间的相似度越高。

附录

[1] Large Scale Product Graph Construction for Recommendation in E-commerce