APP下载

用余弦相似度修正评分的协同过滤推荐算法*

2020-06-22张瑞典钱晓东

计算机工程与科学 2020年6期
关键词:余弦不合理修正

张瑞典,钱晓东

(兰州交通大学经济管理学院,甘肃 兰州 730070)

1 引言

在互联网高速发展的时代,信息处于一个爆炸增长的状态,为缓解信息过载问题,互联网会为用户推荐各种信息,比如淘宝商品,今日头条的新闻,爱奇艺的电影电视等等。由于信息量太大,需要针对不同用户选择其需要或者感兴趣的项目进行推荐,既不会使用户厌烦,又可高效地为用户推荐有用的项目。

根据评分计算用户相似性[1],并依据相似性进行项目推荐[2]是目前常用的协同过滤推荐[3]手段。而在评分时,由于某些不合理因素可能导致少量用户对项目做出与自身意志不相符的评分,比如因一时情绪导致评分的极端化,这类评分会使相似度计算出现较大偏差,从而引起推荐结果出现明显误差。

事实上,用户的评分是由用户的多种有关评分特征最终决定的,就是说如果影响某用户对某项目评分的所有相关信息一定,那么该用户对该项目的评分就如同基因决定生物性状一样确定。然而,由于无法全面收集用户有关评分的特征信息,因此在实际操作中,都是依据同一用户对大量不同项目所做评分来衡量其评分特征,以不同用户对同一组(多个)项目做出的评分来衡量相互之间的相似度。但是,评分是离散数据,不能准确反映用户的特征和不同用户间的相似度,因此需要结合用户具体的特征,以达到提高反映准确度的目的。这种将评分与多种特征相结合的方法,可在一定程度上修正不合理评分带来的相似度偏差,这也是大多数文献所采用的方法。比如,文献[4]利用用户文本评论特征来修正可信度不高的评分数据,并将其与用户偏好相结合来增加评分的可信度与区分度;文献[5]采用多层次的推荐策略,将用户的评分相似度[6]、兴趣相似度[7]、特征相似度[5]进行动态融合,来挖掘目标用户的相似用户集合。这2种方法都能削弱不合理评分对用户相似度计算的影响,但效果均不明显。

为了更大程度地减小不合理评分带来的影响,本文采用评分矩阵的多种维度进行余弦相似度[8]比较的方法修正不合理评分。用不同用户对高相似度的多个项目所做评分构成的评分向量计算余弦相似度,首先将评分向量按元素个数均分为多组,分别求取对应的余弦相似度,如果某组余弦相似度过小,表明该组存在不合理评分,再对带不合理评分的数组进行降维分组,如此往复,最终可确定不合理评分;再对第1次分组的不带不合理评分的各组余弦相似度求取平均值,将其作为带不合理评分数组的余弦相似度,从而计算出1个评分来取代所确定的不合理评分。

修正评分后,结合皮尔逊相似度[9]、模糊偏好相似度[10]和Jaccard相似度[11]计算用户相似度,以推荐评分[12]与实际评分间的平均绝对偏差(MAE)[13]、准确率(Precision)[9]和覆盖率(Coverage)[14]来衡量推荐性能。利用MovieLens数据库[15]和Bookcrossing[16]数据库进行实验,结果表明:用余弦相似度修正评分的协同过滤算法相比未修正评分前的算法具有更高的推荐精度,其推荐评分MAE明显下降。此外,本文算法与对照算法在MAE、Precision、Coverage指标上的仿真实验均表明,本文算法具有更好的推荐效果。

2 评分修正可行性分析及修正方案

2.1 相似项目评分的余弦相似度的分析

若存在A1,A2,…,AT共T个用户,分别对2个项目C1和C2做出评分。表1所示为对应评分情况,rtd表示At对Cd做出的评分。

Table 1 T users’ ratings for 2 items表1 T个用户对2个项目的评分

如果C1和C2的理想相似度高,则两者的余弦相似度高:

(1)

事实上,sim(C1,C2)cos≤1,当且仅当rt1∝rt2时取等号。设l为比例系数,则在式(1)成立的情况下,有rt2≈lrt1成立。

