【论文复现】基于图卷积网络的轻量化推荐模型

本文所涉及所有资源均在这里可获取。

在这里插入图片描述


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐、摄影的一位博主。
📗本文收录于论文复现系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列、恒川的日常汇报系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列、docker技术篇系列、Apollo的学习录系列正在发展中,喜欢Python、Java、docker的朋友们可以关注一下哦!

神经网络的公式推导与代码实现

  • 概述
  • 模型讲解
  • 演示效果
  • 核心逻辑
  • 使用方式
  • 部署方式
  • 参考文献

本文所涉及所有资源均在这里可获取。

概述

图卷积网络(Graph Convolution Network,GCN)已经广泛的应用于推荐系统,基于GCN的协同过滤算法(例如NGCF)缺少消融研究,此模型对NGCF进行了消融实验并提出了轻量化卷积网络。

传统的GCN推荐模型(以NGCF为例)

在这里插入图片描述
其中的线性变换和非线性激活函数导致模型庞大,速度很慢,难于理解。
通过消融实验,去掉线性变换W和非线性激活函数σ,得到以下结果:
在这里插入图片描述

可以看到,去掉fn的recall和ndcg在两个常用数据集上的效果更好。
本模型的优势在于,轻量化了NGCF模型,在参数更小,速度更快的基础上,还提升了性能。

模型讲解

在这里插入图片描述
模型集合了Item和User的邻居信息,切只保留这部分信息,通过多层的GCN,最后求均值,得到了最终的u、i向量,最后进行Prediction。
模型公式:
在这里插入图片描述

目标函数:在这里插入图片描述

演示效果

在这里插入图片描述

其中precision、recall、ndcg为模型评判标准,epoch为迭代次数(可改参数)、loss为损失,Sample为节点覆盖率。

核心逻辑

核心代码逻辑:

class LightGCN(BasicModel):def __init__(self,config:dict,dataset:BasicDataset):super(LightGCN, self).__init__()self.config = configself.dataset : dataloader.BasicDataset = datasetself.__init_weight()self.attention_layer = AttentionLayer(input_dim=64)self.mlp = MLP(input_dim=64)
#        self.contrast = Contrast(64, 0.5, 0.5)def __init_weight(self):self.num_users  = self.dataset.n_usersself.num_items  = self.dataset.m_itemsself.latent_dim = self.config['latent_dim_rec']self.n_layers = self.config['lightGCN_n_layers']self.keep_prob = self.config['keep_prob']self.A_split = self.config['A_split']self.embedding_user = torch.nn.Embedding(num_embeddings=self.num_users, embedding_dim=self.latent_dim)self.embedding_item = torch.nn.Embedding(num_embeddings=self.num_items, embedding_dim=self.latent_dim)if self.config['pretrain'] == 0:#nn.init.xavier_uniform_(self.embedding_user.weight, gain=1)#nn.init.xavier_uniform_(self.embedding_item.weight, gain=1)#print('use xavier initilizer')# random normal init seems to be a better choice when lightGCN actually don't use any non-linear activation functionnn.init.normal_(self.embedding_user.weight, std=0.1)nn.init.normal_(self.embedding_item.weight, std=0.1)world.cprint('use NORMAL distribution initilizer')else:self.embedding_user.weight.data.copy_(torch.from_numpy(self.config['user_emb']))self.embedding_item.weight.data.copy_(torch.from_numpy(self.config['item_emb']))print('use pretarined data')self.f = nn.Sigmoid()self.Graph = self.dataset.getSparseGraph()print(f"lgn is already to go(dropout:{self.config['dropout']})")# print("save_txt")

核心逻辑就是去掉传统图卷积中的非线性激活函数和线性变换,轻量化了模型,只保留了图的语义信息,目标函数选择了BPRLOSS。

使用方式

在这里插入图片描述

首先在/data文件中导入items和user数据,运行data_init.py文件进行数据初始化在这里插入图片描述

在parse.py中修改模型参数
运行main.py

部署方式

python3.8即可,拥有pytorch环境
搭建环境

 pip install -r requirements.txt

参考文献

SIGIR 2020. Xiangnan He, Kuan Deng ,Xiang Wang, Yan Li, Yongdong
Zhang, Meng Wang(2020). LightGCN: Simplifying and Powering Graph
Convolution Network for Recommendation, Paper in arXiv.

参考代码:

https://github.com/kuandeng/LightGCN

详细复现过程的项目源码、数据和预训练好的模型可从该文章下方链接获取:https://www.aspiringcode.com/content。


  如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
  制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6747.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

天命人开店日记之门店经营调研(下)

在调研前拟定了一些想要去了解的信息,包括:月销量、净利润、用户购买的主要担忧、与电商平台的竞争差异等关键内容,然而当自己去实地考察线下门店时,确发现实际情况与自己的预期相差非常大。大大出乎预料的包括三方面:…

