计算机系统应用  2019, Vol. 28 Issue (9): 162-167   PDF    
基于聚类变分自编码器的协同过滤算法
韩浩先, 叶春明     
上海理工大学 管理学院, 上海 200093
摘要:针对协同过滤推荐模型的数据稀疏性问题, 提出一种带有聚类隐变量的变分自编码器, 用于处理用户的隐式反馈数据. 该深度生成模型既能学习到隐变量的特征分布, 同时又能完成对特征的聚类. 先以多项式似然来重构原始数据, 再用贝叶斯变分推断估计参数, 并且将正则化系数引入到模型当中, 通过调节其大小能够避免过度正则化, 使模型的拟合效果更好. 这种非线性的概率模型对缺失评分的预测有更好的建模能力. 在MovieLens的三个数据集上的实验结果表明, 该算法相比较于其他先进的基线有更优秀的推荐性能.
关键词: 推荐系统    协同过滤    深度生成模型    变分自编码器    聚类    
Clustering Variational Autoencoder for Collaborative Filtering
HAN Hao-Xian, YE Chun-Ming     
Business School, University of Shanghai for Science and Technology, Shanghai 200093, China
Foundation item: National Natural Science Foundation of China (71840003); Science and Technology Development Program of University of Shanghai for Science and Technology (2018KJFZ043)
Abstract: Aiming at the data sparsity problem of collaborative filtering model, a variational autoencoder with clustering latent variable is proposed to process the implicit feedback data. The deep generative model can not only learn the feature distribution of latent variable, but also complete the clustering of features. The original data is reconstructed by multinomial likelihood, the parameters are estimated by Bayesian inference, and the regularization parameter is introduced into the model. By adjusting its size, it can avoid excessive regularization and make the model fit better. A nonlinear probability model has a better ability to model the prediction of missing scores. Experimental results on three data sets of MovieLens show that the proposed algorithm has better recommended performance than the other advanced baselines.
Key words: recommendation system     collaborative filtering     deep generative model     Variational Auto Encoder (VAE)     clustering    

1 引言

推荐系统被广泛用于处理过载信息, 为用户甄选有价值的事物. 在一个推荐系统中, 企业记录下用户和内容之间的交互数据, 利用此数据, 向用户推荐他们可能感兴趣的内容. 随着网络数据的膨胀, 推荐系统如何使用户和内容之间进行更有效的交互是一个重要的课题.

协同过滤在推荐系统中的应用较为广泛. 并且由于隐因子模型的简单有效, 其在很大程度上仍然主导着协同过滤推荐算法的研究. 然而, 这些模型本质上是线性的, 在面对数据稀疏性的问题时, 其建模能力有限. 近年来, 以神经网络为核心的深度学习技术突飞猛进. 由于其高效的特征提取能力和非线性的学习方式, 越来越多的研究将深度学习应用于协同过滤方法中.

为解决线性模型性能差, 难以处理打分矩阵稀疏性的问题. 2007年, Salakhutdinov等人提出一种基于受限玻尔兹曼机的协同过滤推荐模型, 第一次将深度学习应用到推荐系统中[1]. Strub等人采用两个栈式降噪自编码器(SDAE), 分别学习用户和项目的隐因子, 然后通过隐因子模型对缺失评分进行预测[2]. Cheng等人使用了一种深广学习模型处理多源数据, 该方法同时具有高的记忆能力和泛化能力[3]. Liang等人首次将变分自编码器(VAE)应用到协同过滤模型中, 通过用户的隐式反馈数据预测缺失值数据[4]. He等人将多层感知机和矩阵分解结合起来, 提供了协同过滤模型的一种通用架构[5]. 在混合推荐模型方面, 霍欢等人将栈式降噪自编码器应用于基于内容的推荐中, 并和协同过滤算法相结合[6]. 李晓菊等人先用循环神经网络和变分自编码器处理商品的文本信息, 再与概率矩阵分解相结合预测商品的缺失评分[7].