综上所述,同一用户对相似项目的评分大约成正比。

求第e个用户和第f个用户相似度:

(2)

而当re2≈lre1,rf2≈lrf1时则有:

(3)

因此,不同用户对相似度高的项目所做评分的余弦相似度也高。显然,当被评分的相似项目数大于2时,依然符合此规律。

2.2 不合理评分的确定

若存在2个用户A和B,他们均对相同的项目组做了评分,且在这些项目组中存在各类相似项目,抽取某类高相似度邻居项目N(N为小于或等于该类相似项目所有个数的最大可被10 整除的数,以便多次分组)个,即A的评分向量为RA=(rA1,rA2,…,rAN),B的评分向量为RB=(rB1,rB2,…,rBN),将这N个项目分为n组,每组m个分数,则有:

N=mn

(4)

规定A和B的第n组的评分向量为:

(5)

单独计算每组相似度,由于所有项目相似度较高,在合理情况下,根据式(3)的结论有:

(6)

如果某组出现了不合理评分,则该组与其它组的相似度会出现较大的差异,其余弦相似度则会远小于1。为了给出更具体的判断标准,人为设定Δsim(A,B)cos,如果:

(7)

则认为RAn或RBn中存在不合理评分;否则,均不存在。

为了在A,B的评分向量中找出不合理评分,需要在不同维度下计算A,B间的余弦相似度。

首先,分别在A,B的各组评分向量中自行对比相似度,以确定不合理评分出现在哪个用户的评分向量中。假设第x组评分向量的相似度低于下限,选择余弦相似度最大的1组(设为第y组)评分向量,如果:

(8)

则认为A的第x组存在不合理评分。如果:

(9)

则认为B的第x组存在不合理评分。

然后,将带有不合理评分的向量和另外1个用户对应序号的评分向量提取出来继续分组。将第x组分为s组,每组q个分数,则有:

m=sq

(10)

又规定A和B第x组再分组的第s组的评分向量为:

(11)

单独计算每组相似度,重复式(6)~式(12)的操作,直到所提取到的评分向量元素个数为质数。每次分组降维后,需要与分组前的相似度对比正常相似度,因为正常情况下应该有:

(12)

且均应在[1-Δsim(A,B)cos,1]。需要注意的是,所分组数与每组元素个数之间的数值差尽可能小,既保证高维向量计算相似度的准确性,又保证有足够的组进行对比。

最后,将质数个元素的评分向量分为每2个元素1组,且前组的第2个元素作为后1个组的第1个元素。若哪组包含不合理评分,则对应组的相似度与最后1次分组前的相似度相差较大。比如,rAz为不合理评分,则:

(13)

至此,不合理评分已被确定。

2.3 不合理评分的修正

(14)

其中,i为第i组分组。

不合理评分的修正可以推广到多个不合理评分的修正。即求所有合理评分向量的相似度均值,并将其作为不合理评分向量的相似度,最终按余弦相似度计算的逆过程修正所有不合理评分。另外,式(8)和式(9)中所描述的判定方法只能判定出与合理评分相差最大的不合理评分,并不能说明另1个用户未做出不合理评分,因此确定不合理评分并修正后,需要将2个评分向量重复式(4)~式(14)的步骤,才能确定并修正2个用户的不合理评分。

3 基于评分矩阵修正的协同过滤推荐

采用第2节中所述的方法将所有不合理评分修正一遍后,再利用修正后的评分矩阵计算用户相似度。假设有u个用户对v个项目做出了评分,评分矩阵表示为Ruv,rjk表示第j个用户对第k个项目做出的评分。如果未评分,则将对应的评分记为0。

(15)

本文以模糊化的混合评分相似度作为用户评分的相似度,以此来衡量不同用户的相似度。此相似度为3部分的乘积:皮尔逊相似度×平均模糊偏好相似度×Jaccard相似度。第j个用户Aj和第h个用户Ah的皮尔逊相似度为[12]:

(16)

定义1设U为一论域,给定1个映射μE:U→[0,1],x→μE(x)∈[0,1],可确定1个模糊集E,映射μE称为模糊集E的隶属函数,μE(x)称为x对E的隶属度。

