知识图式推理与实践 (1)
由于工作原因,需要在系统里建立图谱推理功能,因此简单学习了浙江大学 陈华钧教授 知识图谱导论课程课件,这里记录下学习笔记。
知识图谱推理的主要方法
• 基于描述逻辑的推理(如DL-based) • 基于图结构和统计规则挖掘的推理(如: PRA、 AMIE) • 基于知识图谱表⽰学习的推理(如: TransE) • 基于概率逻辑的⽅法(如: Statistical Relational Learning)
基于符号逻辑的推理——本体推理
- 传统的符号逻辑推理中主要与知识图谱有关的推理手段是基于描述逻辑的本体推理。
- 描述逻辑主要被⽤来对事物的本体进⾏建模和推理,⽤来描述和推断概念分类及其概念之间的关系。
- 主要方法:
- 基于表运算(Tableaux)及改进的⽅法: FaCT++、 Racer、 Pellet Hermit等
- 基于Datalog转换的⽅法如KAON、 RDFox等
- 基于产⽣式规则的算法(如rete): Jena 、 Sesame、 OWLIM等
基于图结构和统计规则挖掘的推理
主要方法: • 基于路径排序学习⽅法(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是知识图谱语言中最规范, 最严谨, 表达能力最强的语言
- 基于RDF语法,使表示出来的文档具有语义理解的结构基础
- 促进了统一词汇表的使用,定义了丰富的语义词汇
- 允许逻辑推理
OWL的描述逻辑系统:
- 一个描述逻辑系统包括四个基本的组成部分
- 1)最基本的元素: 概念、关系和个体(实例),
- 2) TBox术语集 (概念术语的公理集合) - 泛化的知识
- 描述概念和关系的知识,被称之为公理 (Axiom)
- 3) ABox断言集 (个体的断言集合) --具体个体的信息
- ABox包含外延知识 (又称断言 (Assertion)),描述论域中 的特定个体
- 4) TBox和ABox上的推理机制
- 不同的描述逻辑系统的表示能力与推理机制由于对这四个组成部分的不同选择而不同
描述逻辑与OWL的对应:
推理就是通过各种方法获取新的知识或者结论,这些知识和结论满足语义。
OWL本体推理
- 可满足性
- 本体可满足性: 检查一个本体是否可满足,即检查该本体是否有模型。
- 概念可满足性,检查某一概念的可满足性,即检查是否有模型,使得对该概念的解释不是空集。
- 分类(classification),针对Tbox的推理,计算新的概念的包含关系
- 实例化(materialization),即计算属于某个概念或关系的所有实例的集合。
例子:
典型的推理算法: Tableaux,适用于检查某一本体概念的可满足性,以及实例检测,基本思想是通过一系列规则构建Abox,以检测可满足性,或者检测某一实例是否存在于某概念,基本思想类似于一阶逻辑的归结反驳。
基于逻辑编程改写的方法
本体推理的局限:
- (1) 仅支持预定义的本体公理上的推理 (无法针对自定义的词汇支持灵活推理)
- (2) 用户无法定义自己的推理过程
因此,引入规则推理
- (1) 可以根据特定的场景定制规则,以实现用户自定义的推理过程
- (2) Datalog语言可以结合本体推理和规则推理
Datalog的语法:
- 原子(atom)
- p(t1,t2,...,tn)
- p是谓词,n是目数,ti是项
- 例如has_child(x,y)
- 规则(rule)
- H:-B1,B2,...,Bm
- has_child(X, Y) :−has_son(X, Y)
- 事实(Fact)
- F(c1,c2,...cn):-
- 没有体部且没有变量的规则
- 例如:has_child(Alice,Bob):-
Datalog程序是规则的集合:
has_child(X, Y) : −has_son(X, Y).
has_child(Alice, Bob) : −
Datalog 推理举例:
相关工具:
基于产生式规则的方法
产生式系统,一种前向推理系统,可以按照一定机制执行规则从而达到某些目标,与一阶逻辑类似,也有区别,可以应用来做自动规划和专家系统。
产生式系统的组成:
- 事实集合 (Working Memory)
- 产生式/规则集合 (Production Memory, PM)
- 推理引擎
产生式表示:
IF conditions THEN actions
- conditions是由条件组成的集合,又称为LHS(Left Hand Side)
- actions是由动作组成的序列,又称为RHS(Right Hand Side)
LHS,是条件的集合,各条件是且(AND)的关系,当所有条件均被满足,则该规则触发。 条件形如(type attr1: spec1 attr2:spec2)条件的形式:
- 原子 (person name:alice)
- 变量(person name:x)
- 表达式 (person age:[n+4]
- 布尔 (person age:{>10})
- 约束的与、或、非
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)
推理引擎
➤ 控制系统的执行:
- 模式匹配,用规则的条件部分匹配事实集中的事实,整个LHS都被满足的规,则被触发,并被加入议程(agenda)
- 解决冲突,按一定的策略从被触发的多条规则中选择一条
- 执行动作,执行被选择出来的规则的RHS,从而对WM进行一定的操作
产生式系统=事实集+产生式集合+推理引擎
产生式系统执行流程
模式匹配——RETE算法
- 将产生式的LHS组织成判别网络形式
- 用空间换时间
相关工具介绍
- Drools
- Jena 提供了处理RDF、 RDFS、 OWL数据的接口,还提供了一个规则引擎
Model m = ModelFactory.createDefaultModel();
Reasoner reasoner = new
GenericRuleReasoner(Rule.rulesFromURL("file:rule.txt"));
InfModel inf = ModelFactory.createInfModel(reasoner, m)
Inductive Reasoning – 基于图的方法
PRA
➤ 将连接两个实体的路径作为特征来预测其间可能存在的关系
• 通用关系学习框架 (generic relational learning framework)
路径排序算法 – Path Ranking Algorithm (PRA)
TransE
知识图谱嵌⼊模型: TransE
TransE(Translating Embeddings for Modeling Multi-relational Data. NIPS 3013)
⽬标函数:
损失函数:
知识图谱嵌⼊模型: 预测问题
- 测试三元组( h, r, t )
- 尾实体预测( h, r, ? )
- 头实体预测( ?, r, t )
PRA vs. TransE
基于Jena实现演绎推理
构建model
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 您的支持是对博主最大的鼓励,感谢您的认真阅读。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
推荐阅读
-
数据建模操作岗】相关知识点学习与整理简章-1.数据建模基本概念
-
玩转MySQL:触发器和游标的基础知识与实践指南
-
【摩尔线程+Colossal-AI强强联手】MusaBert登上CLUE榜单TOP10:技术细节揭秘 - 技术实力:摩尔线程凭借"软硬兼备"的技术底蕴,让MusaBert得以从底层优化到顶层。其内置多功能GPU配备AI加速和并行计算模块,提供了全面的AI与科学计算支持,为AI推理和低资源条件下的大模型训练等场景带来了高效、经济且环保的算力。 - 算法层面亮点:依托Colossal-AI AI大模型开发系统,MusaBert在训练过程中展现出了卓越的并行性能与易用性,特别在预处理阶段对DataLoader进行了优化,适应低资源环境高效处理海量数据。同时,通过精细的建模优化、领域内数据增强以及Adan优化器等手段,挖掘和展示了预训练语言模型出色的语义理解潜力。基于MusaBert,摩尔线程自主研发的MusaSim通过对比学习方法微调,结合百万对标注数据,MusaSim在多个任务如语义相似度、意图识别和情绪分析中均表现出色。 - 数据资源丰富:MusaBert除了自家高质量语义相似数据外,还融合了悟道开源200GB数据、CLUE社区80GB数据,以及浪潮公司提供的1TB高质量数据,保证模型即便在较小规模下仍具备良好性能。 当前,MusaBert已成功应用于摩尔线程的智能客服与数字人项目,并广泛服务于语义相似度、情绪识别、阅读理解与声韵识别等领域。为了降低大模型开发和应用难度,MusaBert及其相关高质量模型代码已在Colossal-AI仓库开源,可快速训练优质中文BERT模型。同时,通过摩尔线程与潞晨科技的深度合作,仅需一张多功能GPU单卡便能高效训练MusaBert或更大规模的GPT2模型,显著降低预训练成本,进一步推动双方在低资源大模型训练领域的共享目标。 MusaBert荣登CLUE榜单TOP10,象征着摩尔线程与潞晨科技联合研发团队在中文预训练研究领域的领先地位。展望未来,双方将携手探索更大规模的自然语言模型研究,充分运用上游数据资源,产出更为强大的模型并开源。持续强化在摩尔线程多功能GPU上的大模型训练能力,特别是在消费级显卡等低资源环境下,致力于降低使用大模型训练的门槛与成本,推动人工智能更加普惠。而潞晨科技作为重要合作伙伴,将继续发挥关键作用。
-
深入探索SLAM14(1) v3_3 后端改进:BA位姿图优化详解与G2O 图优化实践
-
在掘金与CSDN平台上,针对Vue(VueCLI)主流应用中整合Cesium的实践教程与问题解析——疑问1:
-
实战攻略:工作流引擎深度解析 - 思维导图与具体案例" 目录概览: 1. 业务场景实战合集 2. 背景介绍:处理复杂场景 - 如请假、离职流程中的多步骤审批差异 - 详细示例:请假与离职流程的应用演示 3. 案例应用实例: - 内部企业系统(如OA)中的请假、离职流程审批 - 在内容创作工具(如PPT、海报模板)提供下载功能时,针对不同租户设置个性化审批流程 4. 技术选型与实践探讨 注:图片文件名 - "思维导图.png" 和 "请假流程.png" 无需修改。
-
理解深度学习基础:从神经网络构造到实践 - 1.评分函数介绍 2.SVM损失函数解析 3.正规化惩罚项说明 4.Softmax与交叉熵损失函数详解 5.前向传播中的最优化挑战 6.批量大小(batch_size)实操指南...
-
如何用Python实现GM(1,1)灰色预测模型: 解释与实践中的灰色系统预估与公式推导步骤
-
三步阅读法详解:第三次阅读 - 消化与转化篇。深入研读后,我们领略了书籍精华,但关键在于将这些精彩之处内化为个人的知识。为了真正吸收并掌握,第三次阅读需聚焦于思考:书中知识如何能应用到自己生活或工作中?又该如何从不同角度实施?通过实践应用,进一步深化对原作的理解和领悟。
-
深度学习日-25:入门-V1 算法实践与分析