由于工作原因,需要在系统里建立图谱推理功能,因此简单学习了浙江大学 陈华钧教授 知识图谱导论课程课件,这里记录下学习笔记。
• 基于描述逻辑的推理(如DL-based) • 基于图结构和统计规则挖掘的推理(如: PRA、 AMIE) • 基于知识图谱表⽰学习的推理(如: TransE) • 基于概率逻辑的⽅法(如: Statistical Relational Learning)
基于符号逻辑的推理——本体推理
基于图结构和统计规则挖掘的推理
主要方法: • 基于路径排序学习⽅法(PRA, Path ranking Algorithm) • 基于关联规则挖掘⽅法(AMIE)
基于知识图谱表示学习的关系推理
基于概率逻辑的⽅法——Statistical Relational Learning
概率逻辑学习有时也叫Relational Machine Learning (RML),关注关系的不确定性和复杂性。 通常使用Bayesian networks or Markov networks
图谱中基于RDF来作为资源描述语言,RDF是Resource Description Framework的简称。
但是RDF表示关系层次受限,因此有了RDFS,在RDF的基础上,新增了Class, subClassOf, type, Property, subPropertyOf, Domain, Range
词汇,可以更好的表述相关关系。
基于RDFS,可以做一些简单的推理
OWL在RDFS的基础上,进一步扩展了一些复杂类型、约束:
因此,我们也叫OWL为本体语言:
OWL的描述逻辑系统:
描述逻辑与OWL的对应:
推理就是通过各种方法获取新的知识或者结论,这些知识和结论满足语义。
OWL本体推理
例子:
典型的推理算法: Tableaux,适用于检查某一本体概念的可满足性,以及实例检测,基本思想是通过一系列规则构建Abox,以检测可满足性,或者检测某一实例是否存在于某概念,基本思想类似于一阶逻辑的归结反驳。
本体推理的局限:
因此,引入规则推理
Datalog的语法:
Datalog程序是规则的集合:
has_child(X, Y) : −has_son(X, Y).
has_child(Alice, Bob) : −
Datalog 推理举例:
相关工具:
产生式系统,一种前向推理系统,可以按照一定机制执行规则从而达到某些目标,与一阶逻辑类似,也有区别,可以应用来做自动规划和专家系统。
产生式系统的组成:
产生式表示:
IF conditions THEN actions
LHS,是条件的集合,各条件是且(AND)的关系,当所有条件均被满足,则该规则触发。 条件形如(type attr1: spec1 attr2:spec2)条件的形式:
RHS,是执行动作(action)的序列,执行时依次运行。动作的种类有ADD pattern,Remove i,Modify i,可以理解为对WME(Working Memory)的CUD;
产生式举例:
IF (Student name: x)
Then ADD (Person name: x)
也可以写作:
(Student name: x) ⇒ ADD (Person name: x)
推理引擎
➤ 控制系统的执行:
产生式系统=事实集+产生式集合+推理引擎
产生式系统执行流程
模式匹配——RETE算法
相关工具介绍
Model m = ModelFactory.createDefaultModel();
Reasoner reasoner = new
GenericRuleReasoner(Rule.rulesFromURL("file:rule.txt"));
InfModel inf = ModelFactory.createInfModel(reasoner, m)
➤ 将连接两个实体的路径作为特征来预测其间可能存在的关系
• 通用关系学习框架 (generic relational learning framework)
路径排序算法 – Path Ranking Algorithm (PRA)
知识图谱嵌⼊模型: TransE
TransE(Translating Embeddings for Modeling Multi-relational Data. NIPS 3013)
⽬标函数:
损失函数:
知识图谱嵌⼊模型: 预测问题
NO BB, show code:
Model myMod = ModelFactory.createDefaultModel();
String finance = “http://www.example.org/kse/finance#”;
// 实体
Resource shb = myMod.createResource(finance + "孙宏斌");
Resource rczg = myMod.createResource(finance + "融创中国");
// 关系
Property control = myMod.createProperty(finance + "执掌");
// 加入三元组
myMod.add(shb, control, rczg);
上图所示的图谱,包含如下的三元组:
finance :孙宏斌 finance :control finance :融创中国
finance :贾跃亭 finance :control finance :乐视网
finance :融创中国 rdf:type finance :地产公司
finance :地产公司 rdfs:subclassOf finance:公司
finance:公司 rdfs:subclassOf finance:法人实体
finance:孙宏斌 rdf:type finance:公司
finance:孙宏斌 rdf:type finance:人
finance :人 owl:disjointWith finance:公司
我们可以依次加入,代码略。
jena推理使用的是InfModel,可以基于Model构造,实际上在原来的Model之上加了个RDFS推理机
InfModel inf_rdfs = ModelFactory.createRDFSModel(myMod);
• 上下位推理
通过listStatements来获取是否有满足条件的三元组,从而实现判断,subClassOf是RDFS里的vob,因此使用RDFS.subClassOf。
public static void subClassOf(Model m, Resource s, Resource o) {
for (StmtIterator i = m.listStatements(s, RDFS.subClassOf, o); i.hasNext(); ) {
Statement stmt = i.nextStatement();
System.out.println(" yes! " );
break;
}
}
subClassOf(inf_rdfs, myMod.getResource(finance+"地产公司"),myMod.getResource(finance+”法人实体"));
• 针对类别的推理,OWL推理机可以针对个体类别做出完备推理,即补充完整该个体的所有类别;在查询的时候,可以直接打印出所有类别!
首先构建owl推理机:
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel inf_owl = ModelFactory.createInfModel(reasoner, myMod);
然后执行类别推理
public static void printStatements(Model m, Resource s, Property p, Resource o) {
for (StmtIterator i = m.listStatements(s,p,o); i.hasNext(); ) {
Statement stmt = i.nextStatement();
System.out.println(" - " + PrintUtil.print(stmt));
}
}
printStatements(inf_owl, rczg, RDF.type, null);
• 不一致检测, jena的另一个常用推理就是检验data的不一致。
Model data = FileManager.get().loadModel(fname);
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel inf_owl = ModelFactory.createInfModel(reasoner, myMod);
ValidityReport validity = inf_owl.validate();
if (validity.isValid()) {
System.out.println(“没有不一致");
} else {
System.out.println(“存在不一致,如下: ");
for (Iterator i = validity.getReports(); i.hasNext(); ) {
System.out.println(" - " + i.next());
}
}
作者:Jadepeng 出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi 您的支持是对博主最大的鼓励,感谢您的认真阅读。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。