【传知代码】知识图谱推理-论文复现

文章目录

  • 概述
  • 方法介绍
  • 核心逻辑
    • 实验条件
    • 数据集
    • 实验步骤
    • 实验结果
  • 核心代码
  • 小结

本文涉及的源码可从知识图谱推理该文章下方附件获取

概述

本研究深入探讨了基于图神经网络(GNN)的知识图谱推理,特别聚焦于传播路径的优化与应用。在智能问答、推荐系统等前沿应用中,知识图谱推理发挥着不可或缺的作用。然而,传统GNN方法在处理大规模知识图谱时,往往面临效率和准确度的双重挑战。为了克服这些局限,本研究提出了一种创新的自适应传播策略AdaProp,并通过与经典的Red-GNN方法进行对比实验,验证了其优越性。

论文名称:AdaProp: Learning Adaptive Propagation for Graph Neural Network based Knowledge Graph Reasoning
作者:Yongqi Zhang, Zhanke Zhou, Quanming Yao, Xiaowen Chu, and Bo Han
出处:Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD '23), August 6–10, 2023, Long Beach, CA, USA
在本论文的基础上添加tensorboard可视化结果
原代码链:https://github.com/LARS-research/AdaProp

方法介绍

通过有效的采样技术来动态调整传播路径,既考虑到查询实体和查询关系的依赖性,又避免在传播过程中涉及过多无关实体,从而提高推理效率并减少计算成本。这将涉及到开发新的采样策略,以确保在扩展传播路径时能够保持对目标答案实体的精确预测。为此,提出了一种名为AdaProp的基于GNN的方法,该算法可以根据给定的查询动态调整传播路径。

在这里插入图片描述

在知识图谱推理领域,传统的方法如全传播、渐进式传播和受限传播都各自有优势和局限。提出的AdaProp方法在效率和性能上对这些传统方法进行了显著的优化。

核心逻辑

实验条件

使用Python环境和PyTorch框架,在单个NVIDIA RTX 3070 GPU上进行,该GPU具有8GB的内存。实验的主要目的是验证AdaProp算法在传导(transductive)和归纳(inductive)设置下的有效性,并分析其各个组成部分在模型性能中的作用。

数据集

family数据集,存放在./transductive/data文件夹下

在这里插入图片描述

实验步骤

step1:安装环境依赖

torch == 1.12.1
torch_scatter == 2.0.9
numpy == 1.21.6
scipy == 1.10.1

step2:进入项目目录,进行训练
在这里插入图片描述

step3:输入tensorboard指令,可视化结果

在这里插入图片描述

在这里插入图片描述

实验结果

在这里插入图片描述

核心代码

# startcheck all output pathscheckPath('./results/')checkPath(f'./results/{dataset}/')checkPath(f'{loader.task_dir}/saveModel/')model = BaseModel(opts, loader)opts.perf_file = f'results/{dataset}/{model.modelName}_perf.txt'print(f'==> perf_file: {opts.perf_file}')config_str = '%.4f, %.4f, %.6f,  %d, %d, %d, %d, %.4f,%s\n' % (opts.lr, opts.decay_rate, opts.lamb, opts.hidden_dim, opts.attn_dim, opts.n_layer, opts.n_batch, opts.dropout,opts.act)print(config_str)with open(opts.perf_file, 'a+') as f:f.write(config_str)if args.weight != None:model.loadModel(args.weight)model._update()model.model.updateTopkNums(opts.n_node_topk)if opts.train:writer = SummaryWriter(log_dir=f'./tensorboard_logs/{dataset}')# training modebest_v_mrr = 0for epoch in range(opts.epoch):epoch_loss = model.train_batch()if epoch_loss is not None:writer.add_scalar('Training Loss', epoch_loss, epoch)else:print("Warning: Skipping logging of Training Loss due to NoneType.")model.train_batch()# eval on val/test setif (epoch + 1) % args.eval_interval == 0:result_dict, out_str = model.evaluate(eval_val=True, eval_test=True)v_mrr, t_mrr = result_dict['v_mrr'], result_dict['t_mrr']writer.add_scalar('Validation MRR', result_dict['v_mrr'], epoch)writer.add_scalar('Validation Hits@1', result_dict['v_h1'], epoch)writer.add_scalar('Validation Hits@10', result_dict['v_h10'], epoch)writer.add_scalar('Test MRR', result_dict['t_mrr'], epoch)writer.add_scalar('Test Hits@1', result_dict['t_h1'], epoch)writer.add_scalar('Test Hits@10', result_dict['t_h10'], epoch)print(out_str)with open(opts.perf_file, 'a+') as f:f.write(out_str)if v_mrr > best_v_mrr:best_v_mrr = v_mrrbest_str = out_strprint(str(epoch) + '\t' + best_str)BestMetricStr = f'ValMRR_{str(v_mrr)[:5]}_TestMRR_{str(t_mrr)[:5]}'model.saveModelToFiles(BestMetricStr, deleteLastFile=False)# show the final resultprint(best_str)writer.close()model.writer.close()

