前言:寻找写作灵感?中文期刊网用心挑选的Neo4J的知识图谱管理系统的分析思考,希望能为您的阅读和创作带来灵感,欢迎大家阅读并分享。
摘要:本文梳理了知识图谱的发展现状和neo4j数据库的功能特点;分析知识图谱的构建流程及Neo4J图形数据库构建知识图谱的方法。通过结合Neo4J图形数据库和关系型数据MySQL的各自功能特点,分析并设计面向行业领域的知识图谱管理系统,满足行业领域专家快速构建并分享知识图谱的应用需求。该系统能创建并管理知识图谱的实体、属性和关系信息,不仅可对实体内容信息进行关键词查询,也可以调用Neo4J数据库的查询命令对复杂关系或隐藏关系进行查询,对查询的结果通过Echarts图表进行可视化展示。
关键词:知识图谱;管理系统;系统分析;系统设计
0引言
随着互联网和信息技术的发展,越来越多的数据需存储和处理。对于结构化的数据,使用传统的关系型数据库管理系统(比如:MySQL或Oracle)可以较好地满足数据的存储和查询任务;但对非结构化的数据,尤其当数据间存在复杂的关联关系时,传统的关系型数据库就只能通过定义表与表之间的连接来实现数据查询,当数据之间的关联关系比较复杂时,表与表的连接查询效率就会显著下降,造成查询时间缓慢的问题;另外,关系型数据库在查询时也很难发现数据间隐藏的深层次关系。而基于Neo4J技术的图形数据库可有效解决上述问题。Neo4J以三元组的形式存储节点与节点之间的关系,多个三元组构成了复杂的关系网络图,通过Neo4J自带的Cypher查询语言可很方便地实现复杂数据关系的查询及存储。但在Neo4J中支持的节点和属性的数据类型较为单一,不适合存储内容丰富的数据,也不支持对具体节点或属性的全文检索。可以看出,关系型数据库和Neo4J图形数据库各具特点。知识图谱是对知识之间关系的映射,既有管理知识之间复杂关系的需求,也有管理知识内容的需求。因此,结合Neo4J图形数据库和关系型数据库的各自特点,分析并设计一套能对知识图谱的知识内容和知识关系进行有效管理的信息系统就十分必要。
1知识图谱技术概述
知识图谱是通过图模型来描述现实世界中各种人或物之间的关系。在知识图谱的图模型中一般使用节点来描述人或物,用节点之间的边来描述人或物之间的关系;每个节点和关系都可设置不同的属性进行区分。在知识图谱中节点和节点之间的关系构成了一个主、谓、宾的三元组。知识图谱技术最早起源于20世纪60年代提出的语义网络(SemanticNetworks),然后经历了20世纪80年代本体论和语义Web的发展,直到2012年谷歌公司第一次将知识图谱(KnowledgeGraph)的概念应用于谷歌搜索引擎的查询结果中,这才促使知识图谱的应用进入快速发展的阶段[3]。目前,知识图谱的应用可分为两种类型,即:通用领域知识图谱和垂直领域知识图谱[2]。其中,通用领域知识图谱在构建过程中倾向于应用的广泛性,一般采用自底向上的构建方式并需广泛的采集数据,需较长的建设周期和较复杂的数据处理工作。此类型的知识图谱比较知名的有普林斯顿大学的WordNet词典知识库、接近人类自然语言表述的常识知识库ConceptNet以及具备多语言可编辑特性的大规模链接知识库WikiData等;垂直领域知识图谱是针对具体行业构建的应用于特定领域的知识图谱,垂直领域知识图谱一般采用自顶向下的构建方式;目前,此类型的知识图谱在国内各行、各业都有大量的应用案例,比如,在电子商务领域阿里巴巴公司构建以网络零售商品数据为主的知识图谱,在医疗卫生领域有中医药知识图谱和中医养生知识图谱等,在农林科技领域有中国农科院构建的水稻知识图谱。知识图谱的构建步骤主要包括知识的表示、数据的采集、知识的抽取和知识挖掘[2]。知识表示可用资源描述框架(ResourceDescriptionFramework,简称RDF)来描述,RDF通过一个主、谓、宾三元组来描述知识,方便转化为自然语言。知识表示也可通过本体建模语言OWL(OntologyWebLanguage)来描述,相对于RDF,OWL具有更丰富的关系词汇和推理。数据资源的采集可从传统的关系型数据库中获取结构化数据,也可通过网络爬虫技术从互联网中获取大量的非结构化数据。知识的抽取包括对抓取的数据进行分词、词性标注、实体识别和实体关系抽取等步骤;其中,实体识别是从数据资源中识别出人物或事件等能够知识图谱中呈现的节点,可采用基于规则和词典的方法,也可采用统计学习方法,统计学习方法包括隐马尔可夫模型和条件随机场模型。基于规则和词典的方法对实体的识别较为精确,但可扩展性差、难以发现新词汇;而基于统计学习的方法能发现新词汇,但模型训练周期长、收敛速度较慢。知识挖掘阶段包括实体对齐和实体链接,实体对齐是将来自于不同数据源的相同实体合并,统一命名;实体链接是要将抽取的实体与知识图谱中要描述的实体进行对应。
2基于Neo4J的图形数据库介绍
Neo4J是一种开源无模式并支持事务管理的图形数据库。不同于传统的关系型数据库,Neo4J使用图数据结构来存储实体和实体间关系数据,而不是使用表来存储。这种存储方式极大地提升多层次关系查询的效率。Neo4J的图模型由实体(Entity)、属性(Property)和关系(Relationship)构成。图模型中的实体和关系都具有唯一的ID标识,也可自定义标签(Label)来相互区别。数据库管理员可通过Neo4J提供的Cypher查询语言对图模型进行管理操作。Cypher查询语言类似于传统关系型数据库的结构化查询语言SQL,它通过Create和Match命令对实体和关系的创建、修改、删除和查询。Neo4J为高级程序设计语言提供两种访问图数据的方式。一种是以API接口的方式嵌入程序中,此种方式适合于Java语言,Neo4J具有专门的Java类库可以高效的操作图数据库;另外一种方式是通过REST接口的方式执行Cypher查询命令,高级语言程序将Cypher查询命令包装发送给Neo4J数据库引擎执行,并对返回的结果进行分析处理。REST接口的访问方式适合于PHP或Python程序语言,其执行的流程如下图1所示:以PHP程序设计语言为例,通过REST接口访问Neo4J数据库的流程如下:
2.1下载Neo4J驱动程序
通过PHP语言专门的包管理工具Composer下载Neo4J数据库的驱动程序包neo4j-php-client。
2.2建立与Neo4J数据库的连接
使用驱动包中ClientBuilder类的create方法生成Neo4J客户端,并使用客户端的addConnection方法连接Neo4J数据库的7474端口。2.3使用REST接口方式执行Cypher命令
在步骤2中生成的客户端连接client具有run方法,该方法接受一个字符串类型的参数,将要执行的Cypher命令作为字符串传递给run方法,就会得到返回结果。如果要在图数据库中增加一个Person类型的实体p1,执行方法如下:$client->run('create(p1:person)returnp1');如果建立将类型为Person的两个实体p1和p2建立联系,执行方法如下:$client->run('MATCH(p1:person)MATCH(p2:person)CREATE(p1)-[r:link]->(p2)');上述方法通过Match命令查询出p1和p2,然后通过Create命令建立实体p1和p2的连接。
2.4处理Cypher命令的查询结果
执行步骤3的run方法会返回结果对象$result,通过该对象的getRecords方法返回查询结果列表。结果列表中的每个列表项都包含查询实体或关系的标签label、类型type和值value属性。通过上述四个步骤就可用高级程序设计语言对Neo4J进行的数据操纵和查询。对查询到的结果还可结合开源的Echarts图表库,在浏览器端以关系图的形式可视化显示。因此,可用服务器端的程序设计语言将Neo4J数据库和关系型数据库MySQL进行优化整合,充分发挥两种类型数据库各自的优势,形成基于Web的知识图谱管理信息系统。
3基于Neo4J的知识图谱管理系统分析
随着知识图谱技术的普及和发展,越来越多的行业和企业具有构建知识图谱的需求。垂直领域知识图谱一般采用自顶向下的方式,根据行业专家的经验知识进行构建。但知识图谱的构建技术相对较为复杂,非计算机领域的专家并不熟悉知识图谱的构建工具,也无法在短时间内掌握Neo4J图形数据库技术,更不会使用图形数据库的Cypher查询语言,这为知识图谱技术的推广和应用带来阻碍。因此,有必要设计一款能为各个行业领域专家使用的知识图谱管理系统。为便于知识图谱技术的普及和推广,该系统应基于Web技术,采用B/S体系结构来实现。知识图谱的管理者和使用者通过浏览器即可登录访问并创建、管理和分析知识图谱,避免学习复杂的Cypher查询命令。
3.1基础功能方面
基于Web的知识图谱管理系统应具有知识图谱的创建、删除、修改和查询及可视化展示功能。其中,知识图谱的创建功能应包括实体的创建、属性创建及关系的创建。知识图谱的管理功能应包括该知识图谱中所有节点和关系的删除和修改功能。知识图谱的查询功能不仅要支持对单个知识图谱的关系查询,也应支持多个知识图谱的联合查询。对查询结果的展示功能应同时支持传统的文字列表展示和可视化图形展示。这里的可视化图形展示可借助Echarts图形库中的关系图来渲染。图2是系统分析中的用例图,展示系统基础功能之间的相互关系;
3.2访问权限方面
基于Web的知识图谱管理系统是多用户管理的信息系统,需提供用户权限管理功能。因此需对访问用户提进行角色划分,将系统的访问者分为构建者和使用者。两者具有不通的访问权限,构建者用户具有知识图谱的创建功能和决定知识图谱是否公开的功能。使用者用户具有对公开知识图谱的查询功能。当需联合多个知识图谱的查询时,使用者必须获取知识图谱的权限并导入多个公开的知识图谱;
3.3技术功能方面
需充分结合传统关系型数据库和图形数据库的优势,关系型数据库具有信息存储规范化的优势,而图形数据库具有高效查询复杂关系的优势。因此对知识图谱中的用户信息、图谱信息、实体及关系的信息均采用关系型数据库MySQL存储,而对实体关系网络则存储在Neo4J数据库中。采用服务器端程序设计语言PHP来维护两种数据库中信息的一致性。
4基于Neo4J的知识图谱管理系统设计
通过对上述知识图谱管理系统的功能和技术需求分析可看出,该系统主要涉及用户、知识图谱、节点、属性及关系五个实体。为能有效对知识图谱进行管理,采用关系型数据库存储这五个实体的具体信息,同时在用户构建知识图谱模型时将这些信息存入Neo4J数据库中。在数据模型关系中,用户表中具有“用户类型”字段用于区分知识图谱的创建者和使用者。知识图谱表通过“用户ID”字段与用户表建立一对多的关系,从而允许一个用户同时创建多个知识图谱,也使得用户登录后,可快速管理属于自己的知识图谱。节点表通过“节点ID”与属性表进行一对多的关联,从而允许一个节点可具有多个属性。属性表的“属性类型”使用字符串格式,存储Neo4J中支持的基础数据类型,包括:字符串(String)、整型(Int)、浮点型(Float)、布尔型(Bool)等数据类型。由于Neo4J主要描述的是从起始节点到结束节点间的关系,因此,在关系表中使用“主节点ID”字段代表起始节点,使用“客节点ID”代表结束节点,节点间的关系名称存储在“关系名称”字段中。关系表通过“主节点ID”与节点表中的“节点ID”建立一对多的关联,表示在知识图谱中一个节点可对应多个关系。根据上述数据关系模型中五个实体的字段构成可设计相应的类。User类代表用户表、Graph类代表图谱表、Nodes类代表节点表,Relations类代表关系表,Properties类代表属性表。以Nodes节点类为例,该类除包括节点ID、节点标签、节点名称和节点描述外,还应包括一个属性列表,列表中的每一项都关联到属性类中,形成节点和属性间一对多的关联关系。Nodes节点类还应有创建、删除和修改方法。其中,在创建方法中,它接收用户发送的Web表单,从Web表单中提取所需的节点信息,并将提取的节点信息添加到Nodes表中,同时调用Neo4J数据库的REST接口,在Neo4J数据库中生成相应的节点。在删除方法中,它接收Web页面发送过来的节点ID,先以REST接口方式发送删除节点的Cypher命令给Neo4J数据库引擎执行,然后以SQL查询命令请求MySQL数据库在Nodes表中删除节点记录,同时也要关联删除Properties表中的属性记录。实体关系Relations类中的创建和删除方法也需同时在图形数据库和关系数据库中维护信息的一致性。MySQL数据库和Neo4J数据库都支持完整的事务管理,因此,可将上述功能的实现放置在事务单元中处理,从而维护两个数据库数据的一致性。当系统使用者输入查询关键词时,在服务器端设置一个查询控制器,专门接收用户提交的查询表单,分析查询表单数据。如果用户的查询请求是简单的节点或属性查询时,查询控制器就将查询关键词转发给Nodes节点类,由Nodes类查询MySQL数据中的Nodes表或Properties表,并将查询结果以文字列表的形式反馈给用户查询界面。如果用户查询的是实体关系时,查询控制器就将查询关键词传递给Relations类的查询方法,由该方法根据查询关键词构建Cypher查询语句,然后使用REST接口的方式传递Cypher命令给Neo4J数据库执行。对于关系查询的结果,可转换成符合Echarts图表的JSON数据结构,在浏览器端利用Echarts的关系图渲染知识图谱。
5结论
知识图谱尤其是垂直领域的知识图谱正在被越来越多的行业关注并应用。但知识图谱的构建技术和查询技术相对较复杂,在一定程度上阻碍知识图谱在行业领域的普及。行业领域专家需要的是能将专业知识存储并分享的知识图谱构建平台。通过设计一个基于Web技术的知识图谱管理系统,可以满足行业领域专家对知识图谱创建、分享和查询的基本需求。本系统有效地结合传统关系型数据库和图形数据库Neo4J的优势:利用MySQL数据库存储和查询单一的实体和属性信息,利用Neo4J数据库查询实体关系,满足复杂关系的查询需求;对于查询结果采用文字和Echarts关系图两种方式呈现,以便于知识图谱的展示和分享。
作者:唐勇 单位:常州纺织服装职业技术学院