在以上研究文献的基础上, 本文提出了基于聚类变分自编码器的协同过滤算法. 该方法利用神经网络拟合的概率图模型学习用户的隐式反馈数据, 与传统的聚类方式不同, 它允许我们同时无监督地完成聚类和生成, 并且, 生成器以多项式分布的方法来训练重构数据.

本文的主要贡献如下:

(1) 与以往对用户和内容的特征进行聚类的方法不同, 本文直接将隐变量特征设定为带有聚类效果的二元变量, 将聚类统一到算法的整体框架中;

(2) 在大规模数据上对四种模型进行了实验, 对其性能进行了评价和对比, 并且对正则项的超参数进行了研究, 避免了过度正则化.

2 变分自编码器

变分自编码器[8]是一种无监督的生成模型, 其结构如图1所示. 它将神经网络技术与概率图模型结合在一起, 能够拟合出原始数据所服从的分布, 同时能够生成出类似的数据. 对于每一个用户 $u$ , 它都对应着一组数据 ${x_u}$ , 同时对应着一个服从标准正态分布的 $K$ 维隐变量 ${z_u}$ . 对 ${z_u}$ 进行采样, 生成重构数据 $x_u^{'}$ , 其服从条件概率 ${p_\theta }({x_u}\left| {{z_u}} \right.)$ . 由于该条件概率无法直接求出, 可以用一个非线性函数 ${f_\theta }({z_u})$ 进行替代. 该函数是一个带有参数 $\theta $ 的多层神经网络, 其输出为使用softmax函数进行了归一化的概率矩阵 $\pi ({f_\theta }({z_u}))$ . 本文将 ${p_\theta }({x_u}\left| {{z_u}} \right.)$ 设定为多项式分布, 希望通过优化参数 $\theta $ 使该函数能够以尽可能大的概率生成类似 ${x_u}$ 的数据, 损失函数公式:

$\log {p_\theta }({x_u}\left| {{z_u}} \right.) = \sum\limits_i {{x_{ui}}\log {\pi _i}} ({f_\theta }({z_u}))$ (1)
图 1 变分自编码器结构图

生成模型的目标就是通过最大化条件概率 ${p_\theta }({x_u}\left| {{z_u}} \right.)$ 进而最大化重构数据的产生概率 $p({x_u})$ , 使重构数据尽量接近原始数据. 但仅靠随机采样一组隐变量是无法与其生成数据一一对应的, 还需要构建其与原始数据 ${x_u}$ 的概率关系来获得隐变量的分布参数. 所以, 我们用贝叶斯变分推断的方法构造一个高斯分布 ${q_\phi }({z_u}\left| {{x_u}} \right.)$ 来对隐变量进行采样. 采样的参数实质上是神经网络生成的均值 $(\mu )$ 和标准差 $(\sigma )$ 两个K维向量. 编码器产生的分布是否接近标准分布是使用KL散度来计算的. 所以用编码器构建的神经网络所计算出的条件概率 ${q_\phi }({z_u}\left| {{x_u}} \right.)$ 来近似真实后验概率 ${p_\theta }({z_u}\left| {{x_u}} \right.)$ , 两者之间的相似度:

$\begin{split}&KL({q_\phi }({z_u}\left| {{x_u}} \right.)\left\| {{p_\theta }({z_u}\left| {{x_u}} \right.)} \right.) = \\ &\quad{E_{{q_\phi }({z_u}\left| {{x_u}} \right.)}}[\log {q_\phi }({z_u}\left| {{x_u}} \right.) - \log {p_\theta }({z_u}\left| {{x_u}} \right.)]\end{split}$ (2)

由于KL散度非负, 可以将式(2)变化, 得到:

$\log {p_\theta }({x_u}) \ge L({x_u};\theta ,\phi )$ (3)

其中,

$\begin{split}L({x_u};\theta ,\phi ) =& {E_{{q_\phi }({z_u}\left| {{x_u}} \right.)}}[\log {p_\theta }({x_u}\left| {{z_u}} \right.)] \\ &-KL({q_\phi }({z_u}\left| {{x_u}} \right.)\left\| {{p_\theta }({z_u})} \right.) \end{split}$ (4)

式(4)为变分自编码器的变分下界, 在最大化变分下界时, $\log {p_\theta }({x_u})$ 也在增加. 因此模型的优化目标可以转化为最大化式(4).

但是, 均值与方差都是用神经网络算出来的, 然后再对其进行随机采样, 由于随机采样不是一个连续过程, 无法求导, 但采样的结果可以求导, 以此可以实现反向传播以优化网络参数. 因此, 我们用一个随机变量 $\varepsilon $ 对隐变量进行重参数化, 可得:

$z = \mu + \varepsilon *\sigma ,\varepsilon \sim N(0,I)$ (5)
3 推荐算法 3.1 构建点击矩阵

本文用元素 $i \in \left\{ {1,\cdots,I} \right\}$ 索引每个内容, 将每个用户 $u$ 的数据设为向量 ${x_u} = {[{x_{u1}},\cdots,{x_{uI}}]^{\rm{T}}}$ , 其中, ${x_{ui}}$ 代表用户 $u$ 对内容 $i$ 的打分值. 因为实验所用数据为MovieLens 数据集, 所以打分值大小为1到5. 但为了提高推荐的预测准确率, 本文将 ${x_u}$ 转换为隐式反馈数据, 先筛选出观看数超过五部电影的用户再保留评分大于等于4的电影, 将这些电影的打分值转化为1, 表示用户所点击过的喜爱的项目, 最后用0填充缺失值.

3.2 构建CVAE算法

本文将隐变量设置为二元变量 $(z,y)$ , 其中 $z$ 为连续变量, 代表着对交互特征进行编码的编码向量, 而 $y$ 为离散变量, 代表着聚类类别, 可以在隐变量计算阶段完成对特征的聚类[9]. 因离散变量 $y$ 是在连续变量 $z$ 的基础上计算而得, 我们假设:

${q_\phi }({z_u},{y_u}\left| {{x_u}} \right.) = {q_\phi }({y_u}\left| {{z_u}} \right.){q_\phi }({z_u}\left| {{x_u}} \right.)$ (6)
${p_\theta }({x_u}\left| {{z_u},{y_u}} \right.) = {p_\theta }({x_u}\left| {{z_u}} \right.)$ (7)

于是, 有:

$\begin{split}&KL({q_\phi }({z_u},{y_u}\left| {{x_u}} \right.)\left\| {{p_\theta }({z_u},{y_u}\left| {{x_u}} \right.)} \right.) = \\ &\sum\limits_y {\iint {{q_\phi }({y_u}\left| {{z_u}} \right.){q_\phi }({z_u}\left| {{x_u}} \right.)\ln }} \frac{{{q_\phi }({y_u}\left| {{z_u}} \right.){q_\phi }({z_u}\left| {{x_u}} \right.)}}{{{p_\theta }({x_u}\left| {{z_u}} \right.){p_\theta }({z_u}\left| {{y_u}} \right.)}}dzdx\end{split}$ (8)

由第1节可知, ${z_u}$ 是服从标准正态分布的, 所以 ${p_\theta }({z_u}\left| {{y_u}} \right.)$ 是服从均值为 ${\mu _y}$ , 方差为1的正态分布, ${\mu _y}$ 为解码网络参数之一; ${p_\theta }(y)$ 为均匀分布即各类别的电影数量大致相同; ${q_\phi }({y_u}\left| {{z_u}} \right.)$ 是对隐变量 ${z_u}$ 的分类器, 可以通过softmax网络进行拟合. 因此, 可以得到:

$\begin{split}&L({x_u};\theta ,\phi ) = {E_{{q_\phi }({z_u}\left| {{x_u}} \right.)}}[\log {p_\theta }({x_u}\left| {{z_u}} \right.)] \\ &-\sum\limits_y {{q_\phi }({y_u}\left| {{z_u}} \right.)\log \frac{{{q_\phi }({z_u}\left| {{x_u}} \right.)}}{{{p_\theta }({z_u}\left| {{y_u}} \right.)}}} - KL({q_\phi }({y_u}\left| {{z_u}} \right.)\left\| {{p_\theta }({y_u})} \right.)\end{split}$ (9)

模型优化目标为最大化式(9). 神经网络的激活函数均为tanh, 而最后一层的Softmax分类网络的输出 $\pi ({f_\theta }({z_u}))$ 为模型的归一化概率, 其参与到服从多项式分布的重构误差中进行网络优化, 以使更多的概率分配给更有可能被观看的电影项目.

3.3 引入正则化系数

式(9)中的第二和第三项可看作是重构误差项的正则化表达式, 以避免其过拟合. 同时, 为了权衡拟合效果, 本文引入了参数 $\beta $ 来控制正则化的强度[10], 再将优化目标转换为最小化损失函数:

$ \begin{split}L({x_u};\theta ,\phi ) =& {\rm{ - }}{E_{{q_\phi }({z_u}\left| {{x_u}} \right.)}}[\log {p_\theta }({x_u}\left| {{z_u}} \right.)]\\ &+\beta \sum\limits_y {{q_\phi }({y_u}\left| {{z_u}} \right.)\log \frac{{{q_\phi }({z_u}\left| {{x_u}} \right.)}}{{{p_\theta }({z_u}\left| {{y_u}} \right.)}}} \\ &+\beta KL({q_\phi }({y_u}\left| {{z_u}} \right.)\left\| {{p_\theta }({y_u})} \right.)\end{split}$ (10)

如果 $\;\beta < {\rm{1}}$ , 那么会削弱正则项的影响, 也就是避免了过度正则化. 从模型角度来看, 该方法对于第二项避免了过度的聚类效果, 同时, 对于第三项避免了聚类类别的分布过度均衡, 这符合推荐内容多类别多标签、无法完全归纳到单一类的实际情况, 在实验中也展现了正则项参数的良好效果.

3.4 SDG训练与预测

CAVE的随机梯度下降算法(SDG)以一个训练样本 ${x_u}$ 和其重构数据 $x_u^{'}$ 计算梯度 ${\nabla _\theta }L$ ${\nabla _\phi }L$ , 再对批量数据的梯度求均值, 利用该值更新网络的参数:

$\theta {\rm{ = }}\theta {\rm{ - }}\alpha \frac{{\displaystyle \sum {{\nabla _\theta }L} }}{n}$ (11)
$\phi {\rm{ = }}\phi {\rm{ - }}\alpha \frac{{\displaystyle \sum {{\nabla _\phi }L} }}{n}$ (12)

对于一个用户的历史数据 ${x_u}$ , 通过训练好的模型, 可以利用预测出的未归一化的多项式分布概率 ${f_\theta }({z_u})$ 对所有的推荐项目进行排序.

4 实验研究 4.1 数据集及实验环境

本文实验所使用的数据为MovieLens 100k、MovieLens 1M和MovieLens 20M三个规模不同的公开数据集. 我们只保留至少观看过五部电影的用户, 最终输入模型的特征数据为用户的隐式反馈数据. 数据集的详细内容如表1所示.

表 1 数据集

本文实验所用语言为python3.5, 深度学习框架为tensorflow 1.9+keras 2.2, 操作系统为Windows10, 处理器为Intel(R) Core(TM) i7-7700 CPU @3.6 GHz, 内存为8 GB.

4.2 评价方法

本文使用两个top-K排序的指标作为实验结果的评价方法, 分别是召回率 $\operatorname{Re} call@K$ 和归一化折扣累积增益 $NDCG@K$ . 同时, 定义 $w(k)$ 为排名 $k$ 的项目, $h[ \cdot ]$ 为等级关联性函数, 如果真正打过分的项目在预测集中则该函数值为1, 否则为0, ${I_u}$ 为测试集用户 $u$ 评过分的项目集合. 两者的定义分别如下:

$\operatorname{Re} call@K = \frac{{\displaystyle \sum\nolimits_{k = 1}^K {h[w(k) \in {I_u}]} }}{{\min (K,\left| {{I_u}} \right|)}}$ (13)
$NDCG@K = {Z_K}\sum\limits_{k = 1}^K {\frac{{{2^{h[w(k) \in {I_u}]}} - 1}}{{\log (k + 1)}}} $ (14)

其中, ${Z_K}$ 是归一化系数, 表示 $h[w(k) \in {I_u}] = 1$ 都成立的理想情况下, ${Z_K}$ 其后的累加项值的倒数. 因为都使用了归一化方法, 所以两指标的数值都在0–1之内.

4.3 实验参数设置与基线 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为项目个数.

4.4 实验结果与分析

为了观察β值对算法评价结果的影响, 本文将其从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

5 结束语

本文提出了一种具有聚类效果的变分自编码器, 并将其运用到协同过滤推荐算法中. 该方法既能学习到用户和项目间的隐因子, 又可以在编码阶段完成对项目特征的聚类. 该模型还引入了正则化系数, 通过对其在0–1之间的研究, 发现了拟合效果更好的参数值. 最后, 以多项式分布对缺失值进行了预测. 该方法在3个规模不同的数据集上进行测试, 展现了其良好的推荐性能.

未来还可以使用自然语言处理技术处理文本信息, 将电影标签信息和用户评语融入到该算法中, 用混合模型提高推荐系统的性能.

参考文献
[1]
Salakhutdinov R, Mnih A, Hinton G. Restricted Boltzmann machines for collaborative filtering. Proceedings of the 24th International Conference on Machine Learning. Corvalis, OR, USA. 2007. 791-798.
[2]
Strub F, Mary J. Collaborative filtering with stacked denoising autoencoders and sparse inputs. Proceedings of 2015 NIPS Workshop on Machine Learning for eCommerce. Montreal, Canada. 2015.
[3]
Cheng HT, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems. Proceedings of the 1st Workshop on Deep Learning for Recommender Systems. Boston, MA, USA. 2016. 7-10.
[4]
Liang DW, Krishnan RG, Hoffman MD, et al. Variational autoencoders for collaborative filtering. arXiv: 1802. 05814, 2018.
[5]
He XN, Liao LZ, Zhang HW, et al. Neural collaborative filtering. Proceedings of the 26th International Conference on World Wide Web. Perth, Australia. 2017. 173-182.
[6]
霍欢, 郑德原, 高丽萍, 等. 栈式降噪自编码器的标签协同过滤推荐算法. 小型微型计算机系统, 2018, 39(1): 7-11. DOI:10.3969/j.issn.1000-1220.2018.01.003
[7]
李晓菊, 顾君忠, 程洁. 基于变分循环自动编码器的协同推荐方法. 计算机应用与软件, 2018, 35(9): 258-263, 280. DOI:10.3969/j.issn.1000-386x.2018.09.046
[8]
Kingma DP, Welling M. Auto-encoding variational bayes. arXiv: 1312. 6114, 2013.
[9]
苏剑林. 变分自编码器(四): 一步到位的聚类方案. https://spaces.ac.cn/archives/5887, [2018-09-17].
[10]
Higgins I, Matthey L, Pal A, et al. β-VAE: Learning basic visual concepts with a constrained variational framework. Proceedings of 2017 International Conference on Learning Representations. Toulon, France. 2017. 1–13.
[11]
Hu YF, Koren Y, Volinsky C. Collaborative filtering for implicit feedback datasets. Proceedings of the 20088th IEEE International Conference on Data Mining. Pisa, Italy. 2009. 263-272.
[12]
Ning X, Karypis G. SLIM: Sparse linear methods for top-N recommender systems. Proceedings of the 2011 IEEE 11th International Conference on Data Mining. Vancouver, Canada. 2011. 497-506.
[13]
Wu Y, Dubois C, Zheng AX, et al. Collaborative denoising auto-encoders for top-N recommender systems. Proceedings of the 9th ACM International Conference on Web Search and Data Mining. San Francisco, CA, USA. 2016. 153-162.
[14]
Sedhain S, Menon AK, Sanner S, et al. AutoRec: Autoencoders meet collaborative filtering. Proceedings of the 24th International Conference on World Wide Web. Florence, Italy. 2015. 111-112.