AI光影社
AI光影社
Published on 2025-03-09 / 3 Visits

马老师教AI:第六篇 专家系统是如何实现的(六)

第六篇

专家系统是如何实现的

(六)

清华大学计算机系 马少平

第六节

知识的结构化表示

艾博士:在专家系统中最重要的就是知识,一个没有足够知识的专家系统不可能成为一个实用的专家系统。知识必须以某种计算机可以使用的形式表示出来,否则专家系统也难于求解实际问题。因此如何表示知识是建造专家系统的重要问题之一。


已经提出了很多种知识表示方法,前面介绍的规则就是常用的知识表示方法之一。然而规则这种知识表示方法也存在一些不足,比如规则是一种非结构化的知识表示方法,无法表示事物之间的关系。研究者也提出了一些结构化的知识表示方法,我们下面介绍两种常用的结构化知识表示方法:语义网络和框架。

语义网络

艾博士:语义网络(semantic network)最早是作为一种表达人类记忆和理解自然语言而提出的一种知识表示方法,通过实体、概念之间的关系表达陈述性事实,后来逐渐成为一种知识表示方法。

小明:语义网络具体是如何表示知识的呢?

艾博士:我们先通过一个例子说明语义网络如何表示知识。如图6.8给出的是一个表示家庭成员关系的语义网络。

在图6.8中,节点表示实体和概念,如张三、李四、小明等表示的是具体的人,男士、女士、学生等表示的是某个概念。节点之间通过有向弧做连接,表示两个节点之间的关系。比如张三是李四的丈夫,而李四是张三的妻子,张三是小亮的父亲,李四是小亮的母亲。马六是张三的父亲,赵七是李四的父亲,马六和赵七之间互为亲家等。其他节点间也有类似的关系。

小明:我明白了,语义网络原来是这样表达相关知识的。张三是小亮的父亲,那么小亮应该是张三的儿子或者女儿啊,这里为什么没有表示出来呢?

艾博士:小明你说得很对,小亮确实应该是张三的孩子。图6.8中并没有表示出所有的关系,只是表示了一部分。

小明又指着图6.8问到:其他关系都比较好理解,这里的ISA、AKO是个什么关系呢?

艾博士解释说:ISA、AKO是几乎所有语义网络中都会出现的关系。ISA表示的是英文“is a ……”,是“是一个……”的意思,表示某个节点是某个概念的一个实例。比如图中小亮与小学生之间就是ISA关系,表示小亮是一个小学生。王五、钱八分别与男士和女士之间也是ISA关系,表示王五是位男士、钱八是位女士。AKO则是英文“a kind of ……”的缩写,表示一个节点是另一个节点的子类。比如图中男士与人之间的关系是AKO,表示男士是人的子类,而女士与人之间的关系也是AKO,同样表示女士也是人的子类。同样,小学生是学生的子类,书包是包的子类等。

图6.8 语义网络举例

艾博士:在语义网络中也可以为节点增加属性,属性可以认为是一种特殊的关系。比如可以在上述语义网络中为小亮增加“头发颜色”、“衣服式样”等属性,而具体的头发是什么颜色,衣服式样是什么样的,又都可以用节点表示。图6.9给出了小亮增加了这些属性后语义网络的一个局部图,这些内容本可以直接加在图6.8上的,单独出来是为了突出一下加上属性后的变化。

图6.9 小亮增加了属性后的语义网络局部

小明:如何具体使用语义网络呢?

艾博士:可以有多种方式使用语义网络。一种是直接对语义网络进行查询,得到某些具体的事实。比如张三是谁的父亲。在语义网络中首先查询到张三这个节点,然后在张三这个节点上查询父亲关系,最后按照父亲关系查找到小亮,就得到了张三是小亮的父亲这个结果。另外有些关系也可以定义逆关系。比如刚才小明提到的,这个语义网络中并没有直接表示出小亮是张三的孩子这个关系,但是可以对“父亲”关系定义逆关系,也就是“孩子”关系,如果A是B的父亲,则B是A的孩子。那么通过这种逆关系,也可以查找到小亮的父亲是张三,或者小亮是张三的孩子等。

