知识图谱学习笔记(1)

知识表示和知识建模
------------------------------------
1.知识的特性

相对正确性:在一定条件下,在某种条件中等等
不确定性:
存在“中间状态”
“真”("假")程度
随机性
模糊性
经验性
不完整性
可表示性和可用性:
语言;文字;图形;图像;视频;音频;神经网络;概率图模型
2.知识的分类
常识性知识、领域性知识(作用范围)
事实性知识、过程性知识、控制知识(作用以及表示)
确定性知识、不确定性知识(确定性)
逻辑性知识、形象性知识(结构及表现形式)
3.Horn逻辑:一阶谓词逻辑的子集
原子Atom
p(t1,t2....tn)
p是谓词,n是目,ti是项(变量或者常量)
eg:has_child(Helen,Jack)
规则Rules由原子构建:
H:-B1,B2,....Bm
H与B1、B2,。。。。。Bm是原子
H是头部原子
B1,B2,。。。。是体部原子
has_child(X,Y):-has_son(X,Y)

事实是没有体部且没有变量额规则:
F(v1,v2,....vn):-has_child(Helen,jack):-
4.描述逻辑:一阶谓词逻辑的可判定子集
用于描述概念,属性;对于术语知识库的构建提供了便捷的表达形式

5.基于语义网络的表示框架
-----------------------------
1.知识图谱使用最主要的技术:SPARQL和RDF
2.RDF数据发布的一些原则:
(1):用RDF来作为数据的格式
(2)用URI来标识所有的对象
(3)使用http协议让人们能够查询到这些标志
(4)当人们使用URI的时候,能够使用把用的信息返回给客户
(5)连接到其他的URI使得相关的内容也能被访问到
6.RDF简介:
----------------------------------
(1)RDF(Resource Description Framework)(资源描述框架),其中:
Resource:页面、图片、视频等任何具有URI标识符
Description:属性、特征和资源之间的关系
Framework:模型、语言和这些描述的语法
(2)在RDF中,知识总是以三元组的形式出现的
RDF是一个三元组(triple)模型,即每一份知识可以被分解为如下的形式:
(subject(主),predicate(谓),object(宾))

例子:CCF ADL邀请王昊奋作为讲者,演讲主题的知识图谱

(CCF ADL,speaker,Haofen)
(CCF ADL,theme,KG)
(3)RDF本身也是一个图模型,用来链接资源的各种描述,所以RDF三元组可以被描述成这样的一个图(节点,边,节点)
(4)RDF Schema(RDFS):为RDF定义了如下词汇:
Class,subClassOf,type,Property,subPropertyOf,Domain,Rnage
RDFS推理实例1:利用了类别的实例和概念之间的上下位之间的关系
谷歌 rdf:type 人工智能公司 //谷歌是一个人工智能公司
+
人工智能公司 rdfs:subclass 高科技公司 //人工智能公司是一家高科技公司
|
\/
谷歌 rdf:type 高科技公司 //就可以退出谷歌是一个高科技的公司

 

RDFS实例2:
投资 rdfs:domain 投资人 //投资的主语一定是投资人
投资 rdfs:range //投资的主语一定是投资公司
||
\/
大卫.切瑞顿
||
\/
大卫.切瑞顿 rdf:type 投资人
OWL和OWL2
-----------------------------
1.RDF(S)表达能力上的缺陷
通过RDFS可以表示一些简单的语义,但是在更多场景下,RDFS表达能力显得太弱,还缺少诸多的常用特征。

对于局部值域的属性定义:RDFS中通过rdfs:range定义了属性的值域,该值域是全局性的,无法说明该属性应用于某些类时具有的特殊值域限制。

类、属性、个体的等价性:RDF(S)中无法声明两个或者多个类、属性和个体是等价还是不等价。

不想交类的定义:在RDF(S)中只能声明子类关系,如男人和女人都是人的子类,但是无法声明这两个类时不想交的。

基数约束:即对某属性值可能或者必须的取值范围进行约束,如说明一个人有双亲(包括两个人),一门课至少有一名教师等。

关于属性特性的描述:即声明属性的某些特性,如传递性、函数性、对称性,以及声明一个属性是另一个属性的逆属性等

2.OWL简介:OWL的3个子语言:
OWL Lite
OWL DL
OWL Full
3.等价词汇
eg:
exp:运动员 owl:equivalentClass exp:体育选手
exp:获得 owl:equivalentProperty exp:取得
exp:运动员A owl:sameIndividualAs exp:小明

这个地方注意:exp是命名空间http://www.example.org的别称
以上的三个三元组分别声明了两个类,两个属性,以及两个个体是等价的
4.声明属性的传递性
exp:ancestor rdf:type owl:TransitiveProperty

exp:ancestor是一个传递关系;
比如:exp:小明 exp:ancestor exp:小林;
exp:小林 exp:ancestor exp:小志
那么根据上面的声明,有exp:小明 exp:ancestor exp:小志
5.声明两个属性互反
exp:ancestor owl:inverseOf exp:descendant

