归纳逻辑编程能否处理不完整和模糊的结构化知识
在知识处理领域,不完整和模糊的结构化知识是常见的挑战。本文将探讨归纳逻辑编程(ILP)在处理这类知识方面的能力,特别是如何学习模糊描述逻辑(DL)的包含公理。同时,还会介绍一种在一阶Datalog框架下实现高效高阶逻辑学习的方法。
模糊描述逻辑基础
描述逻辑(DL)在本体设计中起着关键作用,例如DL - Lite是OWL 2 QL配置文件背后的DL,适用于处理大量实例数据和查询回答任务。然而,现实世界中的知识往往具有不完整性和模糊性。DL基于开放世界假设(OWA)处理不完整性,而模糊DL则用于处理模糊性。
为了处理模糊性,我们采用基于无否定的DL - Lite的模糊扩展逻辑,并使用Gödel逻辑。一个知识库 (\mathcal{K}=\langle\mathcal{F},\mathcal{O},\mathcal{A}\rangle) 由以下三个组件组成:
1.
事实组件 (\mathcal{F})
:是有限个形如 (R(c_1,\ldots,c_n)[s]) 的表达式集合,其中 (R) 是 (n) 元关系,(c_i) 是常量,(s\in[0,1]) 是真值程度。若省略分数组件,则默认值为1。事实存储在关系数据库中。
2.
本体组件 (\mathcal{O})
:是有限个包含公理的集合,形式为 (R_{l1}\sqcap\cdots\sqcap R_{lm}\sqsubseteq R_r),其中 (m\geq1),所有 (R_{li}) 和 (R_r) 具有相同的元数。直观语义是,如果元组 (c) 是每个关系 (R_{li}) 的实例,程度为 (s_i),那么 (c) 是 (R_r) 的实例,程度为 (\min(s_1,\ldots,s_m))。
3.
抽象组件 (\mathcal{A})
:是有限个抽象语句的集合,形式为 (R\leftarrow sql),其中 (sql) 是返回 (n) 元组 (\langle c_1,\ldots,c_n\rangle)((n\leq2))的SQL语句,分数由 (cscore) 列确定。元组按分数降序排列,若省略分数,则默认值为1。
查询语言允许制定带有评分函数的联合查询,以对答案进行排名。一个排名查询的形式为:
q(x)[s]\leftarrow\exists y.R_1(z_1)[s_1],\ldots,R_l(z_l)[s_l],p_1(c_1),\ldots,p_n(c_n)\text{ OrderBy }f(s_1,\ldots,s_l,p_1(c_1),\ldots,p_n(c_n))
其中 (q) 是 (n) 元关系,(R_i) 是 (n_i) 元关系,(x) 是区分变量,(y) 是存在量化的非区分变量,(p_j) 是模糊谓词,(f) 是评分函数。
学习模糊DL包含公理
考虑一个学习问题,目标概念 (H) 是DL - Lite原子概念,背景理论 (\mathcal{B}) 是上述形式的DL - Lite类知识库,训练集 (\mathcal{E}) 是模糊DL - Lite类事实的集合,标记为 (H) 的正例或反例。目标理论 (\mathcal{T}) 是形如 (H\sqsubseteq B = C_1\sqcap\cdots\sqcap C_m) 的包含公理集合。
为了学习这种形式的包含公理,我们定义了计算包含公理置信度的公式:
[
confidence = \frac{\sum_{t\in P}B(t)\Rightarrow H(t)}{\sum_{t\in D}B(t)\Rightarrow H(t)}
]
其中 (P) 是蕴含覆盖正例的实例集合,(D) 是蕴含覆盖任何实例(正例或反例)的集合,(B(t)\Rightarrow H(t)) 表示实例 (t) 上蕴含的程度。
以酒店分类为例,假设目标概念 (H) 是 “GoodHotel”,背景理论包含关系数据库存储的事实和本体中的包含公理,以及抽象语句集合。通过提交适当的查询,可以轻松确定置信度分数。例如,计算公理 (Hotel\sqcap\exists cheapPrice.\top\sqcap\exists closeTo.Attraction\sqsubseteq GoodHotel) 的置信度。
以下是该过程的流程图:
graph TD;
A[定义目标概念和背景理论] --> B[确定训练集];
B --> C[定义包含公理形式];
C --> D[计算置信度公式];
D --> E[提交查询确定置信度分数];
E --> F[评估包含公理];
高阶逻辑学习在一阶Datalog框架中的应用
在归纳逻辑编程中,通常假设要学习的概念可以用一阶逻辑简洁表示。然而,使用高阶逻辑(HOL)可以提高预测准确性。本文引入了灵活高阶Horn子句(FHOHC)框架,它比以前使用的形式更具表达力,并且可以在Datalog的一个片段中模拟。
FHOHC基于一阶Horn子句,允许谓词(至少二阶)变量。为了在一阶Datalog中模拟HOL和FHOHC,我们引入了扁平持有Datalog程序(FHDP)。具体步骤如下:
1. 将每个原子 (P(t_1,\ldots,t_k)) 替换为 (holds(P,t_1,\ldots,t_k))。
2. 应用扁平化算法。
使用FHDP和Progol进行高阶逻辑学习(HOLL)具有以下优点:
- 可以直接使用一阶ILP系统,如Progol。
- 受益于Datalog的演绎效率和可判定性。
- 比HOHC具有更灵活的头部,能够处理更多学习设置。
实验验证
通过三个实验验证了Datalog方法在不同HOLL设置中的应用:
| 设置 | 描述 | 实验结果 |
| ---- | ---- | ---- |
| HOLL设置1 | 用HOL背景知识归纳学习FOL假设 | FHDP方法比标准Progol和λProgol更快,且具有相同的预测准确性 |
| HOLL设置2 | 用FOL背景知识归纳学习HOL假设 | 可以学习具有灵活头部的高阶子句,运行时间不到一秒 |
| HOLL设置3 | (原文未详细给出此设置实验内容) | - |
以下是HOLL设置1的输入文件示例:
:- modeh(*,holds(ancestor,+person,+person))?
:- modeb(*,holds(#predso,#predpp,+person,+person))?
predso(trans_clos). predpp(parent). predpp(married).
person(X) :- male(X). person(X) :- female(X).
holds(trans_clos,R,X,Y) :- holds(R,X,Y).
holds(trans_clos,R,X,Z) :- holds(R,X,Y), holds(trans_clos,R,Y,Z).
prune(holds(P,A,B),Body) :- in(holds(trans_clos,P,A,B),Body).
holds(married,michael_I,eudoxia_stresh). (…) holds(parent,michael_I,alexis_I). (…)
:-holds(ancestor,maria_l,nat_narysh). (…) holds(ancestor,alex_II,maria_6). (…)
Learned clause: holds (ancestor, X,Y) :- holds (tmns-clos, parent, X,Y).
综上所述,通过模糊DL包含公理的学习和在一阶Datalog框架下的高阶逻辑学习,ILP在处理不完整和模糊的结构化知识方面展现出了强大的能力。这些方法不仅提高了学习效率,还增强了知识表示和推理的灵活性。
归纳逻辑编程能否处理不完整和模糊的结构化知识
不同HOLL设置实验的深入分析
HOLL设置1:归纳学习FOL假设与HOL背景
在HOLL设置1的实验中,以学习“ancestor”谓词为例,标准Progol在学习过程中存在诸多问题,如返回不正确的递归定义、非递归定义,甚至无法归纳出能压缩数据的子句。而λProgol凭借其高阶谓词“trans_closure”,每次都能学习到正确的非递归定义,且可从任意给定正例中学习。
当采用FHDP方法时,它完全模拟了λProgol文件(除了添加了防止高阶重言式的“prune”语句),从而获得了相同的学习假设和预测准确性结果。从运行时间来看,FHDP方法明显快于标准Progol和λProgol,这充分体现了Datalog框架的高效性。这种学习方式适用于包含多个高阶谓词和非独立同分布(non - IID)的问题。其具体操作步骤如下:
1. 定义模式声明:
-
:- modeh(*,holds(ancestor,+person,+person))?
定义了目标谓词的模式。
-
:- modeb(*,holds(#predso,#predpp,+person,+person))?
定义了背景谓词的模式。
2. 声明谓词和参数:
-
predso(trans_clos). predpp(parent). predpp(married).
声明高阶谓词和二元谓词。
-
person(X) :- male(X). person(X) :- female(X).
定义“person”的范围。
3. 定义高阶谓词规则:
-
holds(trans_clos,R,X,Y) :- holds(R,X,Y).
-
holds(trans_clos,R,X,Z) :- holds(R,X,Y), holds(trans_clos,R,Y,Z).
4. 添加剪枝语句:
-
prune(holds(P,A,B),Body) :- in(holds(trans_clos,P,A,B),Body).
5. 输入事实:
-
holds(married,michael_I,eudoxia_stresh).
等一系列事实。
6. 输入目标谓词的示例:
-
:-holds(ancestor,maria_l,nat_narysh).
等。
7. 学习子句:
-
Learned clause: holds (ancestor, X,Y) :- holds (tmns - clos, parent, X,Y).
HOLL设置2:归纳学习HOL假设与FOL背景
在HOLL设置2中,要从两个二元关系的示例(一个是传递关系,另一个不是)中学习表示任意二元关系传递性的高阶子句。由于该子句具有灵活头部,λProgol无法完成此学习任务,而FHDP方法可以在不到一秒的时间内完成。这种学习方式可用于迁移学习。其操作步骤如下:
1. 定义模式声明:
-
:- modeh(*,holds(+predicate,+argument,+argument))?
定义目标谓词模式。
-
:- modeb(*,holds(#predicate,+predicate))?
和
:- modeb(*,holds(+predicate,+argument,+argument))?
定义背景谓词模式。
2. 声明谓词和参数:
-
predicate(trans). predicate(cause). predicate(pred). argument(a).
等声明谓词和参数。
3. 输入传递性相关事实:
-
holds(trans,cause). :- holds(trans,pred).
4. 输入二元关系事实:
-
holds(cause,a,b).
等一系列二元关系事实。
5. 学习子句:
-
Learned clause: holds(R,X,Y) :- holds(trans,R),holds(R,X,Z),holds(R,Z,Y).
方法优势总结
通过上述实验可以看出,基于模糊DL包含公理学习和一阶Datalog框架下的高阶逻辑学习方法具有显著优势。在处理不完整和模糊的结构化知识时,模糊DL包含公理学习能够利用知识库的各个组件(事实组件、本体组件和抽象组件),通过合理的查询语言和置信度计算方法,有效地学习到有价值的知识。
而在高阶逻辑学习方面,FHOHC框架的引入增加了表达能力,FHDP方法将其在Datalog片段中模拟,使得可以直接利用一阶ILP系统(如Progol)的优势,包括高效的演绎推理和可判定性。同时,灵活的头部结构能够处理更多复杂的学习设置,为知识表示和推理提供了更大的灵活性。
未来展望
尽管这些方法已经取得了不错的成果,但仍有一些方面值得进一步探索。例如,在HOLL设置3中,原文未详细给出实验内容,后续可以深入研究该设置下的学习任务,挖掘更多的应用场景。另外,对于模糊DL包含公理学习,可以进一步优化置信度计算方法,提高学习的准确性和效率。在高阶逻辑学习中,可以探索如何更好地利用高阶谓词的特性,处理更复杂的知识表示和推理问题,为归纳逻辑编程在更多领域的应用奠定基础。
graph LR;
A[模糊DL包含公理学习] --> B[处理不完整模糊知识];
C[一阶Datalog框架高阶逻辑学习] --> B;
B --> D[提高学习效率];
B --> E[增强知识表示推理灵活性];
D --> F[未来应用拓展];
E --> F;
总之,通过不断的研究和改进,归纳逻辑编程在处理不完整和模糊的结构化知识方面将有更广阔的发展前景。
超级会员免费看

被折叠的 条评论
为什么被折叠?



