图神经网络系列二:NGCF & DiffNet

admin 2025年5月17日03:52:06评论6 views字数 1822阅读6分4秒阅读模式

一、协同过滤背景介绍

SIGIR'19的一篇论文

Neural Graph Collaborative Filtering(NGCF)介绍了用图神经网络(GNN)来增强协同过滤推荐系统的方法。今天我们来聊一聊下面几个话题:

  • 什么是协同过滤?如何用协同过滤做推荐?

  • NGCF是如何构图的?NGCF在基础的GNN上有哪些改动?如何用NGCF做推荐?

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

二、NGCF 如何构图以及计算

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

NGCF 的整体网络架构

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

学到的embedding效果如何?

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

BPR Loss 原理介绍

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

三、社交化推荐(DiffNet)

因为数据稀疏性问题,社会推荐算法应运而生。社会推荐算法主要是通过对user-user 的关系进行分析,将关系比较亲近的user 之间的偏好关系进行传播,从而加强了推荐算法的性能并解决了数据稀疏性问题。社会推荐算法主要思想是用户和其粉丝之间存在着偏好的转移。一个用户user_a 关注着另一个用户user_b,那么b 对item 的偏好将传播到 a 上,并对 a 的偏好进行影响。

模型的整体结构

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

# 如图所示的用户free embeddinguser_embedding = self.user_embedding.weightfinal_item_embedding = self.item_embedding.weight# embedding的fusion融合层user_reduce_dim_vector_matrix = self.activation(self.user_fusion_layer(self.user_review_embedding.weight))item_reduce_dim_vector_matrix = self.activation(self.item_fusion_layer(self.item_review_embedding.weight))user_review_vector_matrix = self.convertDistribution(user_reduce_dim_vector_matrix)item_review_vector_matrix = self.convertDistribution(item_reduce_dim_vector_matrix)user_embedding = user_embedding + user_review_vector_matrixfinal_item_embedding = final_item_embedding + item_review_vector_matrix

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

# 用户的历史行为,user-item的交互user_embedding_from_consumed_items = self.bipartite_gcn_conv(x=(final_item_embedding, user_embedding), edge_index=self.edge_index.flip([0]), edge_weight=self.edge_weight, size=(self.n_items, self.n_users))# 用于存储融合社交的embeddingembeddings_list = [user_embedding]# 遍历N层,每层使用GCN对社交关系进行特征提取for layer_idx in range(self.n_layers):        user_embedding = self.bipartite_gcn_conv((user_embedding, user_embedding), self.net_edge_index.flip([0]), self.net_edge_weight, size=(self.n_users, self.n_users))        embeddings_list.append(user_embedding)# 将社交关系的提取的特征拼接起来,求和并且加上来自user-item交互提取的特征。final_user_embedding = torch.stack(embeddings_list, dim=1)final_user_embedding = torch.sum(final_user_embedding, dim=1) + user_embedding_from_consumed_items
图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

图神经网络系列二:NGCF & DiffNet

原文始发于微信公众号(风物长宜 AI):图神经网络系列二:NGCF & DiffNet

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月17日03:52:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   图神经网络系列二:NGCF & DiffNethttp://cn-sec.com/archives/4073609.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息