exp:ancestor 和 exp:decendant是互反关系;
那么根据上面的声明,有exp:小林 exp:descendant exp:小明
6.声明属性的函数性
exp:hasMother rdf:type owl:FunctionProperty
exp:hasMother是一个具有函数性的属性;因为每个人只有一个母亲
7.声明属性的对称性
exp:friend rdf:type owl:SymmetricProperty
exp:friend是一个具有对称性的属性;
比如 exp:小明 exp:friend exp:小林
那么根据上面的声明,有exp:小林 exp:friend exp:小明

7.OWL词汇扩展
OWL中的其他词汇 描述
owl:oneOf 声明枚举类型
owl:disjoinWith 声明两个类不相交
owl:unionOf 声明类的并运算
owl:minCardinality 最小的基数限定
owl:maxCardinality 最大的基数限定
owl:InverseFunctionProperty 声明互反类具有函数属性
owl:hasVal 属性的局部约束时,声明所约束类必有一个取值

8.OWL2 QL
QL代表query language的意思,转为基于本体的查询设计
OWL2QL的复杂度是AC0,非常适合大规模处理
OWL2的三大子语言中,QL最简单
OWL2QL是基于描述逻辑语言DL-Lite定义的

SPARQL简介
----------------------------------
(1)RDF的查询语言
基于RDF数据模型
SPARQL查询结构,一个SPARQL查询语句编译的顺序为
Prefix declarations--->Dataset definition--->result clause--->querry pattern--->Querry modifiers
标准的结构如下:
#prefix declarations
PREFIX foo:<http://example.com/resources/>
...
#dataset definition
FROM ...
# result
SELECT ...
# query pattern
WHERE {
....
}

#query modifiers
ORDER BY ...

(2)变量,RDF中的资源,以"?"或者"$"来进行表示
(3)三元组模板 (triple pattern),在WHERE子句中列示关联的三元组模板,之所称为模板,是因为三元组中允许变量
(4)SELECT子句中知识要查询的目标变刘昂
(5)一个简单的SPARQL查询
1)
PREFIX exp:http://www.example.org/ //对命名空间的声明
SELECT ?student
WHERE{
?student exp:studies exp:CS328
}
//查询所有选修CS328课程的学生;
和数据库的SQL语言进行对应;
PREFIX部分进行命名空间的声明,使得下面查询的书写更为简洁

2)OPTIONAL
SELECT ?student ?email
WHERE {
?student exp:studies exp:CS328.
OPTIONAL{
?student foaf:mbox ?email.
}
}
//查询所有选修CS328课程的学生姓名,以及他们的邮箱;OPTIONAL关键字知识如果没有邮箱,那么依然返回学生姓名,邮箱处空缺

3)FILTER
SELECT ?module ?name ?age
WHERE {
?student exp:studies ?module.
?student foaf:name ?name.
OPTIONAL{
?student exp:age ?age.
FILTER(?age>25)
}
}
//查询学生姓名,选修课程,以及他们的年龄;如果有年龄,那么年龄必须大于25岁

4)UNION
SELECT ?student ?email
WHERE{
?student foaf:mbox ?email.
{?student exp:studies exp:CS328}
UNION{?student exp:studies exp:CS909}
}
//这里查询选修课程CS328或者CS909的学生的姓名以及他们的邮件;
//注意:这里的邮件是必须要进行返回的,如果没有邮件值,那么久不返回这条记录,注意这里和OPTIONAL的区别
5)FROM
SELECT ?student ?email ?home
FROM <http://www2.warwick.ac.uk/rdf/student>
WHERE{
?student exp:studies exp:CS909.
optional{?student foaf:mbox?email.
?student foaf:homepage ?home.}

}
//这里查询选修课程CS909的学生姓名以及邮件和住址
//FROM关键字引入了其他本体或者可以访问的知识库

6)SPARQL查询语言举例
fiannce:融创中国 rdf:type finance:地产行业
finance:孙宏斌 finance:control finance:融创中国
finance:贾跃亭 finance:control finance:乐视网
finance:孙宏斌 finance:hold_share finance:乐视网
finance:王健林 finance:control finance:万达集团
finance:万达集团 finance:main_income finance:地产行业
finance:融创中国 finance:acquire finance:乐视网
finance:融创中国 finance:acquire finance:万达集团

SELECT ?P ?X
WHERE{
?P finance:control ?c.
?c finance:acquire ?X.
}

查询结果:
?P ?X
孙宏斌 乐视网
孙宏斌 万达集团

(7)更多SPARQL查询示例
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
PREFIX org:<http://example.com/ns#>
CONSTRUCT{$x foaf:name $name}
WHERE{$x org:employeeName $name}

(8)对(6)进行举例:写成规则的形式
hold_share(X,Y):-control(X,Y)
conn_trans(Y,Z):-hold_share(X,Y),hold_share(X,Z)

SELECT ?X ?Y
WHERE{
{?Z finance:control ?X. //Z控制了X公司
?Z finance:control ?Y.} //Z也控制了Y公司
UNION{?Z finance:hold_share?X. //Z是X的股东
?Z finance:hold_share ?Y}//Z是Y的股东
UNION{?Z finance:control ?X.//Z控制了X公司
?Z finance:hold_share ?Y.}//Z是X公司的股东
UNION{?Z finance:hold_share ?X.//Z有X公司的股票
?Z finance:control ?Y.}//Z控制了Y公司
}

