知识建模和本体工程学习笔记

知识建模与本体工程

一、本体工程

  本体(Ontology):本体是我们告诉计算机人类如何认识和理解世界万物的一种形式化描述方式。本体成为语义网的知识描述载体。语义网的研究热潮极大促进了本体的研究。

  本体工程(Ontology engineering):知识图谱中需要一个本体来形式化描述和界定它所描述的知识和事实的范围。本体工程是用工程化规范保证本体质量的方法学。

1.1 Ontology & Schema

  Ontology指的是知识图谱中的本体,Schema指的是数据库中的模式,二者的区别如下所示:

OntologySchema
用途共享知识和事实
交互、搜索、辅助AI
结构化数据组织和管理
查询
语法逻辑为基础的形式化语法E-R图
语义定义概念和关系
概念层次
丰富语义,支持推理
一致性、完备性
定义结构化数据
无概念层次
无(少)语义,不支持推理
主外键
规模可以很大一般较小

1.2 手工构建本体

  参考文章:Ontology Development 101: A Guide to Creating Your First Ontology

  本体的开发可以分成八个阶段:

  • 确定本体的领域和范围
  • 考虑重用现有本体
  • 列出本体中的重要术语
  • 定义类和类的继承
  • 定义属性和关系
  • 定义属性的限制
  • 创建实例
  • 异常值的检测

  这些过程之间会有相互的迭代关系,因而并不是线性的,任何的时间点上都有可能回溯到更早的阶段。

  确定范围:开发一个本体类似于定义一组被其他程序所使用的数据和结构,一个本体时一个特定领域的模型(model),为特殊目的而构建。一个本体必然是一个特定领域的抽象,因此总是存在可行的替代品。
这个阶段需要明确一些基本问题:该本体将将针对什么领域?用途是什么?要描述什么信息?回答哪一类的问题?谁将使用和维护整个本体?这些问题通常可以借助能力咨询的方法获得。试着开发的进行,问题和回答通常会动态变化。

  考虑复用:许多本体,尤其是在公共领域已经可用。因此通常利用一个可用的第三方本体,为我们自己的本体提供一个有用的起点。

  枚举术语:定义本体首先应列出相关术语的非结构化列表,期望这些术语在本体中出现。通常名称构成类名的基础,而动词(或动词短语)构成属性名的基础。这些术语能够保证最终创建的本体不会偏离所感兴趣的领域。

  定义分类:在识别相关术语后,这些术语必须被组成成一个分类层次。包括确保类的继承正确、分析结构中的兄弟类,引入新类的时机,新类或属性值的取舍,实例或类的取舍,范围限制,不相交的子类等。
类的继承结构可以采用自顶向下的方法:最大概念+子类细化;或者自底向上的方法:底层类+查找父类;也可以对二者综合。

  定义属性:这一步通常和之前的步骤交叉:在组织层次的过程中,组织链到类的属性很自然。在将属性关联到类时,立即为这些属性提供定义域和值域声明也很有意义。对逆属性/关系、缺省属性值需要重点关注。

  定义属性限制:上面步骤只需要RDF模式所提供的表达能力,而没有OWL中的额外原语。在本阶段用刻面来丰富之前定义的属性。

  • 基数:为越多越好的属性指出它们是否允许或需要拥有特定数目的不同取值。
  • 需要的取值:经常借助某个属性含有特定的值来定义类,可以在OWL中使用owl:hasValue指定。
  • 关系特征:刻面的最后一类关注属性的关系特征:对称性、传递性、互逆属性和函数型取值。

  然后还需要检查本体内部是否有不一致性。

  创建实例:使用本体来组织一组实例。确定与个体最接近的类,添加个体进去作为该类的实例,并为实例的属性赋值。

  检测异常:继续检查不一致性,包括对于传递的、对称的或互逆的属性的定义域和值域定义的不兼容。此外,基数属性经常是不一致性的来源。

1.3 复用已有本体

  已有本体的来源大多从以下几个方面得到:

  • 专家知识的编纂:领域专家耗费多年时间仔细构造而成。
  • 集成的词汇表:将一些独立开发的词汇表融合成单个大的资源,语义相对较弱。
  • 上层本体:除了领域本体,还有一些非常普遍适用的本体(上层本体),如Cyc、SUO。
  • 主体层次:术语的简单集合,被松散的组织成一个特殊化层次,混合了不同的特殊化的关系。
  • 语言学资源:起初并不是为抽象一个领域而构建的,而是作为该领域的语言学资源,但也有助于作为本体开发的起点。
  • 百科知识:维基百科提供一系列主题的丰富信息。DBpedia、Yago都是基于Wiki的知识库。
  • 本体库:TONES、BioPortal、Protégé、Swoogle等。