评分模糊化隶属函数如图1所示。其定义式为:

(17)

Figure 1 Fuzzy membership function of rating图1 评分模糊隶属函数

根据式(17),可求出某用户对某项目的模糊偏好向量θ=(μlike,μdislike)。利用模糊偏好计算不同用户间的偏好相似度,用ps(Aj,Ah)表示用户Aj和用户Ah间的平均偏好相似度[17,18]:

(18)

(19)

dis(θjc-θhc)=

(20)

Jaccard相似度定义为2个集合的交集与并集的比。已知用户Aj的评分项目集合Ij和用户Ah的评分项目集合Ih,则用户Aj,Ah的Jaccard相似度为[19]:

(21)

所以,用户Aj,Ah的评分相似度为:

sim(Aj,Ah)=simpcc(Aj,Ah)×

ps(Aj,Ah)×J(Aj,Ah)

(22)

为某目标用户推荐项目,先根据用户的相似度,寻找到目标用户在某一范围内的邻居,然后基于评分的预测公式计算出该目标用户的推荐评分,然后依据推荐评分决定是否为用户推荐某项目,或决定推荐某类项目的概率。选定某一目标用户,选出与其相似度较大的固定数量用户构成最近邻居集合L。最近邻居为用户Aj关于项目Ck所推荐的评分为[20]:

(23)

4 算法步骤

为了明确基于变维相似度修正评分的协同过滤推荐算法的实现过程,给出相应的算法步骤。该算法步骤主要由2个部分组成:不合理评分确定和修正过程,相似度计算与评分推荐过程。

步骤1不合理评分确定和修正过程

输入:RA,RB。

输出:修正评分。

begin

1.functionPartition(RA,RB)

2. 提取RA的维数N;

3.forn← 0toNstep 1do

4.form← 0tonstep 1do

5.ifN=mnthen

6.sum[n][m] ←m+n;/*sum[n][m]为m与n的和*/

7.endif

8.endfor

9.endfor

10.ifsum[n][m] = min(sum[n][m])then/*min(sum[n][m])为sum[n][m]的最小值*/

11.RA=[RA1,RA2,…,RAn];//将RA分为n组

12.RB=[RB1,RB2,…,RBn];//将RB分为n组

13.endif

14.fori← 1tonstep 1do

15.sim(Ai,Bi)cos← cos(RAi,RBi);

16.ifsim(Ai,Bi)cos≥ 1-Δsim(Ai,Bi)costhen

17. 不做处理;

18.else

19. 按式(8)和式(9)的方法确定不合理评分所在数组;

20.RAx←RAi;

21.RBx←RBi;

22.endif

23.endfor

24.returnRAx,RBx;

25.endfunction

26.Partition(RA,RB);

27.while(1)do

28.Partition(RAx,RBx);

29.ifN为质数then

30.break;

31.endwhile

32.按式(13)最终确定不合理评分;

33.按式(14)修正不合理评分;

endbegin

步骤2相似度计算与评分推荐过程

输入:Ruv,L。

输出:推荐评分Pjk。

begin

1.forrjk∈Ijdo

2.sum(rj)←sum(rj)+rjk;//对用户Aj的评分求和

3.endfor

5.forrjk∈Ihdo

6.sum(rh)←sum(rh)+rhk;/*对用户Ah的评分求和*/

7.endfor

9.forrj∈Ijdo

10.forrh∈Ihdo

11. 按式(16)计算出皮尔逊相似度simpcc(Aj,Ah);

12. 按式(17)~式(20)计算出模糊偏好平均相似度ps(Aj,Ah);

13. 按式(21)计算出Jaccard相似度J(Aj,Ah);

14.sim(Aj,Ah)=simpcc(Aj,Ah) *ps(Aj,Ah) *J(Aj,Ah);

15.endfor

16.endfor

17.forCk∈{C1,C2,…,Cv}do

18.forAh∈Ldo

19. 按式(23)计算出用户Aj对应项目Ck的推荐评分Pjk;

20.endfor

21.endfor

endbegin

