Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >知识图谱推理(论文复现)

知识图谱推理(论文复现)

作者头像
Srlua
发布于 2024-11-13 00:38:32
发布于 2024-11-13 00:38:32
13000
代码可运行
举报
文章被收录于专栏:CSDN社区搬运CSDN社区搬运
运行总次数:0
代码可运行

论文概述

本研究专注于基于图神经网络(GNN)的知识图谱推理,特别关注了传播路径的应用与优化。在智能问答和推荐系统等领域,知识图谱推理具有关键作用,但传统GNN方法在效率和准确度方面存在局限。为了改进这些问题,本研究引入了创新的自适应传播策略AdaProp,并与传统的Red-GNN方法进行了对比实验。通过实际运行AdaProp和Red-GNN两种方法,并在多个数据集上进行实验验证,结果显示AdaProp在多项性能指标上取得了显著的提升。这一发现不仅突显了AdaProp在知识图谱推理中的潜力,也为该领域的未来研究和应用提供了新的方向。AdaProp的成功实现在理论和实践层面上都为知识图谱推理开辟了新的可能性,强调了自适应传播策略的重要性。

论文方法

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

在这里插入图片描述
在这里插入图片描述

与传统方法的比较

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

实验部分

1 实验条件

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

2 .数据集

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

3 .实验步骤

step1:安装环境依赖

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

step2:进入项目目录,进行训练

Description
Description

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

4.实验结果
Description
Description

