文章目录
第二章 利用用户数据
基于用户行为分析的推荐算法称作协同过滤算法
2.1 用户行为数据简介
- 用户行为数据最简单的存在形式是日志.
- 用户行为按反馈的明确性分为显性反馈行为和隐性反馈行为.如果按反馈的方向还可以分为正反馈和负反馈.
- 一个用户行为可以用6部分表示:产生行为的用户,行为的对象,行为的种类,产生行为的上下文,行为的内容和权重.
- 按照反馈的明确性分,可分为显性反馈和隐性反馈
- 正反馈(用户喜欢该商品)和负反馈(用户不喜欢该商品)
2.2 用户行为分析
-
互联网上的很多数据分布都满足长尾分布f(x)=ax^k,也就是少部分物品占据了大多数出现次数
用户行为数据同时也满足长尾分布的规律,即物品流行度和用户活跃度均满足长尾分布。(物品流行度指对物品产生过行为的用户总数。用户活跃度指用户产生过行为的物品总数。)用公式表达即:
fi(k)为被k个用户产生过行为的物品数;fu(k)为对k个物品产生过行为的用户数。
-
用户越活跃,越趋向于浏览冷门的物品.
-
学术界对协同过滤算法进入了深入研究,提出了很多方法,比如基于邻域的方法、隐含义模型、基于图的随机游走算法,在这些方法中,最广泛应用的是基于邻域的方法。而基于邻域的方法主要是基于用户的协同过滤算法、基于物品的协同过滤算法
2.4 基于邻域的算法
基于用户的协同过滤
- 基础算法:找到和目标用户兴趣相似的用户集合,找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户.可以通过Jaccard相似度或余弦相似度
计算兴趣相似度.
-
在计算余弦相似度的过程中,可以建立物品到用户的倒排表,每个物品都保存对该物品产生过行为的用户列表.对于其中每个物品对应的用户列表,将其中的两两用户对应的稀疏矩阵C[u][v]加1,就得到了所有用户之间不为0的C[u][v]
-
得到用户之间的兴趣相似度后,通过兴趣相似度和对应用户对物品的兴趣加权计算得到物品列表,选取其中目标用户没有过行为的物品进行推荐.
-
UserCF的一个重要参数是相似用户数K.它与准确率和召回率没有线性关系,与流行度成正比,与覆盖率成反比.
-
用户相似度的改进:两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度,因此应该惩罚热门物品对相似度的影响
基于物品的协同过滤
-
ItemCF的优点是计算难度小于UserCF,而且容易对推荐结果作出解释,是目前业界应用最多的算法.
-
基础算法:计算物品相似度,根据物品的相似度和用户的历史行为给用户生成推荐列表.
-
物品相似度可以简单地计算喜欢物品i的用户中喜欢物品j的比例,但问题是会造成热门物品和其他任何物品都有很大相似度.因此需要惩罚物品j的权重.其中蕴含的假设是每个用户的兴趣都局限在某几个方面,所以两个物品的相似度高就意味着它们很可能属于同一个领域.
-
类似地,使用用户-物品倒排表来求相似度矩阵.然后计算用户u对物品的兴趣列表和某物品与该兴趣列表中物品相似度的加权和来得到物品列表.
-
ItemCF的一个重要参数是物品数量K.它与准确率和召回率没有线性关系,与流行度在一定范围内正相关,与覆盖率负相关.
-
在实际使用中,活跃用户对物品相似度的贡献应该小于不活跃的用户,而且为了避免相似度矩阵太稠密,过于活跃的用户会直接被忽略.这称为ItemCF-IUF,可以明显提高覆盖率,降低流行度.
-
物品相似度的归一化可以提高推荐的准确率,覆盖性和多样性.因为热门物品的类内物品相似度一般比较大,而归一化使得同类物品之间的相似度相等.
如果一个用户买了5件A类商品和5件B类商品,而A类物品之间的相似度是0.5,B类物品之间的相似度是0.6,A、B两类物品的相似度是0.2,则给用户推荐的都是B类商品。通过归一化,A类物品的相似度是1,B类物品的相似度是1,解决了这个问题。
-
UserCF的推荐更社会化,反映了用户所在的小兴趣群体中物品的热门程度,需要维护一个用户相似度矩阵.ItemCF的推荐更个性化,反映了用户自己的兴趣传承,需要维护一个物品相似度矩阵.因此UserCF适合新闻推荐这种注重热门程度和时效性,且物品更新速度很快的内容,而ItemCF则适合图书,电影,电商网站这种用户兴趣比较固定和持久,且物品更新速度不会太快的内容.
-
ItemCF的覆盖率和新颖度不高,所以可以在分母上加大对热门商品的惩罚,Wij=|N(i)交N(j)|/(N(i)^(1-a)*N(j)^(a))
-
两个不同领域的热门商品相似度总是很高
2.5 隐语义模型(Latent factor model)
-
隐语义模型的核心思想是通过隐含特征联系用户兴趣和物品
-
隐语义模型解决了什么问题
比如,用户A的兴趣列表里,有关于侦探小说、科普图书和计算机技术图书。用户B的兴趣列表集中在数学和机器学习方面。
如何给用户A和B推荐图书?
除了UserCF与ItemCF,还可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。
这个基于兴趣分类的方法,大概需要解决的问题:
如何给物品进行分类?
如何确定用户对哪类物品感兴趣,以及感兴趣程度?
对于一个给定的分类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重?
-
人工编辑分类存在的问题:
编辑的意见不能代表各种用户的意见。
编辑很难控制分类的粒度。
编辑很难给一个物品多个分类。
编辑很难给出多维度的分类。
编辑很难决定一个物品在某一个分类的权重。
隐语义分析因为采取基于用户行为统计的自动聚类,解决了上述5个问题:
用户的行为代表了用户对物品分类的看法。比如,如果两个物品被很多用户同时喜欢,这两个物品很可能属于同一类。
隐语义技术允许我们指定最终的分类数目,分类数越多,分类粒度越细。
隐语义技术可以计算出物品属于每个类的权重,因为每个物品不是硬性地被分到一个类目中。
隐语义技术给出的每个分类都不是一个维度,它根据用户的共同兴趣计算得出。
隐语义技术可以通过统计用户行为决定物品在每个类中的权重,如果喜欢某个类的用户都会喜欢某个物品,那么这个物品在这个类中的权重就可能较高。
隐语义技术有很多著名的模型和方法,其中耳熟能详的名词有pLSA、LDA、隐含类别模型、隐含主题模型、矩阵分解。这些技术和方法在本质上是相同的,都可以用于个性化推荐系统。
-
LFM
F为隐类的数量
隐性反馈数据集上生成负样本的方法:
(1)对于一个用户,用他所有没有过行为的物品作为负样本。(2)对于一个用户,从他没有过行为的物品中均匀采样出一些物品作为负样本。
(3)对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,保证
每个用户的正负样本数目相当。(4)对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,偏重
采样不热门的物品。
对于第一种方法,它的明显缺点是负样本太多,正负样本数目相差悬殊,因而计算复杂度很
高,最终结果的精度也很差。对于另外3种方法, Rong Pan在文章中表示第三种好于第二种,而
第二种好于第四种。综上对负样本采样时应该遵循以下原则:
(1)对每个用户,要保证正负样本的平衡(数目相似)。
(2)对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。
通过离线实验对比LFM在TopN推荐中的性能,在LFM中,有4个重要参数:
隐特征的个数F;
学习速率alpha;
正则化参数lambda;
负样本/正样本比例ratio;
实验表明,ratio参数对LFM的性能影响最大。(ratio参数控制了推荐算法发掘长尾的能力)
-
数据集稀疏时,LFM的性能会下降,甚至不如UserCF和ItemCF的性能
-
基于LMF的实际系统的例子
LFM的缺点是,很难实现实时的推荐。在新闻推荐中,冷启动问题非常明显,需要在新闻短暂的生命周期就将它推荐出去。
经典的LFM模型每次训练时,**需要扫描所有用户的行为记录,这样才能计算出用户隐类向量(pu)和物品隐类向量(qi)。**所以一般每天只训练一次。
雅虎的解决方案是:
利用新闻链接的内容属性(关键词、类别等)得到链接的内容特征向量;
实时收集用户对链接的行为,并用这些数据得到链接的隐特征向量;
利用公式预测用户是否会单击链接。
-
LFM和基于邻域的方法区别
2.6 基于图的模型
用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中。也可以把基于邻域的模型看做是基于图的模型的简单形式(很多研究人员把基于邻域的模型也成为基于图的模型)。
基于图的模型(graph-based model)是推荐系统中的重要内容,其基本思想是将用户行为数据表示为一系列的二元组。
每一个二元组(u,i)代表用户u对物品 i 产生过行为,这样便可以将这个数据集表示为一个二分图。
下图是一个简单的用户物品二分图模型,其中圆形节点代表用户,方形节点代表物品,圆形节点和方形节点之间的边代表用户对物品的行为。比如图中用户节点A和物品节点a、b、d相连,说明用户A对物品a、b、d产生过行为。
-
基于图的推荐算法
基于用户行为二分图,给用户u推荐物品,可以转化为计算用户顶点u和与所有物品顶点之间的相关性,然后取与用户没有直接边相连的物品,按照相关性的高低生成推荐列表。
度量图中两个顶点之间相关性,一般取决于3个因素:
两个顶点之间的路径数;
两个顶点之间的路径长度;
两个顶点之间的路径经过的顶点;
相关性高的两个顶点,一般具有以下特征:
两个顶点之间有很多路径相连;
连接两个顶点之间的路径长度都比较短;
连接两个顶点之间的路径不会经过出度比较大的顶点。
对于推荐系统,我们需要计算的是物品节点相对于某一个用户节点u的相关性。
PageRank算法
PageRank是Larry Page 和 Sergey Brin设计的,用来衡量特定网页相对于搜索引擎中其他网页的重要性的算法,其计算结果作为Google搜索结果中网页排名的重要指标。
网页之间通过超链接相互连接,互联网上不计其数的网页就构成了一张超大的图。
PageRank假设用户从所有网页中随机选择一个网页进行浏览,然后通过超链接在网页直接不断跳转。到达每个网页后,用户有两种选择:到此结束或者继续选择一个链接浏览。
算法令用户继续浏览的概率为d,用户以相等的概率在当前页面的所有超链接中随机选择一个继续浏览。
这是一个随机游走的过程。
当经过很多次这样的游走之后,每个网页被访问用户访问到的概率就会收敛到一个稳定值。这个概率就是网页的重要性指标,被用于网页排名。算法迭代关系式如下所示:
上式中PR(i)是网页i的访问概率(也就是重要度),d是用户继续访问网页的概率,N是网页总数。in(i)表示指向网页i的网页集合,out(j)表示网页j指向的网页集合。
PersonalRank
Standford的Haveliwala于2002年在他《Topic-sensitive pagerank》一文中提出了PersonalRank算法,该算法能够为用户个性化的对所有物品进行排序。它的迭代公式如下:
我们发现PersonalRank跟PageRank的区别只是用ri替换了1/N,也就是说从不同点开始的概率不同。
我们重新描述一下算法的过程:
假设要给用户u进行个性化推荐,可以从用户u对应的节点Vu开始在用户物品二分图上进行随机游走。
游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从Vu节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。
这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
缺点
PersonalRank每次都需要在全图迭代,所以时间复杂度非常高。
解决办法是,
减少迭代次数,在收敛前停止。会影响精度,但影响不大。
从矩阵论出发,重新设计算法。
率α决定是继续游走,还是停止这次游走并从Vu节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。
这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
缺点
PersonalRank每次都需要在全图迭代,所以时间复杂度非常高。
解决办法是,
减少迭代次数,在收敛前停止。会影响精度,但影响不大。
从矩阵论出发,重新设计算法。
来源:CSDN
作者:upupqlj
链接:https://blog.csdn.net/To_conquer_or_to_die/article/details/103840838