还可以通过语义网络在没有直接关系的节点间建立联系。比如图6.8中并没有直接表示出爷爷与孙辈的关系,但是给出了马六是张三的父亲,而张三又是小亮的父亲,隐含了马六是小亮的爷爷这个关系。如果对“爷爷”关系给出“父亲的父亲是爷爷”这样的规则的话,则同样可以查找出“谁是谁的爷爷”、“谁是谁的孙子”等结果。总之,只要是语义网络直接或者间接地表达出的内容,都可以从中查找出相关的信息。

小明:看起来语义网络具有很强的表达知识的能力。

艾博士:除此之外,语义网络还有一个重要的特征就是继承。

小明:继承?具体指什么呢?

艾博士解释说:就如同晚辈可以继承长辈的财产一样,语义网络也具有继承性,从而可以简化语义网络的表达。比如说鸟是有羽毛的,任何一个鸟都有羽毛,这样只要在鸟这个节点上增加有羽毛的属性,其他任何一种特殊的鸟类或者具体的某个鸟,就不需要再增加有羽毛这个属性了,均可以通过鸟这个节点继承得到。图6.10给出了一个有关动物的语义网络,我们看看是如何实现继承的。

图6.10 有关动物的语义网络


艾博士:在具体介绍继承之前,我们先看看图6.10所示的语义网络表达了哪些知识。


在图6.10中主要表达了鸟和鱼这两类动物,通过AKO关系表达出鸟和鱼均为动物的子类。对于鸟节点,给出了“有羽毛”和“会飞翔”这两个鸟的属性。接着进一步又列举了鸵鸟和鹦鹉这两个鸟类,它们均是鸟的子类。而小花是一只具体的鸵鸟,小翠则是一只具体的鹦鹉。对于鱼类给出了“生活于水”这个属性,以及鲨鱼和草鱼这两种鱼类。而草鱼吃的是水草,水草又生长于水中。这些都是有关知识的直接表示,下面我们再来看看继承是如何实现的。


在语义网络中一般是通过ISA和AKO这两个关系实现继承。比如在图6.10中,小花和小翠是两个具体的鸟,并没有直接给出是否有羽毛的信息,那么小花和小翠是否有羽毛呢?从语义网络上可以看出,小花是一只鸵鸟(ISA关系),而鸵鸟是鸟的一种(AKO关系),由于鸟具有羽毛,所以鸵鸟可以从鸟继承有羽毛这个事实,同样小花又可以从鸵鸟继承有羽毛这个事实,从而得到小花有羽毛这个结论。同理小翠也是有羽毛的。这就是语义网络的继承。


小明疑惑地问到:按照这种继承方法,是不是也可以得到小花会飞翔这个结论呢?因为鸟是会飞翔的。


艾博士:小明又提了一个很好的问题。在语义网络的继承中并不是前辈的所有内容都可以继承下来,这里有默认和“就近”原则。也就是说,如果一个节点记录了某个信息就直接使用该信息,而不会启动继承,只有当没有记录某个信息时才会使用继承。而在继承中,当多个前辈都具有该信息时,采用距离最近的信息。以刚才小明问的小花是否会飞翔这个例子为例,语义网络中没有直接记录小花是否会飞翔,所以启动继承机制,按照ISA关系找到鸵鸟节点。由于鸵鸟节点直接记录了不会飞翔这个事实,所以小花继承这个事实,而不会继承鸟会飞翔这个事实,因为小花距离鸵鸟的距离比距离鸟的距离更近。这样在构建语义网络的时候,对于大的类别只需考虑一般情况就可以了,一些特例可以单独描述。在这个例子中,鸟会飞翔就是一般情况,鸵鸟不会飞翔则属于特例。同样,如果问小翠是否会飞翔,由于语义网络中没有直接记录相关信息,则按照ISA关系找到鹦鹉,发现鹦鹉也没有记录,再依据AKO关系找到鸟。而鸟节点记录了会飞翔,所以小翠继承该结果,得到会飞翔的事实。


