人工智能入门实战:构建自己的知识图谱

425 阅读15分钟

1.背景介绍

知识图谱(Knowledge Graph)是一种基于网络结构、符号化数据及语义理解等技术,将互联网上海量的互动数据组织成一个庞大的、完整的网络结构图,为用户提供海量的信息搜寻和数据分析服务的交互式查询工具。其能够自动从大量的文本、图像、视频、音频中提取并整合知识、关联信息、推断潜在意义,对现实世界进行建模、解释、总结、预测。其应用领域非常广泛,如搜索引擎、推荐系统、智能客服、广告、病症诊治、金融、医疗、文献检索、生物信息学、虚拟现实、社交媒体、电子商务、工业制造等。与传统的数据库不同,知识图谱能够连接海量的数据和互相补充,形成全新的知识资源,并通过链接、关联、推理等方法,让数据更加具有价值。知识图谱可以帮助用户快速获取相关信息、挖掘隐藏信息、洞察机遇、开拓眼界、增强决策力,因此成为当今热门话题。近年来,知识图谱在学术界和产业界都取得了很好的进步。但由于技术门槛的限制,市面上的知识图谱产品较少,普通用户无法独立开发出知识图谱。本专栏将介绍如何利用人工智能技术,根据自身需求,开发出属于自己的知识图谱。

2.核心概念与联系

2.1 什么是知识图谱?

知识图谱(Knowledge Graph)是一种基于网络结构、符号化数据及语义理解等技术,它将互联网上海量的互动数据组织成一个庞大的、完整的网络结构图,为用户提供海量的信息搜寻和数据分析服务的交互式查询工具。其能够自动从大量的文本、图像、视频、音频中提取并整合知识、关联信息、推断潜在意义,对现实世界进行建模、解释、总结、预测。其应用领域非常广泛,如搜索引擎、推荐系统、智能客服、广告、病症诊治、金融、医疗、文献检索、生物信息学、虚拟现实、社交媒体、电子商务、工业制造等。

知识图谱的主要特征包括以下几点:

  1. 知识模式:知识图谱中的实体及关系是确定的、明确的,并且可以通过计算机技术进行索引和管理。这种方式使得知识图谱具有高度结构化和规则化,便于检索、分析和处理。
  2. 多样性:知识图谱包含的实体类型丰富,比如人、地点、事件、组织、药品、风险因素等。每个实体都有自己的属性描述,这些属性既可以直接描述实体,也可以通过关系链接到其他实体,构成复杂的网络状结构。
  3. 关联性:知识图谱不仅支持实体间的直接关系,还可以利用各种规则和模式关联实体,从而创建更加抽象的结构和关联。比如,“美国的首都是华盛顿”,即实体“华盛顿”可以与实体“美国”的关系“首都”连接起来。
  4. 智能推理:知识图谱采用语义网等机器学习技术,能够自动识别实体之间的语义关系,并利用规则和模式推理,发现新的关系和知识。这一过程可以完成包括知识的组织、加工、检索、分析等功能。

知识图谱可以帮助用户快速获取相关信息、挖掘隐藏信息、洞察机遇、开拓眼界、增强决策力。

2.2 知识图谱与图数据库

知识图谱是由图数据库(Graph Database)提供支撑的,它们的主要区别在于数据模型、存储和查询方式。

2.2.1 数据模型

知识图谱通常由三种类型的节点、边组成:实体(Entity)、关系(Relation)和属性(Attribute)。

  • 实体:实体表示某类事物的概念或事实,如“王者荣耀”、“苹果”、“李晨初艺术馆”。实体具有一个唯一标识符,可以作为结点,实体之间通过关系进行连接。实体可以具有多种属性,比如“苹果”实体可能具有颜色、品质等属性。
  • 关系:关系表示实体间的连接方式,如“导演”、“参演”、“作词”、“作曲”。关系可以具有方向性,比如“导演”关系可以为“张国荣”实体指明“黄轩姝孙”等多个节点的关系。关系也可以没有方向,比如“被告”关系可以表明犯罪嫌疑人的身份,而“被害人”关系则可以指明犯罪嫌疑人的受害人。
  • 属性:属性是一个不可分割的一部分,用于描述实体和关系。属性可以为实体添加细节,比如“王者荣耀”实体可以有属性“游戏制作者”;可以为关系添加额外信息,比如“参演”关系可以为参演人员添加职业标签。属性的值可以是布尔值、数字、字符串或者是时间戳,也可以为空。

知识图谱的底层存储通常为图数据库,例如Apache TinkerPop Gremlin graph database。图数据库按照图的形式组织数据,具有灵活的查询能力,适合用来存储复杂的关系型数据。

