热传导/物质扩散算法应用于推荐

没有大量的数据,没有大量的人力就不能做好推荐么?当然不是,热传导/物质扩散推荐算法就是作为冷启动及小规模团队非常实用的推荐召回部分的算法。

目标是为a图中标有星号(不妨记为用户1)的用户推荐商品,该用户已经购买过的两件商品是我们可以利用的信息,用来给目标用户进行推荐。

物质扩散算法:

初始,我们认为每件被目标用户购买过的商品的信息量为1。
商品把自己的信息平均分给所有购买过它的用户,用户的信息值则是从所有商品所得到的信息值得总和,比如上图(b)中的第一个节点的信息就等于第一个商品平均分给三个用户的的平均信息1/3,再加上第四个商品平均分给两个用户的平均信息1/2,即为1/3+1/2=5/6;接下来,每一个用户再把自己的信息平均分给所有购买过的商品,商品的信息则是从所有用户收到的信息值得总和,如对于图(c)中的第一个商品,它的信息值就等于第一个用户信息值的一半,为5/12,加上第二个用户信息值的1/4,为5/24,再加上第三个用户信息值得一半,为1/6,总的能量值即为:5/12+5/24+1/6=19/24。

以上两个步骤加起来为从商品到商品信息扩散一步。针对大规模系统的推荐,为了保持实时性和效率,往往只需扩散三步以内。如果以一步为界,基于图(c)中的结果,则在目标用户没有购买过的所有商品中,第三个商品的信息值最大,因此基于物质扩散算法的推荐系统则会将此商品推荐给目标用户,同时可以得到对于用户1的商品得分排序,自然可以得到用户召回集。值得注意的是物质扩散这种算法得到的所有商品最后的信息值之和就等于初始时所有商品的信息值,即能量是守恒的,图(c)中所有商品的信息之和仍为2。

热传导算法:

初始,我们认为目标用户购买过的每件商品的信息量为1。
目标用户的信息等于所有他购买过的商品信息的平均值,如图(d)所示,目标用户购买了商品1和商品4,则该用户的信息值即为(1 + 1) / 2 = 1。再根据目标用户浏览过的商品给所以商品计算信息,第一个商品、第四个商品信息量为1/2,其他商品的信息量为0(因为目标用户没有买过),接下来根据每一个商品的信息计算其他的用户的信息,如图(d)中的第二个用户的信息就为商品1,2,3,4的信息的平均值(1/2 + 1/2)/4 = 1/2;再根据每个用户的信息量平均分配信息到每个商品,如图(e)中的第一个商品来自第一个、第二个、第三个用户的信息的和,即为1/21/2+1/21/3+1/2*/12=2/3。

以上两个步骤加起来为从商品到商品热传导一步。因此基于热传导算法的推荐系统则会将此信息量大的商品推荐给目标用户,同时可以得到对于用户1的商品得分排序,自然可以得到用户召回集。与物质扩散不同的是这种算法得到的所有商品最后的信息值之和就不一定等于初始时所有商品的信息值,即不满足守恒定律,这是因为在信息传到的第二步过程中,有的用户的信息可能会被多次计算,从而导致不守恒。

基于物质扩散和基于热传导的推荐算法的区别在于: 基于物质扩散的方法在进行个性化推荐时,系统的总信息是守恒的;而热传导在推荐过程中,目标用户(即被推荐用户)的收藏品将被视作信息初始点,负责提供能量,所以系统的总信息量随着传递步骤的增加是在不断增加的。

如果对物理比较熟悉的朋友很容易联想到凸透镜和凹透镜,是的,我个人在理解的时候也是这样迁移理解,原理上确实一致。 基于物质扩散的方法相当于凸透镜一样把用户历史点击的信息聚焦到了少量优势的skn上了; 基于热传导的方法相当于是凹透镜一样把用户的历史点击信息发散到了那些较不流行的物品上,从而提高了推荐的新颖多样性。


欢迎大家关注我的个人bolg,更多代码内容欢迎follow我的个人Github,如果有任何算法、代码疑问都欢迎通过公众号发消息给我哦。

打赏的大佬可以联系我,赠送超赞的算法资料