推荐系统笔记(四):NGCF推荐算法理解

背景

        用户和项目的学习向量表示(即嵌入)是现代推荐系统的核心。从早期的矩阵分解到最近出现的基于深度学习的方法,现有的工作通常通过从描述用户(或项目)的预先存在的特征(例如ID和属性)映射来获得用户(或项目)的嵌入。这种方法的一个固有缺点是,隐藏在用户项目交互中的协作信号在嵌入过程中没有编码。因此,生成的嵌入可能不足以捕获协同过滤效果。

        因此将用户项交互,更具体地说是二部图结构集成到嵌入过程中,开发一种新的推荐框架神经图协同过滤(NGCF)就油然而生。该框架通过传播嵌入来利用用户项图结构,使得用户项图中高阶连通性的表达建模能够实现,有效地将协作信号以显式方式注入到嵌入过程中,提高了推荐系统的性能和准确性。

 基本原理

      首先,协同过滤的基本假设是相似的用户会对物品展现出相似的偏好,自从全面进入深度学习领域之后,一般主要是先在隐空间中学习关于user和item的embedding,然后重建两者的交互即interaction modeling,如MF做内积,NCF模拟高阶交互等。但是他们并没有把user和item的交互信息本身编码进 embedding 中,这就是NGCF想解决的点:显式建模User-Item 之间的高阶连接性来提升 embedding。

NGCF

         NGCF的模型如上图所示,它的传播过程分为message construction(消息构造)和message aggregation(消息聚合)两部分。按照图中的结构图可以进行分以下三层:

       · Embeddings:对user和item的嵌入向量,用id来嵌入就可以了
       · Embedding Propagation Layers:挖掘高阶连通性关系来捕捉交互以细化Embedding的多个嵌入传播层
       · Prediction Layer:用更新之后带有交互信息的 user 和 item Embedding来进行预测

1. Embedding

        即编码层,构建一个参数矩阵作为嵌入查找表:

2. Embedding Propagation Layers(核心部分)

信息构造:

        对于连接的用户项对(u,i),论文将从i到u的消息定义为:

         其中m_{u\leftarrow i}是消息嵌入(即要传播的信息)。f\left ( \cdot \right )是消息编码函数,它以嵌入e_{i}e_{u}为输入,并使用系数p_{ui}来控制边缘(u,i)上每次传播的衰减因子。具体的f\left ( \cdot \right )函数如下所示:

         m_{u\leftarrow i}表示物品到用户的消息构造。其中W1和W2是用于提取传播有用信息的可训练权重矩阵,嵌入e_{i}e_{u}表示用户和物品的embedding,用e_{i}e_{u}内积相乘来获得邻域的的信息,然后再加上e_{i},即所谓的自信息(这在lightGCN中被证明是不必要的冗余)。最后的N是u和i的度用来归一化系数,可以看做是折扣系数,在lightGCN论文中被证明是不可缺少的。

 信息聚合:

         一阶聚合:整合从每个item的聚合信息,然后再加上用户自身节点的信息,最后再激活一下

         高阶聚合:一阶往往不能满足要求,因此需要堆叠多层。

        通过一阶连通性建模增强表示,我们可以堆叠更多嵌入传播层来探索高阶连通性信息。这种高阶连接性对于编码协作信号以估计用户和项目之间的相关性分数至关重要。

        通过堆叠l嵌入传播层,用户(和项目)能够接收从其l跳邻居传播的消息。如图所示,用户u的表示递归公式化为:

        自信息和用户与物品的交互信息表示为:

        该公式的理解为,每次传播时,聚合邻接结点信息时,邻接结点都是上次聚合更新后的结点信息(一定不是初始的embedding,结点信息每次更新都会发生变化的)

         高阶的消息堆叠如图所示:

        首先就是将i4、i5、i2三个物品的信息聚合到u2中,(其实在这个聚合过程进行的同时其他结点也都进行了相应的聚合邻接结点信息,例如在此时u1也聚合了i1、i2、i3的信息),然后用u1和u2继续传播聚合给i2(此时i2结点在此时已经包含图三所有结点的信息),然后再将i1、i2、i3信息给u1。至此物品i4经过三层转手操作,通过路径上的结点一步步传递到u1手中。
        为了便利与计算,其矩阵形式表示如下:

      A是邻接矩阵,L就是归一化后的邻接矩阵,将得到的所有阶的embedding信息拼接起来起来作为最终的节点表示,再内积得到预测结果:

        至于为什么矩阵表示是这样作者并未介绍,也无从考证,后续可以进一步研究。

        损失函数如图:

         是比较常规的成对计算损失的损失函数。

3. Prediction Layer

        预测部份较为简单,直接将用户的最终编码和物品表示的最终编码相乘得到用户评分矩阵类似的排序。即如图:

        这里编码的到的方式和lightGCN的方式有所不同,以后会介绍到。

 代码实现参考以下链接:github:GitHub - huangtinglin/NGCF-PyTorch: PyTorch Implementation for Neural Graph Collaborative Filtering

参考链接:图卷积网络在推荐系统中的应用NGCF(Neural Graph Collaborative Filtering)配套pytorch的代码解释_只想做个咸鱼的博客-CSDN博客_ngcf代码

延伸与拓展

        lightGCN是对NGCF的改进和简化,将在下几篇笔记中介绍:

推荐系统学习笔记(五):lightGCN算法原理与背景_甘霖那的博客-CSDN博客

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值