知识图谱是一把开启智能机器大脑的钥匙, 能够打开 web 3.0 时代的知识宝库. 本文将从知识图谱的概念, 架构, 关键技术, 应用领域以及一些需要注意的问题等方面, 带大家走进知识图谱的世界.
知识图谱是什么?
A knowledge graph consists of a set of interconnected typed entities and their attributes.
知识图谱本质上是语义网络, 是一种基于图的数据结构, 由节点 (Point) 和边 (Edge) 组成. 在知识图谱里, 每个节点表示现实世界中存在的 "实体", 每条边为实体与实体之间的 "关系". 知识图谱是关系的最有效的表示方式.
通俗地讲, 知识图谱就是把所有不同种类的信息 (Heterogeneous Information) 连接在一起而得到的一个关系网络. 知识图谱提供了从 "关系" 的角度去分析问题的能力.
知识图谱这个概念最早由 Google 提出, 主要是用来优化现有的搜索引擎. 不同于基于关键词搜索的传统搜索引擎, 知识图谱可用来更好地查询复杂的关联信息, 从语义层面理解用户意图, 改进搜索质量. 比如在 Google 的搜索框里输入科比的时候, 搜索结果页面的右侧还会出现科比相关的信息比如出生年月, 家庭情况等等.
在知识图谱里, 我们通常用 "实体(Entity)" 来表达图里的节点, 用 "关系(Relation)" 来表达图里的 "边". 实体指的是现实世界中的事物比如人, 地名, 概念, 公司等, 关系则用来表达不同实体之间的某种联系, 比如人 -"居住在"- 北京, 张三和李四是 "朋友" 等等.
通过上面这个例子, 读者应该对知识图谱有了一个初步的印象, 其本质是为了表示知识, 从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图(Multi-relational Graph).
知识图谱的表示
那什么叫多关系图呢? 图是由节点 (Vertex) 和边 (Edge) 来构成, 但这些图通常只包含一种类型的节点和边. 但相反, 多关系图一般包含多种类型的节点和多种类型的边. 比如下图因为图里包含了多种类型的节点和边. 这些类型由不同的颜色来标记.
当一个知识图谱拥有属性时, 我们可以用属性图 (Property Graph) 来表示, 如上图, 科比和凡妮莎是夫妻, 他们的结婚时间是 2001 年到 2020 年, 其中结婚时间就可以作为关系的属性, 类似的, 科比也有自己的属性, 比如性别, 出生日期等. 这种属性图的表达很贴近现实生活中的场景, 也可以很好地描述业务中所包含的逻辑.
除了属性图, 知识图谱也可以用 RDF 来表示, 它是由很多的三元组 (Triples) 来组成. RDF 在设计上的主要特点是易于发布和分享数据, 但不支持实体或关系拥有属性, 如果非要加上属性, 则在设计上需要做一些修改. 目前来看, RDF 主要还是用于学术的场景, 在工业界我们更多的还是采用图数据库 (比如用来存储属性图) 的方式.
知识图谱主要有两种存储方式: 一种是基于 RDF 的存储; 另一种是基于图数据库的存储. RDF 一个重要的设计原则是数据的易发布以及共享, 图数据库则把重点放在了高效的图查询和搜索上. 其次, RDF 以三元组的方式来存储数据而且不包含属性信息, 但图数据库一般以属性图为基本的表示形式, 所以实体和关系可以包含属性, 这就意味着更容易表达现实的业务场景.
知识抽取
知识图谱的体系架构是其指构建模式结构, 如下图所示. 知识图谱的构建过程需要随人的认知能力不断更新迭代.
所谓的静态关系图谱, 意味着我们不考虑图谱结构本身随时间的变化, 只是聚焦在当前知识图谱结构上. 然而, 我们也知道图谱的结构是随时间变化的.
在下面的图中, 我们给出了一个知识图谱 T 时刻和 T+1 时刻的结构, 我们很容易看出在这两个时刻中间, 图谱结构 (或者部分结构) 发生了很明显的变化. 那怎么去判断这些结构上的变化呢? 感兴趣的读者可以关注我, 后面会持续更新知识图谱相关技术栈, 本文先不做过多讨论.
回到知识图谱的体系架构那张图, 知识图谱的构建是后续应用的基础, 而且构建的前提是需要把数据从不同的数据源中抽取出来. 对于垂直领域的知识图谱来说, 它们的数据源主要来自两种渠道: 一种是业务本身的数据, 这部分数据通常包含在公司内的数据库表并以结构化的方式存储; 另一种是网络上公开, 抓取的数据, 这些数据通常是以网页的形式存在所以是半结构 / 非结构化的数据.
前者一般只需要简单预处理即可以作为后续 AI 系统的输入, 但后者一般需要借助于自然语言处理等技术来提取出结构化信息. 比如在上面的搜索例子里, 科比和凡妮莎的关系就可以从非结构化数据中提炼出来, 比如维基百科等数据源.
信息抽取的难点在于处理非结构化数据. 从一段非结构化的文本中, 需要抽取出实体, 关系和属性. 例如下图是从维基百科拿到的科比文本信息:
要从海量文字中, 构建出类似文章开头的那种知识图谱, 需要涉及几个方面的自然语言处理技术:
实体命名识别(Name Entity Recognition)
关系抽取(Relation Extraction)
实体统一(Entity Resolution)
指代消解(Coreference Resolution)
来源: http://developer.51cto.com/art/202003/613010.htm