1.4 本体学习与自动化获取

  本体的学习主要有两种方法。第一种是基于规则的本体学习,通过人工写模板规则抽取本体,其优点包括利用专家知识写抽取模板,缺点有规则不足、规则冲突、不好扩展等方面。第二种是基于机器学习的本体学习,它将本体学习转化为机器学习中的分类或序列标注问题,然后选取特征和学习模型,进行训练,学习得到本体。其优点是效率高、自动化,缺点在于学习模型的通用性和学习效果存在矛盾。

  通过本体融合和配准来建立语义互操作性,能够实现元数据的高速且低成本的生产。将知识获取和机器学习的方法集成对知识获取有益。机器学习的支持领域包括:

  • 从万维网上已有的数据中抽取本体
  • 从万维网上已有的数据中抽取关系数据和元数据
  • 通过分析概念的外延来融合和映射本体
  • 通过分析实例数据来维护本体
  • 通过观察用户来改进语义网应用
  • 增量式本体更新

  本体表示要求本体必须符号化、人类可读、可理解。因此只涉及产生泛化的符号学习算法,而跳过诸如神经网络、遗传算法之类的其他方法。下面是一些潜在适用的算法:

  • 命题规则学习算法学习关联规则或其他形式的属性-值规则。
  • 贝叶斯学习的最佳代表是朴素贝叶斯分类器。它基于贝叶斯定理,基于训练实例间的属性是条件独立的这一假设,生成概率性的属性-值规则。
  • 一阶逻辑规则学习归纳出包含变量的规则,称为一阶 Horn 子句。
  • 聚类算法使用基于实例的属性值定义的相似度或距离度量将实例聚类在一起。

1.6 本体映射

  由于很少有可能单个本体完全满足一个特定领域的需求,需要多个本体组合,因此存在本体集成问题(也称本体配准或本体映射)。当前本体映射的方法包括各个层次和领域的的,主要有语言学、统计的、结构的和逻辑的方法。

  • 语言学方法:利用附着于源本体和目标本体中概念上的语言学标签来发现潜在的匹配,如基于提取词干的技术和计算汉明距离。
  • 统计方法:使用实例数据来确定概念间的对应,即探查源本体和目标本体中的概念实例是否存在显著的对应关系。依赖于一个足够强大的被源本体和目标本体分类的实例库。
  • 结构方法:利用源本体和目标本体的图结构并试图确定这些结构间的相似度,常与其他方法一起使用。
  • 逻辑方法:最针对本体的映射方法,本体是一个共享概念体系的形式化规约,可以使用源本体和目标本体的形式化表达。
  • 映射实现:已经有一些本体映射框架,例如R2R和LIMES。

1.7 发布关系数据库

  现在网络上的海量数据一般都存储在关系数据库(relational database)中,可以通过关系数据库构建本体,即将关系数据库的模式映射到RDFS或OWL。

  • 将数据库中的每一个表视为一个类
  • 每一个属性(数据库中的一列)视为一个属性(attribute)
  • 每个元组作为一个实例
  • 此外还需要为每个实体创建URI

  相关的转换主要有两种方式,一种直接将关系数据库发布为SPARQL端点;另一种是将数据库大部分转化为RDF,然后载入三元组中存储,这种方法常用于将实例数据与本体集成并且需要推理。

1.8 语义网应用体系结构

  语义网的知识管理体系结构如下图所示:
在这里插入图片描述

  • 知识获取:对于无结构文档,联合使用统计技术和浅自然语言技术从文档中抽取核心概念;对于结构化文档,可以使用数据库转化;而弱结构化文档,则会添加归纳和模式识别技术。
  • 知识存储:使用RDF和RDF模式表达抽取的信息。RDF模式库将存储本体(类层次、属性定义)和本体的实例(属于类的具体个体,拥有特定属性的个体对)。
  • 知识维护:管理和维护本体的功能:变更管理、访问权限和所有权、事务管理。
  • 知识使用:SPARQL端点、链接数据、RDFa等将本体和数据暴露给终端用户。

二、知识建模实践

  首先需要数据,从这篇文档中提供的数据构建MySQL数据库。构建完成后,总共生成五张表,其ER图如下:
在这里插入图片描述

  然后利用Protégé工具进行本体的创建,包括类/概念的Class,对象的属性Object Properties以及数据属性Data properties。构建完成后通过Windows界面可以查看本体的可视化联系。
在这里插入图片描述

  然后利用D2RQ将DB中的数据转化为RDF格式的数据,并且能够与之前构建的本体相匹配。

  首先利用generate-mapping语句将数据库中的表转化为默认mapping文件。

G:\d2rq-0.8.1>.\generate-mapping -u root -p yyx19981115 -o movie.ttl jdbc:mysql:///fun_kg?useS

  然后根据本体修改mapping文件,包括添加前缀、修改vocab字段为本体中定义的类等。修改过后的.ttl文件如下:

@prefix map: <#> .
@prefix db: <> .
@prefix vocab: <vocab/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
@prefix jdbc: <http://d2rq.org/terms/jdbc/> .
@prefix : <http://www.film_kg.com#> .

map:database a d2rq:Database;
    d2rq:jdbcDriver "com.mysql.jdbc.Driver";
    d2rq:jdbcDSN "jdbc:mysql:///fun_kg?useSSL=false";
    d2rq:username "root";
    ···
    .

