提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
王树森娓娓道来**《小红书的推荐系统》**
GitHub资料连接:http://wangshusen.github.io/
B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610
基础知识:
【1】一文看懂推荐系统:概要01:推荐系统的基本概念
【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
提示:文章目录
之前我们讲过基于物品的协同过滤,缩写是item cf
【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
本文介绍item cf的一个变体,叫做swing,在工业界很常用。
swing跟item c非常像,唯一的区别就是怎么样定义物品的相似度。
我们先回顾一下上节课介绍的item cf,
item cf这样定义两个物品之间的相似度。
如果喜欢物品I1和I2的用户有很大的重叠,那么判定物品I1与I2相似,
Item cf基于这样的假设,如果用户喜欢物品I1,而且物品I1与I2相似,那么用户很可能也喜欢物品I2。
Item cf就是基于这样的假设做推荐,
再复习一下item计算两个物品相似度的公式,
把喜欢物品I1的用户记作集合W1,W1是用户的集合,
把喜欢物品I2的用户记作集合W2
把集合W1W2的交际记作V集合,V中的用户同时喜欢物品I1和I2。
用上面这个公式计算物品I1 I2的相似度,
公式中的分子是集合V的大小,这是对两个物品都感兴趣的用户人数,
分母是集合W1 W2的大小的乘积,再取根号,
这样计算出的相似度一定是一个介于零到一之间的数,数值越大表示两个物品越相似。
我画个图来解释I用CF的物品相似度,下图左右两边各是一个物品,
中间这六个人是用户,推荐系统记录了这些用户对哪些物品感兴趣,
比方说用户给一个物品点赞,就说明用户对物品感兴趣。
左边这五个箭头表示有五个用户对左边红色物品感兴趣,
右边这五个箭头表示用户对右边的绿色物品感兴趣。
那中间的这四个用户就是前面定义的交集V,它是两组用户重合的部分,
集合V中的用户同时对两个物品都感兴趣,集合V中这部分的用户占比越大,itemCF就认为两个物品的相似度越高。
通常来说这是有道理的,如果大量的用户同时喜欢两个物品,那么这两个物品应该有某种共性。
比方说左边的物品是骂川普的文章,右边的物品是支持绿色能源的文章。
两篇文章字面上没啥相似性,但是用MCF会发现两者之间的相似度非常高,这是有道理的。
如果一个用户喜欢看支持绿色能源的文章,那么给他推骂川普的文章,他也很有可能会点击和点赞。
举个反例,一篇文章骂川普,一篇文章支持川普。
两篇文章字面上特别像,但是items会发现两篇文章的相似度非常低,给支持川普文章点赞的,绝对不可能给骂川普的文章点赞。
刚才回顾了item CF的原理,下面讨论item CF的不足之处,
问题在于,假如重合的用户是一个小圈子该怎么办?
比方说这四个用户都在同一个微信群里面。
左边的物品是这样一篇笔记,某个网站护肤品打折,
右边的物品是笔记字节裁员了。
这两篇笔记没有什么相似之处,他们的受众差别很大,
但是两篇笔记,碰巧被分享到同一个微信群里面,微信群里有很多人同时点开这两篇笔记。
这样就造成一个问题,两篇笔记的受众完全不同,
但是很多小圈子的用户同时交互过两篇笔记,导致系统错误的判断,最后误以为两篇笔记的相似度很高。
想要解决这个问题,就要降低小圈子用户的权重,
我们希望两个物品重合的用户广泛而且多样。
而不是集中在一个小圈子里,一个小圈子的用户同时交互两个物品,不能说明两个物品相似。
反过来,如果大量不相关的用户同时交互两个物品,则说明两个物品有相同的受众。
swing模型的原理都是给用户设置权重,解决小圈子问题。
接下来我就去讲swing模型是怎么样计算两个物品的相似度?
把用户u1喜欢的物品记作集合记作J1
把用户u2喜欢的物品记作集合记作J2
然后,定义两个用户重合度overlap为J1与J2的交集的大小,记作overlap( u1,u2),
这个值越大,说明两个用户的重合度越高,越有可能是一个小圈子的人,要降低他的权重。
在计算物品相似度的时候,
会把overlap( u1,u2)放到分母上,
类似于itemCF
把喜欢物品I1的用户记作集合W1
把喜欢物品I2的用户记作集合W2
集合V是W1和W2的交集,如果一个用户既喜欢物品I1,也喜欢物品I2,那么这个用户就在集合V中,
上面那个公式是计算两个物品相似度的公式,
sim(i1,i2)意思是物品I1和I2两者的相似度,
计算相似度的时候,要关于集合V中的用户求连加,
用户记作u1和u2都属于集合大V,也就是说,用户u1u2都对物品I1I2感兴趣,
这种用户数越多,就说明物品I1和i2越相似,
连加里面是1除以Alpha加overlap( u1,u2)
alpha是个人工设置的参数(防止分母变0了),
需要强调的是,
overlap( u1,u2)的意思是用户U1和U2的重叠有多大,重叠大的代表两个人是同一个小圈子,那么他们两个人对相似度的贡献会比较小。
反过来,如果overlap( u1,u2)小,说明他们属于同一个圈子的可能性小,那他们对相似度的贡献比较大,用overlap( u1,u2)可以降低小圈子对相似度的影响。
okay,这就是swing模型的关键计算区别。
最后总结一下本文的内容,
Swing和itemCF是非常相似的两种方法。
它们唯一的区别就是在于如何计算物品的相似度。
item cf考察两个物品重合的受众比例有多高,如果很多用户同时喜欢两个物品的判定,两个物品相似,
Swing跟item cf差不多,但是会额外考虑重合的用户是否来自同一个小圈子,
把同时喜欢两个物品的用户记作结合V,
对于集合V中的用户u1和u2,把两个用户的重合度记作overlap( u1,u2)
Overlap越大,说明两个用户越有可能来自同一个小圈子,那么就要降低它的权重,他们对物品相似度的分数的贡献就会比较小。
总而言之,Swing跟item cf的区别就是在计算物品相似度的时候,要降低小圈子用户的影响
下一篇文章介绍基于用户的协同过滤召回算法 userCF。
提示:如何系统地学习推荐系统,本系列文章可以帮到你
(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:总而言之,Swing跟item cf的区别就是在计算物品相似度的时候,要降低小圈子用户的影响