zoukankan      html  css  js  c++  java
  • 知识图谱学习笔记(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/

  • 相关阅读:
    NFS服务
    SSH服务
    DNS服务器
    FTP服务器
    linux(磁盘配额)
    linux(ACL权限控制)
    linux(日志)
    linux(系统安全)
    linux(进程和计划任务)
    linux(引导)
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9613800.html
Copyright © 2011-2022 走看看