步骤1中,第1~25行先对评分向量进行分组,再建立确定不合理评分所在数组的确定函数,通过该函数可将评分向量降维分为多个分向量,并在分向量中找出带有不合理评分的向量;第26~33行反复调用所建函数并最终确定和修正不合理评分。步骤2中,第1~4行求取用户Aj的评分均值,第5~8行求取用户Ah的评分均值,第9~16行计算用户Aj与Ah的评分相似度,第17~21行计算用户Aj对应项目Ck的推荐评分。

5 实验及结果分析

5.1 数据集及仿真环境的介绍

基于2个不同类别的经典数据库MovieLens 100K和Bookcrossing进行实验,前者是电影评分系统,用户在观影后根据自身的喜好度对影片进行打分,评分值为1~5分,包括电影信息和用户属性信息。其中,电影信息包括电影ID、title、genres;用户的属性信息包括用户ID、性别、年龄、职业、邮政编码。后者是书籍评价系统,由Ziegler等人使用爬虫程序从BookCrossing图书社区采集的,包括隐式和显式的评分信息,评分为1~10分。这2个数据集的具体参数如表2所示。

Table 2 Specific parameters of the datasets表2 数据集的具体参数

本文仿真环境的计算机配置为:Windows 10 操作系统,8 GB 内存,Intel(R)Core(TM)i7-6700HQ,CPU为主频2.60 GHz,实验基于IDEA开发平台,采用scala进行开发。

5.2 评价指标和对照算法的选取

在推荐系统中,不同的评价指标反映算法不同层面的性能,为了验证本文所提算法的有效性,实验采用平均绝对偏差(MAE)、准确率(Precision)和覆盖率(Coverage)进行分析。

假设目标用户对候选项目Ck的推荐评分为Pk,实际评分为rk,候选项目个数为M,则MAE的表达式[21]为:

(24)

MAE的值越小,表明预测误差越小,推荐结果越准确。

假设Lj为用户Aj的推荐列表商品集合,Fj为用户Aj喜欢的商品集合,则准确率的表达式为:

(25)

Precision表示的是推荐列表中有多少比例的物品出现在测试集里的商品评分记录中,准确率的值越大,表明推荐精度越高。

假设系统中的项目共有V个,被推荐的项目为VR个,则覆盖率的表达式为:

(26)

覆盖率越高,说明用户推荐列表中的商品越多,则整体多样性越高。

将经典的以余弦相似度为基础的协同过滤推荐算法(Cosine-CF)、文献[5]提出的多层次混合协同过滤USICCF(User Score and Interest and Characteristic Cooperative Filtering)推荐算法作为本文基于余弦相似度修正评分的协同过滤ARCSCF(Adjusted Rating by Cosine Similarity Collaborative Filtering)推荐算法的对照算法。由于Cosine-CF算法仅从用户间的评分进行相似度的计算;USICCF算法基于用户的评分、兴趣与人口统计特征衡量相似度,借助用户的其他特征能在一定程度上修正不合理评分带来的相似度衡量误差;而ARCSCF算法在利用余弦相似度修正不合理评分的基础上,采用模糊化的混合评分相似度进行相似邻居用户的提取。故本文选择Cosine-CF和USICCF算法作为本文算法的对照算法,以便更好地反映本文算法利用余弦相似度修正不合理评分的有效性。

5.3 实验结果及分析

在实际操作中,为有效选取高相似度的项目组,本文通过对比项目参数进行相似度评估。如MovieLens 100K数据集中的电影类型、年代、时长、出品地、清晰度、音质、特效、所用语言、主角等级等,将各类参数量化成项目特征向量。在量化项目参数时,可采取分类或分段的数字对应法,比如类型,类型甲对应数字“0”,类型乙对应数字“1”,类型丙对应数字“2”等;又比如年代,70年代对应数字“0”,80年代对应数字“1”,90年代对应数字“2”等。量化后,求取这些特征向量的余弦相似度,当余弦相似度达到90%以上时,视为高相似度。同理,在选取Bookcrossing数据库中的高相似度书籍时也采用上述方法。

5.3.1 确定最优参数

