利用用户行为数据

基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

用户行为分析

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深人研究,提出了很多方法,比如基于邻域的方法(neighborhood-based \隐语义模型(latent factor model )、基于图的随机游走算法(random walk on graph )等。在这些方法中, 最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法。

  1. 基于用户的协同过滤算法 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
  2. 基于物品的协同过滤算法 这种算法给用户推荐和他之前喜欢的物品相似的物品。

基于用户的协同过滤算法

基于用户的协同过滤算法是推荐系统中最古老的算法。可以不夸张地说,这个算法的诞生标志了推荐系统的诞生。该算法在1992年被提出,并应用于邮件过滤系统,1994年被GroupLens用于新闻过滤。在此之后直到2000年,该算法都是推荐系统领域最著名的算法。

基础算法

在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。从上面的描述中可以看到,基于用户的协同过滤算法主要包括两个步骤。
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

步骤(1)的关键就是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令M(v)为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度:在这里插入图片描述
或者通过余弦相似度计算:在这里插入图片描述
下面以图中的用户行为记录为例,举例说明UserCF计算用户兴趣相似度的例子。在该例中,用户A对物品{a,b,d}有过行为,用户B对物品{a,c}有过行为,利用余弦相似度公式计算用户A和用户B的兴趣相似度为:
在这里插入图片描述
这种方法的时间复杂度是o(|U|*|U|),这在用户数很大时非常耗时。事实上,很多用户相互之间并没有对同样的物品产生过行为,即很多时候|N(u)∩N(v)|=0。上面的算法将很多时间浪费在了计算这种用户之间的相似度上。如果换一个思路,我们可以首先计算出|N(u)∩N(v)|!=0的用户对然后再对这种情况除以分母即根号下|N(u)||N(v)|
为此,可以首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户列表。令稀疏矩阵C[u][v]= |N(u)∩N(v)|。那么,假设用户U和用户V同时属于倒排表中尺个物品对应的用户列表,就有C[u][v]=K。从而,可以扫描倒排表中每个物品对应的用户列表,将用户列表中的两两用户对应的C[u][v]加1,最终就可以得到所有用户之间不为0的C[u][v]。
例如:首先,需要建立物品-用户的倒排表。然后,建立一个4x4的用户相似度矩阵W对于物品a,将W[A][B]和W[B][A]加1,对于物品b,将W[A][C]和W[C][A]加1,以此类推。扫描完所有物品后,我们可以得到最终的W阵。这里的W是余弦相似度中的分子部分,然后将W除以分母可以得到最终的用户兴趣相似度。
在这里插入图片描述
得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的尺个用户喜欢的物品。如下的公式度量了UserCF算法中用户u对物品/的感兴趣程度:在这里插入图片描述
其中,S(u,K)包含和用户u兴趣最接近的K个用户,N(i)是对物品侑过行为的用户集合,Wuv是用户U和用户v的兴趣相似度,rvz代表用户V对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以所有的rvi=1。
UserCF只有一个重要的参数K,即为每个用户选出K个和他兴趣最相似的用户,然后推荐那K个用户感兴趣的物品。因此离线实验测量了不同尺值下UserCF算法的性能指标。
在这里插入图片描述
参数K是UserCF的一个重要参数,它的调整对推荐算法的各种指标都会产生一定的影响。

  1. 准确率和召回率:可以看到,推荐系统的精度指标(准确率和召回率)并不和参数火成线性关系。在MovieLens数据集中,选择K=80左右会获得比较高的准确率和召回率。因此选择合适的于获得高的推荐系统精度比较重要。当然,推荐结果的精度对尺也不是特别敏感,只要选在一定的区域内,就可以获得不错的精度。
  2. 流行度:可以看到,在3个数据集上尺越大则UserCF推荐结果就越热门。这是因为尺决定了UserCF在给你做推荐时参考多少和你兴趣相似的其他用户的兴趣,那么如果尺越大,参考的人越多,结果就越来越趋近于全局热门的物品。
  3. 覆盖率: 可以看到,在3个数据集上,K越大则UserCF推荐结果的覆盖率越低。覆盖率的降低是因为流行度的增加,随着流行度增加,UserCF越来越倾向于推荐热门的物品,从而对长尾物品的推荐越来越少,因此造成了覆盖率的降低。

用户相似度改进

余弦相似度公式是计算用户兴趣相似度的最简单的公式,但这个公式过于粗糙,现在将讨论如何改进该公式来提高UserCF的推荐性能。
首先,以图书为例,如果两个用户都曾经买过《新华字典》,这丝毫不能说明他们兴趣相似, 因为绝大多数中国人小时候都买过《新华字典》。但如果两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,John S. Breese在论文中提出了如下公式,根据用户行为计算用户的兴趣相似度:
在这里插入图片描述
可以看到,该公式通过 1/(log 1 + |N(I)|)惩罚了用户W和用户V共同兴趣列表中热门物品对他们相似度的影响。

基于物品的协同过滤算法

基于物品的协同过滤(item-based collaborative filtering )算法是目前业界应用最多的算法。无论是亚马逊网,还是Netflix、Hulu、YouTube,其推荐算法的基础都是该算法。

基础算法

基于用户的协同过滤算法有一些缺点。首先, 随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空间复杂度的增长和用户数的增长近似于平方关系。其次,基于用户的协同过滤很难对推荐结果作出解释。因此,著名的电子商务公司亚马逊提出了另一个算法一基于物品的协同过滤算法。基于物品的协同过滤算法(简称ItemCF )给用户推荐那些和他们之前喜欢的物品相似的物品。比如,该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习》。不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步。
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
我们可以用下面的公式定义物品的相似度:
在这里插入图片描述
这里,分母是喜欢物品i的用户数,而分子是同时喜欢物品i和物品j的用户数。因此,上述公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j。上述公式虽然看起来很有道理,但是却存在一个问题。如果物品j很热门,很多人都喜欢,那么Wij就会很大,接近1。因此,该公式会造成任何物品都会和热门的物品有很大的相似度,这对于致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的物品,我们对公式进行了改进:
在这里插入图片描述
这个公式惩罚了物品j的权重,因此减轻了热门物品会和很多物品相似的可能性。
和UserCF算法类似,用ItemCF算法计算物品相似度时也可以首先建立用户-物品倒排表(即对每个用户建立一个包含他喜欢的物品的列表),然后对于每个用户,将他物品列表中的物品两两在共现矩阵C中加1。

下图是一个根据上面的程序计算物品相似度的简单例子。图中最左边是输人的用户行为记录,每一行代表一个用户感兴趣的物品集合。然后,对于每个物品集合,我们将里面的物品两两加一,得到一个矩阵。最终将这些矩阵相加得到上面的C矩阵。其中C[i][j]记录了同时喜欢物品i和物品j的用户数。最后,将C矩阵归一化可以得到物品之间的余弦相似度矩阵W
在这里插入图片描述
在得到物品之间的相似度后,ItemCF通过如下公式计算用户u对一个物品j的兴趣:
在这里插入图片描述
这里N(u)是用户喜欢的物品的集合,S(j,k)是和物品j最相似的k个物品的集合,Wji是物品j和i的相似度,
rui是用户U对物品i的兴趣。该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
在这里插入图片描述
上图是一个基于物品推荐的简单例子。该例子中,用户喜欢(C++ Primer中文版》和《编程之美》两本书。然后ItemCF会为这两本书分别找出和它们最相似的3本书,然后根据公式的定义计算用户对每本书的感兴趣程度。比如,ItemCF给用户推荐《算法导论》,是因为这本书和《C++Primer中文版》相似,相似度为0.4,而且这本书也和《编程之美》相似,相似度是0.5。考虑到用户对《C++ Primer中文版》的兴趣度是1.3,对《编程之美》的兴趣度是0.9,那么用户对《算法导论》的兴趣度就是1.3 x 0.4 + 0.9 x 0.5 = 0.97。
在这里插入图片描述
该表列出了在MovieLens数据集上ItemCF算法离线实验的各项性能指标的评测结果。该表包括算法在不同K值下的性能。我们得出以下结论:

  1. 精度(准确率和召回率)可以看到ItemCF推荐结果的精度也是不和足成正相关或者负相关的,因此选择合适的幻寸获得最高精度是非常重要的。
  2. 流行度 和UserCF不同,参数K对ltemCF推荐结果流行度的影响也不是完全正相关的。随着K的增加,结果流行度会逐渐提高,但当K增加到一定程度,流行度就不会再有明显变化。
  3. 覆盖率K增加会降低系统的覆盖率

用户活跃度对物品相似度的影响

从前面的讨论可以看到,在协同过滤中两个物品产生相似度是因为它们共同出现在很多用户的兴趣列表中。换句话说,每个用户的兴趣列表都对物品的相似度产生贡献。那么,是不是每个用户的贡献都相同呢?
假设有这么一个用户,他是开书店的,并且买了当当网上80%的书准备用来自己卖。这个用户虽然活跃,但是买这些书并非都是出于自身的兴趣,所以这个用户对于他所购买书的两两相似度的贡献应该远远小于一个只买了十几本自己喜欢的书的文学青年。
John S. Breese在论文中提出活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加IUF参数来修正物品相似度的计算公式:
在这里插入图片描述

物品相似度的归一化

Karypis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确率。其研究表明,如果已经得到了物品相似度矩阵w,那么可以用如下公式得到归一化之后的相似度矩阵:
在这里插入图片描述
其实,归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。一般来说,物品总是属于很多不同的类,每一类中的物品联系比较紧密。假设物品分为两类一A和B,A类物品之间的相似度为0.5, B类物品之间的相似度为0.6,而A类物品和B类物品之间的相似度是0.2。在这种情况下, 如果一个用户喜欢了5个A类物品和5个B类物品,用ItemCF给他进行推荐,推荐的就都是B类物品,因为B类物品之间的相似度大。但如果归一化之后,A类物品之间的相似度变成了 1,B类物品之间的相似度也是1,那么这种情况下,用户如果喜欢5个A类物品和5个B类物品,那么他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。从这个例子可以看出,相似度的归一化可以提高推荐的多样性。

UserCF和ItemCF的综合比较

UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。
在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。因此,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热点和时效性的同时,保证了一定程度的个性化。这是Digg在新闻推荐中使用UserCF的最重要原因。UserCF适合用于新闻推荐的另一个原因是从技术角度考量的。因为新闻的更新非常快,而ItemCF需要维护一张物品相关度的表,如果物品更新很快,那么这张表也需要很快更新,这在技术上很难实现。而UserCF只需要用户相似性表,虽然UserCF对于新用户也需要更新相似度表,但在新闻网站中,物品的更新速度远远快于新用户的加人速度,因此UserCF显然是利大于弊。
但是,在图书、电子商务和电影网站,比如亚马逊、豆瓣、Netflix中,ItemCF则能极大地发挥优势。首先,在这些网站中,用户的兴趣是比较固定和持久的。此外,这些系统中的用户大都不太需要流行度来辅助他们判断一个物品的好坏,而是可以通过自己熟悉领域的知识自己判断物品的质量。因此,这些网站中个性化推荐的任务是帮助用户发现和他研究领域相关的物品。所以ItemCF算法成为了这些网站的首选算法。此外,这些网站的物品更新速度不会特别快,一天一次更新物品相似度矩阵对它们来说不会造成太大的损失,是可以接受的。

隐语义模型

自从Netflix Prize比赛举办以来,LFM (latent factor model)隐语义模型逐渐成为推荐系统领域耳熟能详的名词。其实该算法最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的名词有LSI、pLSA、LDA和Topic ModeL本节将对隐含语义模型在Top-N推荐中的应用进行详细介绍,并通过实际的数据评测该模型。

基础算法

隐语义模型是最近几年推荐系统领域最为热门的研究话题,它的核心思想是通过隐含特征联系用户兴趣和物品。首先通过一个例子来理解一下这个模型。用户A的兴趣涉及侦探小说、科普图书以及一些计算机技术书, 而用户B的兴趣比较集中在数学和机器学习方面。那么如何给A和B推荐图书呢?
对于某个用户,首先得到他的兴趣分类, 然后从分类中挑选他可能喜欢的物品。这个基于兴趣分类的方法大概需要解决3个问题。

  1. 如何给物品进行分类?
  2. 如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度?
  3. 对于一个给定的类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重?
    为了解决上面的问题,研究人员提出:为什么我们不从数据出发,自动地找到那些类,进行个性化推荐?于是,隐含语义分析技术出现了。隐含语义分析技术因为采取基于用户行为统计的自动聚类,较好地解决了上面提出的问题。
    隐含语义分析技术从诞生到今天产生了很多著名的模型和方法,其中和该技术相关且耳熟能详的名词有pLSA、LDA、隐含类别模型(latent class model )、隐含主题模型(latent topic model \ 矩阵分解(matrix factorization )。这些技术和方法在本质上是相通的,其中很多方法都可以用于个性化推荐系统。这里以LFM为例介绍隐含语义分析技术在推荐系统中的应用。
    LFM通过如下公式计算用户u对物品i的兴趣:
    在这里插入图片描述
    这个公式中p和q是模型的参数,其中Pu,k度量了用户u的兴趣和第k个隐类的关系,而 qi,k度量了第k隐类和物品i之间的关系。那么,下面的问题就是如何计算这两个参数。要计算这两个参数,需要一个训练集,对于每个用户u,训练集里都包含了用户u喜欢的物品和不感兴趣的物品,通过学习这个数据集,就可以获得上面的模 型参数。
    推荐系统的用户行为分为显性反馈和隐性反馈。LFM在显性反馈数据(也就是评分数据)上,解决评分预测问题并达到了很好的精度。但是对于隐性反馈数据集则不一样,这种数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)。
    那么,在隐性反馈数据集上应用LFM解决TopN推荐的第一个关键问题就是如何给每个用户生成负样本。我们发现对负样本采样时应该遵循以下原则。
  4. 对每个用户,要保证正负样本的平衡(数目相似)。
  5. 对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。
    经过采样,可以得到一个用户-物品集K={(u,i)},其中如果(w,f)是正样本,则有rui=l,否则有rui=0。然后, 需要优化如下的损失函数来找到最合适的参数。
    在这里插入图片描述
    这里,在这里插入图片描述是用来防止过拟合的正则化项,可以通过实验获得。
    要最小化上面的损失函数,可以利用一种称为随机梯度下降法^的算法。该算法是最优化理论里最基础的优化 算法,它首先通过求参数的偏导数找到最速下降方向,然后通过迭代法不断地优化参数。
    我们通过实验对比了LFM在TopN推荐中的性能。在LFM中,重要的参数有4个:
  6. 隐特征的个数F;
  7. 学习速率alpha;
  8. 正则化参数lambda;
  9. 负样本/正样本比例ratio
    通过实验发现,ratio参数对LFM的性能影响最大。

LFM和基于邻域的方法的比较

LFM是一种基于机器学习的方法,具有比较好的理论基础。这个方法和基于邻域的方法(比如UserCF、ItemCF )相比,各有优缺点。下面将从不同的方面对比LFM和基于邻域的方法。

  1. 理论基础:
    LFM具有比较好的理论基础,它是一种学习方法,通过优化一个设定的指标 建立最优的模型。基于邻域的方法更多的是一种基于统计的方法,并没有学习过程。
  2. 离线计算的空间复杂度:
    基于邻域的方法需要维护一张离线的相关表。在离线计算相关表的过程中,如果用户/物品数很多,将会占据很大的内存。而LFM在建模过程中,可以很好地节省离线计算的内存。
  3. 离线计算的时间复杂度 :
    ItemCF的时间复杂度低于LFM。在一般情况下,LFM的时间复杂度要稍微高于UserCF和ItemCF,这主要是因为该算法需要多次迭代。但总体上,这两种算法在时间复杂度上没有质的差别。
  4. 在线实时推荐:
    UserCF和ItemCF在线服务算法需要将相关表缓存在内存中,然后可以在线进行实时的预测。以ItemCF算法为例,一旦用户有了新的行为, 而且该行为被实时地记录到后台的数据库系统中,他的推荐列表就会发生变化。而LFM在给用户生成推荐列表时,需要计算用户对所有物品的兴趣权重,然后排名,返回权重最大的N个物品。因此,LFM不太适合用于物品数非常庞大的系统,如果要用,我们也需要一个比较快的算法给用户先计算一个比较小的候选列表,然后再用 LFM重新排名。另一方面,LFM在生成一个用户推荐列表时速度太慢,因此不能在线实时计算,而需要离线将所有用户的推荐结果事先计算好存储在数据库中。因此,LFM不能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化。
  5. 推荐解释:
    ItemCF算法支持很好的推荐解释,它可以利用用户的历史行为解释推荐结果。 但LFM无法提供这样的解释,它计算出的隐类虽然在语义上确实代表了一类兴趣和物品, 却很难用自然语言描述并生成解释展现给用户。

基于图的模型

基于图的模型(graph-based model)是推荐系统中的重要内容。其实,很多研究人员把基于邻域的模型也称为基于图的模型,因为可以把基于邻域的模型看做基于图的模型的简单形式。
在研究基于图的模型之前,首先需要将用户行为数据表示成图的形式。这里讨论的用户行为数据是由一系列二元组组成的,其中每个二元组(u,i)表示用户u对物品i产生过行为。这种数据集很容易用一个二分图表示。
在这里插入图片描述

基于图的推荐算法

将用户行为表示为二分图模型后,下面的任务就是在二分图上给用户进行个性化推荐。如果将个性化推荐算法放到二分图模型上,那么给用户U推荐物品的任务就可以转化为度量用户顶点v和与v没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。度量图中两个顶点之间相关性的方法很多, 这里将介绍一种基于随机游走的PersonalRank算法。
假设要给用户U进行个性化推荐,可以从用户U对应的节点v开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率a决定是继续游走,还是停止这次游走并从v节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
如果将上面的描述表示成公式,可以得到如下公式:
在这里插入图片描述
虽然PersonalRank算法可以通过随机游走进行比较好的理论解释,但该算法在时间复杂度上有明显的缺点。因为在为每个用户进行推荐时,都需要在整个用户物品二分图上进行迭代,直到整个图上的每个顶点的PR值收敛。这一过程的时间复杂度非常高,不仅无法在线提供实时推荐, 甚至离线生成推荐结果也很耗时。
为了解决PersonalRank每次都需要在全图迭代并因此造成时间复杂度很高的问题,这里给出两种解决方案。第一种很容易想到,就是减少迭代次数,在收敛之前就停止。这样会影响最终的精度,但一般来说影响不会特别大。
另一种方法就是从矩阵论出发,重新设计算法。 对矩阵运算比较熟悉的读者可以轻松将PersonalRank转化为矩阵的形式。令M为用户物品二分图的转移概率矩阵,即:
在这里插入图片描述
那么,迭代公式可以转化为:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值