• 人工智能技术导论——几种结构化知识表示及推理过程


    一、框架

    1、框架的概念

    顾名思义,框架就是一种结构,一种模式,其一般形式是: 

          <框架名>  
           <槽名1><槽值1>| <侧面名11><侧面值111,侧面值112,…>
                                        <侧面名12><侧面值121,侧面值122,…>
    
          <槽名2><槽值2>|<侧面名21><侧面值211,侧面值212,…>
                                       <侧面名22><侧面值221,侧面值222,…>
                …
    <槽名k><槽值k>| <侧面名k1><侧面值k11,侧面值k12,…>
                                 <侧面名k2><侧面值k21,侧面值k22,…>

    即一个框架一般有若干个槽,一个槽有一个槽值或者有若干个侧面,而一个侧面又有若干个侧面值。其中槽值和侧面值可以是数值、字符串、布尔值,也可以是一个动作或过程,甚至还可以是另一个框架的名字。


    例7.1 下面是一个描述“教师”的框架:

    框架名:<教师>
    类属:<知识分子>
    工作:范围:(教学,科研)
              缺省:教学
    性别:(男,女)
    学历:(中师,高师)
    类型:(<小学教师>,<中学教师>,<大学教师>)

     可以看出,这个框架的名字为“教师”,它含有5个槽,槽名分别是“类属”、“工作”、“性别”、“学历”和“类型”。这些槽名的右面就是其值,如“<知识分子>”、“男”、“女”、“高师”、“中师”等等。其中“<知识分子>”又是一个框架名,“范围”、“缺省”就是侧面名,其后是侧面值,如:“教学”、“科研”等。另外,用<>括的槽值也是框架名

    例7.2  下面是一个描述“大学教师”的框架:

    框架名:<大学教师>
    类属:<教师>
    学历:(学士,硕士,博士)
    专业:<学科专业>
    职称:(助教,讲师,副教授,教授)
    外语:语种:范围:(英,法,日,俄,德,…)
                       缺省:水平:(优,良,中,差)
    缺省:

      上面给出的仅是一种框架的基本结构和一个比较简单的例子。一般来说,单个框架只能用来表示那些比较简单的知识。当知识的结构比较复杂时,往往需要用多个相互联系的框架来表示。例如分类问题,若采用多层框架结构表示,既可以使知识结构清晰,又可以减少冗余。

    例7.3 下面是描述一个具体教师的框架:

    框架名:<教师-1>
    类属:<大学教师>
    姓名:李明
    性别:年龄:25
    职业:教师
    职称:助教
    专业:计算机应用
    部门:计算机系软件教研室
    工作:
    参加工作时间:1995年8月
    工龄:当前年份-参加工作年份
    工资:<工资单>

    比较例7.2和例7.3中的框架,可以看出,前者描述的是一个概念,后者描述的则是一个具体的事物。二者的关系是,后者是前者的一个实例。因此,后者一般称为前者的实例框架。这就是说,这两个框架之间存在一种层次关系。一般称前者为上位框架(或父框架),后者为下位框架(或子框架)。当然,上位和下位是相对而言的。例如“大学教师”虽然是“教师-1”的上位框架,但它却是“教师”框架的下位框架,而“教师”又是“知识分子”的下位框架。

    2、框架的表达能力

           由框架的形式可以看出,框架适合表达结构性的知识。所以,概念、对象等知识最适于用框架表示。其实,框架的槽就是对象的属性或状态,槽值就是属性值或状态值。不仅如此,框架还可以表示行为(动作),所以,有些过程性事件或情节也可用框架网络来表示。

    例7.4 下面是关于房间的框架:

    框架名:<房间>
    墙数x1:
           缺省:x1=4
          条件:x1>0
    窗数x2:
           缺省:x2=2
           条件:x2≥0
    门数x3:
           缺省:x3=1
           条件:x3>0
    前墙:(墙框架(w1,d1))
    后墙:(墙框架(w2,d2))
    左墙:(墙框架(w3,d3))
    右墙:(墙框架(w4,d4))
    天花板:<天花板框架>
    地板:<地板框架>
    门:<门框架>
    窗:<窗框架>
    条件:w1+w2+w3+w4=x2
             d1+d2+d3+d4=x3
    类型:(<办公室>,<教室>,<会客室>,<卧室>,<厨房>,<仓库>,…)

    例7.5 机器人纠纷问题的框架描述如图7-1所示。

     还需指出的是,产生式规则也可用框架表示。
    例如,产生式

      如果头痛且发烧,则患感冒。

    用框架表示可为:

       框架名:<诊断1>
                前提:条件1:头痛
                     条件2:发烧
                结论:患感

    3、基于框架的推理

       基于框架的推理方法是继承。所谓继承,就是子框架可以拥有其父框架的槽及其槽值。实现继承的操作有匹配、搜索和填槽。
       匹配就是问题框架同知识库中的框架的模式匹配。所谓问题框架,就是要求解某个问题时,先把问题用一个框架表示出来,然后与知识库中的已有框架进行匹配。如果匹配成功,就可获得有关信息。搜索就是沿着框架间的纵向和横向联系,在框架网络中进行查找。搜索的目的是为了获得有关信息。

    框架名: 〈教师-1姓名:  李明
    性别:年龄:  25
    职称:  助教
    专业:  计算机应用
    部门:  计算机系软件教研室
    外语水平: 

    显然, 原框架“教师-1”中无“外语水平”槽, 但它的父框架是“大学教师”, 该框架内有“外语水平”槽, 并且侧面“语种”(“范围”)缺省值是“英”,  侧面“水平”的缺省值是“良”。 于是通过继承, 便知道了“教师-1”懂英语, 且水平还良好。 那么, 这两个值也就可以填到“教师-1”的槽中。

    4、框架的程序语言实现

           有一种名为FRL(Frame Representation Language)的程序设计语言,就是专门基于框架的程序设计语言。用它就可以方便地实现框架知识表示。不过,用PROLOG也可方便地实现框架表示。用PROLOG实现框架表示,一般采用含结构或表的谓词来实现。因为框架实际上就是树,而PROLOG的结构也是树,表又是特殊的结构,它的元素个数和层数都不限定,可动态变化,因此,更适于表示一般的框架。
    例如,前面的“教师”框架用PROLOG可表示如下:   
       

       frame(name("教师"),
           kind_of("<知识分子>"),
           work(scope("教学""科研"),default("教学")),
           sex(""""),
           reco_of_f_s("中师""高师"),
           type("<小学教师>""<中学教师>""<大学教师>")). 

    如果要给出框架的一个通用表示形式,则下面的表示方式可供参考。

    frame(name("教师"),
       body([st("类属",[st("<知识分子>",[])]),
             st("工作",[st("范围",[st("教学",[]),=st("科研",[])]),
             st("缺省",[st("教学",[])])]),
       st("性别",[st("",[]),st("",[])]),
       st("学历",[st("中师",[]),st("高师",[])]),
       st("类型",[st("<小学教师>",[]),st("<中学教师>",[]),=
                   st("<大学教师>"[])])])) 

    这是一个PROLOG的“事实”,其谓词及领域说明如下:  

    domains
         name=name(string)
         body=body(subtree list)
         subtreelist=subtree*
         subtree=st(string,subtreelist)
    database
         frame(name,body)

    其中的subtreelist是递归定义的。按此定义所有框架都取统一的表示形式。

    二、语义网络

    1、语义网络的概念

           语义网络是由节点和边(也称有向弧)组成的一种有向图。其中节点表示事物、对象、概念、行为、性质、状态等;有向边表示节点之间的某种联系或关系。例如图7―2就是一个语义网络。其中,边上的标记就是边的语义。
        还需指出的是, 上述关于框架的推理方法, 实际仅适于装载着概念和实体对象的框架, 而对于装载着规则的框架, 其推理就要用基于规则的演绎推理方法。

    语义网络的概念最先是由Quillian提出来的,他于1968年在他的博士论文中,把语义网络作为人类联想记忆的一个显式心理模型。所以,语义网络也称联想网络。
            现在,语义网络的理论已经有了长足的发展。有人把它划分为五个级别:执行级、逻辑级、认识论级、概念级和语言学级。并分为七种类型:

            (1)命题语义网(包括分块联想网络);
            (2)数据语义网:以数据为中心的语义网络;
            (3)语言语义网:用于自然语言的分析和理解;
            (4)结构语义网:描述客观事物的结构,常见于模式识别和机器学习等领域;
            (5)分类语义网:描述抽象概念及其层次;
            (6)推理语义网:是一种命题网,但它已在某种程度上规范化,更适于推理;
            (7)框架语义网:与框架相结合的语义网。

    2、语义网络的表达能力

            由语义网络的结构特点可以看出,语义网络不仅可以表示事物的属性、状态、行为等,而且更适合于表示事物之间的关系和联系。而表示一个事物的层次、状态、行为的语义网络,也可以看作是该事物与其属性、状态或行为的一种关系。如图7―3所示的语义网络,就表示了专家系统这个事物(的内涵),同时也可以看作是表示了专家系统与“智能系统”、“专家知识”、“专家思维”及“困难问题”这几个事物之间的关系或联系。所以,抽象地说,语义网络可表示事物之间的关系。因此,关系(或联系)型的知识和能化为关系型的知识都可以用语义网络来表示。下面我们就给出常见的几种。

    1.实例关系

          实例关系表示类与其实例(个体)之间的关系。这是最常见的一种语义关系。例如,“小华是一个大学生”就可表示为图7―4。其中,关系“是一个”一般标识为“is-a”,或ISA。

     2.分类(或从属、泛化)关系

           分类关系是指事物间的类属关系,图7―5就是一个描述分类关系的语义网络。在图7―5中,下层概念节点除了可继承、细化、补充上层概念节点的属性外,还出现了变异的情况:鸟是鸵鸟的上层概念节点,其属性是“有羽毛”、“会飞”,但鸵鸟的属性只是继承了“有羽毛”这一属性,而把鸟的“会飞”变异为“不会飞”。其中,关系“是一种”一般标识为“a kind of”或AKO

     3.组装关系

             如果下层概念是上层概念的一个方面或者一部分,则称它们的关系是组装关系。例如图7―6所示的语义网络就是一种聚集关系。其中,关系“一部分”一般标识为“a-part-of”

    4.属性关系

            属性关系表示对象的属性及其属性值。例如,图7―7表示simon是一个人,男性,40岁,职业是教师。

    5.集合与成员关系

           意思是“是……的成员”,它表示成员(或元素)与集合之间的关系。例如,“张三是计算机学会会员”可表示为图7―8。其中,关系“是成员”一般标识为“a-member-of”

     6.逻辑关系

            如果一个概念可由另一个概念推出,两个概念间存在因果关系,则称它们之间是逻辑关系。图7―9所示的语义网络就是一个逻辑关系。

    7.方位关系

    在描述一个事物时,经常需要指出它发生的时间、位置,或者指出它的组成、形状等等,此时可用相应的方位关系语义网络表示。例如事实: 

      张宏是石油学院的一名助教;  
      石油学院位于西安市电子二路;  
      张宏今年25岁。

    可用图7―10所示的语义网络表示。
       

    8.所属关系

           所属关系表示“具有”的意思。例如“狗有尾巴”可表示为图7―11。

          语义网络中的语义关系是多种多样的,一般根据实际关系定义。如常见的还有before、after、at等表示时间次序关系和located-on、located-under等表示位置关系。进一步,还可对带有全称量词和存在量词的谓词公式的语义加以表示。
          由上所述可以看出,语义网络实际上是一种复合的二元关系图。网络中的一条边就是一个二元关系,而整个网络可以看作是由这些二元关系拼接而成。

    时间关系

        指不同事件在其发生时间方面的先后次序关系。
        常用的时间关系有:

        Before:含义为“在前”,表示一个事件在另一个事件之前发生
        After: 含义为“在后”,表示一个事件在另一个事件之后发生

        例如:“北京奥运会在悉尼奥运会之后”

    位置关系

        指不同事物在位置方面的关系。常用的位置关系有:

        Located-on:含义为“在上”,表示某一物体在另一物体之上
        Located-at:含义为“在”,表示某一物体所在的位置
        Located-under:含义为“在下”,表示某一物体在另一物体之下
        Located-inside:含义为“在内”,表示某一物体在另一物体之内;
        Located-outside:含义为“在外”,表示某一物体在另一物体之外。

       例如,“书在桌子上”

    相近关系

        指不同事物在形状、内容等方面相似或接近。常用的相近关系有:

        Similar-to:含义为“相似”,表示某一事物与另一事物相似
        Near-to:含义为“接近”,表示某一事物与另一事物接近

        例如,“猫似虎”

    一元关系

         指可以用一元谓词P(x)表示的关系。谓词P说明实体的性质、属性等。
         描述的是一些最简单、最直观的事物或概念,
         常用:“是”、“有”、“会”、“能”等语义关系来说明。如,“雪是白的” 。

    一元关系的描述

       应该说,语义网络表示的是二元关系。如何用它来描述一元关系?
       结点1表示实体,结点2表示实体的性质或属性等,弧表示语义关系。
       例如,“李刚是一个人”为一元关系,其语义网络如前所示。

    例  用语义网络表示“动物能运动、会吃” 。

    二元关系

         可用二元谓词P(x,y)表示的关系。其中,x,y为实体,P为实体之间的关系。
         单个二元关系可直接用一个基本网元来表示,如前介绍的一些常用的二元关系及其表示。
         对复杂关系,可通过一些相对独立的二元或一元关系的组合来实现。
        例  用语义网络表示:

       动物能运动、会吃。
       鸟是一种动物,鸟有翅膀、会飞。
       鱼是一种动物,鱼生活在水中、会游泳。

         对于这个问题,各种动物的属性按属性关系描述,动物之间的分类关系用类属关系描述。

    例   用语义网络表示:

      王强是理想公司的经理;
      理想公司在中关村;
      王强28岁。

      例 :

    李新的汽车的款式是“捷达”、银灰色。
    王红的汽车的款式是“凯越”、红色。

    李新和王红的汽车均属于具体概念,可增加“汽车” 这个抽象概念。

    上面我们是从关系角度考察语义网的表达力的。下面我们从语句角度来考察语义网
    例如,对于如下的语句(或事件):

    小王送给小李一本书。

    用语义网络可表示为图7―12,其中S代表整个语句。这种表示被称为是自然语言语句的深层结构表示。

    观察后发现,其实就是将整个句子按照成分划分主谓宾、定状补结构。

    语义网络也能表示用谓词公式表示的形式语言语句。例如:

    即“某个学生读过《三国演义》”,其语义网络表示为图7―13。

     又如:

    即“每个学生读过《三国演义》”, 其语义网络表示为图 7-14。

     3、基于语义网络的推理

            基于语义网络的推理也是继承。继承也是通过匹配、搜索实现的。问题求解时,首先根据待求问题的要求构造一个网络片断,然后在知识库中查找可与之匹配的语义网络,当网络片断中的询问部分与知识库中的某网络结构匹配时,则与询问处匹配的事实,就是问题的解。例如,我们要通过图7-1所示的语义网络(假设它已存入知识库),查询富士苹果有什么特点。那么, 我们可先构造如图7-15所示的一个网络片段。然后, 使其与知识库中的语义网络进行匹配。匹配后X的值应为“脆甜”。当然,这是一个简单问题。如果问题复杂,也可能不能通过直接匹配得到结果,那么还需要沿着有关边进行搜索, 通过继承来获得结果。例如要问:吃富士苹果对人的健康有何意义?那么,通过上述网络片断不能直接获得答案, 这时, 就需沿着边“AKO”一直搜索到节点“水果”,由水果的“富营养”性, 通过特性继承便得到富士苹果也富营养。

     需指出的是,与框架的情形一样,对于表示逻辑蕴含关系的语义网络,也可以进行演绎推理。

    4、语义网络的程序语言实现

    由于语义网络是一个二元关系图,所以用PROLOG可方便地实现语义网络知识表示。例如,图7―1所示的语义网络用PROLOG可表示如下:  

    a--kind--of("苹果""水果").  
    taste("苹果""").  
    a--kind--of("富士""苹果").  
    intro--from("富士""日本").  
    is--a("日本""亚洲国家").  
    a--kind--of("秦冠""苹果").  
    produ--in("秦冠""陕西").  
    is--located--at("陕西""中国西部").  
    a--part--of("中国西部""中国").  
    ……… 

    也可以表示为

    arc(a--kind--of,"苹果""水果").  
    arc(taste,"苹果""").  
    arc(a--kind--of,"富士""苹果").  
    arc(intro--from,"富士""日本").  
    arc(is--a,"日本""亚洲国家").  
    arc(a--kind--of,"秦冠""苹果").  
    arc(produ--in"秦冠""陕西").  
    arc(is--located--at,"陕西""中国西部").  
    arc(a--part--of,"中国西部""中国").  
    ……… 

    当然,我们也可以将一个网络或网络片段组织在一个事实中。例如:

    net1( a--kind--of(“苹果”,“水果”),  
             taste(“苹果”,“甜”),
             a--kind--of(“秦冠”,“苹果”),
             produ--in("秦冠""陕西")).

    三、面向对象知识表示

    近年来,面向对象技术蓬勃兴起。在知识表示领域则出现了面向对象的知识表示方法。

    面向对象技术中的核心概念是对象和类。对象可以泛指一切事物,类则是一类对象的抽象模型。反之,一个对象是其所属类的实例。通常,在面向对象的程序设计语言中,只给出类的定义,其对象由类生成。
    类的定义中就说明了所辖对象的共同特征(属性、状态等)和行为。特征用变量表示,行为则是作用于这些特征和作用于对象的一组操作,如函数、过程等。这些操作一般称为方法。这样,一个类将其对象所具有的共同特征和操作组织在一起,统一进行定义,以供全体对象共享。即当给类中的特征变量赋予一组值时,则这组值连同类中的方法,就构成了一个具体的对象。
       例7.6 下面是面向对象程序设计语言C++中一个雇员类和经理类的定义。 

    class Employee
    {
    privite:
        char*Name;
        int Age;
        int Salary;
    public:
        Employee(char*name,int age,int salary);
        ~Employee();
    };
    Employee∷Employee(char*name,int age,int salary)
    {
        Name=newchar[strlen(name)];
        strcpy(Name,name);
        Age=age;
        Salary=salary;
    }
    Employee∷~Employee()
    {
        Delete Name;
    }
    Void Employee∷Change(int age,int salary)
    {
        Age=age;
        Salary=salary;
    }
    Void Employee∷Retire()
    {
        if(Age>60)
            Delete this;
    }

    以上是雇员类的定义,用此定义就可生成一个雇员类的实例,即雇员对象。例如下面的语句  

    Employeee1("李明"30) ;

    就生成一个名为李明,年龄为30岁的雇员。

    下面是经理类的定义。  

    Class Manager:public Employee
    {
    private:
          Int Level;
    public:
          Manager(char*name,int age,int salary,int level);
          ~Manager();
          Void Change Level(int n); 
    };

    由于经理类是雇员类的一个子类,所以,经理类就继承了雇员类的全部属性和行为。这两个类之间也就构成了一种层次关系。       

         一般认为,面向对象知识表示是最结构化的知识表示方法。面向对象知识表示很类似于框架,知识可以使用类按一定层次形式来组织。由于面向对象知识表示还具有封装特性,从而使知识更加模块化。所以,用面向对象方法表示的知识相当结构化和模块化,而且容易理解和管理。因此,这种方法特别适合于大型知识库的开发和维护。

    四、语义网络例题

    (1)树和草都是植物

    (2)树和草都有叶和根

    (3)胡途是思源公司的经理,他35岁,住在飞天胡同68号

    (4)篮球比赛,北京大学主场迎战清华大学,最后以89:102的比分结束

    (5)画出下列知识的语义网络:“籍贯为湖南的张山在信息学院读书,该学校位于健翔桥附近,该校由计算机系、信息系和通信系组成。”

     (6): 海浪把军舰轻轻地摇

    (7): 李老师从第一周到第十周给计算机1班上人工智能课。

  • 相关阅读:
    【Eclipse】怎样把代码复制到word中并保持颜色
    windows下配置gvim
    这是给开发者的弥天大谎还是至理名言?
    Linux中常用软件安装(基于Ubuntu)
    MyEclipse 9.1优化技巧
    【数据库复习】函数依赖
    Windows下使用Flex入门
    【数据库复习】SQL
    浏览器中的“Linux”
    Unity开发原则
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/12066862.html
Copyright © 2020-2023  润新知