在修正不合理评分时,选取合适的Δsim(A,B)cos是一个比较关键的问题。由于不合理评分在总体评分中所占比例很小,所以,为整体上使评分尽可能符合用户意志,在确定Δsim(A,B)cos时,采用修正前的rk。此时,如果Δsim(A,B)cos过大,则不能有效修正不合理评分;如果过小,则会出现过度修正,将本身合理的评分差别缩小或消除,从而使修正后的评分不能代表用户意志,进而使MAE增大。采用MovieLens 100K数据集来确定Δsim(A,B)cos参数的最优值,实验结果如图2所示。

Figure 2 MAE curve of each neighbor number corresponding to different Δsim(A,B)cos values图2 不同Δsim(A,B)cos对应各邻居数的MAE曲线

图2为在不同用户邻居数目|L|情况下不同Δsim(A,B)cos对应的MAE曲线。其中,|L|分别为20,40,60,80,100。Δsim(A,B)cos分别为0,0.04,0.08,0.12,0.16,0.2,0.24,0.28,0.32,0.36,0.4。

根据图2,无论用户邻居数|L|如何变化,MAE均随Δsim(A,B)cos从0逐渐增大,先快速减小而后缓慢增大,最后逐渐趋于平稳。表3所示为图2对应的MAE值。

在已考察的Δsim(A,B)cos中,当Δsim(A,B)cos在0.2附近时,可使得MAE最小,故本文选取Δsim(A,B)cos=0.2。

5.3.2 分析算法的收敛性

采用MovieLens 100K和Bookcrossing数据集来验证ARCSCF算法在收敛性上的优势,对照算法采用修正前的评分数据集,本文算法采用修正后的评分数据集。鉴于ARCSCF算法和对照算法在MAE、Precision、Coverage上具有相似的实验结果,因此主要考察各个算法在Precision上的收敛状况,实验结果如图3所示。

Figure 3 Precision convergence curve of each algorithm under different iteration times图3 不同迭代次数下各算法的Precision收敛曲线

图3为在不同迭代次数情况下各算法对应的Precision收敛曲线,其中,迭代次数以200为步长从0增长到1 000。根据图3a和图3b可知,ARCSCF算法和对照算法的准确率都随着迭代次数的增长而趋于收敛,并最终仅在小范围内波动。ARCSCF算法的收敛速度相较于对照算法更快,在迭代大概100次以后基本趋于稳定,而Cosine-CF算法、USICCF算法分别在迭代大约200次,180次以后趋于平稳。这是因为ARCSCF算法在修正用户不合理评分基础上进行商品推荐,保证每次迭代均能寻找到与目标用户真正相似的推荐用户群,进而使得ARCSCF算法的收敛速度更快,能在较少的迭代次数下便可获得较高的推荐准确率。

5.3.3 对照实验

在邻居数不同的情况下对评分修正前和评分修正后的MAE进行对比,从而反映本文算法对推荐准确度的影响。基于MovieLens 100K数据集考察MAE随|L|的变化时,实际评分采用修正后的rk值,在未修正和修正后2种情况下对比不同用户邻居数目对应的MAE,所得曲线如图4所示,对应具体的MAE值如表4所示。

Table 3 MAE of each neighbor number corresponding to different Δsim(A,B)cos values表3 不同Δsim(A,B)cos对应各邻居数的MAE值

Figure 4 MAEs before and after revision when Δsim(A,B)cos=0.2图4 Δsim(A,B)cos=0.2时修正前后对应的MAE

根据图4和表4可以看出,评分修正后的推荐评分的MAE相比修正前的有所下降。随着邻居数的增多,推荐评分的MAE越来越小,且其变化越来越趋于平稳,同时评分修正前后推荐评分MAE的差距越来越明显。这是因为随着邻居数增多,出现不合理评分的概率越大,对推荐精度影响越大。

Table 4 MAEs before and after revision corresponding to different neighbor numbers表4 评分修正前后不同用户邻居数对应的MAE值

为了进一步验证本文算法的先进性,基于MovieLens 100K和Bookcrossing数据集比较ARCSCF算法和对照算法在MAE、Precision、Coverage指标上的推荐性能,同样地,对照算法采用修正前的评分数据集,本文算法采用修正后的评分数据集。随机地将实验数据的80%作为训练集和20%作为测试集,该方式可能存在一定的人为处理偏差,故进行5折交叉实验,将5次实验的平均值作为最终仿真结果。实验结果如图5~图7所示。

