知识表示的方法
知识表示方法种类繁多,通常有直接表示、逻辑表示、产生式规则表示法、
语义网络表示法、框架表示法、脚本表示方法、过程表示、混合型知识表示方法、
面向对象的表示方法等。
在本文中,着重介绍目前使用较多的知识表示方法。目前使用较多的知识表
示方法主要有:逻辑表示法、产生式表示法、框架表示法、语义网络表示法、面向对象表示等等。
2.3.2.1 一阶谓词逻辑表示法[
45]
通过引入谓词、函数来对知识加以形式化描述,获得有关的逻辑公式,进而
以机器内部代码表示的一种方法。谓词逻辑是一种形式语言,它与人类的自然语
言比较接近,是目前能够表达人类思维活动的一种最精确的语言,它具有丰富的
表达能力,因而可以表示大量常识知识。它具有简单、自然、精确、灵活、容易
实现等特点。
一阶谓词的一般形式为 P(x1, x
2…x
n)。其中,P 是谓词,x
1, x
2…x
n
是常量、变
元或函数。谓词逻辑适用于表示事物的状态、属性、概念等事实性的知识,也可
以用来表示事物间关系的知识,即规则。
例如:
物体 A 在物体 B 的上面,可以表示为:On(A,B);
物体 A 是书,可以表示为:book(A);
书 A 在书 B 上,可以表示为:On(book(A),book(B))。
一阶谓词逻辑表示法的局限性在于它难以表达不确定性知识和启发性知识,
推理方法在事实较多时易于出现组合爆炸,且推理过程繁杂、效率低。
2.3.2.2 产生式表示法
多数较为简单的专家系统(Expert System)都是以产生式表示知识,相应的系
统被称作产生式系统。
产生式系统,由知识库和推理机组成。其中知识库由事实库和规则库组成。
事实库是已知事实的集合,规则库是产生式规则的集合。规则则是产生式规则。
规则库蕴涵着将问题从初始状态转换到解状态的那些变换规则,规则库是专家系
统的核心部分。规则可以表示成与或树的形式,基于事实库中的事实通过与或树
求值的过程就是推理。事实库中存放着初始事实、中间推理结果和最后推理出的
结论。推理机控制协调规则库与数据库的运行,包含推理方式和控制策略。产生
式系统的推理方式有正向推理、反向推理和双向推理。
正向推理:从已知事实出发,通过规则库推理得出结论;
反向推理:从目标出发,反向使用规则,求得已知事实;
双向推理:即自顶向下又自底向上,直至达到某一个中间环节两个方向的结
果相符便成功结束的推理方法。这种推理方式的推理网络较小,效率也较高。它
也叫做正反向推理。
产生式的基本形式为[
44]:if(前提 1)&(前提 2)&⋯then(结论 1)& (结
论 2)&⋯。其中,前提亦称前件、条件;结论可以使要执行的操作。整个产生式的含义是:如果前提被满足,则可推出结论或执行所规定的操作。
产生式表示法的局限在于它不能表达具有结构性的知识;且由于求解过程是
一个匹配、冲突消解反复执行的过程,工作效率不高。另外,在求解复杂问题时
容易引起组合爆炸。
2.3. .3 框架表示法
一阶谓词逻辑表示法和产生式表示法常用于表示论域中不同状态间的关系,
如果想用来表示一个事物同其各个组成部分间的关系就不方便了。
框架(Frame)理论是在 1975 年由美国著名人工智能学者明斯基(Minsky)
首先提出,它是描述对象的属性的一种知识表示方法。在框架表示法中,“框架”
是知识表示的基本单元。不同的框架之间可以通过属性对象间的关系建立联系,
从而构成一个框架网络,充分表达相关对象间的各种关系。它的优点是容易表示
结构性知识,具有良好的继承性,不仅减少框架网络表示知识的冗余,而且较好
地保证了知识的一致性。
框架是由若干结点和关系(统称为槽 slot)构成的网络。是语义网络一般化形
式化的一种结构,同语义网络没有本质区别。
框架由框架名和一些槽(slot)组成,每个槽有一些值,槽值可以是逻辑的、
数字的,也可以是条件、程序、默认值或是一个子框架。槽值含有如何使用框架
信息、下一步可能发生的信息、预计未实现该如何做的信息等。
框架的一般格式:
FRAMEWORK:<framework name>
<slot 1>
<face 11>:value
<face 1n>:value
<slot 2>
<face 21>:value
<face 2n>:value
2.3. .4 语义网表示法
语义网络由奎廉(J.R.Quillian)于 1986 年提出。它是一种通过概念及其语
义关系来表示知识的一种网络图。一个语义网络就是一个带有标志的有向图。其
中,节点表示各种概念、事物、事件、情况等;有向弧表示它所连接的节点间的
某种语义联系,每个节点可以带有若干属性。弧是有方向有标注的,方向体现主
次。弧上的标注表示结点 1 的属性或结点 1 和结点 2 之间的关系。结点间的关系
有 is-a,a-part-of,is 类型等。一个最简单的语义网络形式是一个三元组:(节点 1,
2
2弧,节点 2)。如图 2.5 所示:
图 2.5 语义网表示法示例
当我们要做出推理:猫是否是一种动物时,我们可以从“猫”节点开始,通
过查找其关系链,找到“Is-a”关系的次节点“动物”,以此证明猫是一种动物。
语义网络表示法的局限性主要表现在它对知识表示的非严格性,不能保证不
存在二义性;以及由于其自身的灵活性和非严格性所带来的知识处理的复杂性。
2.3. .5 面向对象的知识表示法
随着面向对象技术方法的深入发展,面向对象的知识表示方法也开始应用于
专家系统。面向对象方法具有封装性、模块性、继承性、易于维护和可扩展性好
等优点。广义上,对象可以理解为客观世界的任何事物。这种方法可以将知识抽
象为对象的内部行为状态和静态特征属性进行封装和隐藏,而知识的处理方法表
示为对内部状态和特征属性的操作。这种方法既可以实现灵活的推理机制,又使
对知识的操作局限于对象的内部,因此容易实现知识库的一致性和完备性。
目前应用较多的面向对象的知识表示方法是与框架表示法相结合,基于框架
来构成类,并将规则作为一个“槽”嵌入到类中。但是由于框架表示法不够灵活,
从而极大地限制了面向对象技术的应用。
面向对象的知识表示方法能较好地屏蔽底层关系型数据库的二维关系结构,
易于表示诸如递归嵌套等复杂结构,易于对这类结构进行有效的存储、维护和扩
展。因此,在专家系统中使用面向对象模型则能够方便地表达各类复杂结构的知
识。
Drools 规则推理机是一个产生式规则推理系统,其核心是一个能够处理大量
事实和规则的推理引擎。推理引擎将事实与规则进行匹配以得出结论。产生式规
则是一个用一阶逻辑进行知识呈现的二元结构:
when <conditions>
then <actions>
如图 2.6 所示为 Drools 推理机体系架构,规则存放于规则库中,事实存放于
工作空间中。事实被插入到工作空间后,可以被修改或删除。一个有大量规则和
事实的系统可能有很多规则被满足,这些规则被称为具有冲突性。调度器 Agenda
通过冲突解决策略管理这些冲突规则的执行顺序。
在 drools 推理机中,推理基于产生式规则,知识库由规则库和事实库组成,
通过推理引擎的推理最后得出结论。
在基于产生式规则推理过程中通常规则的表示方法为:事实 1+事实 2+…+事
实 N=>结论。而在关联分析中,当探测到可能产生攻击行为的事件时,是否一定
会产生真正的攻击,我们需要经过一系列的发现才能得出结论,所以每次规则匹
配成功后我们不能说明一个攻击场景一定发生,它只是具有一个发生攻击的可信
度,这就是不确定性。
另外,在 drools 中我们要将推理机推理出的中间结论存入数据库中,以方便
复查结论以及展示匹配的过程,所以在 drools 规则的书写中我们要加入“动作”
来完成与数据库的交互。并且我们采用基于攻击场景构建的关联分析方法,所以
事件在匹配时需要和已有攻击场景相匹配。
产生式规则适合于表达具有因果关系的过程性知识,但对具有结构关系的知
识却无能为力,它不能把具有结构关系的事物之间的结构联系表示出来。因此,
我们将采用“推理连”来表示前后联系紧密的推理过程。
基于以上所述,目前的产生式规则表示法存在的不足之处,例如在产生式规
则表示法中,由于它是建立在因果关系的基础上的,它表示的知识有一定的格式,
且规则之间不能直接调用,因此那些具有结构关系或层次关系的知识不易用它来
表示。
因此,论文提出在 drools 推理机中,采用如下方法来表示规则:
Rule(Scene1 and Event,Scene2 and Action)
其中,Rule 代表规则,Scene 代表一个可能发生的攻击场景,Event 代表在当
前已发生的攻击场景下,又侦测到的一个相关后续攻击事件,Action 代表推理结
果后需要做的交互。
在一次攻击中,多条规则构成一个完整的攻击场景,这多条规则也构成了一
个推理连,我们也称之为“规则组”。我们如下表示这个攻击场景:
表 3.1 攻击场景表示格式
Directive{
Rule1{
Rule3
Rule4
…
}
Rule2{
Rule5{
Rule6
…
}
}
}
一个攻击场景(directive)由若干条规则组成,这些规则可能是“与”和“或”
的关系。如表 3.1 所示,Rule1 和 Rule2 是或关系 Rule3 和 Rule4 是或关系,而 Rule1
和 Rule3 是与关系。这样表示的好处是,我们很清楚知道,如果一个攻击场景发生,
那么只需要满足哪些规则即可。在表 3.1,当 Rule1 和 Rule3 被满足时,我们认为
攻击场景的过程已经完成,然后通过计算每个 Rule 里的 Reliability 来确认这个攻
击发生的可信度是多少。
通过知识学习器从以往攻击规律中自动获取知识。
文献[
50]
X用LAMBDA语言对每一个攻击进行详细描述,然后通过分析每个攻击
的前提集和结果集,自动生成关联规则。这种方法提高了关联规则的增加效率,
但规则生成之前需对每一个攻击进行LAMBDA语言描述,设置攻击的前提集和结
果集,十分繁琐且又要依赖于专家知识。
文献[
51][52]在通信领域应用挖掘的方法从各种通信设备上报的事件中提取规
则,对于网络安全事件关联规则的自动提取有一定的启示作用。
有研究也提出了应用数据挖掘的方法来生成网络安全事件关联规则,规则的
生成无需手工干预,但仅限于理论模拟