知识图谱实践篇(一):数据准备和本体建模
对知识图谱有兴趣的读者可以关注我的知乎专栏,主要介绍知识图谱的相关概念、技术,也包含一些具体实践。
通过前面几篇文章的介绍,读者应该对知识图谱,其相关概念,以及语义网技术栈中的RDF,RDFS/OWL有了一定的了解。然而,之前我们都是在介绍一些概念性的东西。实践才出真知,理论掌握得再好,不能解决实际问题也只是纸上谈兵。因此,笔者准备开一个实践篇,结合理论篇,让读者能够从无到有构建一个领域知识图谱,并在其上搭建一个基于知识图谱的问答小程序。demo比较简单,问答实现是基于模板匹配和正则表达式,整个流程是为了让读者对知识图谱及其相关应用有个直观的认识。
本文作为实践篇第一篇文章,首先介绍我们使用的数据、数据来源和数据获取方法;其次,基于数据内部关系,介绍如何以自顶向下的方式构建本体结构。
一、数据准备
实践篇使用的数据是与电影相关的。基本统计数据如下:
1. 演员数量:505人
2. 电影数量:4518部
3. 电影类型:19类
4. 人物与电影的关系:14451
5. 电影与类型的关系:7898
演员的基本信息包括:姓名、英文名、出生日期、死亡日期、出生地、个人简介。
电影的基本信息包括:电影名称、电影简介、电影评分、电影发行日期、电影类型。
数据是从“The Movie DB”网站获取的,官方提供注册用户API KEY用于查询和下载数据。我本来打算从豆瓣获取电影数据,但现在豆瓣API已经关闭了个人用户申请入口。
本实例数据获取方法:以周星驰为初始入口,获取其出演的所有电影;再获取这些电影的所有参演演员;最后获取所有参演演员所出演的全部电影。经过去重处理,我们得到了505个演员的基本信息和4518部电影的基本信息。数据保存在mysql中,其ER图如下:
er_movie
读者可以直接下载我们获取到的数据,或者用我们提供的脚本自己从网站获取额外的数据,再或者根据自己的需要重新编写脚本。
二、本体建模
本体的构建大体有两种方式:自顶向下和自底向上。
1. 开放域知识图谱的本体构建通常用自底向上的方法,自动地从知识图谱中抽取概念、概念层次和概念之间的关系。这也很好理解,开放的世界太过复杂,用自顶向下的方法无法考虑周全,且随着世界变化,对应的概念还在增长。
2. 领域知识图谱多采用自顶向下的方法来构建本体。一方面,相对于开放域知识图谱,领域知识图谱涉及的概念和范围都是固定或者可控的;另一方面,对于领域知识图谱,我们要求其满足较高的精度。现在大家接触到的一些语音助手背后对接的知识图谱大多都是领域知识图谱,比如音乐知识图谱、体育知识图谱、烹饪知识图谱等等。正因为是这些领域知识图谱来满足用户的大多数需求,更需要保证其精度。
本实例是一个电影领域的知识图谱,我们采用自顶向下的方法来构建本体结构。首先介绍下我们使用的工具protege(点击进入官网下载):
Protégé,又常常简单地拼写为“Protege”,是一个斯坦福大学开发的本体编辑和知识获取软件。
开发语言采用Java,属于开放源码软件。由于其优秀的设计和众多的插件,Protégé已成为目前使用最广泛的本体论编辑器之一(来自维基百科)。
打开protege,看到和下图类似的界面。在Ontology IRI中填写我们新建本体资源的IRI。读者可以填写自己的符合标准的IRI。
protege
点击“Entities”tab标签,选择“Classes”标签。在这个界面,我们创建电影知识图谱的类/概念。注意,所有的类都是“Thing”的子类。最左边红色小方框中的按钮用于创建当前选中类的子类,中间的按钮用于创建兄弟类(平行类),最右边的按钮删除当前选中的类。我们创建了三个类,“人物”、“电影”、“类别”。右下方的界面是用于描述该类的一些特性,例如:”disjoint of”是用于表示该类与哪些类是互斥的。本例中,三个类都是互斥的。也就是说,一个实例只能是三个类中的一个。我们没有在protege中显式地定义互斥关系,读者可以自己定义。
class
接下来我们切换到”Object Properties”页面,我们在此界面创建类之间的关系,即,对象属性。这里我们创建了三个对象属性,”hasActedIn”表示某人参演了某电影,因此我们在右下方的3号矩形框中定义该属性的”domain”是人,4号框定义”range”是电影。这个很好理解,”domain”表示该属性是属于哪个类的,”range”表示该属性的取值范围。2号框表示该属性的逆属性是”hasActor”,即,有了推理机,尽管我们的RDF数据只保存了A出演了B,我们在查询的时候也能得到B的演员有A。1号方框中是一些描述该属性的词汇,我们在上一篇文章中已经介绍过,这里不再赘述。同理,我们定义另外两个属性,这里不再展示。
obeject property
最后,我们切换到”Data properties”,我们在该界面创建类的属性,即,数据属性。其定义方法和对象属性类似,除了没有这么丰富的描述属性特性的词汇。其实不难理解,这些描述特性的词汇是传递、对称、反对称、自反等,表明其必定有指向其他资源或自身的边,而我们之前提到过,数据属性相当于树的叶子节点,只有入度,而没有出度。
data property
其实区分数据属性和对象属性还有一个很直观的方法,我们观察其”range”,取值范围即可。对象属性的取值范围是类,而数据属性的取值范围则是字面量,如下图。
range
protege也支持以可视化的方式来展示本体结构。我们点击”Window”选项,在”Tabs”中选择”OntoGraf”,然后”Entities”旁边就多了一个标签页。在右侧窗口中移动元素,可以很直观地观察本体之间的关系。
image
在这个小节,我们简单地介绍了如何用protege自顶向下地构建知识图谱的本体结构。对于Protege更详细的操作和介绍,请参考这篇文档。
总结
这篇文章介绍了接下来实践中使用的数据,以及如何利用protege,根据我们的数据来进行本体建模。数据、代码以及本体文件我都上传到了github。之后实践篇涉及到的所有文件我都会放在该项目中。下一篇实践文章将介绍关系数据库中的数据转换为RDF的几种方法,让读者学会如何把存在Mysql中的电影数据转为RDF格式的数据。
https://blog.csdn.net/u011801161/article/details/78910988
知识图谱实践篇(一):数据准备和本体建模相关推荐
- 知识图谱构建2——使用protege构建本体
知识图谱构建2--使用protege构建本体 采用自顶向下的方法来构建本体结构 利用protege构建本体 protege下载网址:https://protege.stanford.edu/ 修改自定 ...
- 知识图谱,下一代数据中台的核心技术
作者 | 杨威,明略科技技术中心负责人 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 本文为CSDN即将推出的<新战场:决胜中台>专刊的第 3 篇文章. [导读]数 ...
- 知识图谱初步学习(零)——本体是什么
知识图谱初步学习(零)--本体是什么 文章目录 知识图谱初步学习(零)--本体是什么 前言 一. 哲学层面理解 二. 引申到语义层面理解 三.学术层面 四.其他层面 - 术语 - 语义网 五.本体与类 ...
- 知识图谱实践篇(五):KBQA Demo
作为实践篇的最后一篇,我们将介绍如何用Python完成一个简易的问答程序.下图是demo的展示效果: 查询结果为空,回答"I don't know.":不能理解问句,回答" ...
- 知识图谱实践篇(二):关系数据库到RDF
上一篇文章介绍了我们所使用的数据.其实,知识图谱数据的来源主要有三个:结构化数据.半结构化数据和非结构化的数据.我们所使用的电影数据就是结构化的数据.半结构化的数据指的是数据有一定的组织形式,但较结构 ...
- 知识图谱初步学习(一)——本体+Protege新手学习
文章目录 前言(本体详解) 1.本体概念 2.本体分类 3.本体组成 4.本体构建方法 5.本体构建的原则 6.本体应用 一.protege简介 二.软件使用步骤 1.安装 2.使用 3.案例 三.问 ...
- 知识图谱第6享:动态本体
动态本体旨在通过互表性能让计算机理解资源的语义,互表性是指事物是相互表示的,即一个概念离开与之有关的概念是没有意义的,如"教师"这个概念离开"学生"这个概念就失 ...
- 如何用知识图谱挖掘商业数据背后的宝藏?
这是一个商业时代,一个数据为王的时代,也是一个 AI 迎来黄金发展期的时代. 据史料记载,商业在商朝已初具规模.斗转星移,时光流转,到 2019 年,商业形式已发生翻天覆地的变化,但是商业的本质--等 ...
- 开源开放的知识图谱工具和数据生态
省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 知识图谱在美团推荐场景中的应用实践 搜索场景下的智能实体推荐 机器学习在B站推荐系统中的应用实践 小红书推荐系统 ...
最新文章
- 3月16日云栖精选夜读:显著超越流行长短时记忆网络,阿里提出DFSMN语音识别声学模型...
- python搜索列表内_使用Python在另一个List中搜索列表的值
- JS 时间戳转换成日期
- C和C++中的野指针问题
- MySQL的explain工具介绍
- gin 生成api文档_gin-swagger 生成RESTful风格OpenAPI文档
- mysql存储过程套嵌_mysql存储过程套嵌
- FancyBox - 经典的 jQuery Lightbox 插件
- 南京打造大数据创新孵化平台
- php图片滑动的属性,JavaScript_javascript图片滑动效果实现,本文为大家分享了javascript图片 - phpStudy...
- Android扩展类方法,Android 扩展 uni小程序SDK 原生能力
- matlab神经网络工具箱教程,matlab神经网络能做什么
- 计算机辅助初中英语教学,利用多媒体优化初中英语课堂教学课题研究
- WKwebview弹框报错Attempt to present UIAlertController on XXwhich is already presenting (null)
- Google drive谷歌网盘下载副本文件无法调用IDM解决方法
- linux 搜狗输入法 太慢,【分享】ibus使用搜狗输入法词库后,反应慢的解决方法...
- 医疗行业数据防泄露解决方案
- PHP防伪防串货溯源系统源码
- 工作手记之移动端中文输入法触发oninput事件的解决方法
- error MSB3073: 命令“setlocal
热门文章
- 畅谈Perl时间处理函数用法
- J2ME_System.getProperty
- 利用JMF进行多媒体编程
- C++leetcode找出两个有序数组的中位数(2)
- php单文件短链接,php实现的短网址算法分享
- 【12】 全国外电音DJ 3000首 32G
- [云炬创业基础笔记]第十章企业的利润计划测试3
- 干货 | 机器学习正在面临哪些主要挑战?
- const 常量_软件特攻队|const常量,不一样的新玩法
- Unet项目解析(6): 图像分块、整合 / 数据对齐、网络输出转成图像