知识表示系统中有两种推理技术,程序性推理和描述性推理。大部分系统把这两种方法在某种程度上结合起来,这些做法从完全的描述性表示逐步过渡到完全的程序性表示,从而具有连续统一性。这种连续统一的描述性一端是基于逻辑的定理证明器。在这一推理方法中,知识库是一个公理的集合,而推理过程通过演绎性的定理证明算法来实现。在一个严格的描述性推理系统中,重点是给知识表示中的表达式赋予某种形式的语义,而这些表达式是独立于推理模块的。
另一方面,程序性推理系统强调的是表示的推理方面,在极端情况下,知识库中的表达式没有被赋予任何其他意义,完全独立于程序是操作这些表达式的方式。基于程序性的表示系统的一个例子可以是这样的系统:没有任何关于数学知识的外在表示(如Peano算术公理)的情况下,利用计算机内嵌的算术函数来计算算术表达式的值。实际上,程序性系统在定义完备的领域的特定推理任务中是非常有效的。但更多的情况是,由于形式化的缺乏,导致很难对其进行分析。
考虑这样的例子。这一推理过程可以是程序性的或描述性的。一个完全的描述性推理方法中,将关于子类型和角色的事实刻画为公理,通过标准的演绎推理得到继承的属性。比如,给定图1中的简单网络,下面的一阶谓词演算公理可以表示这一信息:
1. ∀ x. ACTION(x) ⊃ 彐a. AGENT(x, a) & ANIMATE(a)
2. ∀ a 彐 x. ACTION(x) & AGENT(x, a) ⊃ ANIMATE(a)
3. ∀ x. OBJ/ACTION(x) ⊃ACTION(x)
4. ∀ x. OBJ/ACTION(x) ⊃ 彐o. THEME(x, o) & PHYSOBJ(o)
5. ∀ o 彐 x. OBJ/ACTION(x) & THEME(x, o) ⊃ PHYSOBJ(o)
利用这些公理,可以证明类OBJ/ACTION继承了AGENT的角色。换言之,对于任何对象A,如果OBJ/ACTION(A)为真,则可以证明A具有agent的功能;即根据公理1和公理3可以得到:
彐 a. AGENT(A, a) & ANIMATE(a)
上面例子的一个程序性版本是这样一个程序:从指定的节点OBJ/ACTION开始,寻找该节点的所有角色,然后顺着S边到达父类ACTION,再找到附属于它的角色。这一过程得到的所有角色的集合就是答案。这样,任何OBJ/ACTION都具有AGENT角色,此功能是从类ACTION继承来的。
图1 简单继承的例子
虽然这两种技术得到相同的结果,但是前者利用的是演绎技术,而后者利用的是遍历整幅图的方法。前者具有较严格的定义,而后者可能执行效率更高。类似于这个例子,在可以证明这两种技术能够得到相同结果的情况下,可以采用这两种方法的长处,即严格定义的语义和高效的推理过程。
责任编辑:admin