# Table actor
map:actor a d2rq:ClassMap;
    d2rq:dataStorage map:database;
    d2rq:uriPattern "actor/@@actor.actor_id@@";
    d2rq:class :Actor;
    d2rq:classDefinitionLabel "actor";
    .
map:actor_actor_bio a d2rq:PropertyBridge;
    d2rq:belongsToClassMap map:actor;
    d2rq:property :actorBio;
    d2rq:propertyDefinitionLabel "actor actor_bio";
    d2rq:column "actor.actor_bio";
···

  然后再将mapping文件转化为RDF文件

G:\d2rq-0.8.1>.\dump-rdf -o movie.rdf movie.ttl

  D2RQ支持导出的RDF格式有TURTLE、RDF/XML、RDF/XML-ABBREV、N3、和N-TRIPLE。通过-f参数控制,N-TRIPLE是默认的输出格式。

  导出的RDF文件如下:

<file:///G:/d2rq-0.8.1/movie.nt#movie/21068> <http://www.film_kg.com#hasActor> <file:///G:/d2rq-0.8.1/movie.nt#actor/1> .
<file:///G:/d2rq-0.8.1/movie.nt#actor/1> <http://www.film_kg.com#hasActedIn> <file:///G:/d2rq-0.8.1/movie.nt#movie/21068> .
<file:///G:/d2rq-0.8.1/movie.nt#movie/69> <http://www.film_kg.com#hasActor> <file:///G:/d2rq-0.8.1/movie.nt#actor/1> .
<file:///G:/d2rq-0.8.1/movie.nt#actor/1> <http://www.film_kg.com#hasActedIn> <file:///G:/d2rq-0.8.1/movie.nt#movie/69> .
<file:///G:/d2rq-0.8.1/movie.nt#movie/71> <http://www.film_kg.com#hasActor> <file:///G:/d2rq-0.8.1/movie.nt#actor/1> .
<file:///G:/d2rq-0.8.1/movie.nt#actor/1> <http://www.film_kg.com#hasActedIn> <file:///G:/d2rq-0.8.1/movie.nt#movie/71> .
<file:///G:/d2rq-0.8.1/movie.nt#movie/73> <http://www.film_kg.com#hasActor> <file:///G:/d2rq-0.8.1/movie.nt#actor/1> .
<file:///G:/d2rq-0.8.1/movie.nt#actor/1> <http://www.film_kg.com#hasActedIn> <file:///G:/d2rq-0.8.1/movie.nt#movie/73> .
<file:///G:/d2rq-0.8.1/movie.nt#movie/35> <http://www.film_kg.com#hasActor> <file:///G:/d2rq-0.8.1/movie.nt#actor/3> .
<file:///G:/d2rq-0.8.1/movie.nt#actor/3> <http://www.film_kg.com#hasActedIn> <file:///G:/d2rq-0.8.1/movie.nt#movie/35> .

  RDF/XML格式的文件如下:

<?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:db="file:///G:/d2rq-0.8.1/movie.nt"
    xmlns="http://www.film_kg.com#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:map="file:///G:/d2rq-0.8.1/movie.nt#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:vocab="file:///G:/d2rq-0.8.1/vocab/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
  xml:base="file:///G:/d2rq-0.8.1/movie.nt#" > 
  <rdf:Description rdf:about="#movie/8591">
    <movieBio> 《失恋狂想曲》是2013年上映的微电影,由曹雨,彭际航导演。曾江,焦姣主演。《失恋狂想曲》讲述一个发生在2012年底,听起来很不靠谱的爱情童话:两个刚刚失恋且毫不认识的年轻人,因为一次偶遇,误打误撞的一起过了一晚。于是走到了一起,并一过就是50年。片尾,当老迈的男主角问女主角“咱俩的事靠不靠谱”的时候,女主角的回答50年没变:“不靠谱”…… </movieBio>
    <movieDirector>曹雨 彭际航</movieDirector>
    <movieReleasetime>2013年2月25日</movieReleasetime>
    <movieLength>None</movieLength>
    <movieLanguage>None</movieLanguage>
    <movieForeName>None</movieForeName>
    <movieStar>曾江 ,焦姣</movieStar>
    <movieAchiem>None</movieAchiem>
    <movieScreenwriter>None</movieScreenwriter>
    <movieChName>失恋狂想曲</movieChName>
    <movieProdtime>None</movieProdtime>
    <movieGenre>None</movieGenre>
    <movieProdcompany>None</movieProdcompany>
    <rdf:type rdf:resource="vocab/movie"/>
  </rdf:Description>
···

  D2RQ还提供了通过SPARQL直接访问数据库的方法,通过d2r-server操作,在localhost:2020上访问。这里只需要构建.ttl文件就可以完成操作,不需要RDF的支持。

G: \d2rq-0.8.1>.\d2r-server movie.ttl

  在网页中输入SPARQL的语句,直接对MySQL中的内容进行检索
在这里插入图片描述

  查询结果如下:
在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值