韩浩先,叶春明
(上海理工大学 管理学院,上海 200093)
推荐系统被广泛用于处理过载信息,为用户甄选有价值的事物.在一个推荐系统中,企业记录下用户和内容之间的交互数据,利用此数据,向用户推荐他们可能感兴趣的内容.随着网络数据的膨胀,推荐系统如何使用户和内容之间进行更有效的交互是一个重要的课题.
协同过滤在推荐系统中的应用较为广泛.并且由于隐因子模型的简单有效,其在很大程度上仍然主导着协同过滤推荐算法的研究.然而,这些模型本质上是线性的,在面对数据稀疏性的问题时,其建模能力有限.近年来,以神经网络为核心的深度学习技术突飞猛进.由于其高效的特征提取能力和非线性的学习方式,越来越多的研究将深度学习应用于协同过滤方法中.
为解决线性模型性能差,难以处理打分矩阵稀疏性的问题.2007年,Salakhutdinov 等人提出一种基于受限玻尔兹曼机的协同过滤推荐模型,第一次将深度学习应用到推荐系统中[1].Strub 等人采用两个栈式降噪自编码器(SDAE),分别学习用户和项目的隐因子,然后通过隐因子模型对缺失评分进行预测[2].Cheng 等人使用了一种深广学习模型处理多源数据,该方法同时具有高的记忆能力和泛化能力[3].Liang 等人首次将变分自编码器(VAE)应用到协同过滤模型中,通过用户的隐式反馈数据预测缺失值数据[4].He 等人将多层感知机和矩阵分解结合起来,提供了协同过滤模型的一种通用架构[5].在混合推荐模型方面,霍欢等人将栈式降噪自编码器应用于基于内容的推荐中,并和协同过滤算法相结合[6].李晓菊等人先用循环神经网络和变分自编码器处理商品的文本信息,再与概率矩阵分解相结合预测商品的缺失评分[7].
在以上研究文献的基础上,本文提出了基于聚类变分自编码器的协同过滤算法.该方法利用神经网络拟合的概率图模型学习用户的隐式反馈数据,与传统的聚类方式不同,它允许我们同时无监督地完成聚类和生成,并且,生成器以多项式分布的方法来训练重构数据.
本文的主要贡献如下:
(1) 与以往对用户和内容的特征进行聚类的方法不同,本文直接将隐变量特征设定为带有聚类效果的二元变量,将聚类统一到算法的整体框架中;
(2) 在大规模数据上对四种模型进行了实验,对其性能进行了评价和对比,并且对正则项的超参数进行了研究,避免了过度正则化.
变分自编码器[8]是一种无监督的生成模型,其结构如图1所示.它将神经网络技术与概率图模型结合在一起,能够拟合出原始数据所服从的分布,同时能够生成出类似的数据.对于每一个用户u,它都对应着一组数据xu,同时对应着一个服从标准正态分布的K维隐变量zu.对zu进行采样,生成重构数据,其服从条件概率pθ(xu|zu).由于该条件概率无法直接求出,可以用一个非线性函数fθ(zu)进行替代.该函数是一个带有参数θ 的多层神经网络,其输出为使用softmax 函数进行了归一化的概率矩阵 π (fθ(zu)) .本文将pθ(xu|zu)设定为多项式分布,希望通过优化参数 θ使该函数能够以尽可能大的概率生成类似xu的数据,损失函数公式:
图1 变分自编码器结构图
生成模型的目标就是通过最大化条件概率pθ(xu|zu) 进而最大化重构数据的产生概率p(xu),使重构数据尽量接近原始数据.但仅靠随机采样一组隐变量是无法与其生成数据一一对应的,还需要构建其与原始数据xu的概率关系来获得隐变量的分布参数.所以,我们用贝叶斯变分推断的方法构造一个高斯分布qφ(zu|xu)来对隐变量进行采样.采样的参数实质上是神经网络生成的均值(μ)和标准差(σ)两个K维向量.编码器产生的分布是否接近标准分布是使用KL散度来计算的.所以用编码器构建的神经网络所计算出的条件概率qφ(zu|xu) 来 近似真实后验概率pθ(zu|xu),两者之间的相似度:
由于KL散度非负,可以将式(2)变化,得到:
其中,
式(4)为变分自编码器的变分下界,在最大化变分下界时,l ogpθ(xu)也在增加.因此模型的优化目标可以转化为最大化式(4).
但是,均值与方差都是用神经网络算出来的,然后再对其进行随机采样,由于随机采样不是一个连续过程,无法求导,但采样的结果可以求导,以此可以实现反向传播以优化网络参数.因此,我们用一个随机变量ε对隐变量进行重参数化,可得:
本文用元素i∈{1,···,I}索引每个内容,将每个用户u的数据设为向量xu=[xu1,···,xuI]T,其中,xui代表用户u对内容i的打分值.因为实验所用数据为MovieLens数据集,所以打分值大小为1 到5.但为了提高推荐的预测准确率,本文将xu转换为隐式反馈数据,先筛选出观看数超过五部电影的用户再保留评分大于等于4 的电影,将这些电影的打分值转化为1,表示用户所点击过的喜爱的项目,最后用0 填充缺失值.
本文将隐变量设置为二元变量(z,y),其中z为连续变量,代表着对交互特征进行编码的编码向量,而y为离散变量,代表着聚类类别,可以在隐变量计算阶段完成对特征的聚类[9].因离散变量y是在连续变量z的基础上计算而得,我们假设:
于是,有:
由第1 节可知,zu是服从标准正态分布的,所以pθ(zu|yu)是 服从均值为μy,方差为1 的正态分布,μy为解码网络参数之一;pθ(y)为均匀分布即各类别的电影数量大致相同;qφ(yu|zu)是 对隐变量zu的分类器,可以通过softmax 网络进行拟合.因此,可以得到:
模型优化目标为最大化式(9).神经网络的激活函数均为tanh,而最后一层的Softmax 分类网络的输出π(fθ(zu))为模型的归一化概率,其参与到服从多项式分布的重构误差中进行网络优化,以使更多的概率分配给更有可能被观看的电影项目.
式(9)中的第二和第三项可看作是重构误差项的正则化表达式,以避免其过拟合.同时,为了权衡拟合效果,本文引入了参数 β来控制正则化的强度[10],再将优化目标转换为最小化损失函数:
如果 β <1,那么会削弱正则项的影响,也就是避免了过度正则化.从模型角度来看,该方法对于第二项避免了过度的聚类效果,同时,对于第三项避免了聚类类别的分布过度均衡,这符合推荐内容多类别多标签、无法完全归纳到单一类的实际情况,在实验中也展现了正则项参数的良好效果.
CAVE 的随机梯度下降算法(SDG)以一个训练样本xu和其重构数据x′u计算梯度∇θL和∇φL,再对批量数据的梯度求均值,利用该值更新网络的参数:
对于一个用户的历史数据xu,通过训练好的模型,可以利用预测出的未归一化的多项式分布概率fθ(zu)对所有的推荐项目进行排序.
本文实验所使用的数据为MovieLens 100k、MovieLens 1M和MovieLens 20M 三个规模不同的公开数据集.我们只保留至少观看过五部电影的用户,最终输入模型的特征数据为用户的隐式反馈数据.数据集的详细内容如表1所示.本文实验所用语言为python3.5,深度学习框架为tensorflow 1.9+keras 2.2,操作系统为Windows10,处理器为Intel(R) Core(TM) i7-7700 CPU @3.6 GHz,内存为8 GB.
表1 数据集
本文使用两个top-K 排序的指标作为实验结果的评价方法,分别是召回率 R ecall@K和归一化折扣累积增益NDCG@K.同时,定义w(k) 为排名k的项目,h[·]为等级关联性函数,如果真正打过分的项目在预测集中则该函数值为1,否则为0,Iu为测试集用户u评过分的项目集合.两者的定义分别如下:其中,ZK是归一化系数,表示h[w(k)∈Iu]=1都成立的理想情况下,ZK其后的累加项值的倒数.因为都使用了归一化方法,所以两指标的数值都在0-1 之内.
4.3.1 基线
DAE[4]:降噪自编码的训练过程中,输入的数据有一部分是“损坏”的,能够对“损坏”的原始数据编码、解码,然后尽可能接近原始数据地预测打分矩阵的缺失值.
SDAE:栈式降噪自编码器就是在数据部分“损坏”的基础上多个自编码器相接,以完成逐层特征提取的任务,最后得到的特征作为分类器的输入,完成推荐项目的概率预测.
WMF[11]:加权矩阵分解,这是一种线性的、低秩的矩阵分解模型.
SLIM[12]:稀疏线性模型,该方法是基于物品相似度的推广形式.
CDAE[13]:协同降噪自编码器通过向输入添加每个用户的潜在因子来表示用户偏好,同时在隐变量层加入了偏置表示.
DAE和SDAE 在ML-100k和ML-1M 上的评价结果由本文实验得出;WMF、SLIM和CDAE 在ML-20M 上的实验数据源于文献[4].
4.3.2 参数
为了训练不同模型的性能,我们把所有样本分为训练/验证/测试3 个集合,验证集和测试集的样本数一样.同时,对模型的输入层使用dropout 方法,对最后的输出使用Softmax 层进行归一化.CVAE 模型的隐变量z到y的分类器结构为200→n,即聚类类别为n类,激活函数为Softmax.其他参数如表2所示,I为项目个数.
为了观察β值对算法评价结果的影响,本文将其从0 到1 分成十份并使用MovieLens1M 测试集数据进行计算,发现CVAE 协同过滤模型在3 个指标上都随着β值的增加而先增后减,门槛值均在0.4 附近.所以后续实验均将β值设置为0.4,以此为最优的CVAE协同过滤模型.如图2所示.
由于聚类的类别数会影响到算法的性能[14],本文从0 到50 依次选值进行实验.发现当类别数为20 时,该算法在3 个指标上的表现均最佳,所以以此值为最优的超参数.并且该大小也符合电影分类的类别数.如图3所示.
表2 实验超参数
图2 β 值对结果的影响
图3 类别个数对结果的影响
图4显示了在MovieLens1M 验证集上的CVAE协同过滤模型的NDCG@100 值的迭代过程.随着模型迭代次数的增加,评价指标依次逐渐上升,直至稳定.实验最优的迭代次数大概在60 代-80 代.在之后MovieLens 100K和MovieLens 20M 的实验中,其走势与MovieLens1M 的类似.
图4 NDCG@100 指标的迭代
由表3、表4和表5所知,CVAE 协同过滤模型在三个数据集上的八个评价结果上均优于基线.但在MovieLens 100K 数据集上的Recall@50 指标表现最好的是SDAE 模型,并发现随着K值的增加,CVAE 方法的Recall@K值表现不如其他两个模型,对于该方面的问题是由于CVAE 方法在小规模数据集和高K值召回率上性能欠佳造成的,还是由于其他原因造成的,需要设置多个K值进一步实验,对比研究.除此之外,可以看出对于更加稀疏、规模更大的打分矩阵,CVAE的处理能力是更强的,比基线方法表现出了更为优越的推荐性能.
表3 MovieLens 1M
表4 MovieLens 100K
表5 MovieLens 20M
本文提出了一种具有聚类效果的变分自编码器,并将其运用到协同过滤推荐算法中.该方法既能学习到用户和项目间的隐因子,又可以在编码阶段完成对项目特征的聚类.该模型还引入了正则化系数,通过对其在0-1 之间的研究,发现了拟合效果更好的参数值.最后,以多项式分布对缺失值进行了预测.该方法在3 个规模不同的数据集上进行测试,展现了其良好的推荐性能.
未来还可以使用自然语言处理技术处理文本信息,将电影标签信息和用户评语融入到该算法中,用混合模型提高推荐系统的性能.