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.

MindSpore首发:基于贝叶斯的图神经网络推荐方法,提升新用户和交互稀疏用户推荐的点击率相关推荐

  1. 【CNN分类】基于贝叶斯优化卷积神经网络BO-CNN实现故障诊断附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  2. ICML2020 | 基于贝叶斯元学习在关系图上进行小样本关系抽取

    今天给大家介绍来自加拿大蒙特利尔大学Mila人工智能研究所唐建教授课题组在ICML2020上发表的一篇关于关系抽取的文章.作者利用全局关系图来研究不同句子之间的新关系,并提出了一种新的贝叶斯元学习方法 ...

  3. 【论文阅读】基于贝叶斯广义核推理的可通行区域建图

    标题:Bayesian Generalized Kernel Inference forTerrain Traversability Mapping 作者:Tixiao Shan,Jinkun Wan ...

  4. ICCV19 (Oral) | 基于贝叶斯损失函数的人群计数

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文作者:洪晓鹏 https://zhuanlan.zhihu.co ...

  5. 第三十五课.基于贝叶斯的深度学习

    目录 贝叶斯公式 基础问题 贝叶斯深度学习与深度学习的区别 贝叶斯神经网络与贝叶斯网络 贝叶斯神经网络的推理与学习 前向计算 学习 贝叶斯公式 首先回顾贝叶斯公式:p(z∣x)=p(x,z)p(x)= ...

  6. 基于贝叶斯算法的邮件过滤管理系统的设计和实现(Vue+SpringBoot)

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  7. 干货 | 基于贝叶斯推断的分类模型 机器学习你会遇到的“坑”

    本文转载自公众号"读芯术"(ID:AI_Discovery) 本文3153字,建议阅读8分钟. 本文讲解了在学习基于贝叶斯推断的分类模型中,我们需要的准备和方法. 数学准备 概率: ...

  8. 基于贝叶斯推断的分类模型 机器学习你会遇到的“坑”

    链接:贝叶斯推断分类 数学准备 概率:事件不确定性程度的量化,概率越大,表示事件发生的可能性越大. 条件概率:P(A|B),在条件B下,发生A的概率. 联合概率:P(A,B),A事件与B事件同时发生的 ...

  9. 【汉字识别】基于贝叶斯网络实现汉字识别含Matlab源码

    ​1 简介 2 部分代码 clc,clear,closefor i=1:5 imp=imread(['.\字库',num2str(i),'.jpg']); create_database(imp,i) ...

最新文章

  1. 【Network Security!】网络安全常用术语
  2. Fiddler抓包原理解析
  3. 本机电脑与 Android 设备如何进行文件传输?
  4. jquery $.ajax
  5. 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
  6. matlab 中最小二乘拟合,matlab 最小二乘拟合
  7. matlab 及数字信号实验报告,Matlab数字信号处理实验报告.doc
  8. ET工业大脑将大规模落地江苏 继续发挥“中国智造1%威力”
  9. qq linux五笔输入法下载软件,qq五笔输入法2017
  10. php中wamp具体指的是,phpwamp和wampserver有什么关系,为什么名字都带wamp这几个字母,两者有区别吗?我应该用哪个?...
  11. 虚拟仪器是在计算机基础上通过增加相关硬件和软件构建而成的仪器,无损检测考试...
  12. 信号完整性 SI(Signal Integrity)
  13. led的伏安特性曲线 matlab实现_光电池伏安特性测试MATLAB制图程序
  14. python 录音左右声道_Python分离立体声wav压缩文件的左右声道
  15. 运动会分数统计 综合题1
  16. C#使用Interop.OPCAutomation.dll文件报错
  17. 北京科技大学 数值计算方法实验代码
  18. JavaScript 可能问到的零星知识点
  19. 【个人喜好诗词之一】雨巷
  20. 支付宝pc端支付回调处理

热门文章

  1. hy-bridge:一款简洁安全可靠的Hybrid框架
  2. VoLTE, IMS, VOIP, LTE之间的关系
  3. 21 07 13学习总结
  4. 如何利用朋友圈做好微信营销之路
  5. 基于Java对Flash网站的抓取
  6. 2.14Python标准库使用案例:使用turtle绘制奥林匹克五环
  7. 【Phase One SDK】飞思相机SDK的环境配置及调用
  8. [转]马化腾:如何从“较好”到“最好”
  9. GD32F130之USART自带的RS485方向切换功能
  10. android studio命令行差错,Android Studio构建正常,Gradle命令行失败