【学习笔记】读项亮的《推荐系统实践》_第二章利用用户行为数据_上

第二章 利用用户行为数据


从前也了解协同过滤算法,不过对于其名字总是不知其所以然。在这本书中是这样解释的,“协同过滤算法......协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品”。假设的原始情景是,给用户推荐网站全部商品,这些商品形成一个长长的列表。而用户无法在有限时间内看完这张列表。这就需要对列表进行“过滤”,这是第一个关键词——过滤。而“协同”是指,通过对用户群体的整体行为的考虑,“用户根据自己的行为,帮助别的用户”过滤掉了别的用户不感兴趣的物品,反之亦然。


2.1 用户行为数据简介

显性反馈数据 vs 隐形反馈数据


2.2 用户行为分析

长尾分布,power law现象(参考“浅谈网络世界的power law现象”),函数满足如下形式:f(x) = alpha * x ^ k。

协同过滤算法的分类:1. 基于邻域的方法;2. 隐语义模型(latent factor model);3. 基于图的随机游走算法(random walk on graph)。


2.3 实验设计


2.4 基于邻域的算法


2.4.1 基于用户的协同过滤算法

早初提出的算法,被用在了邮件过滤和新闻过滤系统当中。在说明算法的基本初衷时,用了实验室师兄推荐专业书籍的例子,很好。

Jaccard相似度和余弦相似度。基于(物品)集合的余弦相似度计算方式与我们平时向量夹角的计算方式不同,这里的计算更加简单,具体参考书中的公式。

在具体计算过程中,设计了数据结构,以提高计算速度:计算用户相似度的时候,只需要计算有共同物品的两个用户,为了加速查找,建立系数矩阵c[u][v],矩阵中的项表示用户u和用户v共同物品的个数。为了建立这样的矩阵,又设计“物品到用户的倒查表”,即以物品为key,建立链表,链表中的节点是拥有该物品的用户。在建立c[u][v]的时候,遍历倒查表,在c[u][v]的位置加一即可。

基于用户的协同过滤唯一需要设定的参数k是设定取多少个与当前用户相似的用户,来为当前用户做推荐。k确定之后,取与当前用户相似度最高的k个用户,这些用户的物品作为集合,并利用用户之间的相似度,来计算用户群体中每个物品被喜欢的期望,并排序,过滤掉当前用户已经拥有的物品,取前m个物品推荐给当前用户。至此,完成UCF(user-based CF)的标准过程。

实验:有两个baseline,一个是随机选择算法产生的结果,一个是推荐最热门商品产生的结果,用准确率、召回率、覆盖率、流行度等作为评测指标,UCF的效果好于baseline。

用户相似度计算的改进:

在上文中,c[u][v]的值是用户共同拥有商品的个数,是正整数。在改进的算法中,上述的数值是实数。改进的基本理由如下:用户共同拥有一些流行的物品,不代表他们有共同的兴趣,有可能是都需要。例如:新华字典,很多人都有,但是并不能表示共同有新华字典的人有共同兴趣。在改进算法中,作者假设越冷门的物品越能表示用户的兴趣,反之,越热门的物品越不能说明用户的兴趣。在计算c[u][v]的值的时候,不是简单的累加1,而是累加的数值与物品的热度(共同拥有该物品的用户数)成反比。

实验验证,仅比标准UCF略好。


2.4.2 基于物品的协同过滤算法

从前看协同过滤的时候,看得比较粗,觉得UCF和ICF(item-based CF)的思想和作法很“对称”。现在看看,作法上的确比较对称,不过在思想上、实践上差别还是比较大的。

UCF的思想是找到和当前用户相似的用户,然后给当前用户推荐这些相似的用户喜欢的物品(只不过用户之间的相似性由“用户--物品”关系决定)。ICF的基本思想是,直接给用户推荐与它当前物品相似的物品(只不过物品之间的相似性也由“用户--物品”关系决定)。

个人思考:当物品之间的相似性不由“用户--物品”关系计算,而是由物品本身的属性计算(如:文本之间的相似度,物品属性之间的重合度),ICF就演变成了content-based的推荐,而content-based的推荐方法在一般的教科书上还与协同过滤并列为两种不同的算法。再想一下UCF,当用户之间的相似度不是由“用户--物品”关系计算,而是由社交网络得到,或者是直接由关系链(如:qq好友)得到,则UCF演变成基于社交网络的推荐。总之,系统过滤这两种算法是很基本的算法,与现在流行的方法在思路上“同源”。

不扯了,继续记笔记。

UCF的缺点:UCF的时空复杂度近似等于用户数量的平方,当用户量变大的时候,计算用户之间的相似度会越来越困难;很难给出推荐解释。

ICF计算物品之间的相似度,依据:物品A和B有很大的相似度,因为喜欢物品A的用户大部分也喜欢物品B。再深层次的依据,就是用户的兴趣局限在比较窄的几个方面,当两个物品属于同一个用户的时候,它们很有可能反映了某个比较窄的兴趣方面,则有较大的相似度。

在算法实际操作中,与UCF基本对称。ICF用余弦相似度能够避免过于热门的商品的影响。

在推荐物品的时候,UCF的物品候选列表,是相似的K个用户所拥有的所有物品;ICF是与当前用户的物品相似的K个物品所形成的物品集合。相似度计算方式两者对称。

实验:两个baseline与UCF一样,结论也一样。需要注意的是,ICF的推荐精度与K既不成正比关系,也不成反比关系。寻找合适的K对于ICF更关键。

物品相似度计算的改进:

与UCF的用户相似度计算改进一样,对称地也有物品相似度计算的改进,而且计算方式也对称。在实践中,这种改进能够消除活跃用户对推荐结果的影响。

物品相似度的归一化:

一句话,对物品相似度做归一化,既能够提高精度,也能够提高覆盖率。对于提高覆盖率这部分,书中有个比较好的例子来解释。

回顾一下ICF的复杂度,相比UCF,ICF适合用户非常多,但是物品数量不多、且物品更新不快的场景。


2.4.3 UserCF和ItemCF的比较

从各自推荐的基本假设来讲,UserCF更加“社会化”,即反映了用户兴趣所在的群体特征;而ItermCF更加“个性化“,即用户喜欢的物品反映了用户本身的兴趣的传承。

从技术实现的角度,UserCF维护了一张用户相似度表,ItemCF维护了一张物品相似度表,这两个表格都是离线、定期计算出来,动态更新比较慢。

对于新闻推荐来讲,新闻本身是item,相比之下,适宜用UserCF,原因是:1. item更新比较快,不适合用ItemCF;2. 当新用户加入进来,新用户与老用户相似度还没来得及计算的时候,解决新用户冷启动的一个自然方法是给新用户推荐热门新闻;3. 新闻推荐不需要推荐解释。

这一节,作者从实际应用的角度来比较两种方法,写的不错。

另外要注意的是,离线实验的性能在选择推荐算法的时候往往不起到决定性作用。在设计算法的时候,首先要考虑是否能够满足需求,例如:是否要给用户提供推荐解释。其次,要看算法的实现代价。

“哈利波特问题”

即热门商品往往与其他商品的相似性都很高,而热门商品之间的相似性更高。回顾在UCF中,热门商品也往往将两个无关的人划分为具有相同兴趣的人。如何消除热门商品所带来的影响?基本思路是降低热门商品的权重,在离线测试中,会降低准确率、召回率,但会提高覆盖率。

后面举了个例子,新闻联播和热门电视剧,不错。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值