知识图谱的特点是结构化数据、异构数据,具有易于检索、高效处理的特点。同时,知识图谱也具有先进的语义理解能力,能够自动发现和推导出新的关联关系。因此,知识图谱对于数据的挖掘、分析和挖掘都非常有效。

2.2.2 查询方式

知识图谱的查询方式可以分为两种:

  1. SPARQL查询语言:SPARQL是一种基于RDF的语言,可以用来查询和修改知识图谱。它提供了丰富的查询运算符,包括选择(SELECT),投影(PROJECT),过滤(FILTER),排序(ORDER BY),连接(JOIN),聚合(AGGREGATE)等,可以实现复杂的查询需求。
  2. Cypher查询语言:Cypher也是一种图查询语言,但是与SPARQL有所不同的是,它是专门针对Neo4j图数据库设计的,可以在图数据库上执行复杂的查询操作。

SPARQL查询语言是知识图谱最常用的查询语言,可以轻松满足一般查询需求,是跨平台、语言无关的标准语言。但是由于它的语法复杂,缺乏直观性,所以有些用户觉得不方便。不过,随着图数据库的发展,有一些新特性正在逐渐加入,如可视化查询、基于路径的查询、递归查询等,会极大改善查询语言的效率和表达能力。

Cypher查询语言有着很高的开发效率,是Neo4j图数据库专门设计的查询语言。虽然它与SPARQL有着根本差别,但它有着直观的语法,可以直接将图数据库的知识模型映射到语言中。

2.3 知识图谱的数据源

知识图谱的输入数据主要来自以下几个方面:

  1. Web信息:对于一般的搜索引擎而言,Web信息主要来自于互联网上的网页、图片、视频、音频等多媒体资源,这些信息中往往存在大量的文本、链接、图片描述等内容。知识图谱需要处理这些数据,才能将其转换为实体、关系及属性。
  2. 外部数据库:知识图谱通常依赖于外部数据库,如关系数据库、NoSQL数据库、图数据库等。这些数据库记录着现实世界中的事物及其关系,需要导入到知识图谱中进行分析和挖掘。
  3. 业务数据:知识图谱可以和业务系统打通,提取业务数据中隐藏的实体关系,并进行导入和融合。业务数据既可以来自于企业内部的数据库,也可以来自第三方数据接口,如API接口等。

3.核心算法原理和具体操作步骤

3.1 数据获取

3.1.1 数据收集

首先要获得知识图谱的数据。知识图谱的数据可以从各种渠道获取,可以是爬虫抓取的网络数据,也可以是公共数据集。这里给出一个通用的流程:

  1. 收集语料库:知识图谱的数据通常来自于大规模的文本和其他数据,如微博、论坛、新闻、电影评论等。收集的数据量通常在百万级到千万级之间。
  2. 分词和词性标注:首先需要对语料库进行分词和词性标注,这样才可以对数据进行清洗和分类。分词和词性标注的目的是为了建立知识图谱中的实体,并为后续的实体链接、实体聚类、关系抽取提供依据。
  3. 实体抽取:通过分词和词性标注后的语料库,可以使用命名实体识别、实体同义词识别、实体消歧等手段,从中提取出实体。提取出的实体一般包含实体名、实体类型和实体上下文等信息。
  4. 属性抽取:通过实体上下文等信息,可以对实体的属性进行抽取。一般情况下,属性可以是时间、日期、数量、金额、位置、信用卡号码等,这些属性对实体的认识起到了至关重要的作用。
  5. 关系抽取:通过实体之间的关系词、上下文等信息,可以得到实体间的联系,并构建知识图谱中的关系。

3.1.2 数据清洗

知识图谱的数据清洗是一个很重要的工作。数据清洗的目的之一就是去掉噪声数据,剔除掉那些不能代表实际知识的噪声数据,比如广告、垃圾邮件等。数据清洗的方法也很多,包括停用词滤除、实体规范化、实体链接、语义角色标注、关系抽取等。

实体规范化:实体规范化是指把不同实体名称的实体统一到一个名称。一般来说,在知识图谱中,不同的名字可以表示相同的实体,所以需要对实体进行规范化,保证实体之间能够有明确的联系。目前最流行的方法是基于词嵌入的实体匹配方法。

实体链接:实体链接是在已知实体集合中找到与候选实体匹配的过程。最简单的实体链接方法是字符串匹配方法,即利用候选实体的名字与已知实体集合中的实体进行匹配。如果存在多个匹配实体,那么需要利用上下文、结构等特征进行筛选。实体链接的另一种做法是基于规则的链接方法,即根据实体的类型、上下文等特征,给予候选实体不同的链接概率。

