基于深度神经向量机自回归的协同过滤算法

2020-05-22 12:32惠康华贺怀清
计算机工程与设计 2020年5期
关键词:物品向量协同

惠康华,计 瑜,王 进,贺怀清

(中国民航大学 计算机科学与技术学院,天津 300300)

0 引 言

协同过滤[1,2](collaborative filtering, CF)是一类根据用户偏好以及相似用户评价来预测用户对新物品偏好的方法。随着深度学习在许多领域的成功应用,针对以神经网络为基础的基于模型的协同过滤方法的研究得到越来越多关注。受限的波兹曼分解机(restricted Boltzmann machine,RBM)[3],对用户或项目打分数据分布进行建模得到两层无方向生成图模型,在Netflix挑战赛中取得较好成绩。文献[4]以 RBM为核心,把用户和物品的相关性扩展相结合,建立波兹曼模型实现物品推荐。

神经自回归分布估计[5](neural autoregressive distribution estimator,NADE)是一种基于RBM的方法,不含大量推理计算的隐变量,在不同机器学习问题中表现较好。神经自回归协同过滤方法[6](neural autoregressive approach to collaborative filtering,CF-NADE)则将神经自回归与协同过滤相结合,通过在不同打分中共享权重,使得推荐结果得以改善。与NADE二进制向量计算方法不同,CF-NADE能够根据不同长度的向量进行计算。

与此同时,关于神经网络的研究,出现许多把支持向量机用作隐藏层的研究成果,如文献[7,8]提到数据样本相应的隐藏权重作为支持向量机的输入,可提高模型预测水准,但底层特征调整不太理想。还有研究验证了线性支持向量机应用于深度学习顶层会取得较好效果[9,10]。

综上所述,神经自回归在协同过滤中有较好实践,结合支持向量机应用于神经网络最顶层输出部分的优势,本文提出一种基于深度神经向量机自回归的协同过滤方法(collaborative filtering based on deep neural support vector autoregression,CF-NSVADE)。

1 算法描述

本文通过把支持向量回归(support vector regression,SVR)当作CF-NSVADE模型最顶层激励函数,替换CF-NADE模型softmax激励函数作为条件概率,经由SVR基于最小边缘属性的对数损失特性,获得比softmax更优的模型效果。

1.1 神经自回归协同过滤方法

基于神经自回归的CF-NADE 模型首次将NADE 模型应用于协同过滤,而且把二元分类延续成多元输出打分模型。作为验证推荐算法准确性的数据集目前有Movie-Lens1M,Movielens10M,Goodbooks[11,12]等,把数据集里用户数目设为N,物品数量设成M,而整数评分的范围由1至K。 最新的数据集和以往数据集特征不同,相比之下包含的用户已及物品数目更多,数据稀疏性更强,由此使用经典的基于记忆的协同过滤算法需要较多的时间空间开销。本文设定单个用户u之前对D个物品做过评价,所以D≪M。 那么单个用户都会独立建一个深度学习模型且所有模型都有一样的参数以及一样数目的隐节点。但假若某一用户只有D个物品评分,结果表现为只存在D个可视节点。因此每个CF-NADE有一个训练样本,即某一用户已评价过的物品打分向量,而所有训练样本的参数权重以及偏置都相关联。本文每一用户u评价向量设ru=(rm1,rm2,…,rmi,…,rmD),mi指被打分的物品评分组,且1≤i≤M,则某一用户模型搭建如下

(1)

其中,j=1,2,…,i-1,表示mi物品前i-1个元素。通过图1表示的深度学习自回归网络对式(1)进行建模。

图1 基于神经自回归的协同过滤预测过程

1.2 深度神经向量机自回归协同过滤方法

根据上述CF-NADE方法,CF-NSVADE方法在建立式(1)过程中条件概率的分布模型时,把SVR用于深度学习自回归,通过替换激励函数优化损失函数的权重更新程序,使模型预测更准,从而获得更小的预测打分误差。算法步骤见表1。

表1 某一用户u的CF-NSVADE算法描述

详细步骤及分析如下。

步骤1 把输入数据输入隐藏层的节点,先算出公式里面rmj

(2)

其中,g(·) 为某一隐表示的激励函数,在CF-NADE以及本文所示的算法里都定义为

(3)

步骤2 输入的数据经过隐藏层后再经由SVR激励函数输出为条件概率,那么得到用户对全部物品在评价范围1~K上可能性的分布概率。则式(1)利用softmax函数可用如下公式

(4)

(5)

文献[8]中提到把线性支持向量机当作深度神经网络顶层的激励函数会优于softmax激励函数分类的结果,原因是加入SVR以后,针对损失函数有着良好收敛的权重拟合。本文尝试利用文献[13]的概率输出计算把式(4)softmax计算替换成SVR作为输出概率值。

