随着信息和互联网技术的迅速发展, 海量的网络信息资源使得用户难以在短时间内找到自己感兴趣的信息资源, 这造成了信息过载问题[1], 这种现象的出现严重影响了互联网的发展. 推荐系统通过分析用户的历史行为来获得用户的兴趣偏好, 从而进行定向的信息资源推荐[2,3], 减少用户因筛选信息而消耗的时间, 使得用户能够快速获取到于自己有用的信息资源的推荐. 但随着用户数和项目数的激增, 传统推荐算法面临着严重的数据稀疏问题. 这一问题使得传统推荐算法计算出的用户相似度不够准确, 推荐精度不高. 因此, 改进相似度计算方法、缓解数据稀疏性一直以来是推荐算法研究的重点[4-6].
王岩等将用户评分分值差异度和用户评分倾向相似性融入到传统的协同过滤算法中, 并用项目评分的标准差改进皮尔逊相似性, 综合用户兴趣和改进后的皮尔逊相似性得到更准确的用户相似度[7]. Chen等在余弦相似度和皮尔逊相似度的计算方法中引入平衡参数, 利用平衡参数解决不同用户间评级尺度不同的问题, 从而对这两种方法进行优化[8]. 随着深度学习的发展, 使用深度学习缓解推荐系统的数据稀疏性问题得到了广泛地研究[9]. 目前基于深度学习的推荐模型主要是结合神经网络和矩阵分解思想, 将用户和项目的独热编码(one-hot)作为模型的输入, 通过嵌入层将稀疏的输入向量映射为稠密向量, 然后利用深度神经网络结构去非线性地学习用户和项目潜向量之间的交互结果, 最后根据学习到的交互结果来生成推荐列表[10-12].
1 相关知识 1.1 基于用户的协同过滤推荐算法基于用户的协同过滤推荐算法是通过用户-项目评分矩阵, 计算出用户之间的评分相似度, 然后对评分相似度进行降序排序, 选出与目标用户相似度高的用户构成邻居用户集. 推荐时, 根据邻居用户计算预测评分, 并将预测评分高的项目推荐给目标用户[13]. 这种推荐方法源于生活中的经验假设: 若两个用户之间的兴趣爱好相似, 则他们很可能对同一项目有着相似的偏好程度[14].
(1)用户相似度计算
相似度的计算方法主要有余弦相似性、改进的余弦相似性以及皮尔逊相关系数等[15,16]. 余弦相似性是两个用户之间的评分向量的夹角余弦值, 余弦值越大, 相似度越高. 改进的余弦相似度考虑到不同用户的评分习惯对相似度计算准确性的影响, 在计算相似度时减去用户的平均评分. 皮尔逊相关系数在计算时要首先找出用户间的共同评分项目集, 然后基于该集合使用改进的余弦相似性进行用户相似度的计算, 计算公式如下:
$Sim(u, v) = \frac{{\displaystyle\sum\limits_{i \in {S_{uv}}} {({r_{ui}} - \overline {{r_u}} )({r_{vi}} - \overline {{r_v}} )} }}{{\sqrt {\displaystyle\sum\limits_{i \in {S_{uv}}} {{{({r_{ui}} - \overline {{r_u}} )}^2}} } \sqrt {\displaystyle\sum\limits_{i \in {S_{uv}}} {{{({r_{vi}} - \overline {{r_v}} )}^2}} } }}$ | (1) |
其中,
(2)评分预测
用户相似度计算完成后, 筛选出邻居用户集. 根据邻居用户对项目的评分和与目标用户的相似度来预测目标用户对项目的评分, 计算公式为:
${P_{ui}} = \overline {{r_u}} + \frac{{\displaystyle\sum\limits_{v \in NU(u)} {Sim(u, v)({r_{vi}} - \overline {{r_v}} )} }}{{\displaystyle\sum\limits_{v \in NU(u)} {Sim(u, v)} }}$ | (2) |
其中,
多层感知机(Multi-Layer Perceptron, MLP)指的是有多层隐藏层的神经网络. 相邻的神经网络层之间是全连接的. 单个神经元的计算是一个前向传播过程, 即通过一个线性函数关系和激活函数向前传播.
多交互神经网络通过构建并行的多层感知机来分别学习不同类型实体的隐特征表示. 考虑到隐藏层中每层网络的神经元数目和学习能力不同, 学习到的隐特征表示的维度和意义也不相同, 多交互神经网络充分利用每一层的隐表示结果, 对每层网络所学习到的不同类型实体的隐表示进行一次交互操作, 最后综合所有层的交互结果来获取模型最终的预测结果[17], 网络模型如图1所示.
2 融合用户偏好和多交互网络的协同过滤算法 2.1 用户-项目属性偏好相似度 2.1.1 挖掘用户-项目属性偏好信息表1显示出了项目的属性特征信息, 为便于后续计算, 做出如下定义:
对于流行度高的项目, 用户选择它更可能是出于从众心理而不是因为项目本身的属性. 因此我们引入惩罚因子
${I_{ua}} = \frac{1}{N}\sum\limits_{s \in S} {{s_a}{q_s}} $ | (3) |
${q_s} = \left\{ \begin{gathered} 1,{p_s} < \varphi \\ \gamma ,{p_s} \ge \varphi \\ \end{gathered} \right.,{s_a} = \left\{ \begin{gathered} 1, a \in {A_s} \\ 0, a \notin {A_s} \\ \end{gathered} \right.$ | (4) |
2.1.2 计算用户-项目属性偏好相似度
对挖掘出的用户-项目属性偏好信息进行降序排序, 得到用户的项目属性偏好排名, 然后使用基于集合(Set Based Measure, SBM)的方法计算用户间的项目属性偏好相似度.
SBM是通过计算在不同深度时的两个排序列表的交集大小来衡量排序列表之间的相似度. 假设用户
$u:[a, b, c, d, e], v:[b, a, c, d, e]$ |
依次计算它们在深度
$S\!BM(u, v) = \frac{1}{k}\sum\limits_{d = 1}^k {\frac{{\left| {{u_{1:d}} \cap {v_{1:d}}} \right|}}{d}} $ | (5) |
在推荐系统中, 我们一般只关注用户最喜爱的那部分项目属性, 并由此进行项目推荐. 因此, 我们希望在计算两个排序列表的相似度时, 能够关注top元素的相对位置权重. 在前面例子中, 项目属性数
2.2 改进用户相似度计算公式
协同过滤算法通过计算用户偏好进行项目推荐, 其中传统的用户协同过滤算法仅使用评分相似性来选择与目标用户具有相似偏好的邻居用户, 没有考虑从辅助信息中提取对提升推荐性能有用的信息, 数据稀疏性大, 推荐精度不高. 本文算法根据评分数据挖掘出用户的项目属性偏好信息, 然后使用SBM方法计算出用户-项目属性偏好相似度, 并用其改进用户相似度计算公式.
Jaccard系数是一种比较常用的用户相似性计算方法, 它使用用户的共同评分项目在所有评分项目中所占的比例来衡量用户之间的相似性:
$Jaccard(u, v) = \frac{{\left| {{I_u} \cap {I_v}} \right|}}{{\left| {{I_u} \cup {I_v}} \right|}}$ | (6) |
对于共同评分项目, 用户对其的评价可能截然相反的, 然而Jaccard系数在计算用户相似性时没有考虑用户评分差异对用户偏好的影响, 这会导致用户相似性计算不准确. 式(1)的皮尔逊相关系数可以衡量用户间的评分相似性, 但在数据稀疏, 用户之间共同评分项目少的情况下, 计算结果会不准确. 因此可以使用皮尔逊相关系数来修正Jaccard系数, 修正后的Jaccard系数如下:
$JAC(u, v) = sim(u, v) \times Jaccard(u, v)$ | (7) |
综合用户-项目属性偏好相似度和修正后的Jaccard系数,
$Sim(u, v) = \alpha \times S\!BM(u, v) + (1 - \alpha ) \times JAC(u, v)$ | (8) |
构建融合用户-项目属性偏好信息的多交互神经网络预测模型, 如图2所示. 模型由输入层、嵌入层、隐藏层和输出层组成. 输入层输入用户和项目的one-hot编码向量, 嵌入层包含用户-项目属性偏好向量(user attribute preference vector), 用户嵌入向量(user latent vector), 项目属性特征向量(item attribute feature vector), 项目嵌入向量(item latent vector).
模型采用多交互的网络结构, 通过两个并行的多层隐藏层网络去分别学习用户和项目在不同维度空间中的隐特征表示, 隐藏层的神经元数目表示要学习的隐特征表示的维度大小. 此外, 该模型融合了用户-项目属性偏好信息, 一定程度上缓解了单一评分数据的数据稀疏问题. 将用户-项目属性偏好向量和用户嵌入向量拼接后通过多层隐藏层进行非线性交互提取用户在不同维度空间中的隐特征表示. 同样将项目属性特征向量和项目嵌入向量拼接后通过多层隐藏层来提取项目在不同维度空间中的隐特征表示. 隐藏层采用金字塔型的网络结构, 后一层网络的神经元数目为前一层网络神经元数目的一半, 选择tanh函数作为模型的激活函数.
用
${{{\textit{z}}}} = \left[ \begin{gathered} {{{U}}_i} \\ {{{U}}_h} \\ \end{gathered} \right]$ | (9) |
${{{{\textit{z}}}}_1} = {{\rm{\phi}} _1}({{{\textit{z}}}}) = \sigma ({{{W}}_1}{{{\textit{z}}}} + {{{b}}_1})$ | (10) |
…
${{{{\textit{z}}}}_L} = {{\rm{\phi}} _L}({{{{\textit{z}}}}_{L - 1}}) = \sigma ({{{W}}_L}{{{{\textit{z}}}}_{L - 1}} + {{{b}}_L})$ | (11) |
同理, 对于项目属性特征向量和项目嵌入向量, 通过多层隐藏层网络得到项目的各层隐特征表示.
在基于深度学习的推荐模型中, MLP模型将用户和项目的one-hot编码向量通过嵌入层映射到新的维度空间中获得用户和项目的嵌入向量(隐特征表示), 然后将用户和项目的嵌入向量拼接后通过多层感知机得到模型的预测评分. 然而特征维度大小选取对于预测的准确性有着重要影响, 一般需要进行多次实验来确定合适的特征维度, 并且在不同的维度空间中用户和项目的隐特征表示的意义不同, 只使用单一维度空间中的隐特征表示进行预测限制了模型的推荐性能. 在本文所使用的多交互神经网络模型中, 模型通过两个并行的多层隐藏层网络来分别学习用户和项目在不同维度空间中的隐特征表示, 后一层网络在前一层网络提取的隐特征表示的基础上进一步提取更深层次的隐特征表示. 隐藏层中每层网络的神经元数目和学习能力不同, 学习到的用户和项目的隐特征表示的维度和意义也不同. 多交互神经网络综合每一层网络学习到的隐特征表示来提高模型的推荐性能, 对每层用户和项目的隐特征表示进行一次交互操作, 最后综合所有层的交互结果作为模型最终的预测结果.
我们使用3层感知机模型来获取每一层用户和项目的隐特征表示的交互结果, 计算公式如下:
${S_l} = {{\rm{\phi}} _3}\left( {{{\rm{\phi}} _2}\left( {{{\rm{\phi}} _1}\left( {\left[ \begin{gathered} {{{{\textit{z}}}}_l} \\ {{{x}}_l} \\ \end{gathered} \right]} \right)} \right)} \right)$ | (12) |
其中,
在输出层, 将隐藏层每层用户和项目的隐特征表示的交互结果拼接起来进行一次全连接操作得到模型最终的预测评分:
$P_{ui}' = {h^{\rm{T}}}\left[ \begin{gathered} {S_1} \\ {S_2} \\ \vdots \\ {S_L} \\ \end{gathered} \right]$ | (13) |
本文模型是用来进行评分预测任务的, 因此选择基于点的方式来构建损失函数, 使用均方误差作为模型要优化的损失函数:
$Loss = \sum\limits_{u, i} \left( {{{r_{ui}} - P_{ui}'} } \right){^2}$ | (14) |
对于评分预测系统, 我们首先使用改进后的用户相似度筛选出邻居用户集, 并根据评分预测公式计算出预测评分
${\hat r_{ui}} = \frac{{C_{Nu}^i}}{{C_{Nu}^i + \lambda {C_{Nu}}}}{P_{ui}} + \left( {1 - \frac{{C_{Nu}^i}}{{C_{Nu}^i + \lambda {C_{Nu}}}}} \right)P_{ui}'$ | (15) |
其中,
在对用户进行推荐时, 使用改进算法预测目标用户对项目的评分, 选择预测评分高的项目推荐给目标用户. 改进算法的推荐流程如图3所示.
3 实验评估 3.1 实验数据集及度量标准MovieLens数据集是推荐系统中常用的验证数据集, 该数据集有多种规格, 如: 100 k、1 M和10 M等. 本文实验使用100 k数据集, 它包含943位用户对1682部电影的10万条评分信息, 评分范围为1到5分.
平均绝对误差(MAE)和均方根误差(RMSE)是推荐算法中使用最为广泛的两种性能评价指标, 它们反映出预测评分的准确性, 计算公式如下:
$MAE = \frac{1}{N}\sum\limits_{i = 1}^N {\left| {{{\hat r}_i} - {r_i}} \right|} $ | (16) |
$RMSE = \sqrt {\frac{1}{N}\sum\limits_{i = 1}^N {{{({{\hat r}_i} - {r_i})}^2}} } $ | (17) |
F1-score是精确率(precision)和召回率(recall)的加权平均值, 计算公式为:
$F1 {\text{-} }score = \frac{{2 \times precision \times recall}}{{precision + recall}}$ | (18) |
Precision表示模型预测为正的样本中实际也为正的样本占被预测为正的样本的比例. Recall表示实际为正的样本中预测也为正的样本占实际为正的样本的比例. F1-score 是两者的综合, F1-score 越高, 说明模型越稳健.
3.2 实验结果与分析 3.2.1 推荐性能分析本文的相关参数设置: 流行度阈值
本文提出的综合预测模型记为NIAP-CF. 实验将测试集中实际评分高于4分的样本标记为正样本, 其余标记成负样本. 在推荐时, 由预测评分高于4分的样本产生推荐列表.
对于基于用户相似度的推荐模型, 将本文算法与皮尔逊相似性计算方法、Jaccard相似性计算方法以及文献[6]中相似度计算方法(UII-CF)进行MAE值、RMSE值以及F1-score的比较来验证本文推荐算法的推荐效果.
图4和图5分别显示了在MovieLens数据集中本文提出的算法NIAP-CF和其它3种算法在不同邻居用户数下的MAE和RMSE值对比情况. 从图中可以看出, 4种算法的MAE和RMSE值都随着邻居用户数的增加而逐渐减小, 并且在选取邻居用户数相同时, 本文算法的MAE和RMSE值小于其它3种算法, 预测精度最高. 此外, 本文算法综合了邻居集的预测评分和多交互神经网络模型的预测评分, 预测的精度较为稳定, 可以在邻居用户较少时获得较高的推荐精度.
图6显示了在MovieLens数据集中4种算法的F1-score值的对比结果. 由图可以看出, 在邻居用户数相同时, 本文算法的F1-score值最大, 模型的稳健度优于其它3种算法.
对于基于深度学习的推荐模型, 将本文提出的NIAP-CF模型与文献[10]中He等提出的GMF模型、MLP模型以及NeuCF模型进行对比实验来验证本文推荐算法的有效性.
表3显示了在MovieLens数据集中本文模型与GMF模型、MLP模型以及NeuCF模型的MAE值、RMSE值以及F1-score的对比情况. 从表中可以看出, 本文模型的MAE和RMSE值低于其它3种模型, 预测的精度最高, 并且本文模型的F1-score最高, 模型的稳健度优于其它3种模型.
3.2.2 参数分析
在用户相似度计算部分, 调节参数
在融合用户-项目属性偏好信息的多交互神经网 络模型中, 用于学习用户和项目隐特征表示的隐藏层层数是神经网络中的一个非常重要的参数. 我们通过实验研究隐藏层的网络层数对模型预测精度的影响. 实验结果如表4所示. 由实验结果可以看出: 一定数目的隐藏层层数能够改善模型的推荐性能. 但更深层次的网络结构会耗费大量的计算资源, 在实际中, 隐藏层层数的选择可以根据具体需求来确定.
4 总结与展望
传统的用户协同过滤算法仅通过用户间的评分相似性来预测评分, 没有考虑从外部辅助信息中提取出对推荐有用的信息, 数据稀疏性大, 推荐精度不高. 本文提出的NIAP-CF算法首先根据评分矩阵和项目属性特征矩阵挖掘出用户的项目属性偏好信息, 然后使用SBM方法计算用户间的项目属性偏好相似度, 并用其改进用户相似度计算公式. 在进行评分预测时, 建立融合用户-项目属性偏好信息的多交互神经网络预测模型, 引入动态权衡参数, 对由相似度计算出的预测评分和模型的预测评分进行动态加权, 从而获得最终的预测评分. 实验结果表明, 与传统的协同过滤算法相比, 本文提出的改进算法降低了评分预测的MAE和RMSE值, 提高了推荐精度.
[1] |
代宝续, 杨晓雪, 罗蕊. 社交媒体用户信息过载的影响因素及其后果. 现代情报, 2020, 40(1): 152-158. |
[2] |
周万珍, 曹迪, 许云峰, 等. 推荐系统研究综述. 河北科技大学学报, 2020, 41(1): 76-87. DOI:10.7535/hbkd.2020yx01009 |
[3] |
黄贤英, 龙姝言, 谢晋. 结合用户兴趣度聚类的协同过滤推荐算法. 计算机应用研究, 2019, 36(9): 2609-2612, 2617. |
[4] |
吕成戍. 基于用户项目属性偏好的协同过滤推荐算法. 计算机技术与发展, 2018, 28(4): 152-156, 160. DOI:10.3969/j.issn.1673-629X.2018.04.032 |
[5] |
Li R, Li MQ, Guo WQ. Research on collaborative filtering algorithm with improved similarity. Computer Science, 2016, 43(12): 206-208, 240. |
[6] |
Zheng J, Qian YR, Yang XY, et al. Collaborative filtering algorithm based on trust and item preference. Journal of Computer Applications, 2016, 36(10): 2784-2788, 2798. |
[7] |
王岩, 张杰, 许合利. 结合用户兴趣和改进的协同过滤推荐算法. 小型微型计算机系统, 2020, 41(8): 1665-1669. DOI:10.3969/j.issn.1000-1220.2020.08.016 |
[8] |
Chen H, Li ZK, Hu W. An improved collaborative recommendation algorithm based on optimized user similarity. The Journal of Supercomputing, 2016, 72(7): 2565-2578. DOI:10.1007/s11227-015-1518-5 |
[9] |
Xue HJ, Dai XY, Zhang JB, et al. Deep matrix factorization models for recommender systems. Proceedings of the 26th International Joint Conference on Artificial Intelligence. Melbourne, VIC, Australia. 2017. 3203–3209.
|
[10] |
He XN, Liao LZ, Zhang HW, et al. Neural collaborative filtering. Proceedings of the 26th International Conference on World Wide Web. Perth, WA, Australia. 2017. 173–182.
|
[11] |
He XN, Du XY, Wang X, et al. Outer product-based neural collaborative filtering. Proceedings of the 27th International Joint Conference on Artificial Intelligence. Stockholm, Sweden. 2018. 2227–2233.
|
[12] |
李博. 数据稀疏情况下的协同过滤推荐算法研究[硕士学位论文]. 北京: 北京邮电大学, 2019.
|
[13] |
王琰. 基于用户特征与时间权重的电影推荐算法研究[硕士学位论文]. 淮南: 安徽理工大学, 2018.
|
[14] |
Wang HX. An improved collaborative filtering recommendation algorithm. Proceedings of the IEEE 4th International Conference on Big Data Analytics. Suzhou, China. 2019. 431–435.
|
[15] |
Zhang J, Peng QK, Sun SQ, et al. Collaborative filtering recommendation algorithm based on user preference derived from item domain features. Physica A: Statistical Mechanics and its Applications, 2014, 396: 66-76. DOI:10.1016/j.physa.2013.11.013 |
[16] |
Zhang J, Lin YJ, Lin ML, et al. An effective collaborative filtering algorithm based on user preference clustering. Applied Intelligence, 2016, 45(2): 230-240. DOI:10.1007/s10489-015-0756-9 |
[17] |
李同欢. 基于深度学习的推荐模型研究[硕士学位论文]. 重庆: 西南大学, 2019.
|