语义网络是对现实世界的一种描述,也可以根据实际情况对语义网络进行修改。比如说,小翠是家里养的一只鹦鹉,某天发现它受伤了,不能飞翔了,那么就要在小翠这个节点增加它不会飞翔的属性,实现对真实结果的记录。


小明:原来继承是这样使用的,通过继承确实可以简化语义网络表示,又可以表示具体的特例。在语义网络中只能通过ISA、AKO关系实现继承吗?

艾博士:通过ISA、AKO关系实现继承是最常用的方法,也可以在设计语义网络时定义如何继承。比如HASA关系也是一个比较常用的关系,它对应的英文是“has a ……”,表示某个体或者概念拥有某个属性。比如鸟拥有翅膀、汽车拥有发动机,就可以通过HASA关系表示。图6.11给出了这样的例子。在该例子中,小白是一只鸟,鸟拥有头,而头拥有眼睛,那么可以通过鸟拥有头、头拥有眼睛这个关系继承得到小白拥有眼睛。


图6.11 语义网络中HASA关系示意图


小明问到:那么语义网络中都具有哪些关系可以使用呢?有统一的定义吗?


艾博士:这是语义网络方法存在的问题之一。在语义网络中,一切都是由建造者设计的,具体有哪些关系,以及关系如何表示都是设计者自定义的,并没有一个统一的约定。


小明:在开始讲解语义网络时您曾经提到,最初提出语义网络与自然语言理解有关,语义网络与自然语言理解有怎样的关系呢?


艾博士:自然语言理解有多种形式,其中一种形式是指对于一段用自然语言描述的文字,计算机程序自动建立语义网络表示,如果表示内容与文字描述是一致的,则认为计算机程序理解了这段文字描述。


比如对于这样一句自然语言描述:“张磊和班长李明一起骑车上学”,如果计算机能自动地建立起如图6.12所示的语义网络描述,则认为计算机理解了这句话。

图6.12 自然语言理解语义网络示意图

艾博士对图6.12解释说:作为自然语言理解的组成部分,假定事先已经建立了有关上学、学校、自行车、交通工具等概念的语义网络描述,自然语言理解的目的就是将给定的“张磊和班长李明一起骑车上学”这句话,用语义网络描述出来,并添加到已有的语义网络中。

系统首先识别出这是一个“上学”事件,建立一个虚拟节点“事件”,用ISA与上学节点连接,该事件有两个主体,一个是张磊,一个是李明,事件的目标是去学校。用ISA分别连接张磊和李明到学生节点,表示他们两个都是学生,并拥有自己的自行车。张磊的管理者是李明,而李明是班长。在上学这个事件中,其动作是骑车。这样就实现了对这句话的理解。

小明:明白了,通过语义网络将“张磊和班长李明一起骑车上学”这句话中所包含的内容都表达了出来,所以可以说理解了这句话。

另外,我觉得语义网络与现在流行的知识图谱很像啊,二者具有什么关系吗?

艾博士:我个人理解,知识图谱就是语义网络的升级版,只不过是规模更大,自动从大规模文本数据中提取知识的能力更强。由于篇幅的限制,我们就不再对知识图谱做介绍。


框架


艾博士:框架(frame)是一种关于个体、概念的结构化表示方法,由图灵奖获得者Minsky教授作为理解视觉、自然语言理解以及其他复杂行为的基础而提出来的,逐步发展成为一种广泛使用的知识表示方法。


框架是根据心理学研究成果而提出的一种知识表示方法。心理学家发现,在人类日常的思维及理解活动中,当分析和解释所遇到的新情况时,人们并不是从头开始分析新情况,然后再建立描述这些新情况的新知识结构,而是使用人们从以前的实践活动中积累的知识,联想出新情况的相应结构,并用新情况的细节装填到该结构中去。例如,当我们走进一家从来没有去过的饭店时,根据以往的经验,可以想象到在这家饭店里将看到菜单、桌子和服务员等,虽然菜单什么式样、桌子是什么颜色的、服务员穿什么衣服等细节事先并不知道,需要在进入饭店之后再仔细观察,但这样的一种知识结构事先是可以预见的。框架就是为了在计算机中表达人们这样的知识而设计的一种组织结构。


