Swing算法
概念:不同于传统基于“点”的节点亲密度(proximity)计算方式,如:Common Neighbors, Adamic/Adar, Cosine Similarity, Jaccard Similarity, Wb-cosine, Rooted PageRank等,Swing会考虑网络结构信息,以高维的网络结构向二跳节点扩展,抗噪能力强,相比传统的CF准确性有大幅的提升。
算法详情:对于用户进行推荐,往往通过对用户的意图进行建模,但是会有马太效应的问题,即会造成越流行的东西随着搜索过程的迭代会越流行,使得那些越不流行的东西石沉大海。
Swing是一种基于图结构的实时推荐算法,Swing指的是秋千,用户和物品的二部图中会存在很多这种秋千,例如(u1,u2,i1)(u1,u2,i1), 即用户1和2都购买过物品ii,三者构成一个秋千(三角形缺一条边)。这实际上是3阶交互关系。传统的启发式近邻方法只关注用户和物品之间的二阶交互关系。Swing会关注这种3阶关系。这种方法的一个直觉来源于,如果多个user在点击了i1i1的同时,都只共同点了某一个其他的i2i2,那么i1i1和i2i2一定是强关联的,这种未知的强关联关系相当于是通过用户来传递的。另一方面,如果两个user pair对之间构成的swing结构越多,则每个结构越弱,在这个pair对上每个节点分到的权重越低。
为了衡量物品i和j的相似性,考察都购买了物品i和j的用户u和v, 如果这两个用户共同购买的物品越少,则物品i和j 的相似性越高。极端情况下,两个用户都购买了某个物品,且两个用户所有购买的物品中,共同购买的物品只有这两个,说明这两个用户兴趣差异非常大,然而却同时购买了这两个物品,则说明这两个物品相似性非常大。