作者:十方,公众号:炼丹笔记

推荐系统会存储大量的用户与items交互数据,这些数据可以用二部图呈现。二部图对消除推荐系统中数据稀疏性和冷启动有着巨大的帮助。这篇主要总结了3个典型的GNN方法在推荐系统领域处理用户与items的二部图。

我们可以通过每个用户交互过的item列表,构建一个巨大的二部图,如下图所示:

传统的神经网络方法(如协同过滤,双塔),是无法处理上述二部图的,图神经网络就是要充分挖掘节点信息和节点与节点的交互信息,从而带来巨大的商业价值。

在推荐领域,图神经网络主要解决了以下几个问题:

  • 节点的敏感度,节点顺序很小的改变极大的影响模型的输出。
  • 节点间闭塞的信息交互,传统的深度学习模型不能够充分挖掘高阶节点之间的交互信息。
  • 解释能力弱,传统的深度模型面向直观的交互式图结构,不能用于基于图形的解释和推理。

当使用GNN处理二部图,输入节点的顺序并不会影响输出。另外,GNN使用边的去辅助传播、集成节点和邻居的状态,更新当前节点的状态,结构化的信息会被模型捕捉,并表达在每个节点上,从而解决推荐系统稀疏性的问题。

embedding层主要研究如何获得交互图和一系列节点的特征,并使用此信息生成节点embedding,从而生成子图和整个图的embedding。这一层的作用是学习一个低维的向量表示,作为图神经网络模型的输入。在在早期的推荐系统中,提取用户和item的特征应用最广泛的是矩阵分解(MF),如概率矩阵分解(PMF),偏差矩阵因子分解(BiasedMF)、神经网络矩阵因子分解(NNMF)等。然而,这些方法都有很大的缺点。每次分解都需要很长的时间复杂性与较高的空间复杂性,并不能完全探究用户和item之间的隐含关系,导致推荐效果不理想。从DeepWalk算法首次应用,各种深度学习embeding方法层出不穷。

最简单的方法是使用浅层嵌入方法生成节点的唯一低维向量表示,即在初始步骤中,每个用户和item被定义为唯一ID并直接映射成embedding。这种设计的优点是模型可互换,不变形。互换性的不变性在于该模型不依赖于邻接矩阵中行列的任意顺序,弥补了深度模型对节点输入顺序高度敏感的缺陷。

传播更新层是GNN推荐系统模型的核心组成部分,包括两个阶段:邻居节点信息传递,聚合和更新(下图)。嵌入层解决了图数据很难高效地输入推荐算法。下一步是解决深层模型消息传输路径阻塞问题及解决方案长距离节点的信息传播问题,然后是邻居信息可以聚合在一起,为解决推荐系统中数据的稀疏性问题提供了一种可行的思路的。在每个消息传递迭代过程中,每个节点u对应的embeding可以通过图的所有邻居节点N(u)聚合进行更新,因此传播更新层可以抽象地定义为:

图卷积聚合器使用中心节点及其相邻节点的embedding的聚合来表示中心节点,并进行迭代传播,从邻居节点聚合嵌入的特征信息,并且只有一个卷积运算变换并聚合一阶图的邻域的嵌入表示,通过叠加多层图卷积网络,达到传播远处多级的信息的目的。最后更新当前节点的嵌入表示。如GraphSAGE提出了一种小批量聚合算法,它在一次更新没使用所有的邻居节点,对邻居节点中的特征进行采样,并将更新后的最终状态用于预测和反向传播。PinSage框架下使用局部图卷积运算从邻居节点聚合信息。图卷积聚合可以抽象地定义为:

经典的长、短期记忆循环神经网络系统已经被证明对于学习序列数据的动态特性非常有效,其中GRU和LSTM中的输入输出门机制可以保持长期的内部状态。门控图神经网络(GGNN)使用一个门递归单元在固定步数的传播过程去更新聚合节点的隐藏状态。门聚合可以抽象地定义为:

注意机制几乎已经成为处理序列数据任务的必用方法,已成功应用于机器翻译和机器阅读。注意力机制可以区分不同节点的重要性。例如,购物场景下,最近购买的产品相比那些几个月前购买的产品更有参考价值。在传播过程中加入注意机制可以给邻居节点赋权,通过不同的attention score对邻居节点的embedding进行聚合。注意力聚合器可以抽象地定义为:

在多层传播之后,从每个层获得的embeding被拼接在一起作为用户或item的最终特征。除了拼接,其他的组合方法,如加权平均、最大池和LSTM,都可以。有研究表明证明了拼接是最简单且有效的,且它不涉及其他参数需要学习。最后,计算用户与item之间的内积用来预测用户的未来行为:

本篇总结了一些GNN在推荐系统的应用,其实还有很多gnn算法没有介绍,如KGAT,融合了知识图谱辅助推荐。再如KARN和SCPR这两个模型,不是选出来一个匹配商品集就完事了,还要在图中找出来对应的路径作为推荐的解释,感兴趣的读者可以去查阅相关资料。

