首页 > 编程语言 >GPFL算法的整理

GPFL算法的整理

时间:2023-01-16 22:01:00浏览次数:74  
标签:head BAR 生成 算法 GPFL bodyAtoms 整理 path HAR

算法的论文是《Towards Learning Instantiated Logical Rules from Knowledge Graphs》
https://arxiv.org/pdf/2003.06071.pdf
算法的源码来源于
https://github.com/irokin/GPFL

按target读取数据

                Set<Pair> trainPairs = IO.readPair(graph, trainFile, target);
                Settings.TARGET_FUNCTIONAL = IO.isTargetFunctional(trainPairs);
                Set<Pair> validPairs = IO.readPair(graph, validFile, target);
                Set<Pair> testPairs = IO.readPair(graph, testFile, target);

拓展path,生成Closed Rule(CAR),利用instantiatedRule(oar)生成Head Anchored Rule(HAR)和Both Anchored Rule (BAR)

1.针对每一条三元组(head,relation,tail),用head或者tail拓展path。
2.head与path组成一条规则的雏形。同时,用字母标注生成规则的雏形,生成template。
3.如果head与path[0]并且tail与path[path.size()-1]相同,则该template可以生成ClosedRule。
4.如果不相同,则是instantiatedRule,实例化生成HAR和BAR

用head或者tail拓展path

        @Override
        public void run() {
            Random rand = new Random();
            try(Transaction tx = graph.beginTx()) {
                while(consumer.isAlive()) {
                    Pair pair = trainPairs.get(rand.nextInt(trainPairs.size()));
                    addVisitedPair(pair);
                    Traverser traverser = GraphOps.buildStandardTraverser(graph, pair, Settings.RANDOM_WALKERS);
                    List<Path> paths=new ArrayList<>();
                    for (Path path : traverser) {
                        paths.add(path);
                        Rule rule = Context.createTemplate(path, pair);
                        while (consumer.isAlive()) {
                            if (ruleQueue.offer(rule, 100, TimeUnit.MILLISECONDS))
                                break;
                        }
                        if (!consumer.isAlive())
                            break;
                    }
                }
                tx.success();
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.exit(-1);
            }
        }

head与path组成一条规则的雏形。同时,用字母标注生成规则的雏形,生成template。

    public static Rule createTemplate(Path path, Pair pair) {
        List<Atom> bodyAtoms = buildBodyAtoms(path);
        Atom head = new Atom(pair);
        return new Template(head, bodyAtoms);
    }

标注template是否是Closed,如果是Closed则这个template就是ClosedRule

    Rule(Atom head, List<Atom> bodyAtoms) {
        this.head = head;
        this.bodyAtoms = new ArrayList<>(bodyAtoms);
        Atom lastAtom = bodyAtoms.get(bodyAtoms.size() - 1);
        closed = head.getObjectId() == lastAtom.getObjectId();
        Atom firstAtom = bodyAtoms.get( 0 );
        fromSubject = head.getSubjectId() == firstAtom.getSubjectId();
    }

对非Closed的Rule生成HAR和BAR

                /*
                 * 对path=1的instantied rule拓展,生成HAR或者BAR
                 * 定义规则的读写类
                 * tempFiltercontents只写入ABS:instantiated开头的,后接HAR或者BAR,对应的是各种类型的文件夹
                 * ruleFilecontens只写入HAR或者BAR,对应只有一个rules.txt文件夹
                 *
                 */
                if(Settings.ESSENTIAL_TIME != -1 && Settings.INS_DEPTH != 0)
                    EssentialRuleGenerator.generateEssentialRules(trainPairs, validPairs
                            , context, graph, ruletempFile, ruleFile);
                /*
                 * 对path>1的instantied rule拓展,生成HAR或者BAR
                 * !!!!!!!!!!!!!!!!!!!!!!!!!!!
                 * generalization没把closed的规则写进去,specialization把closed的规则也写进去了
                 * tempFiltercontents两种方式写入,一类是ABS:closed的,另一类是ABS:instantiated开头的,后接HAR或者BAR,对应的是各种类型的文件夹
                 * ruleFilecontens写入HAR或者BAR以及Closed的,对应只有一个rules.txt文件夹
                 */
                specialization(context, trainPairs, validPairs, ruletempFile);

用生成的规则CAR,HAR,BAR,生成答案集合

                /*
                 * !!!!!!!!!!!query中会生成newTriple
                 * 生成predictionMap (答案集合),key是query,value是所有的answer值
                 */
                ruleApplication(context, ruletempFile);

标签:head,BAR,生成,算法,GPFL,bodyAtoms,整理,path,HAR
From: https://www.cnblogs.com/csjywu01/p/17056158.html

相关文章

  • 银行家算法中安全检查算法正确性证明
    符号说明\(<_{\forall}\):如果两个同维行向量\(A\)、\(B\)中,\(A\)中任意一个元素都小于\(B\)中对应位置上的元素,则\(A<_{\forall}B\)为真。\(<_{\exist}\):如果两......
  • 算法-位运算
    思路:将原始数组和添加重复数字的数组相抑或,最后的结果就是重复的数字。#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;intmain(......
  • 代码随想录算法训练营第六天 哈希法 | 242.有效的字母异位词 | 349. 两个数组的交集
    哈希表哈希表适用于快速判断元素是否存在于表中,针对于哈希碰撞,有拉链法和线性探测法拉链法碰撞的元素被储存在链表中,拉链法需要根据数据规模选择适当的表大小,既不造成表......
  • AI 八数码A_star算法问题-实验报告
    一题目要求:        八数码问题的A星搜索算法实现        要求:设计估价函数,并采用c或python编程实现,以八数码为例演示A星算法的搜索过程,争取做到直观、清......
  • AI A_star算法野人渡河-实验报告
    1、问题描述及实验要求       请用A*算法实现野人过河问题,(1)分析设计估价函数f(2)采用C语言或Python编程实现(代码中适当加注释,输出具有可读性)。       问题描......
  • AI K-means算法对数据进行聚类分析-实验报告
    1、问题描述及实验要求K-means算法对data中数据进行聚类分析(1)算法原理描述(2)算法结构(3)写出K-means具体功能函数(不能直接调用sklearn.cluster(Means)功能函数)具体函数功......
  • 代码随想录算法训练营第20天
    今日刷题4道 654.最大二叉树, 617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树● 654.最大二叉树题目链接/文章讲解:https://programmercarl.com/0654......
  • C语言最短路径[迪杰斯特拉算法][2023-01-16]
    C语言最短路径[迪杰斯特拉算法][2023-01-16]算法与数据结构课程设计要求一、 题目:最短路径二、课程设计报告要求1、设计目的(1)要求熟练掌握C语言的基本知识和编程技......
  • 五子棋html游戏代码与算法介绍
    五子棋html游戏代码与算法介绍运行图片目录路径五子棋.html五子棋算法进行下一个游戏的开发!注意事项我会把html文件、css文件提供下载地址,文件夹路径也展示给大家。但是图片......
  • 寒假算法学习第二周
    动态规划这个东西3步走首先给一个例子配合理解一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。1:首先确定数组含义a[N]这个东......