SHU语义网与知识图谱
前言
从大二的选导师那个实践课就是lw老师负责,那个时候就开始忽悠我们来上这门课(虽然不忽悠我也应该会选这门课),然后后面高级研讨课也是他,有同学选了这个研讨方向,多多少少有了一点了解。
但是课程考核真的好麻烦啊。
课程笔记
第一讲:语义网概述
语义网就是一种描述网络Web数据,具有模型语义,并且在一定程度上支持语义推理的知识表示方法
基本概念
- 语义web的组成:语义web信息的开放标准、从web描述信息中进一步获取语义的方法。
- 本体:本体是一种形式化的,对共享概念体系的明确而又详细的说明。提供一种共享词表。核心是分类体系。
- RDF使用有向图作为数据类型。
- 语义网和语义网络的区别:语义网是未来发展的趋势,是web3.0的特征;而语义网络是一种知识表示方法,仅仅是一个方法。
- 知识图谱:学术角度上讲,知识图谱本质上是一种揭示实体之间关系的语义网络,可以对现实世界的事物及其相互关系进行形式化地描述。
- 知识图谱的技术流程:知识表示、知识获取、知识融合、知识推理、知识检索、知识分析
- Datalog的基本语法包含:原子、规则、事实。
- 知识图谱的存储:关系型数据库、三元组库、图数据库
- 知识图谱的应用:推荐系统、知识问答等
- 逻辑语义包含:模型论和证明论
- 知识谱图的表示:符号表示、向量表示。
- 描述逻辑的基本概念:个体、类、属性。
第一节课没带电脑,抄一点学长做的笔记。
人类之所以能用自然语言思维,能用自然语言互相交流,关键在于每个人的大脑中,有一个结构相同、内容近似、涵盖丰富、查询和推理功能强大并能方便提升的知识库系统。
对机器而言,也是同样的,机器之间要相互理解和沟通。也需要一个这样的知识库,这个知识库我们通常称之为本体。
什么是本体?
本体是指一种“形式化的,对亍共享概念体系的明确而又详细的说明“
本体实际上就是对特定领域之中某套概念及其相互之间关系的形式化表达(formal representation)
本体是指一种“形式化的,对于共享概念体系的明确而又详细的说明”
本体语言
实现语义技术最重要的是有合适的知识表示语言。
含义(Meaning,语义)通常通过逻辑和推理算法实现。
本体语言的可伸缩性(Scalability)具有挑战
本体
本体的核心通常是分类体系(Taxonomy):
事物的类,以层次结构进行
部分-整体分类体系 (Partonomy , not a taxonomy)
Partonomy vs. Taxonomy
语义网发展历史
1998年由Tim Berners-Lee提出
• Partonomy:
A is part of B
hand is part of body
Germany is part of Europe
Wing is part of aircraft
Engine is part of car
• Taxonomy
every A is a B
every father is a man
every dog is a mammal
every bottle is a container
every arm is a limb
第二讲:RDF和RDFs
RDF部分
RDf知识点
动机Motivation
三元组和图Triples and Graphs
RDF语法 RDF syntaxes: Turtle and RDF/XML
数据类型Datatypes
n元关系n-ary relationships
空节点Empty nodes
列表Lists
为什么用RDF?
用XML描述信息(知识),被编码成树结构。但是当把XML中的树状信息进行合并时,会变得累赘笨重,不易理解。
RDF使用(有向)图作为数据模型
RDF把对象之间的关系作为构建信息的基础,大量这样的实体关系很自然地构成了图,而不是层次化的树结构。RDF是为Web和其他电子网络的数据设计的一种描述语言。在这样的环境中,信息通常被分散存储和管理,合并不同来源的RDF数据变得更加容易。
(合并简单,总之就是好用)
URIs描述资源,Literals 文字,Empty nodes 空节点
一个图表示一系列的三元组(点-边-点)
一个三元组包含:
规则:
主语 : URIs 和空节点
谓语: URIs (通常被称为属性properties)
宾语: URIs 、空节点或文字Literals
Turtle——为RDF提供简单语法
三元组表示方法:
– URIs 放在<>中
– 文字用双引号“”
– 三元组用英文句号结束
– 忽略空格
Turtle只是方便阅读,实际使用xml语法。
RDF的xml-based语法
用名字空间消除歧义。
RDF中标签通常固有的名字空间简写为rdf
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:iswww="http://sw.edu/#"
>
<rdf:Description rdf:about="http://sw.edu/#germany"> # 通过about属性标识一个资源,格式对称
....
</rdf:Description>
无类型的文字可以使自由文本
一个主语可以包含多个属性
宾语描述可以用作更深层次三元组的主语,就是说可以嵌套。
利用XML的属性值代替文字的表示
通过属性标签内rdf:resource值表示的URIs表示宾语
问题: 命名空间丌能出现在XML的属性值,例如,在XML属性出现’book’将会出错,因为会被解释为URI模式。
解决方案: 使用 XML ENTITYs.
rdf:about=“uri” 等同亍rdf:about=“http://semantic-web-book.org/uri”
Rdf:XMLLiteral是RDF唯一内嵌数据类型,它允许嵌入形式良好的XML片段作为RDF的文字值
好在能看懂一点xml,大概能理解
rdf:parserType:”Resource”表示属性值是空节点,自动创建。
Turtle中 _:xxx , 空白节点由一个下划线代替命名空间前缀。
[]上省略谓语宾语,下省略主语
List
- Openlist
“open”: 可添加新元素.
rdf:Seq – 顺序列表
rdf:Bag – 无序
rdf:Alt –为替代,是一组可选择的资源或文字集合
- Closed list
Trutle(xxx yyy zzz)
小结
上次花了一下午时间把实验做了,看了很多RDF教程,感觉没有上课的时候讲的详细,听一遍比自己看轻松。
ps:这一部分是考核重点。
RDFs及其形式语义
知识点
1. 动机
2. 类和类层次结构 Classes and Class Hierarchies
3. 属性和属性层次结构 Properties and Property Hierarchies
4. 属性约束 Property Restrictions
5. 开放列表回顾 Open Lists Revisited
6.关于命题的命题:物化 Reification
7. RDFS附加信息 Supplementary Information in RDFS
8. RDFS中的简单本体 Simple Ontologies in RDFS
RDF用于表示事实,RDFS允许我们进行模式(Schema)知识建模(又叫术语化知识,有点像抽象概念,什么是什么)
RDFS文档也是RDF文档,词汇通用
rdf:type属于某个类的实例
rdfs:subClassOf属于子类
rdfs:class 道生一
rdfs:Resource
rdf:Property
rdf:XMLLiteral RDF唯一的预定义类型
rdfs:Literal所有字面体类
rdf:Bag, rdf:Alt, rdf:Seq, rdfs:Container , rdf:List, rdf:nil 列表类
rdfs:ContainerMembershipProperty容器属性类
rdfs:Datatype数据类型类
rdf:Statement (see later) 物化的三元组的类
隐式知识
推理逻辑结论由形式语义决定。
rdfs:subClassOf 是传递的
类等价:两个类包含相同的个体,互为子类
属性层次结构,我的理解就是对谓语类划分
可以声明某个属性的类型以及它的取值范围,即定义域和值域。
还可以用数据类型来约束。
每个被声明的属性限制会全局地影响此属性所有的出现情况,在使用属性限制时要非常小心,尽量使用足够一般的类。
潜在的类型不匹配问题,RDF无法判定并拒绝接受。
机器不能理解隐喻。ismarriedto,
开饭列表
新的类: rdfs:Container 是 rdf:Seq, rdf:Bag, rdf:Alt等列表类的超类
rdfs:ContainerMembershipProperty 包含用于各种列表容器的属性类
rdfs:member 是所有包含rdfs:ContainerMembershipProperty中的属性的超属性
如果 rdfs:叔叔 rdf:type rdfs:长辈
如果 a rdfs:叔叔 b
可推出: a rdfs:长辈 b
谓语的层次结构
关于命题的命题
“The detective supposes that the butler killed the gardener.”
“侦探推测管家杀死了园丁”,简单建模如下:
通过字面体表达不能被其他三元组引用,因此使用一个URI来指定更合理。为了避免缺乏结构透明性,将URI部分建模成一个独立三元组。
引入辅助接点,用于描述要声明的命题中的三元组,该接点用
作“句柄”来指代整个声明:ex:theory
如果物化命题只被本身引用,可以用空白接点来表示,代替ex:theroy.
画图是重点考点,大题
rdfs:label URI命名e.g. to give a human-readable name for a URI。
rdfs:comment: 用于为资源指定注解。
rdfs:seeAlso, rdfs:definedBy:用于连接到提供关于主语资源更多信息或定义的URIs.
可用可不用,暗示不是考点,能看懂就行
考试重点
虚线上都是事实知识(assertion,断言),上面都是模式知识。
RDF(s)形式语义
这部分偏数学,抽象
获得逻辑结论(logical consequence)的过程,我们称为演绎(deduction)或推理(inference),我们不需要显式地声明。
什么样的陈述(statement)是逻辑结论,由形式语义决定。
我们主要考虑语义概念的逻辑维度(logic dimension),即形式语义(formal semantics)
不太确定是什么,编译原理,命令?应该不是语言学里说的那些语义,名词动词之类的。
虽然有些特定情况,可以通过样例来获得结论是否有效,但丌能保证对于无限多种推理,都能达成共识。解决这一问题最好的方法就是通过定义良好的形式语义来避免非形式化规格说明造成的不确定性。
为什么定义语义?
P加粗代表命题全集。
用一个符号 ⊧ 表示推论关系(entailment relation),比如命题p3和p4是命题p1和p2的逻辑推论,表示为{p1 ,p2 } ⊧{p3 ,p4}。
推论关系把命题的集合不命题的集合关联起来。
一个逻辑L是由一个命题集合一个推论关系共同组成的,在抽象的层次上可以被描述为L=(P, ⊧)
语法和语义
Syntax: 没有“意义”的字符串character strings without meaning
Semantics:有“意义”的字符串meaning of the character strings
逻辑语义
逻辑语义主要包括两个方面:模型论和证明论。
重点讨论模型论语义
什么样的语义是好的?
可共享,陈述性,可计算
我们获取语义信息不通过指定其意思(含义meaning)(这是不可能的)而是通过定义信息如何与其他信息进行交互,并通过信息交互产生的结果来非直接地描述它的语义。
Interpretation解释
RDF(S)的模型语义
Simple Interpretations
人都名字,你可以叫这个名字,他也可以叫这个名字,你是谁?
第三讲:本体论与OWL语言
本体论
概念是抽象层面的泛指,通常是对一类事物共性的总结;它代表的总是这一类事物的总体,而非特指其中的一个具体事物。
符号,亦即概念的名称,是用以表征概念的标记(可以是文字或图形)。在交流中,人们通常都是通过符号来传达概念及其含义;在此意义上,符号是概念的载体。
实体是概念的具体化、实例化表现,亦即个别化的概念。概念所对应的所有实体构成概念的外延。
定义
Ontology本是哲学领域的概念,源自哲学中称为“形而上学”的分支,形而上学所关注的是现实的本质,也就是存在的本质。后被计算机界的研究者借用到信息领域,以描述用亍交流和共享的语义空间。Ontology 是一种用以描述语义的、概念化的显式说明(an explicit specification of a conceptualization. Gruber, 93)。它是对某一个领域内事物的共同理解(a shared understanding)
Ontolgoy 在本质上是对客观世界的一种分类描述,因此,Ontology 模型实际上就是一种知识表示模型。
本体(Ontology)
=概念(Concept)+属性(Property)+公理(Axiom)+取值(Value)+命名(Nominal)
OWL语言
信息交换语言主要包括:数据模型RDF,语义RDFS,OWL,语法Turtle。
rdf回顾
RDF和RDFS不够,需更强的OWL
OWL是一种在互联网上公布和共享实体的语义语言(semanticmarkup language)。OWL 起 源 亍 DAML+OIL 网 络 实 体 语 言 , 是作为 RDF(the Resource Description Framework)的扩展词典进行开发。
OWL设计目标(特性)
本体进化,本体协作,不一致性检测,表达性和可伸缩性的权衡(相斥),易用性,兼容性,国际化。
OWL成为一种Web语言,丌在亍它引入了描述逻辑的表达和推理能力,而在亍它用URI引用替代了名称,将XML Schema数据类型用于数据值,并且提供了连接到WWW文档上的能力,这些能力都是源于RDF(S)。
OWL Lite,OWL DL,OWL Full。
OWL-Full推理不可判定。lite只支持0和1的基数。枚举类只能在Full
为帮助书写冗长的URLs,在本体的定义之前,在文档类型声明(DOCTYPE)中提供一些实体定义(entity definitions)常常是很有用的。
命名空间只能用在标签上。
OWL基本元素
简单的类
用到的标签:Class, rdfs:subClassOf
OWL中的所有个体都是类owl:Thing的成员。因此,各个用户自定义的类都隐含地是owl:Thing的一个子类。要定义特定领域的根类,只将它们声明为一个具名类(named class)即可。
OWL也可以定义空类,owl:Nothing。
一个个体,中间地区是地区的一个实例。
用一个类的标签申明一个个体。
简单属性
数据类型属性(datatype properties):类实例与RDF文字或XML Schema数据类型间的关系。
对象属性(object properties):两个类的实例间的关系。
可以指定定义域(domain)和值域(range)。
可以将一个属性定义为某个已有属性的特殊化(子属性)
madeFromGrape定义域是这个匿名类
属性特性
TransitiveProperty
FunctionalProperty
inverseOf
<owl:ObjectProperty rdf:ID:"hasMaker">
<owl:type rdf:resource="&owl;FunctionalProperety">
</owl:ObjectProperty>
属性限制
前面所讲述的机制都是全局的(global),因为这些机制都会应用到属性的所有实例。而allValuesFrom与someValuesFrom是局部的(local),它们仅仅在包含它们的类的定义中起作用
owl:allValuesFrom属性限制要求:对于每一个有指定属性实例的类实例,该属性的值必须是由owl:allValuesFrom从句指定的类的成员。
allValuesFrom,someValuesFrom至少有一个厂商是Winery
基数限制:值域限制在0和1的基数表达式(Cardinality expressions)是OWL Lite的一部分。这使得用户能够表示“至少一个”,“不超过一个”,和“恰好一个”这几种意思。OWL DL中还允许使用除0与1以外的正整数值。
owl:maxCardinality能够用来指定一个上界。
owl:minCardinality能够用来指定一个下界。
使用二者的组合就能够将一个属性的基数限制为一个数值区间
hasValue 使得我们能够根据“特定的”属性值的存在来标识类。因此,一个个体只要至少有“一个”属性值等于hasValue的资源,这一个体就是该类的成员
Burgundy是干糖(Dry)的
本体映射
为了让本体发挥最大的作用,就需要让本体得到充分的共享。
类和属性之间的等价关系
equivalentClass,equivalentProperty
个体间的同一性 –sameAs
不同的个体–AllDifferent
复杂类
交运算–intersectionOf
并运算–unionOf
补运算–complementOf
注意:考试要考,挖空填核心关键词.
<owl:Restriction> # 代表匿名类
集合:RDF 集合用于描述仅包含指定成员的组。
集合是通过属性 rdf:parseType=”Collection” 来描述的。
枚举类 –oneOf
不相交类 –disjointWith
总结
这周上机的时候了解了本体论的基本概念,学习了本体语言OWL,三种子语言的区别,今天讲完基本语法等。继续往下。
第四讲:描述逻辑与描述逻辑语义
一、描述逻辑
1. 描述逻辑简介
定义
DL描述逻辑(Description Logic)是基于对象的知识表示的形式化,也叫概念表示语言或术语逻辑。它吸收了KL-ONE的主要思想,是一阶谓词逻辑的一个可判定子集。
可判定的,总能保证推理算法终止.
建立在概念和关系(Role)之上
特性
是以往表示工具的逻辑重构和统一形式化,具有很强的表达能力,是可判定的,总能保证推理算法终止。
为什么要用DL?
2. 描述逻辑基础
基本概念
个体,类,属性
命名规范
DL语法
一阶谓词逻辑FOL,蓝色是关于个体实例,绿色关于概念
DL基础—特殊类和属性
top,bottom
3. 描述逻辑的体系结构
5个构造子构成了最基本的描述逻辑形式语言ALC
(Attribute concept description Language Complement)
4. Description Logic SROIQ(D)
属性声明特性
语法考试要考
两种全局限制(Global Restriction)
二、描述逻辑语义
OWL有两种语义,描述逻辑语义(直接语义),RDF-based语义
一个解释就是一个公理集合的模型,如果所有公理在解释下成立。
知识库的模型
通过谓词逻辑定义直接语义。
知识库或者一个具名类的不可满足性通常可以指出模型错误。
考试注意:附录
描述逻辑(OWL)的Turtle语法
第五讲:知识图谱概览
回顾一下
知识图谱概述
1. 什么是知识图谱
2. 知识图谱发展历程
3. 知识图谱技术流程
4. 知识图谱的相关技术
5. 典型的知识图谱项目
知识表示是现实世界的可计算模型。
知识图谱本身可以看作是一种新型的信息基础设施,就像通往人工智能的“燃料”
第六讲:知识图谱的表示与关联建模
一、知识图谱的表示与建模
1. 什么是知识表示
2. 知识图谱的表示框架与语言
⼀阶谓词逻辑 (First-Order Logic)
产⽣式规则 (Production Rule)
框架 (Framework)
语义⽹络 (Semantic Network)
逻辑程序 (Logic Programming)
缺省逻辑 (Default Logic)
模态逻辑 (Modal Logic)
知识图谱查询语言——SPARQL
常见查询算子
DISTINCT去重
第七讲:知识图谱的存储查询
内容概览
1. 前言
2. 知识图谱数据库基础知识
3. 常见知识图谱存储方法
4. 原生图数据库存储原理
典型的知识存储引擎分为基于关系数据库的存储、面向RDF的三元组数据库和基于原生图的存储。
知识图谱数据模型——RDF图
知识图谱查询语言
RDF图上的查询语言SPARQL,属性图上的常用的查询语言Cypher和Gremlin
SPARQL 1.1:
W3C制定的RDF图数据标准查询语言;
借鉴了SQL,属于声明式查询语言;
设计了三元组模式、子图模式、属性路径等多种查询机制
SPARQL查询实例
考试重点,每年考大题
SELECT ?p,
WHERE {
?p ex:participate ?q.
?q ex:项目 ex:"图数据库"
}
查询参加“图数据库”项目的所有程序员。
label改成项目。
SELECT ?pr
WHERE {
?p ex:participate ex:triple.
?p ex:age ?age.
FILTER(?age<35).
?p ex:participate ?pr.
FILTER(?pr != ex:ex:triple)
}
Cypher
Cypher语法手册:
https://neo4j.com/docs/cyphermanual/current/
MATCH (4:程序员)-[r:参加]->(pr:项目)
RETURN pr.name
基于关系数据库的存储方案是目前知识图谱采用的一种主要的存储方法。
主要存储结构
三元组表(主,谓,宾)
缺点:当三元组规模较大时,多个自连接操作会使SQL查询性能低下。
水平表
优点:查询大大简化,不用进行表连接操作。
缺点:列太多,可能超出上限,空值过多影响表的存储、索引和查询性能。
属性表
优点:解决了三元组表自连接的问题和水平表列数过多的问题,缓解空值问题。
缺点:对于规模大的图谱数据,主语的类别多,需要建立成千上万个表,也会超出数据库的限制。对于复杂的查询,仍然要迚行多表连接操作,影响效率,也存在空值问题。
垂直划分
优点:谓语表仅存储出现在知识图谱中的三元组,解决了空值问题;一个主语的一对多联系或多值属性存储在谓语表的多行中,解决了多值问题;能够使用归幵排序连接快速执行丌同谓语表的链接查询操作。
缺点:大规模图谱,表的数目超过几千个,增加数据开销,越是复杂的查询操作,执行的表连接操作越多,数据更新维护代价大,更新一个主语涉及多张表时,增加I/O开销。
六重索引
优点:空间换时间,避免了单表的自连接
缺点:花费6倍的存储空间,索引维护代价和数据更新代价,随着图谱规模增大,愈加突出。当图谱查询复杂时,产生大量的连接索引表查询,自连接不可避免。
DB2RDF
DB2RDF的关键:谓语到列的映射,转化为图着色问题,将一个主语上出现的不同谓语称为共现谓语,目标是让共现谓语着上不同的色(映射到丌同的列),非共现谓语可以着上相同的色(映射到同一列)。利用着色冲突图解决。
DB2RDF方案由4张表组成,即DPH(主谓宾),RPH(宾谓主),DS和RS表(多值lid:1,多谓语多主语)。
原生图数据库存储原理
免索引邻接,neo4j
文件存储结构
属性数据的存储处理
索引,一种是对节点或边属性数据索引,一种是对图结构的索引
总结
典型的知识存储引擎分为基于关系数据库的存储、面向RDF的三元组数据库和基于原生图的存储
属性图是目前被图数据库业界采纳最广的一种图数据模型。
RDF三元组数据库的查询语言SPARQL和属性图查询语言CYPHER或GREMLIN.
基于关系型数据库的知识图谱存储:三元组表、水平表、属性表、垂直划分、六重索引、DB2RDF
图数据库存储原理:采⽤免索引邻接(Index-free adjacency)构建的图数据库引擎。
今天有个上海同学被隔离了,在家上网课
第八讲:知识抽取
内容概览
一、知识获取与知识图谱获取
二、面向结构化的知识抽取
三、面向非结构化的知识抽取:实体抽取
四、面向非结构化的知识抽取:关系抽取
知识获取与知识图谱获取
知识图谱工程
自动内容抽取(Automatic Content Extraction, ACE)
TAC Knowledge Base Population(KBP,知识库填充)对ACE定义的任务进一步修订
面向结构化的知识抽取
直接映射方法定义了一个从关系数据库到 RDF 图数据的简单转换
R2RML映射语言是一种用亍表示从关系数据库到RDF数据集的自定义映射的语言。
实体抽取
方法:基于模板与规则,基于统计模型,基于深度学习
正则表达式
序列标注
HMM隐马尔可夫模型
CRF条件随机场
关系抽取
流水线方法,联合抽取方法
第九讲:知识图谱推理
什么是推理?
演绎推理
肯定前件假言推理
否定后件假言推理
假言三段论
演绎三段论
归纳推理
归纳泛化
统计推理
溯因推理
类比推理
其他推理,不确定性推理,单调推理,非单调推理,模糊推理,精确推理。
知识图谱推理
基于演绎,基于归纳
基于符号的推理——本体推理
owl语言
考试考概念组成,这上面四个会考
OWL本体推理
可满足性 (satisfiability)
分类 (classification)
实例化 (materialization)
典型推理算法——Tableaux算法
检查某一本体概念的可满足性,以及实例检测
通过一系列规则构建Abox,以检测可满足性,或者检测某一实例是否存在于某概念
考原理,这章考概念推理
考一下规则
相关工具
基于逻辑编程改写的方法
引入规则推理
Datalog语言
事实是特殊的规则
推理举例
基于产生式规则方法
LHS条件集合,RHS动作集合
产生式系统=事实集+产生式集合+推理引擎
RETE算法
第十讲:项目报告
另见项目
实验
实验一、二RDF(RDFS)应用
RDF(资源描述框架)是描述网络资源的 W3C 标准, ,比如网页的标题、作者、修改日期、内容以及版权信息等。
RDF 使用 Web 标识符来标识事物,并通过属性和属性值来描述资源。
对资源、属性和属性值的解释:
- 资源是可拥有 URI 的任何事物,比如 “https://www.runoob.com//rdf"
- 属性是拥有名称的资源,比如 “author” 或 “homepage”
- 属性值是某个属性的值,比如 “David” 或 “https://www.runoob.com/" (请注意一个属性值可以是另外一个资源)
Turtle syntax,海龟句法?
Turtle, the Terse RDF Triple Language, a concrete syntax for RDF
Terse RDF Triple Language (Turtle) is a syntax and file format for expressing data in the Resource Description Framework (RDF) data model. Turtle syntax is similar to that of SPARQL, an RDF query language. It is a common data format for storing RDF data, along with N-Triples, JSON-LD and RDF/XML.
——Wikipedia维基百科
RDF represents information using semantic triples, which comprise a subject, predicate, and object. Each item in the triple is expressed as a Web URI. Turtle provides a way to group three URIs to make a triple, and provides ways to abbreviate such information, for example by factoring out common portions of URIs. For example, information about Huckleberry Finn could be expressed as:
<http://example.org/person/Mark_Twain>
<http://example.org/relation/author>
<http://example.org/books/Huckleberry_Finn> .
ex1
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:iswww="http://sw.edu/#"
>
<rdf:Description rdf:about="http://sw.edu/#germany">
<rdf:type rdf:resource="http://sw.edu/#country" />
</rdf:Description>
<rdf:Description rdf:about="http://sw.edu/#capital_of">
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
<rdfs:domain rdf:resource="http://sw.edu/#city" />
<rdfs:range rdf:resource="http://sw.edu/#country" />
</rdf:Description>
<rdf:Description rdf:about="http://sw.edu/#country">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
<rdfs:label xml:lang="de">Land</rdfs:label>
</rdf:Description>
<rdf:Description rdf:about="http://sw.edu/#berlin">
<rdfs:label xml:lang="en">Berlin</rdfs:label>
<rdf:type rdf:resource="http://sw.edu/#city" />
<iswww:capital_of rdf:resource="http://sw.edu/#germany" />
</rdf:Description>
<rdf:Description rdf:about="http://sw.edu/#city">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
<rdfs:label xml:lang="de">Stadt</rdfs:label>
</rdf:Description>
</rdf:RDF>
参考资料
RDF1.1 Turtle 中文翻译 - Pelhans的文章 - 知乎
实验三:本体建模工具Protege使用及领域本体构建
实验四:基亍描述逻辑的知识建模
实验五:玩转第一个知识图谱
neo4j安装
CALL n10s.rdf.import.fetch("https://github.com/neo4j-labs/neosemantics/raw/3.5/docs/rdf/nsmntx.ttl","Turtle");
实验七、八、九:知识图谱应用课程项目
实验十:项目验收与报告
考试
考试题型
选择题15,单选多选都有,一题一分
填空题20,每空一分
判断题10
八个大题?
1、简答题,给一个模型写一个知识图谱查询语言
2、画图RDF,物化三元组
3、SPARQ语言,重点10分
4、DL描述逻辑,给一些句子描述,看ppt例子,写个五六个,一个两分
5、RDF填空,基于xml。
6、trutle语法(OWL),作业
7、大题,本体建模,画一个本体模型???
考试范围
每年必考
语义网络(semantic network)是一种以网络格式表达人类知识构造的形式。是人工智能程序运用的表示方式之一。由奎林(J. R. Quillian)于1968年提出。
互联网的创始人Tim Berners-Lee在2000年提出了语义Web的概念和体系结构。
本体发展
新ppt
本体定义,关键词
本体分类体系
RDF组成,两种语法,Literals特别是
Turtle和xml语法,重点
空节点,看下作业吧
RDFs类和实例的表示,9101112,例子
属性约束
物化三元组,图
turtle
语义基本特性
模型论语义,重点
RDF-s的模型论语义,简单解释,看得懂
三元组的解释62以后不用看
第三章
本体论基本概念
OWL基本概念
三个子语言,基本特性,表达能力,推理性由强到弱
判断
语言大纲填空,一眼
OWL基本元素,就是填空,没有大段,例子稍微看看,匿名类填空
属性特性,重点
本体映射的词汇
第四章描述逻辑
基本概念
所有例子
每个字母特性。SROIQ(D)
都是重点。
什么是可判定性。
owl的两种语义。
直接语义。
rdf的语义?什么是解释什么是模型。
一个解释就是一个公理集合的模型,如果所有的公理在解释下成立。
通过谓词逻辑不是重点。
不一致性和满足问题是重点
附录owl的turtle,题目
第五章
什么是知识图谱
应用领域
知识图谱涉及:知识表示、关系抽取、图数据存储、数据融合、推理补全、语义搜索、知识问答、自动推理、知识驱动等。
技术知道就可以
知识图谱的技术流程
数据->知识表示->知识获取->知识融合->知识推理->知识检索->知识分析->应用
主要数据模型,重点
RDF图和属性图
知识图谱存储方案
基于关系的存储方案。包括三元组表、水平表、属性表、垂直划分、六重索引和DB2RDF。
面向RDF的三元组库。
原生图数据库。
什么是知识表示
知识表示是现实世界的可计算模型?
知识表示(KR)就是⽤易亍计算机处理的方式来描述⼈脑的知识。
前五
DL是可判定子集,霍恩子句要知道
霍恩子句是文字的析取,是最多带一个肯定文字的子句(没有否定符号的文字)。
框架系统优缺点,有槽
SPARQL语法,所有例子
稍微改
向量表示基本概念one-hot编码词袋模型词向量
第六章知识存储
典型知识存储引擎,这句话重点
更要搞懂,存储原理采用免索引邻接
Cypher看情况,稍微看看也可以,以前没考过,不考
基于关系型数据库存储方案,名字,优缺点更好
三元组表,水平表,属性表,垂直划分,六重索引,DB2RDF
原生图不考
第七章知识抽取
基本概念
知识抽取是实现自动化构建大规模知识图谱的重要技术
面向结构化的知识抽取,映射方法
直接映射方法定义了一个从关系数据库到 RDF 图数据的简单转换
R2RML映射语言是一种用于表示从关系数据库到RDF数据集的自定义映射的语言。
实体识别常用方法名字
方法:基于模板与规则,基于统计模型,基于深度学习
关系抽取方法
基亍人工模板基亍监督学习(传统监督学习、深度学习)、基亍弱监督学习(迁秱学习、Bootstrapping)和无监督学习斱法。
第八章知识推理
考标题,有哪些大类
演绎推理方法有哪些,判断属于哪一类里?
演绎推理
肯定前件假言推理
否定后件假言推理
假言三段论
演绎三段论
归纳推理
归纳泛化
统计推理
溯因推理
类比推理
其他推理,不确定性推理,单调推理,非单调推理,模糊推理,精确推理。
知识图谱推理
基于演绎,基于归纳
基于符号的推理——本体推理
推理任务
推理方法
本体推理,可满足性,分类和实例化
表算法,检查某一本体概念的可满足性以及实例检测
构建Abox检测可满足性,规则如下
datalog和 产生式,稍微记一记
每个总结ppt全都是重点。
资料
RDF 1.1 Turtle 中文翻译 - Pelhans的文章 - 知乎 https://zhuanlan.zhihu.com/p/44381615
有大佬翻译文档了,tql
仅供参考,很多问题,虽然老师给的部分参考答案感觉也有问题。
后记
第一周考完后玩了两天,然后背了一天半的ppt,考完后对答案心态崩了,概念挖空两个一个语义网基于实体,一个基于对象都看过,还是概念不够熟悉,脑子就是转不过来,填空太难了。
稍微记了一下索引,结果就考了个图结构索引。推理选择填空都考了,居然考一个推理用于什么,翻了半天ppt才在一个角落看到,而且也没标,这种题就是避免有人满分吧,谁能记得这么细那也太可怕了。考了个ppt上的表算法原题规则,我当时想把规则都背下来也太细了,然后就一定会考原题,结果-写成+了。
最后还有15分钟基本上人都走完了,就开始催交卷,其实任何考试都还是应该坐到最后一刻,这是态度问题,哪怕就是多看看改一下,哪怕最后错了可能也不会那么揪心了。
大题都能拿分,全都是很简单的看过ppt做过作业就都会,对于我们完全没有拉开差距的可能,所以难的就是小题。选择第一题问的就是语义网络创始人是谁,当时上课就说了每年必考。而且选择还是不定项选择,很坑。有一个sparql查询朋友的朋友不确定是不是用*/,于是开始瞎写,感觉就不是很好,其实这种不确定就是不会,与其多想不如放宽心,告诉自己不会就不会,照着简单写就是了。
总而言之,这门课就这样结束了,基本上考前背一背ppt,就看谁背的久抓重点抓得准,整个课程体验还是不错的,除了后面几节课全是概念和方法有点无聊,我感觉自己还是很认真的学了,虽然现在好像也不知道要怎么把这些学到的东西发挥出很大的作用,但也已经算满意了。通过课程项目也大概知道如何做一个带界面的知识图谱问答系统,这是最有意思的部分了,也算了解了知识图谱在实际中的使用流程,而且自学的docker也多少派上了点用处,虽然搞了大半天也没玩明白,只能换了个项目从头开始。
可惜的就是这门课涉及到自然语言处理的部分其实不多,主要是应用部分偏多。
这次考试体会最深的还是王道OS考研书上的一段话,也是一些学习计算机科学知识的建议。学习科学知识时,很多同学会陷入一个误区,即只注重对定理、公式的应用,而忽视对基础概念的理解。这是我们从小到大为了应付考试而培养出的一个毛病,因为熟练应用公式和定理对考试有立竿见影的效果。公式定理的应用固然重要,但基础概念的理解能让我们透彻地了解一门学科,更利于我们产生兴趣,培养创造性思维。
在我看来,考试也好,上课也好,都是帮助我们学会上面这个道理,并且通过最后的成绩来奖励那些能够学会一些道理并且始终贯彻下去的人。生活也是如此。
后记完。
语义网与知识图谱课程项目
此项目旨在构建一个关于电影的知识图谱问答系统。目前知识库本身的内容并不全面,但是麻雀虽小,五脏俱全,该项目对多种类型的问题形式都能得到正确的相应结果。以“周星驰”为例,本系统能够回答周星驰的个人简介,参演过的电影,参演过的电影类型,参演某一类型的电影都有什么。还能查询某个电影的信息,如上映时间,评分,类型,演员列表等等….
提供的功能有:
- 中文分词
- 词性标注
- 命名实体识别
- 知识图谱关系抽取
- 关键词提取
- 等等….
目录
搭建环境
python3.6 + jdk1.8 + neo4j-3.4.13
注意: neo4j-3.4.13要求java版本必须在jdk8以上
网页显示采用flask-0.12.2框架, 和neo4j数据库连接时用的是py2neo-3.0, 之前用py2neo-4.0总是容易出错。
开了个虚拟环境QAmovie,但是找不到更老版本的py2neo-3.0了,最早的都只有4.0,更新很多版本了,neo4j版本也用最新的试试
查看所有虚拟环境: conda info -e
启动虚拟环境:activate 环境名
创建:conda create -n 环境名 ,如,conda create -n rcnn python=3.6
删除:conda remove -n rcnn --all
环境配置
失败项目不用看了,浪费一天时间搞docker和环境配置
docker运行出错,放了一周
解决python3安装库报use_2to3 is invalid的错误
降低refo版本后成功
docker run起来之后打开localhost发现好像少了点什么,难道是因为refo版本减低了?
更改DockerFile的pip改回pip3.6再试一次,如果不行就直接在requirement里加match
尝试多次后无果,match会不会是re库啊,看上去很像,但不知道要怎么改代码。再将refo版本降0.1试试 。不行就用DockerFile来pip安装match。或者我把python版本升到3.7.
每次build docker都要六七分钟,太久了。
docker build -t kbqa:V0.1 .
docker run -p 80:80 --name test -d kbqa:V0.1
docker exec -it 243c32535da7 /bin/bash
使用方式
先安装依赖:
pip install -r requirements.txt
注意依赖包版本最好和requirements.txt一致或者不要相差太大,不然容易出错。然后运行服务器:
python server.py
最后打开浏览器进入http://127.0.0.1:5000
即可进行问答。
http://127.0.0.1:5000/
目前本系统可以回答类似如下类型的问题(以李连杰和警察故事为例):
1.喜剧之王的评分是多少
2.喜剧之王的上映时间
3.喜剧之王是什么类型的电影
4.喜剧之王的主要情节
5.喜剧之王中的演员都有谁
6.周星驰的简介
7.周星驰演过的动作电影有哪些
8.周星驰演过哪些电影
9.周星驰演的电影评分在7以上的都有哪些
10.周星驰演的电影评分低于7的都有哪些
11.周星驰演过的电影类型有哪些/周星驰演过哪些风格的电影
12.李连杰和章子怡一起演过哪些电影
13.周星驰演过多少部电影
14.周星驰生日是什么时候
代码说明
data文件夹
首先是数据的准备,利用爬虫从维基和豆瓣上爬取电影数据及演员数据,这里我直接把数据预处理的结果放入了data文件夹
questions文件夹
放的是关于问题分类的训练数据
data2neo4j.py
将data文件夹下csv文件导入neo4j数据库。注意这里我放上了我的服务器,可以直接用。你也可以用data2neo4j.py将数据导入到自己的本地服务器,并在question_template.py修改地址即可。
import文件夹是neo4j默认的数据导入文件夹,所以首先要将data文件夹下所有csv文件拷贝到neo4j数据库的根目录import文件夹下,没有则先创建import文件夹,然后运行此程序。
question_classification.py
对问题进行分类
question_template.py
连接数据库,生成查询语句,返回结果
process_question.py
分类并回答问题
static文件夹
放的是关于前端显示的静态文件
评价
随机生成了30个问题,发现问题分类的准确率在90%左右,可能是因为训练样本较少的缘故。然后问题回答的准确取决于数据库中有无数据,如果分类正确而且数据库中有相关数据,基本都能正常返回答案。后续工作需要增加问题分类的训练样本和补充数据库资源….
报错问题及解决
neo4j.exceptions.ServiceUnavailable: Cannot to connect to Bolt service on IPv4Address((‘127.0.0.1’, 7474)) (looks like HTTP)
neo4jAddress = '''bolt://127.0.0.1:7474''' #本地地址,应该是7687
neo4jUser = "neo4j" #用户名
neo4jPassword = "123456" #密码
资料
github项目
比较简单
以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务
数据量大
有算法
搞不定,换个项目重开。