核心代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555"># start</span>
 <span style="color:#000000">check</span> <span style="color:#000000">all</span> <span style="color:#000000">output</span> <span style="color:#000000">paths</span>
    <span style="color:#0000ff">checkPath</span>(<span style="color:#aa1111">'./results/'</span>)
    <span style="color:#000000">checkPath</span>(<span style="color:#000000">f</span><span style="color:#aa1111">'./results/{dataset}/'</span>)
    <span style="color:#000000">checkPath</span>(<span style="color:#000000">f</span><span style="color:#aa1111">'{loader.task_dir}/saveModel/'</span>)<span style="color:#000000">model</span> <span style="color:#981a1a">=</span> <span style="color:#000000">BaseModel</span>(<span style="color:#000000">opts</span>, <span style="color:#000000">loader</span>)
    <span style="color:#000000">opts</span>.<span style="color:#000000">perf_file</span> <span style="color:#981a1a">=</span> <span style="color:#000000">f</span><span style="color:#aa1111">'results/{dataset}/{model.modelName}_perf.txt'</span>
    <span style="color:#000000">print</span>(<span style="color:#000000">f</span><span style="color:#aa1111">'==> perf_file: {opts.perf_file}'</span>)<span style="color:#000000">config_str</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">'%.4f, %.4f, %.6f,  %d, %d, %d, %d, %.4f,%s\n'</span> <span style="color:#981a1a">%</span> (
    <span style="color:#000000">opts</span>.<span style="color:#000000">lr</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">decay_rate</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">lamb</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">hidden_dim</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">attn_dim</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">n_layer</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">n_batch</span>, <span style="color:#000000">opts</span>.<span style="color:#000000">dropout</span>,
    <span style="color:#000000">opts</span>.<span style="color:#000000">act</span>)
    <span style="color:#000000">print</span>(<span style="color:#000000">config_str</span>)
    <span style="color:#000000">with</span> <span style="color:#0000ff">open</span>(<span style="color:#000000">opts</span>.<span style="color:#000000">perf_file</span>, <span style="color:#aa1111">'a+'</span>) <span style="color:#000000">as</span> <span style="color:#000000">f</span>:
        <span style="color:#000000">f</span>.<span style="color:#000000">write</span>(<span style="color:#000000">config_str</span>)<span style="color:#770088">if</span> <span style="color:#000000">args</span>.<span style="color:#000000">weight</span> <span style="color:#981a1a">!=</span> <span style="color:#000000">None</span>:
        <span style="color:#000000">model</span>.<span style="color:#000000">loadModel</span>(<span style="color:#000000">args</span>.<span style="color:#000000">weight</span>)
        <span style="color:#000000">model</span>.<span style="color:#000000">_update</span>()
        <span style="color:#000000">model</span>.<span style="color:#000000">model</span>.<span style="color:#000000">updateTopkNums</span>(<span style="color:#000000">opts</span>.<span style="color:#000000">n_node_topk</span>)<span style="color:#770088">if</span> <span style="color:#000000">opts</span>.<span style="color:#000000">train</span>:
        <span style="color:#000000">writer</span> <span style="color:#981a1a">=</span> <span style="color:#000000">SummaryWriter</span>(<span style="color:#000000">log_dir</span><span style="color:#981a1a">=</span><span style="color:#000000">f</span><span style="color:#aa1111">'./tensorboard_logs/{dataset}'</span>)
        <span style="color:#555555"># training mode</span>
        <span style="color:#000000">best_v_mrr</span> <span style="color:#981a1a">=</span> <span style="color:#116644">0</span>
        <span style="color:#770088">for</span> <span style="color:#000000">epoch</span> <span style="color:#000000">in</span> <span style="color:#0000ff">range</span>(<span style="color:#000000">opts</span>.<span style="color:#000000">epoch</span>):
            <span style="color:#000000">epoch_loss</span> <span style="color:#981a1a">=</span> <span style="color:#000000">model</span>.<span style="color:#000000">train_batch</span>()
            <span style="color:#770088">if</span> <span style="color:#000000">epoch_loss</span> <span style="color:#000000">is</span> <span style="color:#000000">not</span> <span style="color:#000000">None</span>:
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Training Loss'</span>, <span style="color:#000000">epoch_loss</span>, <span style="color:#000000">epoch</span>)
            <span style="color:#770088">else</span>:
                <span style="color:#000000">print</span>(<span style="color:#aa1111">"Warning: Skipping logging of Training Loss due to NoneType."</span>)
            <span style="color:#000000">model</span>.<span style="color:#000000">train_batch</span>()
            <span style="color:#555555"># eval on val/test set</span>
            <span style="color:#770088">if</span> (<span style="color:#000000">epoch</span> <span style="color:#981a1a">+</span> <span style="color:#116644">1</span>) <span style="color:#981a1a">%</span> <span style="color:#000000">args</span>.<span style="color:#000000">eval_interval</span> <span style="color:#981a1a">==</span> <span style="color:#116644">0</span>:
                <span style="color:#000000">result_dict</span>, <span style="color:#000000">out_str</span> <span style="color:#981a1a">=</span> <span style="color:#000000">model</span>.<span style="color:#000000">evaluate</span>(<span style="color:#000000">eval_val</span><span style="color:#981a1a">=</span><span style="color:#000000">True</span>, <span style="color:#000000">eval_test</span><span style="color:#981a1a">=</span><span style="color:#000000">True</span>)
                <span style="color:#000000">v_mrr</span>, <span style="color:#000000">t_mrr</span> <span style="color:#981a1a">=</span> <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'v_mrr'</span>], <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'t_mrr'</span>]
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Validation MRR'</span>, <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'v_mrr'</span>], <span style="color:#000000">epoch</span>)
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Validation Hits@1'</span>, <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'v_h1'</span>], <span style="color:#000000">epoch</span>)
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Validation Hits@10'</span>, <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'v_h10'</span>], <span style="color:#000000">epoch</span>)
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Test MRR'</span>, <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'t_mrr'</span>], <span style="color:#000000">epoch</span>)
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Test Hits@1'</span>, <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'t_h1'</span>], <span style="color:#000000">epoch</span>)
                <span style="color:#000000">writer</span>.<span style="color:#000000">add_scalar</span>(<span style="color:#aa1111">'Test Hits@10'</span>, <span style="color:#000000">result_dict</span>[<span style="color:#aa1111">'t_h10'</span>], <span style="color:#000000">epoch</span>)
                <span style="color:#000000">print</span>(<span style="color:#000000">out_str</span>)
                <span style="color:#000000">with</span> <span style="color:#0000ff">open</span>(<span style="color:#000000">opts</span>.<span style="color:#000000">perf_file</span>, <span style="color:#aa1111">'a+'</span>) <span style="color:#000000">as</span> <span style="color:#000000">f</span>:
                    <span style="color:#000000">f</span>.<span style="color:#000000">write</span>(<span style="color:#000000">out_str</span>)
                <span style="color:#770088">if</span> <span style="color:#000000">v_mrr</span> <span style="color:#981a1a">></span> <span style="color:#000000">best_v_mrr</span>:
                    <span style="color:#000000">best_v_mrr</span> <span style="color:#981a1a">=</span> <span style="color:#000000">v_mrr</span>
                    <span style="color:#000000">best_str</span> <span style="color:#981a1a">=</span> <span style="color:#000000">out_str</span>
                    <span style="color:#0000ff">print</span>(<span style="color:#000000">str</span>(<span style="color:#000000">epoch</span>) <span style="color:#981a1a">+</span> <span style="color:#aa1111">'\t'</span> <span style="color:#981a1a">+</span> <span style="color:#000000">best_str</span>)
                    <span style="color:#000000">BestMetricStr</span> <span style="color:#981a1a">=</span> <span style="color:#000000">f</span><span style="color:#aa1111">'ValMRR_{str(v_mrr)[:5]}_TestMRR_{str(t_mrr)[:5]}'</span>
                    <span style="color:#000000">model</span>.<span style="color:#000000">saveModelToFiles</span>(<span style="color:#000000">BestMetricStr</span>, <span style="color:#000000">deleteLastFile</span><span style="color:#981a1a">=</span><span style="color:#000000">False</span>)<span style="color:#555555"># show the final result</span>
        <span style="color:#000000">print</span>(<span style="color:#000000">best_str</span>)
        <span style="color:#000000">writer</span>.<span style="color:#000000">close</span>()
        <span style="color:#000000">model</span>.<span style="color:#000000">writer</span>.<span style="color:#000000">close</span>()</span></span>

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【传知代码】知识图谱推理(论文复现)
前言:在浩瀚的信息海洋中,知识如同散落的珍珠,等待着我们去发现、去串联。随着大数据时代的到来,信息的爆炸性增长为我们带来了前所未有的机遇与挑战。如何从海量数据中提取有价值的信息,构建高效、准确的知识体系,成为了当今科技发展的重要课题。知识图谱,作为这一领域的一颗璀璨明珠,以其独特的结构化和语义化特性,为我们提供了一个全新的视角和工具。
Eternity._
2024/11/04
3050
【传知代码】知识图谱推理(论文复现)
融入模糊规则的宽度神经网络结构
在FBLS.py文件中,我们完整地复现了FBLS模型的代码,依照上面提到的算法流程一比一实现了FBLS从输入数据到输出测试结果的过程。
Srlua
2024/11/15
1680
融入模糊规则的宽度神经网络结构
一文带你快速搭建框架(最全MyBatis笔记)
log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下:
用户10216580
2022/12/06
5460
揭秘AI如何揪出图片中的“李鬼”
文字图像篡改,听起来是不是很像电影里的高级犯罪?但这可不仅仅是电影情节,它真实地发生在我们的数字生活中。文档图像篡改指的是对文档图像进行的未经授权的修改,包括文字、图表、印章等内容的删除、修改、添加或替换。 当你怀疑一张图片被篡改时,你会怎么做?是不是会像侦探一样,拿着放大镜仔细观察,寻找蛛丝马迹?AI侦探也是如此,它会运用一种叫做注意力机制的技术,就像人眼一样,不断放大缩小图像,对比观察不同区域的特征,从而精准定位篡改区域。这种技术的运用,不仅提高了检测的准确性,也极大提升了效率,让AI在图像取证领域展现出了惊人的潜力。 但AI侦探的“火眼金睛”是如何炼成的呢?这就不得不提到一项最新的研究成果——一种结合了伪造痕迹增强和多尺度注意力机制的网络框架。这个框架通过深度学习算法,能够从多个维度分析图像,识别出那些肉眼难以察觉的篡改痕迹。 研究人员们通过构建一个大规模的文本图像篡改数据集,训练AI侦探识别各种篡改手段。在实验中,AI侦探展现出了极高的准确率,即使是面对经过精心伪装的篡改图像,也难逃它的“法眼”。 这项技术的出现,无疑为我们的数字生活增添了一份安全保障。它不仅能够帮助我们识别出那些潜在的风险,更能够提升我们对数字内容的信任度。在未来,随着技术的不断进步,AI侦探将更加智能,成为我们守护信息安全的重要伙伴。
Srlua
2024/11/15
2250
揭秘AI如何揪出图片中的“李鬼”
Nuxt.js详解(二)
在vue页面中,通过 this.axios.xxx() 操作ajax。this.axios 与之前 axios等效。
陶然同学
2023/02/24
4.3K0
Nuxt.js详解(二)
遵循人类指令的高质量图像修复
需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获取完整版:地址
Srlua
2024/11/13
1680
遵循人类指令的高质量图像修复
JVM学习- - -虚拟机栈详解
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。
用户10216580
2023/01/07
5540
JVM学习- - -虚拟机栈详解
基于标签相关性的多标签学习
同时我在文件multi_label_learning.py中定义了多种不同的多标签学习分类模型,大家可以自行调用相应的函数来进行实验以验证LDAML算法的有效性,使用方法我会在本文对应的视频中进行讲解。
Srlua
2024/11/15
2310
基于标签相关性的多标签学习
Robust多模态模型的开发
本文提出了一种 Robust 的多模态模型来提高模型对非对齐模态序列随机缺失的鲁棒性。
Srlua
2024/11/15
1810
Robust多模态模型的开发
词云绘制,推荐三种 Python包外加一个在线网站!
本篇文章先介绍几种制作词云的 Python 库,分别是 WordCloud、StyleCloud、Pyecharts;再加一个在线词云制作网站;最后通过代码实操和可视化效果对它们做个简单比较
前端小tips
2021/12/10
1.2K0
词云绘制,推荐三种 Python包外加一个在线网站!
知识图谱嵌入与因果推理的结合
知识图谱通过节点(实体)和边(关系)来表示现实世界中的信息,但如何将这些信息转化为可进行推理和决策的形式,仍然是一个挑战。
二一年冬末
2024/09/22
1K0
知识图谱嵌入与因果推理的结合
轻量级图卷积网络LightGCN介绍和构建推荐系统示例
来源:DeepHub IMBA本文约4500字,建议阅读9分钟今天介绍的这个模型被称作:Light Graph Convolution Network 或 LightGCN¹。 推荐系统是当今业界最具影响力的 ML 任务。从淘宝到抖音,科技公司都在不断尝试为他们的特定应用程序构建更好的推荐系统。而这项任务并没有变得更容易,因为我们每天都希望看到更多可供选择的项目。所以我们的模型不仅必须做出最优推荐,而且还必须高效地做出推荐。今天介绍的这个模型被称作:Light Graph Convolution Netwo
数据派THU
2022/03/21
1.4K0
基于ComplEx模型的知识图谱嵌入详解
在信息时代,知识图谱(Knowledge Graph, KG)作为一种有效的结构化信息表示方式,广泛应用于搜索引擎、推荐系统和智能问答等领域。知识图谱将实体和关系以图的形式组织,为计算机提供了理解和推理知识的能力。然而,如何将知识图谱中的信息有效地转化为计算机可处理的格式,成为了当前研究的热点之一。
二一年冬末
2024/09/20
5421
基于ComplEx模型的知识图谱嵌入详解
『1024 | 码项目』知识图谱嵌入与知识迁移的结合指南
在人工智能和机器学习的快速发展中,知识图谱(Knowledge Graph, KG)已成为知识表示和推理的重要工具。知识图谱通过图结构形式存储实体及其关系,能够有效地捕捉世界的复杂知识。然而,单一知识图谱的构建和应用面临诸多挑战,如数据稀缺、计算资源不足等问题。在这种背景下,知识迁移(Knowledge Transfer)技术应运而生,旨在利用已有知识图谱的知识来增强新知识图谱的学习效果。
二一年冬末
2024/11/04
4080
『1024 | 码项目』知识图谱嵌入与知识迁移的结合指南
pointnet训练文件train.py注释
发布者:全栈程序员栈长,转转请注明出处:https://javaforall.cn/2169.html原文链接:
全栈程序员站长
2021/04/07
6650
世界人工智能大赛OCR赛题方案!
本文以世界人工智能创新大赛(AIWIN)手写体 OCR 识别竞赛为实践背景,给出了OCR实践的常见思路和流程。本项目使用PaddlePaddle 2.0动态图实现的CRNN文字识别模型。
Datawhale
2021/11/16
8640
世界人工智能大赛OCR赛题方案!
相关推荐
【传知代码】知识图谱推理(论文复现)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档