知识推理分类 (https://zhuanlan.zhihu.com/p/78744231?from_voters_page=true) 基于逻辑的推理 基于规则的推理 基于分布式的推理 一,逻辑推理与本体推理 1. 背景:OWL语言逻辑基础——描述逻辑 2. 核心算法:Tableaux算法 3. 相关工具: FaCT++、Racer、Pellet、Hermit 4. 本体推理的局限: (1)仅支持本体公理上的推理 (2)无法定义自己的推理过程 二,基于规则的推理 1. 基于逻辑编程的方法 原理:逻辑编程是种编程典范,它设定答案须符合的规则来解决问题,而非设定步骤来解决问题。即: 事实+规则=结果 编写方法:Prolog语言 (SWI-Prolog ) 2. 基于逻辑编程改写的方法——Datalog Datalog是Prolog的一种适应于知识库的改进形式语言。Datalog是一种数据查询语言语法与Prolog相似 Datalog优缺点: 简单容易学习 克服Prolog语言的缺点:表示方法不够规范,不宜在计算机中使用和处理; 适合于处理具有大容量的数据和知识; 可以改善递归查询算法。 3. Jena Jena是一个开源的Java语义网框架,提供了RDFS、OWL和通用规则推理机 4. 基于一阶查询重写的方法 常见思路:以Datalog为中间语言,先将SPARQL语言转化为Datalog,然后再将Datalog重写为SQL 5. AMIE AMIE算法的全称是基于不完备知识库的关联规则挖掘算法(Association Rule Mining under Incomplete Evidence), 通过依次学习预测每种关系的规则:对于每种关系,从规则体为空的规则开始,通过三种操作扩展规则体部分,保留支持度大于阈值的候选(闭式)规则。 三,基于分布式的推理. 分布式推理 将实体向量表示(Embedding)在低维稠密向量空间中,然后进行计算和推理。 5.1 经典翻译模型:Trans系列 TransE TransH TransR TransD 5.2 张量分解的模型 张量分解算法是将整个知识图谱看作一个大的张量,通过张量分解技术分解为很多个小的张量片,即将高维的知识图谱进行降维处理 经典算法:RESCAL 5.3 距离模型: 经典算法:SE模型 5.4 其他模型:双线性模型,单层神经网络模型 5.5 开源工具:OpenKE 四,路径推理 1. 基本原理: 根据知识图谱图形结构的特点,利用实体间的路径关系进行推理计算,其实质是摒弃人为编写规则的模式,让机器借助模式识别等方式自助的学习规则和特征 2. 经典算法:PRA(Path Ranking Algorithm) 2.1 前身:Page Rank 2.2 PRA的主要原理: 通过随机游走来学习知识图谱的关系特征,能够定量计算两个节点之间是否有关系,存在关系的概率有多大。 2.3 PRA的改进:SFE模型 2.4 其他算法: Adamic Adar algorithm、Common Neighbors algorithm 、Preferential Attachment algorithm等 五、 总结 工业上:逻辑、规则、PRA 学术上:分布式(知识表示) ##------------------------------------------------------------------------------- 逻辑包括形式逻辑和数理逻辑(符号逻辑) 形式逻辑包括归纳逻辑与演绎逻辑 命题逻辑、一阶逻辑、高阶逻辑、模态逻辑、时态逻辑、空间逻辑、认知逻辑、描述逻辑、概率逻辑、逻辑程序、答题程序、过程规则、模糊逻辑……数理逻辑 形式逻辑(普通逻辑)、数理逻辑、哲学逻辑、模糊逻辑、非形式逻辑、辩证逻辑、制约逻辑等。 一阶逻辑在知识图谱的知识推演中作用,如何获取一阶逻辑? https://www.zhihu.com/question/37457849 漆桂林: 简单的本体推理(DL-Lite)对于知识图谱还是有用的 另外,关系的functionality声明也可以用于检测不一致。 通过subclass, domain, range,可以对知识图谱做补全。用关联规则挖掘就可以做出来了,见AMIE的工作。 鲍捷: 推理的成本很高,所以在工业界的实践中,逐渐就把推理废弃了。 大部分的推理任务,是可以转化为图上的查询的。 推理机是很强大,但是大多数工程师掌握不了。 所以SPARQL rules或者neo4j的查询也就够用了。 一阶逻辑系统在实战中也比较难以驾驭,通常会用描述逻辑或者逻辑编程logic programming。基于过程语义的规则系统比较实用,如 RIF PRD。 ##------------------------------------------------------------------------------- Neo4j中推理: 1,关系的传递性 规则: if: 实体1-[依赖]-实体2 实体2-[依赖]-实体3 then: 实体1-[依赖]-实体3 inference.py中已经实现 2,关系的逆反 规则: if: 姚明-[Wife]-叶莉 then: 叶莉-[Husband]-姚明 3,常识规则 规则:if A->B && B->C then A->C if: 实体1-[关系1]-实体2 实体2-[关系2]-实体3 then: 实体1-[关系3]-实体3 示例: create (n:Human {name:"姚沁蕾"}) create (y:Human {name:"叶莉"}) create (m:Human {name:"姚明"}) merge p = (n)<-[:Father]-(m)-[:Wife]->(y)-[:Mother]->(n) return p match (a)-[:Wife]->(b)-[:Mother]->(c) return (a)-[]-(c) match (n:Human) detach delete n; ##------------------------------------------------------------------------------ OWL中的属性特性 1,传递属性(Transitive) P(x,y) 与 P(y,z) 蕴含 P(x,z), locatedIn是传递属性。 2,对称属性(Symmetric) P(x,y)当且仅当P(y,x), siblings是对称属性 3,逆(owl:inverseOf) P1(x,y) 当且仅当P2(y,x) P1是wife,P2是husband 4,函数型属性(Functional) P(x,y) 与P(x,z) 蕴含 y = z 5,反函数型的(InverseFunctional) P(y,x) 与 P(z,x) 蕴含 y = z 类(Class 概念) 描述: Equivalent To(等价)------- SubClass Of(子类)------- General class axioms(通用类公理) Subclass Of(Anonymous Ancestor)(继承匿名的类)继承父类的关联关系,匿名类定义在父类中,被子类继承,是子类的必要条件 Instances(实例)类所包含的个体 Target for Key(关键字),描述类的行为和属性 Disjoint With(不相交)------- 互斥的类,不存在一个个体同时属于两个 Disjoint class Disjoint Union Of(不相交的类集合)互斥的类的集合,一个类的所有子类都不相交 关系(Object Property) Characteristics:特性: Functional(函数型) InverseFunctional(反函数型) Transitive(传递性)------- Symmetric(对称性)------- Asymmetric(非对称性) Reflexive(自反性) Irreflexive(反自反性) Description:描述: Equivalent to(等价) Subproperty of(子属性) Inverse of(逆)------- Domains(定义域) Ranges(值域) Disjoint With(不相交) Superproperty Of(父属性) 属性(Data Property) Characteristics:特性: Functional(函数型) Description:描述: Equivalent to(等价) Subproperty of(子属性) Domains(定义域) Ranges(值域) Disjoint With(不相交) 实例(instances) Description:描述: Type(类型) Same Individual As(相同的实体) Different Individual(不同的实体) property assertions(属性断言) Object property assertions:对象关联声明,通过事物关联其它个体 Data property assertions:数据关联声明,设置个体数据关联 Negative object property assertions:否定对象关联声明 Negative data property assertions:否定数据关联声明
参考:
https://zhuanlan.zhihu.com/p/78744231?from_voters_page=true