小明:这个结构很有道理。比如我第一次到您家之前,并不知道您家里是什么样的,但由于我们住在同一个小区,房间结构、布局应该差不多,厨房在什么位置,厕所在什么位置,即便不到您家来,我也大概知道其位置。但是对于家里的一些细节问题,比如沙发是什么式样、如何摆放的,是否有电视机,门窗什么样等,需要到您家后才能知道。从记忆的角度,我只需要记忆这些细节就可以了,房间布局等并不需要重新记忆。


艾博士:小明说得很对。我们认识一个新事物总有默认的部分和重新认识的部分,默认部分就是小明刚才提到的房间结构等,因为我们住在同一个小区,房间结构基本是一样的,小明知道了自己家的房间结构,也就知道我家的房间结构,这些不需要重新记忆,除非发生了变化。重新认识部分反应了该事物与其他类似事物不一样的特殊性,比如我家的沙发可能跟小明家不一样,这些特殊的东西反应了我们两家房间的不同。


小明:那么框架究竟是如何表示知识的呢?


艾博士:我们先通过一个例子,看看框架是如何表示教室有关知识的。

框架名:教室

        功能:上课

        拥有:桌子,椅子,黑板

        ……

框架名:椅子

        功能:乘坐

        腿数:4

        后背:有

        ……

框架名:三教2102

        ISA:教室

        位置:清华大学

        座位数:200

        ……

框架名:三教2102的椅子

        ISA:椅子

        颜色:黄色

        ……

以上就是有关教室的框架描述,我们只给出了其中的部分内容。下面我们解释一下这些框架描述的具体含义。


首先是教室框架,是对教室的一般性描述,其功能是上课,含有桌子、椅子、黑板等。接下来是对椅子的一般性描述,功能是乘坐,椅子有4条腿,具有后背等。然后描述的是清华大学的一个具体的教室三教2102。同语义网络中的含义一样,用ISA指名该框架是一个教室,这样就将三教2102这个框架与一般的教室框架建立了联系。同时用位置指名该教室在清华大学,有200个座位。下面又对三教2102具体的椅子给出了描述:用ISA与椅子框架建立联系,表明它是一把椅子,标注出椅子的颜色为黄色。


单从表示的角度框架与语义网络具有一定的相似性,但是语义网络是二维的,只表示一个节点与另一个节点具有某种关系,而框架的节点可以看做是结构化的,节点内部就可以表示、记录很多相关内容。


小明:那么框架是否也可以继承呢?


艾博士:是的,同语义网络的继承一样,框架也可以继承,后辈可以继承前辈的所有内容,继承操作也遵循默认和就近原则。比如在这个例子中,虽然三教2102的椅子没有直接记录有几条腿,但是可以通过继承,从椅子框架得到具有4条腿。


框架的表达非常灵活,在上面的例子中,像“功能”、“位置”、“颜色”等被称作“槽”,每个槽可以有一个或者多个值,称作槽值。像教室框架中,槽“功能”的值就是“上课”,椅子框架中,槽“腿数”的值就是4。一般情况下,一个框架可以有多个槽,一个槽的值也不一定只有一个,也可以有多个值。比如对于三教2102这个教室,可以设置“课程表”这个槽,而其值可以有多个,将在该教室上的所有课程作为它的值。


槽值也可以是其他的框架,比如三教2102这个框架中,槽ISA的值就是教室这个框架。


通过这个例子可以看出,像教室、椅子等这些框架,就是对事物的一般性描述,属于默认部分,而三教2102这个框架是对某个教室的具体描述,与教室有关的默认内容就不需要在这个框架中记录,只需要记录其特殊的内容就可以了。比如教室的位置、座位数等。


