俗话说“物以类聚,人以群分”;推荐系统早期最经典的算法就应用了 人以群分 的规律;不论是基于用户的协同过滤还是基于物品的协同过滤,背后都有一个潜在的认知:人本身就是一种内容筛选器,绝大多数人的喜好都是在一个小范围内的(1-3个领域);喜欢言情的人看的可能都是类似的剧以及综艺,喜欢游戏的看的都是游戏主播、赛事直播等等;所以在计算机难以理解内容时,通过人的行为来确定内容的相似程度是一种非常聪明的策略。
基于用户的协同过滤算法UserCF
算法原理
A与B是好朋友,她们因为有着非常相似的喜好而惺惺相惜;每当A发现了好剧时,就会推荐给B,然后B基本上都很喜欢。这就是基于用户的协同过滤算法
具体思路
1、计算出用户之间的相似度
2、找到相似人群中大家都比较喜欢而目标用户未曾见过的内容,推荐之
描述用户相似度
对问题进行简化,假设平台内容有{a,b,c,d,e,f}
A内容行为【a,b,e】A表示为向量(1,1,0,0,1,0)
B内容行为【b,c,d】B表示为向量(0,1,1,1,0,0)
通过余弦相似度描述相似性:Wab=1/3
相似性计算为用户推荐
在上述例子中A喜欢a,而B没看到过;基于AB的相似,我们可以给出B喜欢内容a的可能性
P(B,a)=Wab * LBa
(L(B,a)即B对a的喜欢程度,由于例子中只存在喜欢或不喜欢,所以L为1)
在更为常规的情境中,我们会参考K个与B相似的用户,那么最终P(B,a)是由K个用户的W*L加和得到的;因为仅仅参考几个用户是具有不确定性的,生活中喜好相似的朋友也会有你喜欢我不感冒的情况,所以这种不确定性是需要【群】来平掉。与B相似的A喜欢a是不够的,还需要更多与B相似的用户喜欢a,这样B→a的判断会更加具有参考意义,所以要加起来计算P
修正
k的选取在应用过程中比较重要,当K过小时,人与群分的意义会打折扣;当K过大时,一些热门内容会逐渐占据主流,因为热门内容大部分人都喜欢,随着考虑的人数越多,热门内容会被算法认为是相似的而推荐给用户。因此需要根据实际情况进行测试;
这时候回头看W会发现,很有可能会将看过热门内容的用户看做相似用户。我们需要在算法上进行修正,避免热门内容对用户相似度的影响。可以在相似度公式中剔除热门内容对用户行为向量的影响或者对W加以热门因素惩罚;
实际上,UserCF算法在业界使用的很少,更多的是使用基于物品的协同过滤算法(ItemCF)。
UserCF的主要缺陷是:
- 随着用户数量的增长,计算所有用户两两之间的兴趣相似度的实现复杂度将越来越大,且与用户数量的平方呈正比关系。
- UserCF算法很难对推荐的结果做出令人信服的解释。
基于物品/内容的协同过滤算法ItemCF
算法原理
啤酒与尿布已经是一个人人皆知的案例了。如果物品A与物品B经常出现在一起,那么这两个物品就具有相关性。如果用在电商网站就映射到组合产品上:咖啡机与咖啡豆等;如果在内容网站就会映射到相似的内容上。这就是亚马逊提出的ItemCF算法
具体思路
1、根据一定规模的序列行为计算物品相似度
2、根据物品的相似度为用户推荐相似物品
描述物体/内容的相似度
假设喜欢物品a的人数为Na
喜欢物品b的人数为Nb
那么Wab为物品相似度
物品相似计算交集即同时喜欢a、b的人数,分母是各自人数乘积;W就是物品相似的程度
分母是乘积除了作为基数描述相似程度,也惩罚了热门物品的影响:共同喜好ab的人群过于大众反而会导致相似性降低。
为用户推荐
场景一、用户观看完某个内容或者停留在某个内容的详情页
针对用户喜欢的当前物品,进行相似性推荐。
场景二、在首页推荐页面为用户推荐
根据历史用户内容行为,将这些行为对应的相似物品进行W加和。取前几推荐,历史内容的偏好程度可以作为权重
基于历史行为推荐修正
在计算物品相似度中,相似成立的条件是用户本身偏向于某种内容;但是对于某些异常活跃的用户来讲,这类用户的兴趣领域的范围太广,反而影响了内容的相似性判断。所以通常在计算相似度是需要排除这类用户的数据。
在针对用户历史行为进行相似性推荐时,假设用户浏览过A和B,A与其他物品的相似程度大于B与其他物体的相似程度,往往这种A、B不是一类。若果单纯按照相似度计算,会导致系统忽略内容B,毕竟推荐位置是有限的。这时候如果采取归一化措施(比如将A的相似物品值全部除以A最大的那个相似值),那么最终系统会均匀得考虑A与B,更多样性得进行推荐
网友评论