BGCF背景简介
针对推荐系统中由于观察数据噪声或不足导致用户与物品的交互不确定性问题,华为诺亚方舟实验室和分布式与并行软件实验室MindSpore团队联合提出了一种基于贝叶斯的图神经网络协同过滤(Bayesian Graph Collaborative Filtering, BGCF)原创模型[1]。
在工业界应用市场游戏推荐场景,新用户Logloss(对数损失函数)提升了2.48%,老用户提升了1.71%,证明本模型能有效缓解交互稀疏和冷启动问题,模型论文已被KDD2020录用,代码已基于MindSpore1.0开源首发[2]。
推荐系统和不确定性
随着互联网和移动通信的迅速发展,在线消费(包括网上购物、点播视频、阅读书籍等)已经越来越普及。为了能够迎合不同用户的个性化偏好,在线应用利用推荐系统指导用户在庞大的候选集中找出自己感兴趣的物品已经十分常见。
推荐系统倾向于对拥有相似兴趣的用户推荐同样的物品,这就是协同过滤(collaborative filtering)的思想。
矩阵分解(matrix factorization)作为其中的经典方法在Netflix比赛中取得最佳效果。矩阵分解通过学习用户和物品向量从而重构用户物品历史交互。具体可以参考论文:Matrix Factorization Techniques for Recommender Systems[3]。
基于贝叶斯的图神经网络推荐方法
图神经网络
BGCF(Bayesian Graph Collaborative Filtering)是一种利用贝叶斯图神经网络解决推荐问题的方法。在图神经网络中,用户和物品的交互视为一种二部图,同时用户之间的相似性以及物品之间的共性可以显式地建模成用户-用户和物品-物品图。
图1:用户和物品交互图[9]
随着Graph Convolutional (Neural) Networks(GCNs)[4]的提出,它们的聚合方式使得每个节点能够从它的邻居中更好地学习节点表示。相关研究[5]表明,在推荐系统集成图表示能够很好地缓解数据稀疏性和冷启动问题并显著提升推荐的关联性。
贝叶斯方法
图 2:node-copying 示意图
具体的Node-copying细节参考这篇论文[7]。
模型结构
BGCF模型的训练过程如图3所示。
图 3:BGCF训练过程图
不同于原交互图上每条边都是真实的用户和物品交互记录,生成的采样图的边是“伪造”的。因此,借鉴graph attention network (GAT)[8]的自注意力策略,隐式地对于节点不同边赋予不同的权重。同时对原交互图和采样图使用平均聚合来学习节点表示。最终节点的表示是原图和采样图节点表示的结合。生成的用户和物品表示利用公式(4)从而实现对于推荐过程的建模。
基于MindSpore图引擎功能,实现BGCF异构图采样,分别获取用户u节点和物品i节点的邻居。代码如下:
u_neighs = train_graph.get_sampled_neighbors(node_list=u_group_nodes, neighbor_nums=[self.num_samples], neighbor_types=[1])
i_neighs = train_graph.get_sampled_neighbors(node_list=i_group_nodes, neighbor_nums=[self.num_samples], neighbor_types=[0])
GNN模型部分采用节点聚合,在MindSpore上实现均值和自注意力聚合方式。代码如下:
class AttenConv(nn.Cell):
……
def construct(self, self_feature, neigh_feature):
query = self.expanddims(self_feature, 1)
neigh_matrix = self.dropout(neigh_feature)
score = self.matmul_t(query, neigh_matrix)
score = self.softmax(score)
atten_agg = self.batch_matmul(score, neigh_matrix)
atten_agg = self.squeeze(atten_agg)
output = self.matmul(self.concat((atten_agg, self_feature)), self.out_weight)
return output
class MeanConv(nn.Cell):
……
def construct(self, self_feature, neigh_feature):
neigh_matrix = self.reduce_mean(neigh_feature, 1)
neigh_matrix = self.dropout(neigh_matrix)
output = self.concat((self_feature, neigh_matrix))
output = self.act(self.matmul(output, self.out_weight))
return output
使用MindSpore混合精度训练BGCF,保持了单精度训练的网络精度,同时利用半精度数据格式加速深度神经网络训练过程。
模型效果
我们在业界公开数据集和工业数据集上进行了一系列实验,从而验证BGCF在推荐召回、多样性、稀疏性和冷启动问题上优秀的效果。
总体性能比较
如表格1,在三个公开数据集上,BGCF模型在大多推荐指标上均超过了基于图的SOTA推荐模型。说明利用贝叶斯的方法建模交互中的不确定性能够显著提升推荐性能。
表格 1:BGCF推荐性能比较
准确率-多样性权衡
在准确率-多样性权衡实验中,如图4,BGCF相比于之前的SOTA图推荐模型NGCF有着显著提升,说明了BGCF模型推荐物品更加多样性。
图 4:准确性-多样性实验结果图
处理稀疏数据
如图5可见,当用户平均交互量低于40,BGCF模型相比于基准模型相对提升最多。这验证了模型在处理稀疏的用户和物品交互上的优越性能。
图 5:在不同用户群体中模型性能相对提升图
解决冷启动问题
我们在工业界应用市场推荐系统也验证了我们模型的有效性。如图6所示,工业界推荐系统通常包括三个模块:候选集选择,匹配,排序。
图 6:工业界应用市场推荐系统结构图
候选集选择模块用于从成千上万个item中为每个用户选出几百个item;接着匹配模块为每个item预测一个评分;最后排序模块结合匹配模块输出的评分以及其他的一些原则(多样性,商业)为每个用户生成一个排序列表。
我们将BGCF模型在候选集选择模块进行离线验证,和已有模型的对比结果表明,我们的模型取得了更优越的性能,相比于NGCF取得了2.17%的Logloss提升。对老用户和新用户的性能分析表明我们的模型在老用户上提升了1.71%,在新用户上提升了2.48%,进一步表明了我们的模型在缓解冷启动问题上的优越性。
模型代码已上线MindSpore ModelZoo,感兴趣的可自行体验,复制代码链接[2]到浏览器获取。
参考文献
[1] Sun J, Guo W, Zhang D, et al. A Framework for Recommending Accurate and Diverse Items Using Bayesian Graph Convolutional Neural Networks[C]//Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2020: 2030-2039.
[2] https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/gnn/bgcf
[3] Koren Y, Bell R, Volinsky C. Matrix factorization techniques for recommender systems[J]. Computer, 2009, 42(8): 30-37.
[4] Kipf T N, Welling M. Semi-supervised classification with graph convolutional networks[J]. arXiv preprint arXiv:1609.02907, 2016.
[5] Li F, Chen Z, Wang P, et al. Graph Intention Network for Click-through Rate Prediction in Sponsored Search[C]//Proceedings of the 42nd International ACM SIGIR Conference on Research and Development in Information Retrieval. 2019: 961-964.
[6] Rendle S, Freudenthaler C, Gantner Z, et al. BPR: Bayesian personalized ranking from implicit feedback[J]. arXiv preprint arXiv:1205.2618, 2012.
[7] Pal S, Regol F, Coates M. Bayesian graph convolutional neural networks using node copying[J]. arXiv preprint arXiv:1911.04965, 2019.
[8] Veličković P, Cucurull G, Casanova A, et al. Graph attention networks[J]. arXiv preprint arXiv:1710.10903, 2017.
[9] Wang X, He X, Wang M, et al. Neural graph collaborative filtering[C]//Proceedings of the 42nd international ACM SIGIR conference on Research and development in Information Retrieval. 2019: 165-174.