前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【传知代码】知识图谱推理(论文复现)

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

作者头像
Eternity._
发布2024-11-04 08:03:49
1670
发布2024-11-04 08:03:49
举报
文章被收录于专栏:登神长阶

前言:在浩瀚的信息海洋中,知识如同散落的珍珠,等待着我们去发现、去串联。随着大数据时代的到来,信息的爆炸性增长为我们带来了前所未有的机遇与挑战。如何从海量数据中提取有价值的信息,构建高效、准确的知识体系,成为了当今科技发展的重要课题。知识图谱,作为这一领域的一颗璀璨明珠,以其独特的结构化和语义化特性,为我们提供了一个全新的视角和工具。

知识图谱是一种图数据结构,它以实体、属性和关系为基本元素,将现实世界中的事物及其相互关系以图的形式进行表示。这种表示方式不仅直观易懂,而且便于进行复杂的推理和分析。近年来,随着人工智能技术的飞速发展,知识图谱在智能问答、推荐系统、语义搜索等多个领域展现出了巨大的应用潜力。

让我们一同踏上探索知识图谱推理奥秘的旅程,共同开启智慧世界的新篇章!


1. 论文概述


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

论文名称: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

2. 论文方法


为了优化推理过程并缩减计算开销,我们致力于通过高效的采样技术灵活调整信息传播路径。在此过程中,我们充分考量查询实体与关系的相互依赖,同时规避不必要的无关实体介入,以此提升推理效率并降低成本。这要求我们设计创新的采样策略,确保在扩展信息传播路径时,能精确锁定目标答案实体。为此,我们提出了一种基于图神经网络(GNN)的AdaProp方法,该方法能够依据特定查询动态调整信息传播路径,从而实现精准预测。

与传统方法的比较

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

3. 实验部分


实验条件


使用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指令,可视化结果

实验结果


4. 核心代码


代码语言:javascript
复制
# start
 check all output paths
    checkPath('./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 mode
        best_v_mrr = 0
        for 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 set
            if (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_mrr
                    best_str = out_str
                    print(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 result
        print(best_str)
        writer.close()
        model.writer.close()

编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 论文概述
  • 2. 论文方法
  • 3. 实验部分
    • 实验条件
      • 数据集
        • 实验步骤
          • 实验结果
          • 4. 核心代码
          相关产品与服务
          灰盒安全测试
          腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档