随着信息技术和互联网技术的飞速发展, 数据规模急剧增加, 信息过载严重, 推荐系统是解决问题重要技术手段[1,2]. 当前, 在各大电商平台中推荐系统中推荐算法的好坏对电子商务发展有着十分深远的影响. 个性化推荐是根据用户的需求, 从海量信息中挖掘出用户感兴趣的商品或服务, 并按照评分预测结果进行个性化展示. 推荐算法是个性化推荐的核心, 直接决定了推荐系统的推荐性能, 成为当前研究的热点问题[3,4].
协同过滤是目前个性化推荐系统普遍采用的技术, 其基本思想是利用过去具有相同兴趣的用户会在未来选择相似的商品. 典型的协同过滤类算法是基于矩阵分解的协同过滤推荐模型, 该模型首先分别表征用户和商品特征, 然后借助用户和商品特征向量的点积预测评分矩阵, 具有较好的推荐性能, 但评分数据稀疏性问题一直制约传统协同过滤的瓶颈[5]. 深度学习技术近年来被用于解决个性化商品推荐问题, 基于深度学习的混合推荐模型被相继提出, 例如DeepCoNN[6]、DLALSTM[7]、NARRE[8]等. 这些模型均是首先利用深度学习技术将用户对商品的评论数据变换到隐空间, 得出评分矩阵后再利用传统推荐模型完成个性化推荐, 但静态词向量编码影响了评分矩阵估计性能, 降低了推荐系统的准确性.
本文提出了一种基于深度神经网络和动态协同滤波的混合个性化商品推荐模型. 文章后续章节安排如下: 第1节总体介绍了文中混合个性化推荐模型架构, 第2节给出了基于深度学习的用户与商品隐含特征提取方法, 第3节构建了基于动态协同过滤的商品推荐模型, 第4节通过实验验证了推荐模型的参数设置和推荐性能, 最后是总结.
1 本文推荐模型目前协同过滤的商品推荐算法的关键是对商品评分的预测, 主要存在以下3个方面问题. 首先, 评分矩阵稀疏性问题. 评论数据稀疏性是影响个性化商品推荐系统最终评分预测准确性的关键因素, 这是由于平台中的商品数量远远大于单个用户的评论数量, 导致评论数据呈现出十分明显的稀疏性, 进而影响用户与商品、用户与用户之间的关系量不足, 降低商品评分预测结果的准确性. 其次, 冷启动问题. 引发推荐系统冷启动主要有两个原因, 即新用户和新商品. 在商品推荐平台中, 每天都有新用户注册, 同样也有新商品上架. 系统无法新商品或新用户的兴趣程度. 最后, 信息过期问题. 随着时间的推移, 用户的兴趣偏好或者商品的受欢迎程度均会出现变化, 而传统推荐算法没有考虑这种变化带来的影响.
针对上述问题, 本文提出了基于卷积神经网络和动态协同过滤的个性化商品推荐模型, 模型架构如图1所示.
首先将用户评论和商品评论文本信息用BERT模型和双向GRU进行处理, 利用并行卷积神经网络分别提取用户和商品的隐含特征向量; 然后, 引入用户对商品的评分行为, 采用TimeSVD++算法实现最终的商品评分预测. 该模型通过卷积神经网络在捕获用户和商品的隐含特征向量, 以降低用户对商品评分矩阵预测过程中存在的数据稀疏性和冷启动问题; 在协同过滤过程中融入时间序列, 降低商品推荐过程中信息过程带来的影响.
2 基于深度学习的用户与商品隐含特征提取 2.1 评论文本处理词袋模型是典型的词分法评论文本处理模型, 但该模型对文本中的词语顺序不敏感, 经常将意思完全相反的文本用相同的词向量表示[9]. 并且评论文本的噪声大、网络用语多也严重影响了词分法的文本处理性能. 为此, 文中采用双向GRU的文本处理模型[10], 如图2所示. 由于用户评论和商品评论是具有相似结构的两个平行模型, 因此只介绍商品评论文本的处理过程.
令I表示某商品的评论集:
$I = \left\{ {{R_{i1}},{R_{i2}}, \cdots ,{R_{id}}} \right\}$ | (1) |
其中,
$c = \left\{ {{O_{i1}},{O_{i2}}, \cdots ,{O_{id}}} \right\}$ | (2) |
在BERT映射过程中, 如果商品评论个数大于d, 则只映射该商品的前d条评论; 如果商品评论个数小于d, 则通过填充零向量使映射后向量长度等于d.
考虑到评论之间的内在联系, 采用双向GRU对BERT映射后的向量记性编码. 编码过程包括前向和后续两部分, 其中前向按照正序处理(
${h_i} = {h_{fi}} \oplus {h_{bi}}$ | (3) |
经过双向GRU编码后的特征向量可以表示为:
${H_0} = \left\{ {{h_1},{h_2}, \cdots ,{h_d}} \right\}$ | (4) |
已知每一条商品评论的内容均具有各自特征, 即均隐含了对商品的不同偏好的贡献, 因此采用自注意力机制对特征向量进行信息汇总, 汇总后得出的注意力向量可以表示为:
$a = {{softmax}}\left( {{\omega _1} \times \tanh \left( {{\omega _2} \times H_0^{\rm{T}}} \right)} \right)$ | (5) |
其中,
${I_{\rm text}} = W' \times a{H_0} + b'$ | (6) |
其中,
按照上一节文本处理方式分别获得用户和商品的偏好表达式后, 本节首先基于卷积神经网络提取用户和商品的深层次特征, 并利用共享层将其映射到相同的特征空间后进行评分矩阵预测.
将最终隐含特征向量输入到卷积神经网络以提取其深层次特征, 假设卷积神经网络的卷积层的神经元个数为m, 第j个神经元的卷积核为
${\kappa _j} = G\left( {{I_{\rm text}} * {K_j} + {b_j}} \right)$ | (7) |
其中,
$G(x) = \max \left\{ {0,x} \right\}$ | (8) |
ReLU能有效避免训练过程中出现梯度消失和梯度爆炸现象, 并且能够显著提升随机梯度下降算法的收敛速度, 降低模型训练时间[11].
接下来, 对卷积运算后的特征向量进行池化操作, 采用最大池化法提取特征向量中的最大值作为特定卷积内核的特征. 经过最大池化操作后, 卷积层的输出结果被转化为长度固定的向量, 池化操作可以表示为:
${R_i} = \max \left\{ {{\kappa _1},{\kappa _2}, \cdots ,{\kappa _{m - d + 1}}} \right\}$ | (9) |
根据上述卷积操作与池化操作过程可知, 卷积层将输出的特征向量经过最大池化操作后, 文本信息中特征最强的信息被筛选出来, 而特征较弱的信息在池化操作过中被滤除. 为了保证文本信息的完整性, 文中采用多个并行卷积神经网络来获得文本信息的各种特征, 这是因为多个并行的卷积层能够提取出不同的局部信息, 并行卷积层的输出特征集合可以表示为:
$R = \left\{ {{R_1},{R_2}, \cdots ,{R_M}} \right\}$ | (10) |
其中, M表示并行卷积层中卷积核的个数.
池化层的输出被导入全连接层, 令W表示全连接层的权值矩阵, 则全连接层的输出可以表示为:
${X_I} = f(W \times R + b)$ | (11) |
其中,
虽然深层特征
动态协同过滤算法是在SVD++算法的基础上, 增加了时间序列项, 因此被称为TimeSVD++算法[12]. TimeSVD++算法是由简单的因子分解模型演化而来的, 假设已经获得用户对商品的评分预测矩阵
通过卷积神经网络处理评论文本信息, 得出的用户和商品的深层特征向量分别为
${\hat r_{ui}} = {X_I}{X_U}$ | (12) |
$\min\; F = \sum\limits_{{r_{ui}}}^{} {{{\left( {{{\hat r}_{ui}} - {r_{ui}}} \right)}^2}} $ | (13) |
在评分预测过程中加入偏置项, 即构成SVD模型:
${\hat r_{ui}} = {X_I}{X_U} + u + {b_u} + {b_i}$ | (14) |
式中, u为训练过程中用户对商品评分预测值的均值,
SVD++算法在SVD模型的基础上, 通过隐式反馈信息加入了用户兴趣信息. 也就是说, 任意一个用户只要对某个商品进行过评论, 不管评论内容的评分预测值高低, 均表示用户对该商品感兴趣, 感兴趣的程度用隐因子来表示
${\hat r_{ui}} = \left[ {{X_U} + \frac{{\displaystyle\sum\limits_{j \in N(u)} {{Y_j}} }}{{\sqrt {\left| {N(u)} \right|} }}} \right]{X_I} + u + {b_u} + {b_i}$ | (15) |
式中,
TimeSVD++算法的基本思路是随着时间的推移, 用户对商品的喜好程度也是变化的, 即式(15)中
${\hat r_{ui}} = \left[ {{X_U}(t) + \frac{{\displaystyle\sum\limits_{j \in N(u)} {{Y_j}} }}{{\sqrt {\left| {N(u)} \right|} }}} \right]{X_I} + u + {b_u}(t) + {b_i}(t)$ | (16) |
其中,
${b_i}(t) = {b_i} + {b_{i,Bin(t)}}$ | (17) |
${b_u}(t) = {b_u} + {\alpha _u} \cdot {\rm sign}(t - {t_u}) \cdot {\left| {t - {t_u}} \right|^\beta } + {b_{u.t}}$ | (18) |
式中,
TimeSVD++算法在获取评分预测值后, 通过式(19)最小化预测值与真实值之间的误差:
$\begin{split} \min\; F =& \sum\limits_{{r_{ui}}}^{} {{{\left( {{{\hat r}_{ui}} - {r_{ui}}} \right)}^2}} \\ &+\lambda \left[ {{{\left\| {{X_U}} \right\|}^2} + {{\left\| {{X_I}} \right\|}^2} + {{\left\| {{b_u}(t)} \right\|}^2} + {{\left\| {{b_i}(t)} \right\|}^2} + {{\left\| {{Y_j}} \right\|}^2}} \right] \\ \end{split} $ | (19) |
为了验证本文提出的深度神经网络和动态协同滤波(DEEP-TimeSVD++)的个性化商品推荐模型有效性, 使用亚马逊公共数据集中的子数据集Toys_and_Games和Instant_Video, 两个数据集中约有78.3%的商品评论数量少于20条, 67.1%的商品评论数量少于10条, 满足用户对商品评论稀疏性要求.
后续实验中采用均方误差(MSE)作为评价模型对商品评分预测准确性的指标, 该指标定义如下:
$MSE = \frac{1}{N}\sum\limits_{u,i}^{} {{{\left( {{{\hat r}_{ui}} - {r_{ui}}} \right)}^2}} $ | (20) |
式中, N表示实验过程中样本个数. 模型的MSE越小, 说明模型的商品评分预测性能越好.
文中实验环境的具体参数如表1所示.
4.2 文本处理性能实验
针对评论文本的评分预测问题, 文中提出采用BERT映射结合双向GRU(BERT-GRU)提出评论文本特征, 本节将其与不同文本处理模型进行对比测试, 包括预训练词向量结合CNN模型(Word-CNN)、预训练词向量结合CNN模型(Word-GRU)、BERT映射结合CNN模型(BERT-CNN). 4种文本处理模型的性能对比结果如表2所示.
根据4种模型的文本处理性能结果可知, 加入BERT映射的文本处理模型相比传统预训练词向量模型的文本处理性能得到了进一步提高, 这是因为传统词向量模型在多义词影响下不能准确给出同一词语在不同环境下的真实含义, 而采用BERT映射能够有效解决该问题, 提升对评论文本的语义理解能力. 对比BERT-CNN和BERT-GRU可知, 双向GRU模型比传统CNN模型的文本处理性能更佳, 这是因为某个商品的评论集处理本质上是一个序列处理问题, 而双向GRU中的RNN递归结构比CNN结构更适合于表征序列特征, 能够有效提取评论文本之间的联系, 提高文本处理性能.
4.3 模型参数选择实验
本节对模型涉及到的隐因子、时间段划分和学习率进行测试, 分析不同参数取值对实验结果的影响. 其中隐因子的测试范围为
图3为不同隐因子下本文提出的DEEP-TimeSVD++算法MSE指标的变化情况. 结果表明, 当隐因子取值为15时, DEEP-TimeSVD++算法对Toys_and_Games和Instant_Video的MSE分别为0.85和0.93, 均达到最小. 对比图3可知, 当隐因子取值为5、10和20时, DEEP-TimeSVD++算法的MSE变化并不是很大, 说明DEEP-TimeSVD++算法对隐因子设置敏感性低, 综合考虑推荐性能, 后续实验中将隐因子a设置为15.
图4为不同时间段划分的DEEP-TimeSVD++算法MSE指标的变化情况. 结果表明, Toys_and_Games和Instant_Video数据集在
4.4 评分预测效果对比实验
本节仍然采用亚马逊公共数据集中的Toys_and_Games和Instant_Video子集对评分预测推荐的准确性进行评价. 首先采用文中提出的BERT-GRU评分预测模型处理评论文本, 然后根据评分矩阵预测结果进行个性化商品推荐, 分别采用因子分解机 (FM) 、SVD和SVD++模型进行对比测试. 此外, 对比方法还包括文献[13]提出的融合了边缘降噪自编码器和FM模型 (mSDA-FM) 的商品推荐算法. 推荐评价指标除了采用MSE以外, 还采用平均绝对误差 (MAE) , 定义如下:
$MAE = \frac{1}{N}\sum\limits_{u,i}^{} {\left( {{{\hat r}_{ui}} - {r_{ui}}} \right)} $ | (21) |
分别采用本文提出的DEEP-TimeSVD++算法与各对比算法处理Toys_and_Games和Instant_Video, 结果如图5和图6所示.
实验结果表明, 本文提出的DEEP-TimeSVD++算法在MSE和MAE两个性能指标上均优于对比方法. 由图5可知, 在MSE指标上, DEEP-TimeSVD++算法对Toys_and_Games和Instant_Video相比性能较好的mSDA-MF分别提高了1.4%和3.8%. 由图6可知, DEEP-TimeSVD++算法对Toys_and_Games和Instant_Video相比性能较好的SVD++算法在MAE指标上分别提高了2.5%和2.2%. 上述实验结果证实了DEEP-TimeSVD++算法在商品推荐中具有更高的准确性.
5 结论
提出了一种基于深度神经网络和动态协同滤波的个性化商品推荐模型, 该模型利用BERT模型和双向GRU替代传统词向量文本处理方式, 能够有效降低数据稀疏性影响, 实现深层隐含特征提取; 采用耦合CNN网络预测评分矩阵, 并基于融合时间序列项动态协同滤波实现商品评分预测. 实验结果验证了该模型降低了数据稀疏性和冷启动问题的影响, 考虑了用户兴趣随时间推移出现的变化, 在推荐准确率上具有明显优势.
[1] |
Subramaniyaswamy V, Manogaran U, Logesh R, et al. An ontology-driven personalized food recommendation in IoT-based healthcare system. The Journal of Supercomputing, 2019, 75(6): 3184-3216. DOI:10.1007/s11227-018-2331-8 |
[2] |
汤伟韬, 余敦辉, 魏世伟. 融合知识图谱与用户评论的商品推荐算法. 计算机工程, 2020, 46(8): 93-100. |
[3] |
翁小兰, 王志坚. 协同过滤推荐算法研究进展. 计算机工程与应用, 2018, 54(1): 25-31. DOI:10.3778/j.issn.1002-8331.1710-0081 |
[4] |
成保梅. 基于协同过滤的电子商务个性化推荐算法研究. 现代电子技术, 2019, 42(20): 37-39, 44. |
[5] |
冯兴杰, 曾云泽. 基于评分矩阵与评论文本的深度推荐模型. 计算机学报, 2020, 43(5): 884-900. DOI:10.11897/SP.J.1016.2020.00884 |
[6] |
黄文明, 卫万成, 张健, 等. 基于注意力机制与评论文本深度模型的推荐方法. 计算机工程, 2019, 45(9): 176-182. |
[7] |
刘慧婷, 纪强, 刘慧敏, 等. 基于双层注意力机制的联合深度推荐模型. 自然科学版, 2020, 48(6): 97-105. |
[8] |
郭望, 胡文心, 吴雯, 等. 多层次场景感知评分预测研究. 计算机应用与软件, 2019, 36(8): 145-154. DOI:10.3969/j.issn.1000-386x.2019.08.026 |
[9] |
韩冬煦, 常宝宝. 中文分词模型的领域适应性方法. 计算机学报, 2015, 38(2): 272-281. |
[10] |
梁志剑, 谢红宇, 安卫钢. 基于BiGRU和贝叶斯分类器的文本分类. 计算机工程与设计, 2020, 41(2): 381-385. |
[11] |
梁斌, 刘全, 徐进, 等. 基于多注意力卷积神经网络的特定目标情感分析. 计算机研究与发展, 2017, 54(8): 1724-1735. DOI:10.7544/issn1000-1239.2017.20170178 |
[12] |
薛峰, 刘凯, 王东, 等. 基于深度神经网络和加权隐反馈的个性化推荐. 模式识别与人工智能, 2020, 33(4): 295-302. |
[13] |
Wang H, Wang NY, Yeung DY. Collaborative deep learning for recommender systems. arXiv: 1409.2944, 2015.
|