小结

AdaProp的成功并非偶然。其自适应传播策略使得模型能够根据不同的情况调整信息传播策略,从而更加精确地捕获节点之间的关系。这种灵活性是传统GNN所缺乏的,也是AdaProp能够在多个数据集上取得显著提升的关键原因。此外,AdaProp的引入也为知识图谱推理领域带来了新的研究方向和思路,为未来的研究提供了有益的参考。

本研究通过提出AdaProp自适应传播策略,并在多个数据集上进行实验验证,充分证明了其在知识图谱推理中的优越性。AdaProp不仅提高了推理的准确性和效率,还为该领域的未来发展提供了新的方向。未来,我们将继续探索AdaProp的潜力,优化其算法结构,以期在更多领域取得更加卓越的表现。同时,我们也期待更多的研究者能够关注这一领域,共同推动知识图谱推理技术的发展。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

⌈ 传知代码 ⌋ YOLOv9最新最全代码复现

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

网页设计步骤总结

第一步&#xff1a;css重置 https://blog.csdn.net/BradenHan/article/details/132122504 第二步&#xff1a;媒体查询不同尺寸加载不同的css文件https://blog.csdn.net/Yi_Lesama/article/details/131184469 <!-- link元素中的CSS媒体查询 --> <link rel"styl…

数据结构——二叉树的实现

文章目录 一、二叉树概念的回顾二、二叉树结构的定义三、二叉树的创建方法一、写个创建结点的函数然后手动链接起来创建结点的函数手动链接 方法二、通过前序遍历的数组的方式构建二叉树创建的函数声明创建函数的定义 四、 二叉树的遍历前序遍历中序遍历后序遍历层序遍历 五、二…

从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1

黑金的教程做的实在太拉闸了&#xff0c;于是自己摸索信号采集模块的使用方法。 ADC模块&#xff1a;AN9238 FPGA开发板&#xff1a;AX7020&#xff1b;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I&#xff0c;400引脚 FBGA 封装。 往期回顾&#xff1a; 从零开始利…

测试驱动编程(4)模拟消除依赖

文章目录 测试驱动编程(4)模拟消除依赖模拟框架Mockito什么要模拟名词解释Mockito常用注解Mockito常用静态方法Mockito测试流程三部曲基础用法可变返回结果验证verfily对象监视spy 示例实战升级版井字游戏需求一需求二需求三 总结 测试驱动编程(4)模拟消除依赖 模拟框架Mockit…

YOLOv8架构详解

&#x1f4cc;YOLOv8架构详解 YOLOv8 架构图YOLOv8 Backbone部分YOLOv8 Head部分Neck和Head结构 在视觉深度学习中&#xff0c;通常将模型分为 2~3 个组成部分&#xff1a;backbone、neck&#xff08;可选&#xff09; 和 head。 Backbone&#xff08;主干网络&#xff09;负责…

NTLite深度Windows系统镜像文件修改定制

计算机爱好者和技术宅的圈子里,NTLite是一个广受欢迎的名字,一款强大的Windows系统定制工具,允许用户对Windows安装镜像进行深度修改,从而打造出一个更加个性化、高效且精简的操作系统。无论是为了优化系统性能、移除不必要的组件,还是集成最新的更新和驱动,NTLite都能成…

继承与多态1

11.2(Person. Student. Employee、Faculty和Staff类)设计一个名为Person的类 和它的两个名 为Student和Employee子类。Employee类又有子类:教员类Faculty和职员类Staff&#xff0c;每个人都有姓名、地址、电话号码和电子邮件地址。学生有班级状态(大一&#xff0c;大二、大三或…

java后端框架-MyBatis

