干货 | 初学者入门必看的“知识图谱”解读(下)

2019-09-17 17:24:33 浏览数 (1)

本文为 AI 研习社社区用户 @邹佳敏 的博客文章,其知乎专栏为:AI的怎怎,歪歪不喜欢。欢迎扫描底部社区名片访问 @邹佳敏 的主页,查看更多内容。

回看上篇内容,可点击:“知识图谱”解读(上)、“知识图谱”解读(中)

本系列参考了市面上已知的,几乎全部“知识图谱”相关文章,并总结提炼出一套适合初学者入门的“知识图谱”的知识体系,希望大家能有所收获。

六,知识图谱的构建流程:

以结构化数据为例,数据存储在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,平移变换:

将三元组数据平移变换至图数据库。

Link:https://github.com/semr/neo4jena
  • 5.2,合并变换:

比如,将Class作为节点,Object Property作为关系,Data Property作为节点中的属性,转储自属性图数据库。个人比较推荐这种方式,因为它有一个,由Neo4J的电信解决方案总裁,“准官方”支持的解决方案。嘻嘻嘻~

Link:https://github.com/jbarrasa/neosemantics

6,上层应用

略,记得加Cache。

自此,已完成“知识图谱”的概念和实现的全部介绍,个人认为已经非常详尽,欢迎各位小伙伴私信提问。

0 人点赞