王 骏 虞 歌
(杭州师范大学信息科学与工程学院 浙江 杭州 311121)
在推荐算法中,协同过滤算法是使用最广泛的推荐算法,传统协同过滤算法分为基于用户的协同过滤算法和基于内容的协同过滤算法[1]。前者计算用户相似度,后者计算物品相似度,主要推荐思想是“人以群分,物以类聚”。在深度学习方法兴起后,融合神经网络的矩阵分解法利用神经网络强大的拟合隐含关系的能力,来进行预测物品评分。
谷歌在2016年推出Wide&Deep网络[2],在特征嵌入层之上加入多层感知机(Multi-Layer Perceptron,MLP)使得模型泛化能力更强。2017年He等[3]进一步提出一种多层感知机与广义矩阵分解结合的神经协同过滤模型(Neural Collaborative Filtering,NCF),既拥有矩阵分解的特征交互,又能通过多层感知机提取高阶特征信息,使模型的推荐能力得到更大提升。从信息挖掘角度分析,该模型充分挖掘了隐含关系,可从大数据角度分析,从稀疏度高达90%的评分表训练出命中率和归一化折扣累积增益[4]都不错的神经网络模型,但在广泛的适用性上仍然存在不足,想满足个性化的需求,还需要利用更多有用信息。因此,多元化信息融合研究是推荐系统热门研究方向[5]。
本文在研究了已有推荐模型的基础上,结合Movie Lens数据集的信息类型采用不同的算法提取所有已知信息,提出并实现一种改进的神经协同过滤推荐模型,根据信息来源的有效性来配置推荐系统[6]。以MovieLens数据集作为研究对象,数据集包含性别、年龄、职业和电影名等信息。通过嵌入层全部嵌入所有信息,研究分析多元信息对神经网络产生的作用,最后进行评分预测。从MovieLens-100k和MovieLens-1m数据集的实验结果表明,通过所有信息全部嵌入的方式,本文模型不仅学习到更多信息,而且表现也比神经协同过滤模型更出色。
NCF模型中,输入层上面是嵌入层,它是一个全连接层,将来自输入层的稀疏表示映射为稠密向量[3]。NCF算法对用户和项目建模(用户ID和项目ID两个输入),需要通过GMF和MLP两个路线,把它们各自的运算得到的信息连接起来。GMF使用了一个线性内核来模拟潜在的特征交互;MLP使用非线性内核从数据中学习高阶特征交互信息[7]。
NCF模型结构如图1所示。
图1 NCF模型结构
本文提出了混合多元信息的神经协同过滤模型M-NCF。M-NCF模型在NCF模型基础上使用更多嵌入层来嵌入不同的信息,其结构如图2所示。
图2 改进的M-NCF模型结构
输入层上面是嵌入层,它是一个全连接层,用于将数据映射为特征向量。Movielens电影数据集中,对个性化推荐有影响的电影信息包含电影ID、电影类型(Category)、电影名(Title),用户信息包含用户ID、性别(Gender)、年龄(Age)、职业(Job),通过嵌入层全部嵌入成特征向量。其中,电影名使用文本卷积网络处理,对电影名嵌入向量进行卷积和池化操作,拼接得到电影名特征向量,计算过程如下[8]:
假设句子单词长度为n,每个句子可以表示为n个单词组成形式:
x1:n=x1⊕x2⊕…⊕xn
(1)
假设卷积核w大小为h×k,其中h为文本卷积滑动窗口大小,k为嵌入维度,卷积核在句子x上卷积操作得到句子特征向量ci(i∈n):
ci=f(w·xi:i+h-1+b)
(2)
式中:b为偏置值;函数f(·)为非线性函数。
多个卷积核卷积后,生成的句子特征向量再接着进行最大池化操作,产生的多个新向量拼接成一个新的特征向量:
ci=[max(c1),max(c2),…,max(cn-h+1)]
(3)
最后通过全连接层输出高阶隐信息向量,这可以看作是提取出文本信息:
S=f(wn…(f(w1x+b1))+…+bn)
(4)
此外,年龄、性别、职业和电影类型映射成对应数字,电影ID和用户ID经过评分时间排序后再进入嵌入层。
如图2所示,MLP层将电影ID向量、用户ID向量拼接成新的向量进入MLP层,经过多层感知机产生高阶特征信息。
假设m和n分别表示训练集用户和电影的数量,数据集内的任一用户u∈m和任一电影i∈n,嵌入维度为k,P∈Rm×k和Q∈Rn×k分别表示用户特征矩阵和物品特征矩阵,MLP层高阶特征信息表达式表示为:
(5)
在原来算法中,电影隐表示与用户隐表示只是进行简单特征交互获得低阶特征信息。改进算法中,电影隐表示是所有电影信息嵌入向量的拼接向量,用户隐表示是所有用户信息嵌入向量的拼接向量。广义矩阵分解层向量交互过程表达式为:
Xu=[u,u′]
(6)
Xi=[i,i′]
(7)
pu=f(WuXu+bu)
(8)
qi=f(WiXi+bi)
(9)
φui=pu⊙qi
(10)
式中:u、i为任一用户向量和电影向量;u′、i′为用户信息向量和电影信息向量;Xu、Xi为用户拼接向量和电影拼接向量;pu和qi分别表示用户隐表示和电影隐表示,通过pu和qi的矩阵乘法得到评分信息φui。
传统的推荐对用户偏好进行全局预测,实际上默认用户爱好是静止不变的,但其实它们都是随时间变化的,往往近期的行为对下一部电影有参考价值。循环神经网络对时间序列信息循环计算可以挖掘上下文关系,常被使用在自然语言处理中,通过构造用户状态和电影状态进行自回归计算,把循环神经网络引入到推荐系统对行为分析的应用中。本文使用的循环神经网络是GRU模型[9]。
用户评分预测表示如图3[10]所示,图中uut、mit是不同时间的用户RNN状态和电影RNN状态。
图3 根据时序状态预测电影评分
t时刻用户状态和电影评分预测下一时刻用户潜在状态、t时刻电影状态和电影评分预测下一时刻电影状态表达式分别表示为:
uu,t+1=g(uut,{rui|t})
(11)
mi,t+1=h(mit,{rui|t})
(12)
基于用户评分行为预测评分问题表示为:
rui=f(uut,mit)
(13)
式中:输出rui表示用户u在时刻t对电影i的评分;uut、mit是t时刻的用户状态和电影状态。
来自MLP层、GMF层和RNN层的输出在输出层按合适的比例拼接成新的向量,然后通过全连接层输出预测值,计算式表示为:
(14)
式中:hT是比例,MLP层、GMF层和RNN层的输出按照合适比例组合成混合信息向量;W、b是全连接层权重和偏置值。
本文采用的代价函数为逐点损失类型的函数,在模型优化时,为了防止训练出现过拟合现象,同时提高模型的泛化能力,使用L2正则化项,损失函数计算式为:
(15)
MovieLens-100k数据集里面包括u.data、u.info、u.item、u.genre、u.user、u.occupation等文件,其中u.data文件包含943个用户对于1 682部电影的100 000个评分(分值为[1,5]之间的整数);每个用户至少评分20部电影;u.user文件包含用户的人口统计信息(年龄,性别,职业,邮编);u.item文件包括电影名,电影ID,发布日期,IMDB电影网对应电影主页网址,所属的电影类型(恐怖、犯罪、喜剧等)。
MovieLens-1m数据集含有来自6 040名用户对3 706部电影的100万条评分数据,分为三个表:评分表、用户信息表和电影信息表。
使用联想笔记本电脑,内存为8 GB,CPU为Intel酷睿i53230M;操作系统是Windows 10,使用PyCharm开发工具,使用Python版本是3.6,Tensorflow版本为1.10.0。
本文在MovieLens-100k和MovieLens-1m数据集上研究新算法的推荐能力,将数据集中80%的数据划为训练集,20%数据划为测试集。训练50个轮次(epoch),每次训练数据量(batch size)为256,嵌入维度为32,优化器使用Adam[11]优化器。
嵌入层将用户ID、电影ID和21个职业类型映射为对应的数字向量,18种电影类型映射为18位二进制列表,属于某类型则置1,否则置0;用户年龄划为7个年龄区间,分别映射为7个数字;性别映射为0或者1;电影名首先转成等长数字列表,长度是15,然后文本卷积滑动窗口在等长数字列表上进行卷积操作,分别滑动2、3、4、5个单词,卷积核数量为8,嵌入维度为32,最后经过一次最大池化操作得到一个长向量。
多层感知机层各层神经元数量为[8,16,32,64],激活函数是ReLU函数,每层参数初始化为均值为0、标准差为0.01的随机正态分布,增加L2正则项来减小模型过拟合的风险,各层神经元后还要接一层丢弃层[12],丢弃率为0.2。
循环神经网络层隐层神经元数量是128,经过循环神经网络处理后,用户向量和电影向量还要经过64个神经元的全连接层映射为新的向量。输出层的全连接神经网络增加L2正则项来减小模型过拟合的风险。
均方差误差MSE是常见的推荐系统评价指标[13],本文使用MSE对实验评分预测做评价,MSE越小,表示模型越好。MSE的计算式为:
(16)
更多隐藏层数能够加强神经网络提取信息能力,在合适范围内增加层数提升模型性能,但是超出范围会导致过拟合,导致神经网络学习能力降低;不同的用户信息或电影信息对推荐结果影响不同,对电影推荐毫不相关的信息甚至会对神经网络更新起到噪音作用。
本文在MLP层选用[16,32,64,128]的各层神经元数量与GMF层用户信息和电影信息一一搭配探索影响因素,如表1和表2所示,表3考察循环神经网络(RNN)与各层神经元影响,其中:MLP- 0为不启用MLP层目的是设置空白对照,只启用GMF层。所用数据集同为MovieLens-100k,训练50轮,取稳定在某范围内震荡的MSE平均值作评价指标,实验数据有±0.05的误差。
表1 不同用户信息与各层神经元
表2 不同电影信息与各层神经元
表3 RNN与各层神经元
可以看出,多层感知机对各因素影响并不相同,有些随着网络层数增加反而MSE在下降,在没有MLP层的情况下,多数情况算法表现都不理想,说明多层感知机能够学习到有用信息,在噪声比较多的情况下拟合真实情况;电影信息中的电影类型和用户信息中的性别对推荐影响最大,职业、年龄和电影名对推荐结果影响较小;循环神经网络在[8,16,32]和[8,16,32,64]的多层感知机结构中表现出色,而且总体表现比利用电影信息和用户信息的算法好,可能有些电影信息和用户信息与个性化推荐无关成了噪声,进而影响了算法准确率。
图4-图7为训练50轮,学习率为0.000 01,NCF和M-NCF在数据集MovieLens-100k和MovieLens-1m的MSE表现。
图4 NCF在MovieLens-100k数据集的表现
图5 M-NCF在MovieLens-100k数据集的表现
图6 NCF在MovieLens-1m数据集的表现
图7 M-NCF在MovieLens-1m数据集的表现
可以看出,经多次实验验证,M-NCF的均方误差都稳定地比NCF小,可以认为,接收更多辅助信息并没有给神经网络带来太多噪声。M-NCF能根据信息拟合出接近实际的数据。
为了验证新算法的泛化能力、稳定性和准确性,以及各个结构对M-NCF的推荐影响作用。本文设置多个实验组在MovieLens-100k和MovieLens-1m数据集进行对比实验。
选取了原算法神经协同过滤算法(NCF)、电影数据集信息全嵌入算法(M-NCF)、在广义矩阵分解(GMF)层只嵌入电影信息的NCF算法(NCF-I)、在广义矩阵分解(GMF)层只嵌入用户信息的NCF算法(NCF-U)、结合循环神经网络的NCF算法(NCF-RNN)进行对比。
各算法主要的参数设置和神经网络结构基本相同,训练50轮,学习率0.000 01,取不同算法在MovieLens-100k(ML100k)和MovieLens-1m(ML1m)数据集中算法训练收敛后稳定在某范围内震荡的平均值作评价指标,实验数据有±0.05的实验误差,如表4所示。
表4 不同模型的MSE比较
可以看出,在MovieLens-100k和MovieLens-1m数据集各算法表现都比NCF好,说明增加了辅助信息的预测比只分析单一评分信息的预测更准确;多次实验表明,M-NCF算法比NCF算法的均方误差小;电影信息比用户个人信息对个性化推荐影响稍微重要一点;NCF-RNN算法基于用户行为作出的预测在MovieLens-100k表现比M-NCF还要好。综上,M-NCF比实验对比组其他算法性能更好,信息更多元化。
本文提出基于神经协同过滤算法改进的M-NCF算法,相比原来的算法简单地挖掘评分表的评分信息,结合低阶特征交互信息和高阶特征信息,改进算法融合了多元电影数据集信息,结合了循环神经网络预测用户行为的优点,对于端到端的推荐技术也有参考价值。从信息多元化来说,拓宽了推荐算法挖掘信息的广度,从准确度来看,表现也比原来的神经协同过滤算法好,而且不再是简单的神经网络堆砌。通过对比实验可见循环神经网络和多元化信息的确增加了神经协同过滤算法的学习能力。
对于循环神经网络学习用户行为问题,应该还有更优化的解决方法。因为在同一时间段的电影观看行为往往是最有参考价值的,所以时间分段是用户行为学习更好的提升方法。
今后的研究会关注深度学习在多元信息融合方向的更多应用,比如注意力机制[14]在用户兴趣偏好上的应用、融合图卷积与神经协同过滤[15]的推荐算法等。