swing是阿里原创的i2i召回算法(论文具体参考[1]),在阿里内部的多个业务场景被验证是一种非常有效的召回方法。据笔者了解,swing在工业界已得到比较广泛的使用,抖音,小红书,B站等推荐系统均使用了swing i2i。
传统icf算法
在介绍swing之前,我们先简单回顾下传统的item-cf是如何计算物品之间的相似度。
最经典的item-cf算法基于cosine来计算相似度,下面是传统item-cf对于item i和j的相似度定义。Ui表示喜欢物品i的用户集合,Uj表示喜欢物品j的用户集合。分子是Ui和Uj的交集大小,也就是喜欢i又喜欢j的用户数量。分母是Ui和Uj模的平方根,可以避免热门item与多数item都有很高的相似度。(注:由于热门item通常质量表现较好,在工业界实际使用时分母可能不会使用,特别是基于增量方式实现的icf)
传统item-cf背后的直觉是,如果大量用户同时喜欢两个物品,那么这两个物品之间应该有比较高的关联(相似度)。
swing算法原理
与传统item-cf类似,swing也是用来衡量物品之间的相似度,下面具体介绍swing算法。
swing的直觉来源是,如果大量用户同时喜欢两个物品,且这些用户之间的相关性低,那么这两个物品一定是强关联。
具体地,swing相似度的定义如下。对于这个公式,