SELECT DISTINCT ?X ?Y
WHERE{
{SELECT ?U ?X WHERE{?U finance:hold_share ?X.}}
{SELECT ?U ?Y WHERE{?U finance:control ?Y.}}
}
SPARQL允许嵌套查询,即WHERE子句中包含SELECT子句

(9)SPARQL用于新药发现的案例
JSON-LD
------------------------------------
(1)JSON-LD是javaScript Object Notation for Linked Data的缩写,是一种基于JSON表示和传输互联数据的方法。JSON-LD描述了如何通过JSON表示有向图,以及如何在一个文档中混合描述表示互联数据以及非互联数据。JSON-LD的语法和JSON的语法是兼容的
(2)JSON-LD处理算法和API描述了除了JSON-LD数据所需要的算法以及编程接口,通过这些接口可以在JavaScript,Python以及Ruby等编程环境中直接对JSON-LD文档进行转换和处理

(3)一个简单的JSON文本
{
"name":"Manu Sporny",
"homepage":"http://manu.sporny",
"image":"http://manu.sporny.org/images/manu.png"
}
//这个JSON文档表示一个人。人们很容易推断这里的含义:"name"是人的名字,"homepage"是其主页,"image"是其某种照片。然而及其不能够理解"name"和"image"这样的数据
//为了让机器能够理解,我们需要用JSON-LD的数据格式
{
"http://schema.org/name":"Manu Sporny",
"http://schema.org/url":{"@id":"http://manu.sporny.org/"},
"http://schema.org/image":{"@id":"http://manu.sporny.org/images/manu.png"}
}

//我们可以看到:JSON-LD通过引入规范的属于表示,比如统一化的表示"name","homepage"和"image"的URI,使得数据的交换和机器的理解称为基础

JSON-LD和语义网
---------------------------
(1)JSON-LD呈现出语义网技术的风格,他们有着类似的目标:围绕某类知识提供共享的术语。例如,每个数据集不应该围绕"name"重复发明概念
(2)JSON-LD的实现没有选择大部分语义网的技术栈,而是以简单、不复杂以及面向一般开发人员的方式进行推进。

RDFa
--------------------------
(1)RDFa(Resource Description Framework in attributes)是网页标记语言
(2)RDFa是W3C推荐标准。它扩充了XHTNL的几个属性,网页制作者可以利用这些属性在网页中添加可供机器读取的资源
(3)与RDF的对应关系使得RDFa可以将RDF的三元组嵌入在XHTML文档中,它也使得符合标准的使用端可以从RDFa文件中提取出这些三元组来

(4)RDFa工作原理
通过引入名字空间的方法在已有的标签中加入RDFa相应的属性来使得支持RDFa技术的浏览器或者搜索引擎能够解剖到,从而达到优化的目的
<div xmlns:dc="http://purl.org/dc/elements/1.1/"
about="http://www.example.com/books/wikinomics">
<span property="dc:title">Wikinomics</span>
<span property ="dc:creator">Mr right</span>
<span property="dc:date">2006-09-02</span>
</div>
上面的这段代码示例中用到了RDFa属性中的about属性和property属性,这段代码示例说明了一篇文章,然后描述了和这篇文章相关的信息,比如说标题、创建者和创建日期
而这些属性就可以使得支持RDFa的机器识别
从机器可以理解的层面优化搜索,提升访问性以及网页数据的关联性


HTML5 Microdata
------------------------
(1)Microdata微数据,是在网页标记语言嵌入机器可读的属性数据
(2)微数据可以来自自定义词汇表、带作用域的键/值对给DOM做标记
(3)用户可以自定义微数据词汇表,在自己的网页中嵌入自定义的属性

(4)源代码示例:
<section itemscope itemtype="http://data-vocabulary.org/Person"> //这个地方定义了一个概念类型,通过itemtype进行指示,itemscope代表的是本身的范围
<h1 itemprop="name">Andy</h1> //在自定义命名空间下的实体Andy
<p><img itemprop="photo" src="http://www.example.com/photo.jpg"></p>//实体Andy的两个属性,通过itemprop标签进行指示
<a itemprop="url" href="http://www.example.com/blog">My Blog</a>
</section>
//浏览器可以很方便的从网页上提取数据实体、属性以及属性值等

RDF+SPARQL与EQ+SQL对比
-----------------------------------------
RDF语义模型-关系显式定义:
Tencent located_in Shengzhen
Shengzhen located_in China

关系模型:located_in 类型传递属性

  使用SQL的方式进行查询:Select Country from company Table,City Table,Company_City table where Company Name="Tencent" and ID=CO_ID and CITY=CITY_ID    //sql进行三表连接的方式

 

  Protege下载:https://protege.stanford.edu/download/protege/5.2/

 

posted @ 2018-09-09 15:26  stone1234567890  阅读(513)  评论(0编辑  收藏  举报