桑基图在医学数据分析中的更复杂应用示例

桑基图(Sankey Diagram)能够有效地展示复杂的流动关系,特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来,我们将构建一个稍微复杂的示例,展示不同疾病患者在治疗过程中的流动,以及他们的治…

【linux】再谈网络基础(一)

1. 再谈 "协议" 协议是一种 "约定",在读写数据时, 都是按 "字符串" 的方式来发送接收的. 但是这里我们会遇到一些问题: 如何确保从网上读取的数据是否是完整的,区分缓冲区中的由不同客户端发来的数据 2. 网…

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【AI落地应用实战】构建基于知识图谱的知识问答系统

一、知识图谱概述 知识图谱(Knowledge Graph)是一种结构化的语义知识库,它以图形的方式组织和整合信息,使得数据之间的关系变得直观和易于理解。知识图谱的概念融合了计算机科学、数据科学、人工智能等多个领域的技术&#xff0c…

微积分复习笔记 Calculus Volume 1 - 4.8 L’Hôpital’s Rule

4.8 L’Hpital’s Rule - Calculus Volume 1 | OpenStax

AI辅助论文写作的利弊

人工智能的时代,AI从自动驾驶到智能家居,慢慢的都成为了我们生活中的一部分。可当AI被放到学术研究领域,特别是撰写论文这一问题上时,却出现了大量的争议,认为AI撰写论文会削弱该有的批判性思维能力。那不用AI撰写论文…

AOP详解

一.什么是 AOP? AOP 的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和…

红队知识学习入门(4)Windows病毒编写

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 1、端口号及对应漏洞 ftp:21 tenlnet:23 web:80 80-89:可能是web 443:ssl心脏滴血…

知识竞赛答题系统,线上答题小程序链接怎么做?

随着智能手机的普及,越来越多的单位开始在线上开展知识竞赛。这种形式的知识竞赛不仅易于操作,而且参与度更高。那么线上知识竞赛答题系统怎么做呢?自己可以做吗?答案是可以的!借助微信答题系统制作平台风传吧&#xf…

AndroidStudio通过Bundle进行数据传递

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:AndroidStudio 目录 1.新建活动 2.修改页面布局 代码: 效果: 3.新建类ResultActivity并继承AppCompatActivity 4.新建布局文件activity_result.xml 代…

【网络-交换机】生成树协议、环路检测

路由优先级 路由优先级决定了在多种可达的路由类型中,哪种路由将被用来转发数据包。路由优先级值越低,对应路由的优先级越高,优先级值255表示对应的路由不可达。一般情况下,静态路由的优先级为1,OSPF路由优先级为110&a…

华为eNSP:mux-vlan

一、什么是mux-vlan? Mux-vlan 是一种多路复用的虚拟局域网(Virtual Local Area Network)技术。它将多个不同的VLAN流量转发到同一个物理端口,从而实现VLAN间的互通。 在传统的以太网环境中,每个VLAN通常都有一个独立…

又发现了Mac妙控鼠标的新使用方法

我一直是不爱用妙控鼠标的,因为用起来怪怪的,但是今天发现BettreAndBetter支持妙控鼠标的修改,于是就找出了闲置了许久的妙控鼠标试了一下 优化后的妙控鼠标使用起来就没有任何不适应的地方了,三指按下模拟中键,而且还…

Cursor编程工具

最近爆火的Cursor是一款基于 VS Code 二次开发的 AI 编辑器。相比传统编辑器,它将 AI 技术深度融合到各个功能点,带来了前所未有的用户体验。 下载链接:https://www.cursor.com/ 第一步:下载安装 下载完成后,双击启动…

Me-LLaMA——用于医疗领域的新型开源大规模语言模型

摘要 大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数,通过海量文本数据训练而成,能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜…

鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

在鸿蒙ArkTS中,布局容器组件有很多,常见的有:   ⑴ Column:(垂直布局容器):用于将子组件垂直排列。   ⑵ Row:(水平布局容器):用于将子组件水…

【点击劫持漏洞(附测试代码)】

漏洞描述 点击劫持(Clickjacking)是一种网络攻击技术,攻击者通过将一个恶意的页面或按钮隐藏在合法网站的页面下,诱使用户在不知情的情况下点击隐藏的内容,从而触发攻击者设计的操作。这种攻击通常会导致用户无意中执…

大数据新视界 -- 大数据大厂之经典案例解析:电商企业如何靠 Impala性能优化逆袭(上)(9/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

语音 AI 迎来爆发期,也仍然隐藏着被低估的机会丨RTE2024 音频技术和 Voice AI 专场

在人工智能快速发展的今天,语音交互技术正经历一场革命性的变革。从语音识别到语音合成,再到端到端的语音对话系统,这一领域的创新正以前所未有的速度推进。这些进步不仅提升了技术指标,更为实时翻译、虚拟数字人、智能客服等实时…