知识推理分类
基于逻辑的推理
基于规则的推理
基于分布式的推理
一,逻辑推理与本体推理
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:否定数据关联声明