语义角色标注:语义角色标注是通过分析句子的语法结构和语义角色,确定哪些词和短语对应于实体、事件、时间、条件等,从而进行事件抽取。事件抽取可以帮助知识图谱捕捉事件的发生时间、参与对象、角色等信息。

关系抽取:关系抽取是根据文本中出现的关系词和上下文,从而提取出句子中的实体间的关系。关系抽取可以基于通用关系分类、依存句法分析、语义角色标注等算法。

3.1.3 数据导入

经过清洗、规范化、实体链接、关系抽取等工作之后,得到了一系列的实体和关系。这些知识数据需要导入到知识图谱系统中,进行知识图谱的构建。知识图谱系统包括存储引擎和查询引擎两部分,前者负责存储实体和关系,后者负责进行查询和分析。

知识图谱的存储引擎又称为图数据库,可以支持不同的存储模型,如RDF、Triple Store、Property Graph等。存储引擎决定了知识图谱的查询效率,不同的存储模型适用于不同的场景。

知识图谱的查询引擎可以包括基于图遍历的查询算法、基于规则的查询算法、基于模板的查询算法等。基于图遍历的查询算法采用图搜索的方式,根据知识图谱的邻接关系,直接搜索目标实体或关系。基于规则的查询算法利用知识图谱的语义网络,通过一定的规则,自动推导出结果。基于模板的查询算法通过查询模板来构建查询,并将模板扩展至不同情境下的查询。

3.2 实体链接

实体链接是一种将同义词等实体统一到一个主体的任务。实体链接有两种基本方式:基于字符串的匹配方法和基于规则的匹配方法。

3.2.1 基于字符串的匹配方法

基于字符串的实体链接是指利用候选实体的名字与已知实体集合中的实体进行匹配。

方法步骤如下:

  1. 对候选实体和已知实体集合中的每一个实体进行字符串匹配。
  2. 如果某个候选实体的名字完全等于已知实体集合中的某个实体的名字,则认为这个候选实体和已知实体是同一个实体,将其合并。
  3. 如果某个候选实体的名字中含有已知实体集合中的某个实体的名字,则认为这个候选实体和已知实体是同一个实体,将其合并。
  4. 将候选实体和已知实体集合中的所有实体进行二元配对,如果两个候选实体分别和两个已知实体配对,且配对程度高于一定阈值,则认为它们是同一个实体,将他们合并。
  5. 将没有合并的候选实体添加到知识图谱中。

3.2.2 基于规则的匹配方法

基于规则的实体链接是指利用实体的类型、上下文、关系等特征,给予候选实体不同的链接概率。

方法步骤如下:

  1. 使用规则模板对候选实体进行预筛选,只保留具有特定类型的实体。
  2. 根据候选实体的类型、上下文、关系等特征,计算候选实体与已知实体之间的链接概率。
  3. 使用最大似然估计的方法,根据已知实体和候选实体的链接情况,估计候选实体的链接概率分布。
  4. 在估计的分布上进行采样,从而产生候选实体的最终链接结果。

3.3 关系抽取

关系抽取是指根据文本中出现的关系词和上下文,从而提取出句子中的实体间的关系。关系抽取可以基于通用关系分类、依存句法分析、语义角色标注等算法。

3.3.1 通用关系分类

通用关系分类是基于一套固定的关系抽取规则,将文本中出现的关系词归类到固定类别中,如“事实”关系、“原因”关系、“条件”关系等。通用关系分类的方法步骤如下:

  1. 提取文本中的实体及其位置。
  2. 用规则对实体及其位置进行匹配,判断是否存在固定的关系词。
  3. 如果存在固定的关系词,则提取关系词及其对应的实体,形成关系 triple。
  4. 将关系 triple 添加到知识图谱中。

3.3.2 依存句法分析

依存句法分析是基于句法树和语义角色标注的关系抽取方法。该方法是对通用关系分类方法的扩展,提取句法树中的关系词。

方法步骤如下:

  1. 构造句法树。
  2. 遍历句法树,找出所有有向依存关系。
  3. 从句法树的各个节点处标记语义角色标签。
  4. 按语义角色标签的顺序,对相关节点进行匹配,判断是否存在固定的关系词。
  5. 如果存在固定的关系词,则形成关系 triple。
  6. 将关系 triple 添加到知识图谱中。

3.3.3 语义角色标注

语义角色标注是基于相似性原则,借助语义角色标注的机械规则或统计模型,对句子中的每个成分赋予一个角色标签。

方法步骤如下:

  1. 使用基于规则或统计模型的方法,给每个单词分配角色标签。
  2. 抽取语义角色及其对应的实体,形成关系 triple。
  3. 将关系 triple 添加到知识图谱中。