协同过滤推荐的主要思想

     利用已有用户的行为或意见预测当前用户最有可能喜欢哪些东西或对哪些东西感兴趣。此类型的系统已经在业界广为使用,主要用在在线零售系统,用于个性化推荐,由此可以促销商品和提升销售额。纯粹的协同过滤方法的输入数据只有给定的用户-物品评分矩阵,输出数据一般有下面几种类型:

   1.表示当前用户对物品喜欢或不喜欢程度的预测数值;

   2.n项推荐物品的列表。当然,这个top-N列表不会包含当前用户已经购买的物品。

一、基于用户的协同过滤

  一般都是基于用户来计算最近邻的用户。其主要思想简述如下:首先,给定一个评分数据集和当前(活跃)用户的ID作为输入,找出与当前用户过去有相似偏好的其他用户,这些用户有时也被称为对等用户或最近邻;然后,对当前用户没有见过的每个物品item,利用其近邻对item的评分计算预测值。这种方法的潜在假设是:

(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好;(2)用户偏好不会随时间而变化。

第一个例子:

下表1-1显示了当前用户Alice和其他用户的评分数据。

 

表1-1 协同推荐的评分数据库

 

物品1

物品2

物品3

物品4

物品5

Alice

用户1

用户2

用户3

用户4

5

3

4

3

1

3

1

3

3

5

4

2

4

1

5

4

3

3‘’

5

2

?

3

5

4

1

 

先介绍约定和符号。用代表用户集。用代表代表物品集。用R代表评分项的评分矩阵,这里。分值定义为从1(非常不喜欢)到5(非常喜欢)。如果某个用户没有为物品j评过分,则对应的矩阵项为空。

至于如何确定用户的相似性用户集,推荐系统中通过的方法是Pearson相关系数。给定评分矩阵R,用户a和用户b的相似性sim(a,b)可以用公式(2.1)来表示。

符号代表用户a的平均评分。符号代表用户b的平均评分。

 

 

Alice和用户1的相似度计算按上述公式计算得sim(Alice,1)=0.85

 

Pearson相关系数取值从-1(强负相关)到+1(强正相关)。Alice和其他用户,即用户2、用户3和用户4的相似度分别为0.70、0.000和-0.79。

有计算可知,用户1和用户2与Alice的历史评分行为比较相似。另外,Pearson方法考虑到了用户评分标准并不相同这个事实。有些用户倾向于只给高分,而另一些从不给物品5分。Pearson相关系数在计算中不考虑平均值的差异使得用户间可比,也就是说,尽管Alice和用户1的绝对评分值完全不同,但仍然可以发现评分值之间相当明显的线性相关性,进而得出二人相似的结论。

这个事实也能从图1-1中看出,图中同时展示了Alice和用户1的相似性以及Alice和用户4的差异性。

 

           图1-1 比较Alice和其他两个用户

 

为了预测物品5,我们需要考虑该重视哪些近邻的评分,以及如何评价他们的意见。在本例中,很明显应该将用户1和用户2作为近邻来预测Alice的评分。下面的公式考虑了最相似的N个近邻与用户a平均分的偏差,计算用户a对物品item的预测值:

 

在这个例子中,基于近邻用户1和用户2的评分预测Alice对物品5的评分为:

4+[1/(0.85 + 0.7)]*[0.85*(3-2.4) + 0.70 *(5-3,8)] = 4.87

根据这些计算方法,我们可以计算出Alice对所有未曾见过物品的预测评分,其中包括推荐列表中有最高预测值的那些物品。在本例中,把物品5 放到列表中可能是一个很好的选择。

上面的示例当然是实际环境的理想化。在实际应用中,评分数据集通常非常大,而且包含成千上万甚至百万级的用户和物品,这要求我们必须考虑计算复杂度。此外,评分矩阵通常非常稀疏,每个用户只对有效物品非常小的一个子集评分。最后,我们给新用户推荐什么,该如何处理没有评分的新物品,这些问题都还是不很清楚。

1.2  更好的相似度和赋权体系

在基于用户的协同过滤中,可能Peason相关系数衡量用户间的相似度,是比其他的相似度公式更胜一筹的。

然而,单纯使用“纯粹”的Pearson方法来发现近邻以及这些近邻的评分赋权可能还不是最好的选择。试想一下,很多领域会存在一些所有人都喜爱的物品,让两个用户对有争议的物品达成共识会比对广受欢迎的物品达成共识更有价值,但Pearson这样的相似度方法无法将这种情况考虑在内。为了解决这个问题,Breese et al.(1998)提出对物品的评分进行变换,降低对广受欢迎物品有同样看法的相对重要性。类似于信息检索领域提出的反文档频率(iuf—inverse document frequency),Herlocker et al.(1999)通过方差权重因子解决了同样的问题,该方法提高了具有高方差评分值物品,也就是指有争议的物品的作用。

我们在示例中用到的基本相似度方法没有考虑到两位用户是否仅同时给很少的物品评分(他们可能只是碰巧意见相同),或者他们是否对很多物品意见一致。事实上,基于近邻评分的预测方法当遇到当前用户只为非常少的共同物品评分时会出错,导致不准的预测(Herlocker et al.1999)。Herlocker et al.(1999)因此提出使用另外一种赋权因子,即重要性赋权。

最后,另外一种通过精细调整预测权重来提高推荐准确度的方法是样本扩展(Breese et al.1998)。样本扩展指的是强调那些接近+1和-1的值,对原始数值乘以一个常量 来调整近邻的权值。Breese et al.(1998)在实验中设置 为2.5。

1.3  选择近邻

在示例中,我们直观上认为不必考虑所有近邻。为了计算预测值,我们只包括了那些与当前用户有正相关的用户。考虑了所有的近邻,会对计算时间带来负面影响,而且还会对推荐准确度造成影响。

降低近邻集合规模的通常方法是为用户相似度定义一个具体的最小阈值,或者将规模大小限制为一个固定值,而且只考虑k个最近邻。Anand and Mobasher(2005)以及Herlocker et al.(1999)讨论过这两种方法的潜在问题:如果相似度阈值过高,近邻规模就会很小,这就意味着很多物品没法预测(降低覆盖率)。相反,如果阈值太低,近邻规模就不会显著降低。

K值(近邻规模)的选择不会影响可预测物品的覆盖率。然而这并未解决如何发现一个好k值的问题:当近邻个数k太高,太多只有有限相似度的近邻会给预测带来额外的“噪声”;当k太小(比如在Herlocker et al.(1999)的实验中小于10),预测质量也可能受到负面影响。对MoiveLens数据集的分析发现,“在大多数实际情况下,20到50个近邻似乎比较合理”(Herlocker et al.2002)。

 

二   基于物品的协同过滤

尽管基于用户的协同过滤方法已经成功应用在了不同领域,但是在一些有着数以百万计用户和物品的大型电子商务网站上还是会存在很多严峻挑战。尤其是当需要扫描大量潜在近邻时,这种方法很难做到实时计算预测值。因此,大型电子商务网站经常采用一种不同的技术:基于物品的推荐。这种推荐非常适合做线下预处理,因此在评分矩阵非常大的情况下也能做到实时计算推荐。

基于物品的算法的主要思想是利用物品间相似度,而不是用户间相似度来计算预测值。让我们再观察一下评分数据集,并预测Alice对物品5的评分。首先,比较其他物品的评分向量,寻找与物品5有相似评分的物品。在本例中,我们发现物品5的评分(3,5,4,1)与物品1的评分(3,4,3,1)很相似,与物品4(3,3,5,2)部分相似。基于物品推荐的方法就是简单地找到Alice对这些相似物品的评分。Alice给物品1评5分,给物品4评4分,基于物品的推荐算法会按照权重计算这些评分的平均值,从而预测物品5的评分会在4和5之间。

2.1  余弦相似度度量

为了找到相似物品,需要定义一种相似度度量标准。在基于物品的推荐方法中,余弦相似度由于效果精确,已经被证实是一种标准的度量体系。这种度量标准用两个n维向量之间的夹角来测算相似度。这种方法也被广泛用于信息检索和文本挖掘,用来比较两份文本文档,其中文档可以表示为词语的向量。

将两个物品a和b用对应的评分向量和来表示,其相似度可以定义如下:

    

符号 . 表示向量间的点积,表示向量的欧氏长度,即向量自身点积的平方根。

物品5和物品1的余弦相似度因此可以计算为:

    

相似度值介于0和1之间,越接近1则表示越相似。基本的余弦方法不会考虑用户评分平均值之间的差异。改进版的余弦方法能够解决这个问题,做法是在评分中减去平均值。相应地,改进余弦方法的取值在-1到+1之间,就像Pearson方法一样。

设U为所有同时给物品a和b评分的用户集,改进的余弦相似度计算如下:

 

 

因此,可以对原始的评分数据集进行变换,用评分值相对于平均评分值的偏差取代原始值,如表2-1所示。

 

 

表2-1   均值调整评分数据库

 

物品1

物品2

物品3

物品4

物品5

Alice

用户1

用户2

用户3

用户4

1.00

0.60

0.20

-0.20

-1.80

  -1.00

  -1.40

  -0.80

  -0.20

   2.20

  0.00

  -0.40

  0.20

  -2.20

  2.20

  0.00

  0.60

  -0.80

  2.80

  -0.80

  ?

  0.60

  1.20

  0.80

  -1.80

 

 

物品5和物品1的改进余弦相似度值为:

 

 

确定物品间的余弦相似度之后,可以通过计算Alice对所有与物品5相似的加权评分总和来预测Alice对物品5的评分。形式上,预测用户u对物品item的评分为:

 

就像在基于用户的方法中,近邻集合的规模也会受限于一个固定值。也就是说,不是所有的近邻都会拿来做预测。

2.2  基于物品过滤的数据预处理

传统基于用户协同过滤的主要问题是,算法不能很好地适应大规模用户和物品数据。给定M个用户和N个物品,在最坏情况下,必须评估最多包含这N个物品的所有M个用户的记录。而实际情况是,由于大多数用户只评分或购买了非常少量的物品,实际复杂度非常低。尽管如此,当用户数量M达到几百万,线上环境要求必须在极短的时间内返回结果时,实时计算预测值仍然不可行。

为了在不牺牲推荐精准度的情况下,在大规模电子商务网站上应用基于物品的推荐算法,人们通常选择离线预计计算数据。其想法就是事先构建一个物品相似度矩阵,描述所有物品俩俩之间的相似度。在运行时,通过确定与item最相似的物品并计算u对这些邻近物品评分的加权总和来得到用户u对物品item的预测评分。近邻数量受限于当前用户评过分的物品个数。由于这样的物品数量一般都比较少,因此计算预测值可以在线上交互应用允许的短时间内完成。

考虑到内存要求,N个物品的相似度矩阵理论上会有项。但实际上项数会极低,而且还可以采取进一步的方法降低复杂度。可选的方案有,仅考虑那些与其他物品同时评分数最少的物品,或者对每个物品只记录有限的近邻。然而这种方法会增加无法预测某个特定物品的风险。

原则上,这种离线预计算近邻的方法对基于用户的方法也适用。但在实际情况下,两个用户评分重叠的情况非常少见,这就意味着一些其他的评分值可能影响到用户间的相似度。相对于用户相似度而言,物品相似度更稳定,这种预处理计算不会过于影响预测准确度。

除了这些所谓基于模型的方法中采用的不同预处理计算之外,还可以仅利用评分矩阵中的某一部分以降低计算复杂度。一种基本技术是二次采样,这种技术可以随机选取数据的子集,或者忽略那些仅有非常少量评分或仅包含非常热门物品的用户记录。一般来说,可以用这些技术加速计算,但由于推荐用到的信息少了,系统做出精确预测的能力可能会下降。

三  关于评分

3.1 隐式和显式评分

直接询问物品的评分可能是最准确的,才用五分制或者七分制的反馈表,覆盖了从“非常不喜欢”到“非常喜欢”。评分经过内部变换成数字值后,就可以应用先前提到的相似度方法。

显式评分的主要问题在于需要推荐系统的用户额外付出,而用户很可能由于看不到好处而不愿意提供这些评分。因此,可用的评分会很少,从而导致推荐质量不高。

集成了推荐系统的网站或应用程序可以收集隐式评分。比如当用户买了个物品,很多推荐系统会将这个行为解释为正向评分,系统也会跟踪用户的浏览行为。如果用户访问一篇网页上商品的详细信息并且停留了较长一段时间,推荐系统就会将这个行为解释为针对物品的正向意图。

尽管可以持续地收集隐式评分,而且也不需要用户额外付出,但还是难以确定用户行为是否被正确解释。用户可能不喜欢自己所买的所有书,比如为其他人买的书。尽管如此,如果得到了足够多的评分数据,这些特列还是可以通过大量得到正确解释的例子加以排除。实际上,在某些领域(比如个性化在线电台)收集到的隐式反馈甚至比显式评分更能得到精确的用户模型。

3.2  数据稀疏和冷启动问题

在前面例子中用到的评分矩阵中,只有一个用户-物品组合没有评分。但在实际应用中,由于用户一般只会评价(或购买)少部分物品,评分矩阵一般都非常稀疏。