Figure 5 MAE curve of each algorithm corresponding to different neighbor numbers |L|图5 不同邻居数|L|对应各算法的MAE曲线

Figure 6 Precision curve of each algorithm corresponding to different neighbor numbers |L|图6 不同邻居数|L|对应各算法的Precision曲线

Figure 7 Coverage of each algorithm corresponding to different neighbor numbers |L|图7 不同邻居数|L|对应各算法的Coverage值

从图5a和图5b可以看出,3种算法的MAE曲线在2个不同类别数据集MovieLens 100K和Bookcrossing上均呈波动下降态势,对照算法的MAE曲线下降幅度较小,ARCSCF算法的MAE曲线下降幅度较大,ARCSCF算法的MAE指标整体取值均小于对照算法的,说明本文算法的预测精度最高。此外,在邻居数|L|为80,100附近时,对照算法的MAE基本趋于平缓,ARCSCF算法的MAE还有下降趋势。这是因为Cosine-CF算法仅从用户间的评分进行相似度的衡量,但不合理评分的存在会使得相似用户的挖掘不够准确;USICCF算法将用户评分与用户特征相结合能在一定程度上弱化不合理评分的影响,但效果并不明显;而ARCSCF算法在修正用户不合理评分基础上进行商品推荐,使得修正后的评分数据更符合用户真实的偏好状况,进而缩小相似度计算的误差,能推荐更符合用户真实喜好的商品,故ARCSCF算法相比对照算法能获得更好的推荐效果。

由图6a和图6b可知,3种算法的Precision值在2个不同类别数据集MovieLens 100K和Bookcrossing上均随着邻居数|L|的增加呈现上升趋势,Cosine-CF算法的增长幅度最小,USICCF算法次之,ARCSCF算法最大,且ARCSCF算法在Precision指标上的整体取值均高于对照算法的。同时,当邻居数|L|在80,100附近时,对照算法均趋于平缓,而ARCSCF算法仍有上升趋势。这是因为ARCSCF算法基于修正后的评分数据集进行协同过滤推荐,能获得更相似的用户群,故推荐准确率相较于对照算法来说更高。

根据图7a和图7b可知,ARCSCF算法相比对照算法在2个不同类别数据集MovieLens 100K和Bookcrossing上的Coverage指标有很大的提升,ARCSCF算法的覆盖率最高,USICCF算法次之,Cosine-CF算法的最低。ARCSCF算法先对评分数据集中的不合理数据进行修正,再基于修正后的评分数据从用户的实际消费偏好进行商品推荐,使推荐的商品能更好地贴合用户多样化、个性化的消费喜好,从而提高推荐的覆盖率。

6 结束语

在众多用户对众多项目做出评分的过程中,难免出现因某些原因致使部分用户所做的少量评分与自身意志不相符的情况,即不合理评分。为了在推荐时尽可能地减小这类评分的影响,本文提出了一种基于余弦相似度的评分修正算法,采用该算法可有效修正不合理评分,将带修正评分的评分数组用于相似度计算,进而为用户进行项目推荐。其中,评分相似度由皮尔逊相似度、模糊偏好相似度和Jaccard相似度相乘得到。将未修正评分数组和修正后的评分数组用于协同推荐,结果表明,后者推荐评分MAE相比前者更小。此外,将本文算法与其他算法进行仿真实验,同样能验证该算法的有效性,实验结果反映出本文算法相比对照算法能获得更好的推荐效果。

猜你喜欢

余弦不合理修正
Some new thoughts of definitions of terms of sedimentary facies: Based on Miall's paper(1985)
修正这一天
我院2018年抗生素不合理处方分析
软件修正
两个含余弦函数的三角母不等式及其推论
实施正、余弦函数代换破解一类代数问题
基于PID控制的二维弹道修正弹仿真
分数阶余弦变换的卷积定理
图像压缩感知在分数阶Fourier域、分数阶余弦域的性能比较
向“不合理用药”宣战