更多干货,请关注微信公众号:炼丹笔记

推荐系统与GNN的火花相关推荐

  1. 论文浅尝 | 中科院百度微软等学者最新综述论文40+最新方法阐述知识图谱提升推荐系统准确性与可解释性...

    本文转载自公众号:先知. [导读]近来,知识图谱用于推荐系统是关注的焦点,能够提升推荐系统的准确性与可解释性.如何将知识图谱融入到推荐系统呢?  最近中科院计算所百度微软等学者最新综述论文<A ...

  2. A Survey on Knowledge Graph-Based Recommender Systems 知识图谱提升推荐系统准确性与可解释性ArXiv 2020

    论文链接:https://arxiv.org/pdf/2003.00911.pdf 导读 近来,知识图谱用于推荐系统是关注的焦点,能够提升推荐系统的准确性与可解释性.如何将知识图谱融入到推荐系统呢? ...

  3. Recsys21 | 浅谈推荐系统如何在NLP的肩膀上前进

    大家好,我是蘑菇先生.今天来聊聊推荐系统是如何在NLP的肩膀上前进的. 最近在读Recsys2021上的paper,Transformers4Rec: Bridging the Gap between ...

  4. GNN学习资料分类整理——(持续更新)

    前言 本文将学习资料分为论文.视频.课件.博客和用于实践的库,共5类.零基础玩家推荐先看博客有一个简单的认识,然后看视频或课件对课题有一个宏观的把握,针对论文可以看两篇经典的综述文章然后泛读自己领域相 ...

  5. [图神经网络] 图节点Node表示---GraphSAGE与PinSAGE

    一 前言 在大规模图上学习节点embedding,在很多任务中非常有效,如学习节点拓扑结构的 DeepWalk 以及同时学习邻居特征和拓扑结构的semi-GCN. 但是现在大多数方法都是直推式学习, ...

  6. bgb邻居关系建立模型_知识图谱上的双塔召回:阿里的IntentGC模型

    关注本人的同学可能发现,我最近点评的文章都是关于"GNN在推荐系统应用"方向的.这当然与现如今这个方向非常火有关,但是作为一个合格的炼丹师+调参侠,总要搞清楚一门技术为什么火?这么 ...

  7. 知识图谱上的双塔召回:阿里的IntentGC模型

    关注本人的同学可能发现,我最近点评的文章都是关于"GNN在推荐系统应用"方向的.这当然与现如今这个方向非常火有关,但是作为一个合格的炼丹师+调参侠,总要搞清楚一门技术为什么火?这么 ...

  8. ####好好好#####知识图谱上的双塔召回:阿里的IntentGC模型

    关注本人的同学可能发现,我最近点评的文章都是关于"GNN在推荐系统应用"方向的.这当然与现如今这个方向非常火有关,但是作为一个合格的炼丹师+调参侠,总要搞清楚一门技术为什么火?这么 ...

  9. 工业界推荐_Industrial RS(4)

    Industrial RS Huawei Huifeng et al. DeepFM: A Factorization-Machine based Neural Network for CTR Pre ...

最新文章

  1. [机器学习]机器学习笔记整理12-线性回归概念理解
  2. c++ 11 移动语义
  3. QQ摘录 “废了!”
  4. C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法
  5. android的动画实例
  6. java之try catch finally
  7. 【linux】一次性杀死多个同名进程
  8. pyside2 镜像安装_简单安装Pyside2
  9. 推荐一个图片在线生成链接的网站
  10. 软考-计算机组成原理与结构
  11. 我的一百个2019(四):2019,我被坑惨了
  12. mysql的delete语句使用exists删除数据走不通
  13. 502网关错误解决_“ HTTP 502错误的网关”错误和解决方案
  14. 最长重复子字符串:123321||12321
  15. IE脚本错误Automation服务器不能创建对象
  16. Android Room使用
  17. 美团点评CodeM编程大赛-题二
  18. SQL语句按照姓名首字母排序
  19. 吴恩达机器学习(十五)—— 应用实例:图片文字识别
  20. 卧槽,我不要当一个印度程序员!

热门文章

  1. 算法族的集中管理——策略模式
  2. C# 多线程,解决处理大数据时窗体(不能拖动等)假死现象
  3. 毕业设计出现的一个严重错误----文件不能相互引用
  4. 编译Android源码
  5. 2021网络药理学研究的免费数据库、在线平台与软件工具汇总整理介绍
  6. centos7修改系统语言为简体中文
  7. mysql 衍生表必须有别名_MySQL“每个派生表必须有自己的别名”
  8. 在云服务器上执行C程序和python程序(centos系统)
  9. C语言的编译器常见的有哪些?
  10. android 全局进度条,Android:如何在中心显示全屏进度条