推荐系统被广泛用于处理过载信息, 为用户甄选有价值的事物. 在一个推荐系统中, 企业记录下用户和内容之间的交互数据, 利用此数据, 向用户推荐他们可能感兴趣的内容. 随着网络数据的膨胀, 推荐系统如何使用户和内容之间进行更有效的交互是一个重要的课题.
协同过滤在推荐系统中的应用较为广泛. 并且由于隐因子模型的简单有效, 其在很大程度上仍然主导着协同过滤推荐算法的研究. 然而, 这些模型本质上是线性的, 在面对数据稀疏性的问题时, 其建模能力有限. 近年来, 以神经网络为核心的深度学习技术突飞猛进. 由于其高效的特征提取能力和非线性的学习方式, 越来越多的研究将深度学习应用于协同过滤方法中.
为解决线性模型性能差, 难以处理打分矩阵稀疏性的问题. 2007年, Salakhutdinov等人提出一种基于受限玻尔兹曼机的协同过滤推荐模型, 第一次将深度学习应用到推荐系统中[1]. Strub等人采用两个栈式降噪自编码器(SDAE), 分别学习用户和项目的隐因子, 然后通过隐因子模型对缺失评分进行预测[2]. Cheng等人使用了一种深广学习模型处理多源数据, 该方法同时具有高的记忆能力和泛化能力[3]. Liang等人首次将变分自编码器(VAE)应用到协同过滤模型中, 通过用户的隐式反馈数据预测缺失值数据[4]. He等人将多层感知机和矩阵分解结合起来, 提供了协同过滤模型的一种通用架构[5]. 在混合推荐模型方面, 霍欢等人将栈式降噪自编码器应用于基于内容的推荐中, 并和协同过滤算法相结合[6]. 李晓菊等人先用循环神经网络和变分自编码器处理商品的文本信息, 再与概率矩阵分解相结合预测商品的缺失评分[7].
在以上研究文献的基础上, 本文提出了基于聚类变分自编码器的协同过滤算法. 该方法利用神经网络拟合的概率图模型学习用户的隐式反馈数据, 与传统的聚类方式不同, 它允许我们同时无监督地完成聚类和生成, 并且, 生成器以多项式分布的方法来训练重构数据.
本文的主要贡献如下:
(1) 与以往对用户和内容的特征进行聚类的方法不同, 本文直接将隐变量特征设定为带有聚类效果的二元变量, 将聚类统一到算法的整体框架中;
(2) 在大规模数据上对四种模型进行了实验, 对其性能进行了评价和对比, 并且对正则项的超参数进行了研究, 避免了过度正则化.
2 变分自编码器变分自编码器[8]是一种无监督的生成模型, 其结构如图1所示. 它将神经网络技术与概率图模型结合在一起, 能够拟合出原始数据所服从的分布, 同时能够生成出类似的数据. 对于每一个用户
$\log {p_\theta }({x_u}\left| {{z_u}} \right.) = \sum\limits_i {{x_{ui}}\log {\pi _i}} ({f_\theta }({z_u}))$ | (1) |
生成模型的目标就是通过最大化条件概率
$\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)为变分自编码器的变分下界, 在最大化变分下界时,
但是, 均值与方差都是用神经网络算出来的, 然后再对其进行随机采样, 由于随机采样不是一个连续过程, 无法求导, 但采样的结果可以求导, 以此可以实现反向传播以优化网络参数. 因此, 我们用一个随机变量
$z = \mu + \varepsilon *\sigma ,\varepsilon \sim N(0,I)$ | (5) |
本文用元素
本文将隐变量设置为二元变量
${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节可知,
$\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分类网络的输出
式(9)中的第二和第三项可看作是重构误差项的正则化表达式, 以避免其过拟合. 同时, 为了权衡拟合效果, 本文引入了参数
$ \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) |
如果
CAVE的随机梯度下降算法(SDG)以一个训练样本
$\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) |
对于一个用户的历史数据
本文实验所使用的数据为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.
4.2 评价方法本文使用两个top-K排序的指标作为实验结果的评价方法, 分别是召回率
$\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) |
其中,
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模型的隐变量
为了观察β值对算法评价结果的影响, 本文将其从0到1分成十份并使用MovieLens1M测试集数据进行计算, 发现CVAE协同过滤模型在3个指标上都随着β值的增加而先增后减, 门槛值均在0.4附近. 所以后续实验均将β值设置为0.4, 以此为最优的CVAE协同过滤模型. 如图2所示.
由于聚类的类别数会影响到算法的性能[14], 本文从0到50依次选值进行实验. 发现当类别数为20时, 该算法在3个指标上的表现均最佳, 所以以此值为最优的超参数. 并且该大小也符合电影分类的类别数. 如图3所示.
图4显示了在MovieLens1M验证集上的CVAE协同过滤模型的NDCG@100值的迭代过程. 随着模型迭代次数的增加, 评价指标依次逐渐上升, 直至稳定. 实验最优的迭代次数大概在60代–80代. 在之后MovieLens 100K和MovieLens 20M的实验中, 其走势与MovieLens1M的类似.
由表3、表4和表5所知, CVAE协同过滤模型在三个数据集上的八个评价结果上均优于基线. 但在MovieLens 100K数据集上的Recall@50指标表现最好的是SDAE模型, 并发现随着K值的增加, CVAE方法的Recall@K值表现不如其他两个模型, 对于该方面的问题是由于CVAE方法在小规模数据集和高K值召回率上性能欠佳造成的, 还是由于其他原因造成的, 需要设置多个K值进一步实验, 对比研究. 除此之外, 可以看出对于更加稀疏、规模更大的打分矩阵, CVAE的处理能力是更强的, 比基线方法表现出了更为优越的推荐性能.
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.
|