回看上篇内容,可点击:“知识图谱”解读(上)、“知识图谱”解读(中)
本系列参考了市面上已知的,几乎全部“知识图谱”相关文章,并总结提炼出一套适合初学者入门的“知识图谱”的知识体系,希望大家能有所收获。
六,知识图谱的构建流程:
以结构化数据为例,数据存储在MySQL中。
1,定义本节讨论的内容:
不讨论,自然语言处理:如何完成非结构化或半结构化文本的抽取;
不讨论,机器学习:如何使用机器学习或深度学习的方法完成图谱隐含的语义推理。
讨论,知识工程:如何根据业务需求,完成概念实体,对象关系属性和数据值属性的定义;
讨论,数据库:如何根据业务流量,完成结构化数据到知识图谱的存储和应用。
2,知识工程简介:
- 2.1,本体构建:
知识工程,最重要的工作就是”本体构建“。
希望达到的效果是,对于不同来源、不同内容的数据,在接入知识图谱时都会按照预定义的schema对数据进行转换和清洗,无缝使用已有元数据和资源。
即,根据具体的业务需求,抽象出对应的概念(实体:公司,人物),对象属性(关系: 融资,任职),数据属性(值: 融资金额,担任职位)等要素。
本体构建,常用的工具是斯坦福大学的开源工具Protege。它实现了全套OWL本体文件的定义,但是它只能以序列化(N-Triples,Turtles)后的文件存储,并不支持多人协同编辑。
在工程实践中,可以按照Protege的基本功能,实现Web端管理平台编辑。
- 2.2,业务场景:
在不同的业务场景下,对同一份结构化数据,构建的本体会有很大差异,所以,在初始化知识图谱项目中,可使用“二八原则”,找准一个落地应用场景,快速开始。比如,企业基本信息图谱,企业舆情事件图谱等。
3,数据转换:
使用开源工具包(D2RQ),将存储在MySQL中的结构化数据,转换为RDF的三元组数据。
- 3.1,D2RQ转换流程:
D2RQ,自定义了一套关系型数据库至OWL文件的“映射语言”,可以通过人工定义并编辑,将不同MySQL连接实例的不同字段,依照"映射语言"中的语法规则,与OWL文件中定义的本体字段互相关联,从而实现转换。工程上,可以将该功能做在管理平台上,让业务人员配置。
Link:The D2RQ Mapping Language(http://d2rq.org/d2rq-language)
当然,如果图谱的构建是一次性的工作,可以将MySQL中的数据拆表。即,(1),所有Class概念和Data Property拆成独立表,以实体ID为主键,允许存在外键;(2),不同Class概念间的关联Object Property拆成独立表,表内包含2个ID字段,同时它们是对应Class表的主键。
4,数据操作:
使用Apache Jena Frame,实现RDF数据的操作和处理。
Jena是一整套开源的语义网技术栈操作API,包含本体推理,规则推理和自带数据库。工程上,可以使用它,完成W3C定义的全部语义网功能。
Link:Apache Jena(https://jena.apache.org/documentation/javadoc/jena/index.html)
5,数据存储:
使用属性图数据库,比如,Neo4j,实现三元组数据的存储。
就像在知识图谱(上)中介绍的那样,RDF只是一套描述世界全部知识的表述规范,即三元组规范。它并未定义任何三元组数据的存储方式。
因此,理论上,在工程实现中,可以工程代码实现的方式,使用属性图数据库存储RDF文件,即,编码实现RDF模型,至属性图模型的转换。有2种方式:
- 5.1,平移变换:
将三元组数据平移变换至图数据库。
- 5.2,合并变换:
比如,将Class作为节点,Object Property作为关系,Data Property作为节点中的属性,转储自属性图数据库。个人比较推荐这种方式,因为它有一个,由Neo4J的电信解决方案总裁,“准官方”支持的解决方案。嘻嘻嘻~
6,上层应用
略,记得加Cache。
自此,已完成“知识图谱”的概念和实现的全部介绍,个人认为已经非常详尽,欢迎各位小伙伴私信提问。