Free Will

推荐系统 | 召回02:Swing

回顾ItemCF

本文介绍ItemCF的一个变体,叫做Swing,在工业界很常用。Swing跟ItemCF非常像,唯一的区别就是怎么样定义物品的相似度。我们先回顾一下上节课介绍的ItemCF,ItemCF这样定义两个物品之间的相似度。


如果喜欢物品$I_1$和$I_2$的用户有很大的重叠,那么判定物品$I_1$与$I_2$相似,Item cf基于这样的假设,如果用户喜欢物品$I_1$,而且物品$I_1$与$I_2$相似,那么用户很可能也喜欢物品$I_2$。Item cf就是基于这样的假设做推荐,再复习一下item计算两个物品相似度的公式,

把喜欢物品$I_1$的用户记作集合$W_1$,$W_1$是用户的集合,把喜欢物品$I_2$的用户记作集合$W_2$,把集合$W_1$,$W_2$的交际记作V集合,V中的用户同时喜欢物品$I_1$和$I_2$。用上面这个公式计算物品$I_1$,$I_2$的相似度,公式中的分子是集合V的大小,这是对两个物品都感兴趣的用户人数,分母是集合$W_1$、$W_2$的大小的乘积,再取根号,这样计算出的相似度一定是一个介于零到一之间的数,数值越大表示两个物品越相似。

我画个图来解释ItemCF的物品相似度,下图左右两边各是一个物品,

中间这六个人是用户,推荐系统记录了这些用户对哪些物品感兴趣,比方说用户给一个物品点赞,就说明用户对物品感兴趣。左边这五个箭头表示有五个用户对左边红色物品感兴趣,右边这五个箭头表示用户对右边的绿色物品感兴趣。

那中间的这四个用户就是前面定义的交集V,它是两组用户重合的部分,
集合V中的用户同时对两个物品都感兴趣,集合V中这部分的用户占比越大,itemCF就认为两个物品的相似度越高。

通常来说这是有道理的,如果大量的用户同时喜欢两个物品,那么这两个物品应该有某种共性。比方说左边的物品是骂川普的文章,右边的物品是支持绿色能源的文章。两篇文章字面上没啥相似性,但是用MCF会发现两者之间的相似度非常高,这是有道理的。如果一个用户喜欢看支持绿色能源的文章,那么给他推骂川普的文章,他也很有可能会点击和点赞。

ItemCF的缺陷

刚才回顾了item CF的原理,下面讨论item CF的不足之处,问题在于,假如重合的用户是一个小圈子该怎么办?比方说这四个用户都在同一个微信群里面。

左边的物品是这样一篇笔记,某个网站护肤品打折,右边的物品是笔记字节裁员了。这两篇笔记没有什么相似之处,他们的受众差别很大,但是两篇笔记,碰巧被分享到同一个微信群里面,微信群里有很多人同时点开这两篇笔记。

这样就造成一个问题,两篇笔记的受众完全不同,但是很多小圈子的用户同时交互过两篇笔记,导致系统错误的判断,最后误以为两篇笔记的相似度很高。

想要解决这个问题,就要降低小圈子用户的权重,我们希望两个物品重合的用户广泛而且多样。而不是集中在一个小圈子里,一个小圈子的用户同时交互两个物品,不能说明两个物品相似。

反过来,如果大量不相关的用户同时交互两个物品,则说明两个物品有相同的受众。swing模型的原理都是给用户设置权重,解决小圈子问题。

swing模型如何解决小圈子问题

接下来我就去讲swing模型是怎么样计算两个物品的相似度?

把用户$u_1$喜欢的物品记作集合记作$J_1$,把用户$u_2$喜欢的物品记作集合记作$J_2$,然后,定义两个用户重合度overlap为$J_1$与$J_2$的交集的大小,记作$overlap(u_1,u_2)$,
这个值越大,说明两个用户的重合度越高,越有可能是一个小圈子的人,要降低他的权重。

在计算物品相似度的时候,

会把$overlap(u_1,u_2)$放到分母上,类似于itemCF,把喜欢物品$I_1$的用户记作集合$W_1$,把喜欢物品$I_2$的用户记作集合$W_2$,集合$V$是$W_1$和$W_2$的交集,如果一个用户既喜欢物品$I_1$,也喜欢物品$I_2$,那么这个用户就在集合V中,

上面那个公式是计算两个物品相似度的公式,$sim(i_1,i_2)$意思是物品$I_1$和$I_2$两者的相似度,计算相似度的时候,要关于集合V中的用户求连加,用户记作$u_1$和$u_2$都属于集合大$V$,也就是说,用户$u_1 u_2$都对物品$I_1$,$I_2$感兴趣,这种用户数越多,就说明物品$I_1$和$I_2$越相似,连加里面是1除以Alpha加$overlap(u_1,u_2)$,alpha是个人工设置的参数(防止分母变0了)。

需要强调的是,$overlap(u_1,u_2)$的意思是用户$U_1$和$U_2$的重叠有多大,重叠大的代表两个人是同一个小圈子,那么他们两个人对相似度的贡献会比较小。

反过来,如果$overlap(u_1,u_2)$小,说明他们属于同一个圈子的可能性小,那他们对相似度的贡献比较大,用$overlap(u_1,u_2)$可以降低小圈子对相似度的影响。

okay,这就是swing模型的关键计算区别。

总结

最后总结一下本文的内容,

Swing和itemCF是非常相似的两种方法。它们唯一的区别就是在于如何计算物品的相似度。

item cf考察两个物品重合的受众比例有多高,如果很多用户同时喜欢两个物品的判定,两个物品相似,

Swing跟item cf差不多,但是会额外考虑重合的用户是否来自同一个小圈子,把同时喜欢两个物品的用户记作结合V,对于集合V中的用户$u_1$和$u_2$,把两个用户的重合度记作$overlap(u_1,u_2)$

Overlap越大,说明两个用户越有可能来自同一个小圈子,那么就要降低它的权重,他们对物品相似度的分数的贡献就会比较小。

总而言之,Swing跟ItemCF的区别就是在计算物品相似度的时候,要降低小圈子用户的影响。



应统联盟


连接十万名应统专业同学


阿药算法


打通算法面试任督二脉