本篇属于MindSpore图神经网络模型系列,主要分享MindSpore原创图神经网络BGCF,十分欢迎各位一起探讨图神经网络算法的发展以及之后的应用场景。
背景
推荐系统中通常将用户和物品发生的交互作为正样本。尤其在隐式反馈的数据中,会将所有未观察到交互的物品作为负样本。这种做法会对于存在潜在偏好的物品(下次会购买的物品或者根本没有暴露在用户视野中的物品)进行错误的标签。针对推荐系统中的交互不确定性问题,华为MindSpore团队和诺亚方舟实验室提出了一种基于贝叶斯的图神经网络协同过滤模型[1] (Bayesian Graph Collaborative Filtering, BGCF)。BGCF在三个推荐benchmark上的效果均超过了SOTA图神经网络推荐模型。并且在华为应用市场游戏推荐场景下,相比于最佳基准模型,BGCF的新用户推荐和老用户推荐效果提升了2.48%和1.71%,充分验证了模型能有效缓解交互稀疏和新用户冷启动问题。论文已被KDD2020录用,代码已基于MindSpore开源发布,欢迎大家使用。
论文链接:
https://www.kdd.org/kdd2020/accepted-papers/view/a-framework-for-recommending-accurate-and-diverse-items-using-bayesian-grap
代码链接:
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/gnn/bgcf
推荐系统和不确定性
随着互联网和移动通信的迅速发展,在线消费(包括网上购物、点播视频、阅读书籍等)已经越来越普及。为了能够迎合不同用户的个性化偏好,在线应用利用推荐系统指导用户在庞大的候选集中找出自己感兴趣的物品已经十分常见。
基于贝叶斯的图神经网络推荐方法
BGCF全称Bayesian Graph Collaborative Filtering,是一种利用贝叶斯的图神经网络解决推荐问题的方法。在图神经网络中,用户和物品的交互视为一种二部图,同时用户之间的相似性以及物品之间的共性可以显示地建模成用户-用户和物品-物品图。
图1:用户和物品交互图[8]
随着Graph Convolutional (Neural) Networks (GCNs)[3]的提出,越来越多的GNN模型从邻居节点中提取信息并学习出更好的节点特征表示。相关研究[4]表明,在推荐系统集成图特征表示能够很好地缓解数据稀疏性和冷启动问题,并显著提升推荐的关联性。
贝叶斯方法
图 2:node-copying 示意图
如图2,用户A的点击记录是苹果和香蕉,用户B的点击记录是橘子、西瓜和苹果。node-copying方法将用户B的偏好复制给用户A,从而生成近似的新交互记录图,但同时与原观察图存在充分的多样性差异,使得模型能够更充分地学习。具体的Node-copying细节参考这篇论文[6]。
模型结构
BGCF模型的训练过程如图3所示。
图 3:BGCF训练过程图
不同于原交互图上每条边都是真实的用户-物品交互记录,生成的采样图的边是“伪造”的。因此,借鉴graph attention network (GAT)[7]的注意力策略,节点不同边赋予不同的权重。同时原交互图和采样图使用平均聚合来学习节点表示。最终节点的表示是原图和采样图节点表示的结合。生成的用户和物品表示利用公式(4)从而实现对于推荐过程的建模。
基于MindSpore图引擎,BGCF实现异构图采样,分别获取用户节点和物品节点的邻居。代码如下:
1. u_neighs = train_graph.get_sampled_neighbors(
2. node_list=u_group_nodes, neighbor_nums=[self.num_samples], neighbor_types=[1])
3. i_neighs = train_graph.get_sampled_neighbors(
4. 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
BGCF使用MindSpore混合精度训练,在维持单精度训练的网络精度前提下,利用半精度数据格式加速深度神经网络训练过程。
模型效果
我们在业界公开数据集和工业数据集上进行了一系列实验,从而验证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%的效果提升。
对老用户和新用户的性能分析表明我们的模型在老用户推荐上效果提升了1.71%,在新用户推荐上效果提升了2.48%,进一步表明了我们的模型在缓解冷启动问题上的优越性。对于BGCF的介绍就到这里啦,欢迎大家批评指正。
参考文献
[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] Koren Y, Bell R, Volinsky C. Matrix factorization techniques for recommender systems[J]. Computer, 2009, 42(8): 30-37.
[3] Kipf T N, Welling M. Semi-supervised classification with graph convolutional networks[J]. arXiv preprint arXiv:1609.02907, 2016.
[4] 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.
[5] Rendle S, Freudenthaler C, Gantner Z, et al. BPR: Bayesian personalized ranking from implicit feedback[J]. arXiv preprint arXiv:1205.2618, 2012.
[6] Pal S, Regol F, Coates M. Bayesian graph convolutional neural networks using node copying[J]. arXiv preprint arXiv:1911.04965, 2019.
[7] Veličković P, Cucurull G, Casanova A, et al. Graph attention networks[J]. arXiv preprint arXiv:1710.10903, 2017.
[8] 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.