在框架中还有些特殊的值,比如if-needed、if-added、if-removal等,这些值往往对应着一段程序,当满足一些特殊的触发条件时,产生相应的动作。if-needed表示当需要某个槽值时需要执行的程序,比如教室温度,当需要了解教室温度时,启动测量程序得到教室的温度。if-added表示当在槽中添加了某个值时需要执行的程序。比如教室中添加了某个设备出现损坏的信息后,就要启动上报维修程序。if-removal表示当需要从框架中删除某个槽的指定值时,启动该程序删除指定的槽值,如果需要的话,还要同时修改与该值有关的其他值。比如某门课只前半学期上课,当半学期结束时,需要从教室的课程表中删除该课,并需要在记录教室是否空闲处标记空闲,以便供学生查找可以自习的教室等。


小明:原来框架具有这么强的表达能力。

小明读书笔记

结构化知识表示方法可以更好地表示事物之间的关系,语义网络和框架是两种常用的结构化知识表示方法。

语义网络最早是作为一种表达人类记忆和理解自然语言而提出的一种知识表示方法,通过实体、概念之间的关系表达陈述性事实,后来逐步演变成为一种知识表示方法。

语义网络由表示事实或者概念的节点以及节点间的关系组成。下图是一个典型的语义网络:

该语义网络表达了这样的含义:鸟和鱼都属于动物,鱼生活于水中,草鱼是一种鱼,草鱼吃草。鸵鸟和鹦鹉都属于鸟类,小花是一只鸵鸟,小翠是一只鹦鹉等。

语义网络中ISA和AKO是两个最常用的关系,ISA表示“是一个”,用来表示某个具体的个体是一个什么类别。如上述语义网络中,通过ISA表示小花是一个鸵鸟。AKO表示“是一种”,用于表示某个子类属于某个大类。在上述语义网络中,通过AKO表示草鱼属于鱼类。

通过ISA和AKO可以实现继承。比如上述语义网络中,表示了鸟节点具有羽毛,那么由于小花是只鸵鸟,而鸵鸟又属于鸟,那么小花虽然没有记录是否具有羽毛,但也可以从鸟节点继承有羽毛这个事实。在继承过程中,按照就近继承的原则。比如在上述语义网络中,小花通过ISA从鸵鸟节点继承了不会飞翔,就不会再从鸟节点继承会飞翔这个事实了。

框架是根据心理学研究成果,作为理解视觉、自然语言以及其他复杂行为的基础而提出的一种结构化知识表示方法。框架可以认为是结构化的语义网络,每个节点内部也是结构化的,可以表示、记录很多相关的内容。

一个框架由框架名、槽和槽值组成,一个框架可以有多个槽,一个槽也可以有多个槽值,槽值也可以是另一个框架。多个框架通过相互之间的链接关系,组成了一个框架系统。

一个典型的框架如下:

框架名:教室

        功能:上课

        拥有:桌子,椅子,黑板

        ……

框架名:椅子

        功能:乘坐

        腿数:4

        后背:有

        ……

框架名:三教2102

        ISA:教室

        位置:清华大学

        座位数:200

        ……

框架名:三教2102的椅子

        ISA:椅子

        颜色:黄色

        ……

这里有多个框架。第一个是教室框架,描述了一般的教室结构:功能是上课,拥有桌子、椅子、黑板等。这里的“功能”“拥有”等是槽,“上课”、“桌子、椅子、黑板”等是槽值。

第二个是椅子框架,描述了一般的椅子特性:功能是乘坐,腿数是4,具有后背等。

第三个是一个具体的教室——三教2102这个教室的框架,其本身通过ISA指名是一个教室,位置在清华大学,座位数为200。通过ISA与一般的教室框架建立了联系。

第四个是一个具体的椅子——三教2102教室里边的椅子的框架,通过ISA指名是一个椅子,颜色是黄色的等。

在框架中,同样可以通过ISA和AKO进行继承,继承方式与语义网络基本一致。

在框架中有些特殊的值:if-needed、if-added、if-removal等。这些值一般对应着一段程序,当满足一些特殊的触发条件时,产生相应的动作。if-needed表示需要时运行该程序、if-added表示当在槽中添加了某个值时运行该程序、if-removal表示当需要从框架中删除某个槽的指定值时运行该程序。 

未完待续