该替换的优点在于,SVR相关的最小边缘损失能够获得更好的评估后验概率,从而能够把用户兴趣的顺序模型代入公式得到良好结果。假若某一用户对一个物品打分为k,则用户会对评分的可能性从1到k单调递增,而从k到K单调减少。之前的模型不曾利用用户此种打分偏好顺序可能性属性。

想要权重变得可以共享,不同打分的权重可以归一化,将模型中利用多到一定程度的权重参与描述数据。计算式(4)以及式(5)针对各自的打分k具有的衔接权重Wk,Vk以及bk皆不相等。模型训练时,针对不同的物品,一部分的打分占用更多的比例,受到更多人的喜欢或厌恶。因此少见的打分历史有被忽视掉的可能性。因而利用一个物品已知的不同评分使用同一共享参数这样的方式解决如上小数据易被忽视的难点,把隐藏层修改h(rmj

(6)

(7)

在k≥j情况下,Vj以及bj经由打分k共享。

步骤3 把独个隐藏层深度学习网络模型扩展成多层模型。文献[14]中说明一个用户不一样的打分排列作为不一样的案例,能够把这种特点用来扩充成多层模型。各个用户通过不一样的CF-NSVADE且r里面mi顺序为评价顺序 (1,2,…,D) 随机抽样。针对全部可能性的顺序训练模型就是指针对所有已知rmj

这一过程中,某一训练更新只会根据唯一隐藏表示h(rmj

h(l)(rmj

(8)

针对l=1,2,…,L,L为隐层数目,则p(rmj=k|rmj

步骤4 通过最小负对数似然公式优化p(r) 函数。经由前文讨论,在模型训练过程中,rmj

(9)

经由计算式(9),模型经过顺序mi里随机分裂点i分成不同物品的评估打分,正如真实情况会在i点一样。求和历史元素是因为历史元素求和结果为D,针对被评估打分的物品在输入顺序里存在分裂点有D-i+1个可能性,本文为该物品分裂点位置选择随机。

步骤5 通过条件概率评估打分。训练模型之后,已知某一用户历史有过的评价r=(rm1,…,rmi,…,rmD),那么没有评价过的物品m*打分评估是

(10)

最后,物品m*得到评价在1~K上条件概率的分布就会根据评价1~K做乘法再相加,最终获取打分是1~K的评估。

神经自回归分布估计可以很好用于协同过滤领域,条件概率模型的基础也可以很好地用于协同过滤,经由某一用户建造一个评价条件概率分布的模型从而评估打分,扩展成为整个数据的打分评估模型,而且神经自回归分布估计和RBM相比较不会利用对比散度方法计算因而少浪费很多资源,本文经过计算条件概率分布模型的更改让协同过滤方法得到优化。

2 实验结果及分析

本文将SVR应用于神经自回归协同过滤模型,根据SVR用于深度学习顶层激励函数的办法替换softmax得到输出条件的概率,SVR模型在计算损失函数的计算里面能够通过最小边缘性质优化计算过程,那么SVR计算进行中能够使得数据点以及公式计算结果距离和最小。本节将从多个不同角度验证本文所提算法的可行性。

本文选取不同公开数据集得到打分预测,其中 MovieLens1M 以及Movielens10M为电影数据[11],Goodbooks为图书打分数据[12]。训练模型时,给定数据集随机选择10%的打分数据作为测试集,剩余90%的打分数据作为训练集,训练集中的5%作为验证集。本节实验过程中,利用打分结果3为未经过历史用户打分的默认打分。评估计算误差从而对比各个预测方法,主要计算MAE值

(11)

其中,M是物品数目,N是用户数目。那么MAE越小越好。

2.1 数据集

Movielens1M数据集包含6040个用户对3900多个物品约100万个不记名打分,每个用户最少对20个物品打分。Movielens1M数据集的打分是5分制,增幅是1。Movielens10M 数据集包含71 567个用户对10 681个物品约1000多万个打分,用户为随机选择且至少对20个物品打分。打分采用5分制,和Movielens1M数据集不同之处在于,Movielens10M打分增幅为0.5。本节实验中将 Movielens10M 打分结果转化为10分制,打分增幅为1。Goodbooks数据源自Kaggle算法比赛,由9986个用户对48 871个书籍约600万个打分数据。GoodBooks数据打分为5分制,增幅是1。

2.2 实验环境

硬件环境:Intel(R) Core i5 CPU@ 2.9GHz,8GB内存;

操作系统:MacOS 64位;

编程软件:Python 2.7.10;

其它软件:theano。

2.3 实验及分析

(1)Movielens1M数据集实验结果

首先,在深度学习的10个迭代程序里对比CF-NADE和CF-NSVADE的结果。实验中首先使用一层隐藏层,隐藏节点数是500,通过Adam计算 (b1=0.1,b2=0.001,ε=10-8) 损失函数。学习率是0.001,开始检验时不考虑顺序特性的影响。

如图2所示,在模型不断迭代过程中,利用SVR为激励函数的模型误差比softmax作为激励函数的模型误差小。进一步观察可以发现,CF-NSVADE在迭代初期误差减少较多,逐渐地两个模型皆趋于稳定。此外,在迭代过程中,两个模型学习速率均有所降低,因为CF-NSVADE算法将softmax进行了替换,改为SVR激励函数,SVR模型需要拟合最小边缘计算的特征,式(9)复杂度相较于softmax更高一些,但是最小负对数似然计算提高了模型的精确度,使得CF-NSVADE算法在后续迭代过程中一直保持更为准确的预测结果。

图2 CF-NADE和CF-NSVADE两个模型迭代对比

(2)λ值选择对模型的影响

文献[3]提到把用户兴趣的顺序属性加入计算结果将会更优。倘若某一用户对一个物品打分k,则用户评价的可能性会由1至k单调递增,而由k至K单调减少。之前计算过程把不一样的打分作为不一样的标签,未计算顺序属性。

比如rmi=k,则用户打分可能性顺序为

k>k-1>…>1

(12)

k>k+1>…>K

(13)

给模型添加顺序可能性打分特性,式(4)则变为

(14)

Chybrid=(1-λ)Creg+λCord

(15)

其中,λ为确定Cord参数的超参数,相关实验结果如图3所示。

图3 序列属性损失函数权重λ对MAE值的影响

将考虑到用户评分兴趣顺序特征属性的损失函数代入到模型中,根据图3所示结果能够看出,λ越大表示顺序特征的原因导致损失函数比例权重高,评估结果越准确。一方面验证了本文提出的CF-NSVADE方法,相比CF-NADE在不同序列属性权重下仍然表现良好,并能够得到顺序特性对于实验结果较好的影响和优化,对后续协同过滤方法研究有一定的参考价值。

(3)Movielens1M数据集采用不同隐藏节点数的实验结果

为了进一步验证CF-NSVADE方法的有效性,不妨在上述实验基础上将λ设定为1,然后从不同隐藏节点数量的角度对模型预测结果进行评估。如图4所示,实验结果表明当隐藏层里面的隐节点数量逐渐变多时,两个模型的评估误差结果皆在降低,整个节点数量改变过程中都是CF-NSVADE方法优于CF-NADE方法。结合前文分析能够发现,本文所提出的CF-NSVADE方法能够实现对CF-NADE深度学习自回归方法的改进。

图4 隐藏层不同节点数量的模型对比

(4)多数据集多方法对比

考虑到矩阵分解[2](matrix factorization,MF)是目前认可度较高的协同过滤模型,因此本节除了和CF-NADE方法比较,还与非负矩阵分解模型[15](non-negative matrix factorization,NMF)进行对比。NMF方法通过把矩阵分解成较低维度的矩阵乘法形式,从而让大量计算变得不那么复杂。除了Movielens1M,本文还选取Movielens10M以及Goodbooks两个规模较大数据集,实验结果见表2。

表2 CF-NSVADE、CF-NADE及NMF在

从上述多个实验结果可以看出,本文提出的CF-NSVADE模型在一定程度上能够让已有的深度学习自回归预测模型有更好的表现,而且在加入用户打分可能性的顺序特性时,同样可以让算法预测准确度增加。本文将SVR用于深度神经自回归网络的最后一层激励函数来替换softmax,可以为其它适用于深度学习模型这一类型问题的优化提供一个可选途径。此外,CF-NSVADE模型在保证深度学习自回归方法适用于CF模型的同时,利用SVR于拟合最小边缘的损失函数过程中的优势,使得协同过滤模型方法得到一定程度的改善。

3 结束语

本文经由SVR在深度学习自回归算法最后一层用于激励函数的形式让已经有良好效果的深度学习自回归协同过滤方法得到改善。由CF-NADE 模型的启发,以及SVM在深度神经网络方法的最后层激励函数的分类模型中表现高于softmax,再者加入用户打分顺序属性影响,将其考虑在模型设计过程中。不同数据集上多个角度的对比实验结果均表明将SVR当作激励函数放入概率模型会优于softmax激励函数的方法。

本文主要讨论SVR在协同过滤的线性神经自回归过程中的合理应用。今后研究的方向更加要融入SVR多样化的使用,不仅要考虑数据集的评价得分,还将尝试SVR对物品及用户特性、兴趣停留时间、样本点击以及产生数据的时间信息[16,17]等高维数据的回归能力分析。

猜你喜欢
物品向量协同
称物品
向量的分解
家校社协同育人 共赢美好未来
聚焦“向量与三角”创新题
“双十一”,你抢到了想要的物品吗?
蜀道难:车与路的协同进化
谁动了凡·高的物品
“四化”协同才有出路
三医联动 协同创新
向量垂直在解析几何中的应用