2.1 知识表示与知识建模
对现有知识进行表示和建模是构建知识图谱的基础和准备工作,也是完整构建有价值的知识图谱的前提。本节将对知识表示与知识建模的概念及常用方法进行详细介绍。
2.1.1 知识表示
通过将知识按照一定的方法进行表示和存储,才能让计算机系统更高效地处理和利用知识。实际上,知识表示是人工智能领域一个较为核心的问题。对于知识表示的准确定义目前仍旧没有一个完美的答案。Davis等人在论文“What is knowledge representation”[1]中给出了知识表示的五种角色,具体如下所示。
- 真实世界中知识的抽象替代
- 本体论的集合
- 不完整的智能推理理论
- 高效计算的媒介
- 知识的中间体
以上内容可以看作是对知识表示的定义较为全面的一种阐述,那么,这五种角色的定义,分别是为了解决什么问题呢?
首先,知识表示可以看作真实世界中知识的一种抽象替代,而且这种替代是按照计算机可以理解的方法来实现的。这种解释来源于,任何希望对于所处环境有所认知的智能体都会遇到一个问题,即需要了解的知识全部属于外部知识。举例来说,当人类还处在婴儿阶段时,需要对外界进行学习和认知。在这种情况下,人类必须将外界的实物(如汽车、苹果等)转化成大脑中一种抽象的表示,才可以真正学习到这个知识。现在如果希望计算机能够学习到真实世界中的知识,就需要在计算机中建立抽象替代。然而,这就会引出一个问题,即对现实世界的知识进行抽象表示无法完全做到无损。
为了解决这个问题,引入了知识表示的第二个角色:一组本体论的集合。本体论将真实世界中的概念和实体抽象成类和对象,从某种程度上达到了与知识表示相同的目的。将真实世界抽象成类和对象的优势在于,使用者可以只关注自己想关注的重点并仅对其进行抽象和表示,避免了知识表示作为真实世界抽象替代无法做到无损的问题。关注事物的重点,实际上是人类(包括人工智能)在做出判断和决策时所使用的捷径,这是因为在真实世界中的事物包含的信息量过大,而系统必须关注对其有用的信息。
除此之外,知识表示还是一个不完整的智能推理理论,这也是知识表示的第三个角色。这个角色来源于,最初知识的概念和表示的产生都是由于智能体需要进行推理而驱使的。认知能力对判断一个物体是否智能起着至关重要的作用,而拥有认知能力即代表智能体可以储存知识,并使用其进行推理后得到新的知识。但仅仅存在知识的表示理论是不够的,需要配合推理方法等其他理论形成完整的推理理论,所以知识表示可以看作一个不完整的智能推理理论。
知识表示的第四个角色:一种高效计算的媒介。这是因为单纯从机器的角度看,计算机中的推理是一种计算过程。如果想要得到推理结果,必须对已有的表示进行高效的计算,而知识表示抽象整合了真实世界当中的知识,在推理时可以对知识进行直接利用,达到高效计算的目的。
与之较为类似的,知识表示同样可以看作一种知识的中间体。根据字面意思,知识表示代表了我们对真实世界的描述,人类可以将已有的知识作为中间体来传播和表达知识(向机器或人类)。这种表示可以反映在现实生活中的很多方面,最浅显的如书本就是一种对知识的表示,而书本正是人类传播和描述知识的中间体。
综合以上五种知识表示的角色,我们可以将知识表示理解为对真实世界的一种不完整的抽象描述,只包含人类或计算机想要关注的方面,同时也可以把它作为计算和推理的中间件。在了解了知识表示的概念后,接下来就需要了解知识是如何被表示的。在计算机系统中,知识表示的方法和形式化语言有很多种,不同的表示方法会带来不同的表示效果。这就使得我们需要一种公认的描述方法来对需要表示的知识进行描述,这种方法必须足够简洁并且具有较强的可扩展性以适应现实世界知识的多样性,这就引出了接下来将会介绍的描述逻辑与描述语言。
1. 描述逻辑
描述逻辑是指一系列基于逻辑知识形式化的表示方法,这些表示方法能够以一种结构化的、易于理解的方式对知识进行表示和推理。描述逻辑建立在概念和关系之上,概念即为知识图谱中的类和实体,而关系可以理解为实体之间的关系。实际上,描述逻辑是一阶谓词逻辑的一个可判定子集。正如名称所表示的,描述逻辑可以通过推理的方法基于原子概念对其他概念进行表示与描述。描述逻辑中主要包含两类知识:术语知识(TBox)和断言知识(ABox)。其中术语知识主要指领域知识中的类、属性和关系,例如公司、地点等元素可以作为领域知识中的类;而断言知识是指与实例有关的知识,例如<小米公司,法定代表人,雷军>即可作为一个断言知识。在描述逻辑中,概念(Concept)表示类和实体,角色(Role)表示性质,个体(Individual)表示概念断言和常数,运算符(Operator)用于构建概念或角色的复杂表达。例如,雷军 = 小米公司 ∧ 董事长,即可作为使用描述逻辑表示的最简单的一条知识。描述逻辑作为知识表示和知识建模的基础,被多种描述语言和描述框架所使用,目前标准的知识描述语言正是由描述逻辑不断演化得到的。但相比传统的描述逻辑,知识描述语言的扩展性更好,对于人和机器而言可读性更强。
2. 描述语言
在知识表示的过程中,除了需要逻辑来描述知识外,还需要一种合适的语言来基于规定的逻辑对知识进行描述并传递信息。根据W3C标准,通常使用资源描述框架(RDF)及网络本体语言(OWL)对知识进行描述,且两者都使用可扩展标记语言(Extensible Markup Language,XML)作为核心语法。本节会针对以上规范分别进行介绍,并给出对应的例子。
(1)XML
XML描述了XML类型的一系列数据对象,也描述了处理它们的计算机程序行为。XML是一种格式整齐、易于使用并可扩展的标记语言,允许使用者创建独一无二的标签来描述内容。XML是由XML工作组(最初称为SGML编辑审查委员会)开发的,该工作组于1996年由万维网联盟(W3C)主持成立。XML的主要任务是以纯文本格式存储和交换数据,这种方法提供了独立于软件和硬件的存储方式,方便传输和共享数据。一个完整的XML文档由称为实体或元素(下文中称为元素)的存储单元组成,而每个元素又由字符组成,在所有字符中,一部分作为字符数据,另一部分则作为标记,用于标记对文档的存储布局和逻辑结构。同时XML还提供了一种对存储布局和逻辑结构施加约束的机制,使得XML的结构和布局更加整洁。使用XML可以使原系统的扩展或升级变得更加容易,并且不会丢失数据。在设计XML时,目标和原则主要涉及以下几点。
1)XML需要能直接在互联网上使用。
2)XML需支持各种应用程序。
3)XML应与SGML(标准通用标记语言,国际定义的电子文档和内容标准)兼容。
4)编写处理XML文档的难度应降到最低。
5)XML中可选功能的数量应保持绝对最小,理想情况下为零。
根据以上内容,不难看出XML遵循简单、易用、可扩展的原则。在Web中,由于XML与应用无关,并且格式相对方便阅读,所以常常用于存储元数据。然而由于XML支持自定义标签,所以两个计算机系统只能在互相已知文件中的所有标签时才能进行XML数据交换。需要注意的是,与RDF和OWL不同,XML不是一种知识表示语言,但它的核心语法能够被迁移到多种描述语言中,包括RDF和OWL。以下是一段XML文件示例,该示例描述了一个记录公司信息列表的XML文件,展示了小米公司的信息,包括名称、法人、公司种类和地址等属性,从示例中也可以看到XML的一些格式规范和使用方法。
1. <?xml version="1.0" encoding="UTF-8"?> 2. <NOTE> 3. <company_list> 4. <company> 5. <name>Xiaomi </name> 6. <represent >Lei Jun</represent> 7. <category> Sole proprietorship enterprise </category > 8. <address>Beijing</address> 9. </company > 10. <company> 11. …… 12. </company > 13. </company_list > 14. <NOTE>
根据上述代码,可以看出XML文件的主要结构是一种树形结构。其中包括由<>组成的字段以及不包含<>字符的字段,由包含<>的字段嵌套不包含<>的字段共同构成了XML文件的基本单元元素。由<>组成的字段称为元素的标签,即示例中的<NOTE>、<company_list>等,其中所有元素都可以自定义名称。而不包含<>的字段即要存储的字符数据,为元素的值。同时,从以上示例中可以看出,在每个XML文档的开头都需要添加XML的序言,用于告诉解析XML的工具或浏览器应该按照什么样的规范对XML文件进行解析。在上述示例中,第一行即该XML文件的序言,指定了该XML文件的编码方式和使用的XML版本。除了序言之外,XML文件必须包含根元素,即例子中的<NOTE>元素,其他所有元素都必须是该元素的子元素。同时XML元素必须包含标签的起始符和终结符,比如以<company_list>作为起始符,以</company_list>作为终结符。值得注意的是,XML中的字符是大小写敏感的,同时元素的命名不能以数字或标签开头,且不能以“xml”或“XML”开始。
(2)RDF
在了解了XML文件的语法和格式后,还需要掌握使用XML作为核心语法的常用知识表示方法,包括RDF和OWL,下面将主要介绍RDF。RDF是由W3C于2004年发布的一种表示Web中信息的标准。RDF由RDF核心工作组开发,是W3C Web语义方向工作的一部分。开发RDF的目的是为Web提供元数据模型和开放信息模型,即希望开发一种框架,用于描述和表示“描述数据的数据”的元数据,并通过组合多个应用程序的数据来获取新信息,以允许软件自动处理Web中的有效信息。除此之外,RDF允许在不同应用程序之间公开和共享结构化和半结构化数据。由于RDF的开放性和扩展性,使得它成为目前最常用的知识存储和表示框架之一,在使用时,可以按照RDF的方法定义对其知识进行定义和表示。RDF是语义网与本体等结构的基础层,对于人和计算机来说都有较好的可读性。在RDF中,知识以三元组的形式编码,其中每个三元组由一个主语、一个谓词(或一个属性)和一个宾语组成,可以方便地将RDF转化为自然语言。其中RDF的主语、宾语均可以是一个空白结点或用来唯一标识资源的国际化资源表示符(Internationalized Resource Identifier, IRI),谓词则必须是一个IRI。下面通过具体代码了解RDF的使用方法和具体语法。
1. <?xml version="1.0 "?> 2. <rdf:RDF xmlns:rdf= "http://www.w3.org/1999/02/22−rdf−syntax−ns#" 3. xmlns:ab= "http://www.about.com/" 4. xml:base= "http://www.base.com/"> 5. <rdf:Description rdf:ID= "Lei Jun" 6. ab:work= "CEO" 7. ab:age= "40"> 8. <ab:friend rdf:nodeID= "s3fo" /> 9. </rdf:Description> 10. <rdf:Description rdf:nodeID= "s3fo" 11. rdf:ID= "Lin Bin" 12. ab:age= "40"> 13. </rdf:Description> 14. </rdf:RDF>
通过以上代码段可以看出,RDF的核心语法为XML,RDF的使用方法与XML也有类似之处。在RDF文件的起始位置,同样需要加入XML序言,序言指定了使用的XML版本。不过,RDF作为一种全新的框架,除了需要优先指定XML序言之外,还需要为整个RDF文件指定语法的命名空间,该操作通过示例中的第2行与第3行代码实现。在指定了命名空间后,还需要指定该文件的基链接(即xml:base)。基链接可以是一个IRI,在指定基链接后,在该RDF文件中定义的所有实体都可以在基链接的基础上进行扩展并唯一标识。在本例中,我们假设基链接为www.base.com。在定义了RDF文件的全局信息后,即可根据RDF语法在其中添加需要描述的信息。在上述代码中,我们添加了名为Lei Jun的实体,建立了名为work的关系,并且根据该关系为实体添加了名为job的宾语,以及名为age的属性,还为其添加了一个由friend关系连接的实体,该实体同样拥有age属性,名称为Lin Bin。上面的例子根据三元组可以表示为图2-1所示结构。
图2-1 RDF表示的三元组
在确定了命名空间后,在三元组中定义的关系以及属性的资源标识都将属于该命名空间。并且根据前面提到的定义,若定义主语的宾语结点为空,对于RDF语法而言也是合法的。实际上,RDF可以看作对XML的扩充和简化。相比于XML要求的严格树形数据结构,RDF使用了更加简单且接近自然语言的三元组形式,语义信息相对明确,可以更好地对知识进行表示和对元数据进行描述,也更容易理解。
(3)OWL
OWL是W3C Web本体工作组设计的一种知识表示语言,旨在对特定领域的知识进行表示、交换和推理,经常被用于对本体知识进行表示。OWL作为一种基于计算逻辑的语言,其表示的知识可以很容易地被计算机所理解与应用。与RDF相同,OWL也是2004年被W3C组织推荐作为Web中的知识表示和知识储存语言。OWL的前身是美国国防高级研究计划局(DARPA)开发的代理标记语言+本体推理层(DAML + OIL)。不过,目前常提到的OWL一般指W3C OWL工作组于2009年提出的OWL 2。OWL 2是对OWL最初版本的扩展和修订,在OWL的基础上增加了一些新操作,提升了语言的整体表达能力。在后续的内容中,如不做特殊说明,我们提到的OWL均指OWL 2。
与XML和RDF相比,OWL提供了更丰富的推理方法和词汇表,其中包括但不限于类之间的关系、基数、更丰富的属性特征和枚举类等。同时,为了适应不同场景,OWL拥有三个不同级别的方案,分别是OWL Lite、OWL DL和OWL Full。
- OWL Lite支持用于构造分类法和叙词表的简单约束和分类层次结构,类的基数(类中属性的数量)限制为0和1。
- OWL DL在保持计算完整性和可判定性的同时,提供了最大的表达能力,并且OWL DL类之间的基数不限于0和1。
- OWL Full包含OWL的完整特性,并且对RDF有很好的支持。
图2-2描述了OWL Lite、OWL DL与OWL Full的关系。
图2-2 OWL Lite、OWL DL与OWL DL的关系
在进一步了解OWL之前,首先需要了解下OWL中的一些基本概念。
- 类:对现实世界中同类事物的抽象。
- 实体:指代现实世界中事物的元素。
- 属性:类中包含的属于该类的特征,该值可以是一个常量,也可以是另一个类。
- 表达式:由基本的实体组成的复杂描述。
正如在对知识表示进行介绍时提到的,尽管OWL被用于表示本体和知识,但OWL无法表示现实世界知识的所有方面,使用者可以根据需求选择较为重要的方面使用OWL进行表示。下面的代码片段展示了OWL的使用方法和具体语法。
1. <rdf:RDF 2. xmlns:rdf="http://www.w3.org/1999/02/22−rdf−syntax−ns#" 3. xmlns:rdfs="http://www.w3.org/2000/01/rdf−schema#" 4. xmlns:owl="http://www.w3.4org/2002/07/owl#" 5. xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 6. xmlns:dc="http://www.w3.org/TR/2004/REC−owl−guide−20040210/#DublinCore"> 7. <owl:Ontology rdf:about=""> 8. <owl:imports rdf:resource="http://www.example.org/company_ontology"/> 9. <rdfs:label>Company Ontology</rdfs:label> 10. </owl:Ontology> 11. <owl:Class rdf:ID="Company"> 12. <owl:Restriction> 13. <owl:minCardinality rdf:datatype="&xsd ;string">1 14. </owl:minCardinality> 15. </owl:Restriction> 16. </owl:Class> 17. 18. <owl:ObjectProperty rdf:ID= "representFor "> 19. <rdfs:domain rdf:resource="#People"/> 20. <rdfs:range rdf:resource="#Company "/> 21. </owl:ObjectProperty> 22. 23. <owl:DatatypeProperty rdf:ID= "companyName "> 24. <rdfs:domain rdf:resource="#Company "/> 25. <rdfs:range rdf:resource="&xsd; string "/> 26. </owl:DatatypeProperty>
根据上面的代码片段,可以比较清晰地看到OWL与RDF类似,OWL也使用XML作为核心语法,并且还使用了一些RDF中的定义。不过,OWL在RDF的三元组表示基础之上对类和属性等元素的表示更加清晰,扩展性也更好。比如上面第8~10行代码导入了一个已经创建好的本体,并且后续的操作都是基于该本体,从而大大提升了知识表示的扩展性。在此基础上,第11~16行代码对Company类进行了定义并约束基数(即类中的属性数)为1。同时第18~21行代码与第23~26行代码分别定义了类中的两种不同属性,这两种不同属性的区别和联系将在下一章详细介绍。
在前面内容中,我们对知识表示的概念与方法分别进行了介绍,并且对知识表示的主流方法进行了详细介绍与举例,表2-1是对这几种知识表示方法的简单对比。
表2-1 知识表示方法对比
从整体的角度看,XML作为知识表示的核心语法和语言,在不同知识表示语言中都起着举足轻重的作用。在XML的基础上,RDF将知识转化为三元组的形式,并且使用IRI作为不同知识的唯一标识符,使得知识对于计算机和人而言都更具可读性。而OWL在RDF的基础上,利用类和实体的概念,将知识进一步抽象成本体的表示,使现实世界的知识得以更完整、更有层次地表示。在了解了知识表示方法的基础上,需要更进一步明确采用什么样的建模方法对知识进行建模。
2.1.2 知识建模
知识建模是指建立计算机可解释的知识模型的过程。这些模型可以是一些通用领域的知识模型,也可以是对于某种产品的解释或规范。知识建模的重点在于,需要建立一个计算机可存储并且可解释的知识模型。通常,这些知识模型都使用知识表示方法来存储和表示。知识建模的主要过程分析如下。
1)知识获取:根据知识系统的要求从多个来源使用不同方法获取知识,然后对获取到的知识进行判别并分类保存。
2)知识结构化:使用不同方法(比如基于本体的建模方法)对非结构化的知识进行表示和存储,以达到建模的目的。然后通过已经建立的知识库,实现知识建模后的标准化和规范化。
实际上,在任何情况下,没有一种绝对“好”的建模方案,只有相对适合的方案。所以根据不同场景进行实践得到的结论,是对知识建模最好的指南。本节首先对知识建模的流程进行介绍,然后以一种常见的知识模型——本体为例介绍知识建模的详细过程。
知识获取是通过多种数据源以及人类专家,为知识库系统获取和组织需要的知识的过程。在知识获取阶段,首先需要明确建立知识模型的目的,根据目的来确定其中的知识所覆盖的领域与范围。当发现需要建立的知识模型覆盖的领域与范围过大时,也可以先从其中一部分入手,如对某个领域的子领域进行建模,再对子领域的模型进行集成,最终达到知识模型所要完成的目标。在选择领域与覆盖范围时,尽可能地选择整体知识结构相对稳定的领域,一个不稳定的领域会造成大量数据的删减和重构,增加知识模型的维护成本,同时降低构建的效率。通常来讲,目前常用的知识来源主要包含两方面:以Web数据为数据源和以专家知识为数据源。根据不同的数据源,可以使用不同的方法来获取数据。
以从Web获取数据为例,这种方法的核心在于使用增量方法针对特定领域不断获取相关数据。在整个过程中,知识的获取是自动进行的,并且直接从整个Web以完全无监督和独立的方式执行。在获取阶段通常希望尽可能多地获取相关知识,而Web环境由于其规模和异构性成为知识获取的最佳选择。同时由于Web环境规模相对较大,在获取时需要轻量级的分析技术才能获得良好的可伸缩性和执行效率。在从Web获取知识的过程中,通常会在不同领域确定关键词,并基于这些关键词对大量网站进行分析,得到需要的知识。在网页分析的过程中,无须专家监督语言模板,也无须特定分析领域的预定义知识(例如领域本体,是知识获取的关键技术之一)。
另一方面,知识同样可以通过人类专家来获取,其中主要的方式包括但不限于由知识工程师手动将知识输入计算机中,或对领域专家进行采访等。在获取了足够的知识后,需要判别有效性并尽可能地对知识进行分类保存。
值得注意的是,经过上述步骤,获取到的信息更多是非结构化或半结构化的信息,这样的信息实际上是无法被计算机直接利用的,所以在完成上述步骤后,还需要对已获取到的知识进行结构化。结构化的核心目标是将非结构化的数据结构化,并使用计算机可读的知识表示方法进行表示。该阶段的任务可以分为两部分:知识抽取和知识结构化的表示。知识抽取部分主要负责对非结构化或半结构化的知识(通常为自然语言或接近自然语言)进行抽取,并为后续的知识表示提供便利。根据我们对RDF与OWL等知识表示语言的了解,通常可以将自然语言以三元组的结构重新组织,这样既方便了人的阅读,也降低了后续将知识通过RDF与OWL表示的难度。关于知识抽取的具体方法与使用可参阅后续章节。
在知识抽取得到结构化数据后,我们还需要将其转换成计算机可读的形式,一种常见的做法是构建本体,并将知识保存为RDF或OWL文件。在本节中我们将给出一种本体构建的方法,并在后续的章节中介绍如何具体实现本体构建。
前面第1章提过,本体的概念最早起源于哲学领域,主要研究与哲学意义上的“存在”直接相关的概念,以及与“存在”相关的关系。而在计算机和人工智能领域,一种简短的对本体的解释是,本体是一种对于现实世界概念化的规范,即知识的一种抽象模型,抽象了不同实体的特征并将其泛化成不同类和关系。在本体的构建方面,比较经典的方法包括METHONTOLOGY法[4]、七步法[17]等,这些方法的产生通常来源于具体的本体开发项目。
下面我们就以METHONTOLOGY法为例,简要介绍本体构建的流程,在第3章中我们会使用七步法构建本体。整个本体构建过程将从产生非正式的规范开始,随着本体的不断演进最终发展出可被计算机理解的本体模型。在演进过程中,本体的形式化水平逐渐提高,最终可由机器直接理解。建立本体的第一步是确定建立本体的目的,包括本体的预期用户、使用场景及本体涉及的范围等要素。这一步的重要性在于从多个维度确定了构建本体的条件与前提。在第一步完成后,通常会输出一个描述本体规范的文档。在当前阶段,这样的规范可以是任何形式,包括正式的或非正式的,并且可以使用自然语言描述。在规定了本体的目的和范围等要素后,第二步则需要进行知识获取。通常情况下,这些知识可以来源于互联网,也可以来源于专家或其他途径。在大多数情况下,知识获取可以和第一步同时进行,即在设计本体的同时根据设计方案尽可能多地获取数据,当本体规范文档输出后,再根据该文档筛选出对本体构建至关重要的数据。在METHONTOLOGY法的第三步,需要对本体进行概念化。这一步的目的是组织和结构化外部源获取到的知识。根据第一步指定的规范,在这一步需要进一步对获取到的外部知识进行抽象和汇总,提取出概念、类、关系等抽象关系作为知识的中间表示,可以使用基于表格或图形的方法对这些中间表示进行存储和展现。这些中间表示需要同时被领域专家和开发人员理解。第四步,为了使得当前构建的本体与其他本体融合与共享,需要尽可能集成已有本体。在集成过程中,可以借鉴已有本体的某些定义,使新建立的本体与已有本体保持一致。第五步,使用形式化语言实现该本体,即使用形式化语言进行表示。举例来说,可以使用前文提到的RDF与OWL等形式化语言表示本体。在这一步中输出的本体形式化表示应当是可被计算机理解和存储的。当完成本体的形式化表示后,需要对构建好的本体进行评估,这是METHONTOLOGY法构建本体的第六步。这一步的重要性在于识别本体中存在的冗余、不完备与不一致,以便对本体进行优化来提升本体的质量。接下来即可将上述每一步的成果整理成文档并保存,这也是METHONTOLOGY法构建本体的最后一步。通过将构建本体的过程文档化,可以对整个本体构建过程进行反思与复盘,以便在后续需要维护时快速进入本体的下一个生命周期。