一、概述 1、起源 MyBatis本是Apache下的开源项目&#xff0c;名为iBatis,2010年转投谷歌,从iBatis3.x开始更名为MyBatis 2、优点 (1)优秀的数据持久层框架&#xff08;对jdbc做了轻量级封装&#xff09; 3、特点 (1)对jdbc中接口进行封装的同时还提供了一些自己的类实现…

计算机字符编码的发展

目录 背景 发展 第一阶段&#xff1a;ASCII编码 第二阶段&#xff1a;扩展ASCII编码 第三阶段&#xff1a;各国编码 第四阶段&#xff1a;Unicode编码 第五阶段&#xff1a;UTF系列编码方式 相关扩展 背景 在计算机诞生初期&#xff0c;所有的数据都是基于二进制数&am…

samba_ubuntu_share_vmbox_vmware

_____ Ubuntu 利用 samba 与 win 直接共享文件夹 _____ samba Samba - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) 用于 win 和 unix 直接访问资源 samba 为选定的 unix 目录建立网络共享&#xff0c; 使得 win 用户可以像访问普通 win 下的文件夹那样来通过网络来…

npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本

安装npm时出现如下提示&#xff1a; 出现这个错误信息&#xff0c;是系统禁止执行PowerShell的脚本。 出现的原因是&#xff0c;系统默认的执行策略是Restricted&#xff08;默认设置&#xff09;&#xff0c;限制执行&#xff0c;所以会出现如上提示。 解决方法&#xff1a;…

Linux服务器配置ssh证书登录

1、ssh证书登录介绍 Linux服务器ssh登录有密码登录和证书登录两种。如果使用密码登录&#xff0c;容易遭受密码泄露或者暴力破解&#xff0c;我们可以使用ssh证书登录并禁止使用密码登录&#xff0c;ssh证书登录通过公钥和私钥来完成整个连接过程&#xff0c;公钥保存在服务器…

Java中Arrays.toString与new String()字节数组使用的差异

Java 编程语言提供了许多内置方法和类&#xff0c;这使得程序员能够更加方便的处理数据和对象。本文将讨论 Arrays.toString 方法和 new String() 方法在处理字节数组时的不同。 文章目录 Arrays.toString 方法new String() 方法总结 Arrays.toString 方法 Arrays.toString() …

高维数组到向量的转换:两种方法的深度解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;高维数组的挑战与需求 二、方法一&#xff1a;使用NumPy库进行展平 示…

如何将md文件精确的转换成docx文件

如何将md文件转换成docx&#xff1f; 文章目录 如何将md文件转换成docx&#xff1f;一、如何将MD文件比较完美的转换成word呢&#xff1f;二、方法3 步骤1、下载一个可用的MarkDown编辑器2、下载Pandoc安装 三、来进行转化了 一、如何将MD文件比较完美的转换成word呢&#xff1…

从零开始学Vue3--根据目录结构自动生成路由

我们在测试或者小项目中经常遇到一个问题&#xff0c;就是加一个页面&#xff0c;就要在router.js中加一个路由&#xff0c;相当的麻烦&#xff0c;有没有办法可以根据目录结构自动生成路由呢&#xff1f; 想要自动生成路由&#xff0c;最重要的是能够获取指定目录下vue的路径…

开源代码分享(31)-计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

参考文献&#xff1a; [1]孙惠娟,刘昀,彭春华,等.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度[J].电网技术,2021,45(09):3534-3545.DOI:10.13335/j.1000-3673.pst.2020.1720. 1.摘要 为了促进多能源互补及能源低碳化&#xff0c;提出了计及电转气协同的含碳捕集与垃…

canfd与can2.0关系

canfd是can2.0的升级版&#xff0c; 支持canfd的设备就支持can2.0&#xff0c;但can2.0的设备不支持canfd 参考 是选CAN接口卡还是CANFD接口卡_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hh411K7Zn/?spm_id_from333.999.0.0 哪些STM32有CANFD外设 STM32G0, STM…

Python 计算两组点云间的距离

两组点云间距离计算 一、介绍1.1 概念1.2 函数讲解二、代码示例三、结果示例一、介绍 1.1 概念 点云距离计算 :计算从源点云中每个点到目标点云中最近邻点的距离。 1.2 函数讲解 def compute_point_cloud_distance(self, target): # real signature unknown; restored from _…