知识图谱构建摸索

一、前言

知识图谱(Knowledge Graph)突然就变得很热门,自己也被分配去研究构建知识图谱了,中间也看了很多资料,这里想做个小笔记,方便日后的查阅和备忘吧!

二、什么是知识图谱?

构成这个世界的是实体,而非字符串(things, not strings)。

知识图谱构建摸索_第1张图片

知识图谱其实就是以前的语义网,只不过换了一个名字而已。知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。知识图谱提供了从“关系”的角度去分析问题的能力。

知识图谱这个概念最早由Google在2012年提出的,主要是用来优化现有的搜索引擎。不同于基于关键词搜索的传统搜索引擎,知识图谱可用来更好地查询复杂的关联信息,从语义层面理解用户意图,改进搜索质量。比如在Google的搜索框里输入“Marie Curie”(玛丽·居里)这个查询词,谷歌会在右侧提供了居里夫人的详细信息,如个人简介、出生地点、生卒年月等,甚至还包括一些与居里夫人有关的历史人物,例如爱因斯坦、皮埃尔·居里(居里夫人的丈夫)等。

知识图谱构建摸索_第2张图片

三、构建流程

知识图谱构建摸索_第3张图片

四、我的摸索

知识图谱的构建一般就是分为上面说的四个步骤,其中“知识存储”是很重要的一步,这个关系到你接下来的工具学习。一般来说,知识图谱有两种存储的形式,一种就是传统的RDF存储,另一种就是图数据库存储,这里推荐采用图数据库,因为google知识图谱采用的就是图数据库的形式,而且RDF的形式学习成本比较高,上手麻烦。

下面是我的摸索过程:
刚开始采用的是RDF的形式,毕竟刚接触知识图谱的时候,大家肯定都是用过斯坦福大学提供的可视化工具protege来手工构建,我自己也学习了一下,发现实在太繁琐,效率很低,而且不适合大一点知识图谱的构建,最终弃掉的主要原因是对中文支持差。后来知道了jena,是一个java框架,提供了API来处理基于RDF的本体数据,方便半自动的构建,所以之后就采用了jena 和 virtuoso的组合(一个可以存储RDF的数据库,据说stardog更加的不错),但是发现传统的RDF查询需要用到sparql,学习成本很高,很复杂也不好用。
最终,采用了neo4j图数据和它本身提供cypher查询语句的方式,优点明显,学习和上手简单了很多,而且因为neo4j也是比较主流的图数据,资料丰富很多(中文有两本不错的书:《图数据》和《neo4j实战》,方便入门),neo4j本身还提供了可视化数据的功能,方便知识库的构建。

以上就是我的摸索过程,仅供大家参考,纯属个人观点。

如果也有在摸索知识图谱构建的同学或者前辈,欢迎留言交流和指导,我自己也还在不断摸索和学习中!O(∩_∩)O

你可能感兴趣的:(知识图谱)