知识图谱——领域知识问答系统简单介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiyang_1/article/details/80043112

一、概念介绍

      【知识图谱】

A knowledge graph consists of a set of interconnected typed entities and their attributes.

即,知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识

表示为一个SPO三元组(Subject-Predicate-Object)。

【RDF】

      RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一

个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。RDF形式上表示为SPO三元组,

有时候也称为一条语句(statement)。

知识图谱的推理主要分为两类:基于本体的推理和基于规则的推理。OWL/RDFS推理的推理机(reasoner),就能

够执行基于本体的推理。


二、本体建模和数据准备

       推荐本体建模工具【Protege

      【知识图谱基础之RDF,RDFS,OWL】

       关系数据库到RDF,d2rq这个工具把mysql的数据转为RDF。

d2rq:Accessing Relational Databases as Virtual RDF Graphs

下载【D2RQ】,进入其目录,运行下面的命令生成默认的mapping文件:

generate-mapping -u root -o kg_demo_movie_mapping.ttl jdbc:mysql:///kg_demo_movie

            D2RQ支持的数据库有Oracle、MySQL、PostgreSQL、SQL Server、HSQLDB、Interbase/Firebird。

       使用下面的命令将我们的数据转为RDF:

.\dump-rdf.bat -o kg_demo_movie.nt .\kg_demo_movie_mapping.ttl

三、Apache jena SPARQL

             Apache Jena(后文简称Jena),是一个开源的Java语义网框架(open source Semantic Web Framework

        for Java),用于构建语义网和链接数据应用。

        下载Jena的最新版本(fuseki和其他的功能模块不在同一个文件中,需要分别下载apache-jena和

        apache- jena- fuseki)。

        进入“apache-jena-X.X.X”文件夹的bat目录,使用“tdbloader.bat”将之前我们的RDF数据以TDB的方式存储。

命令如下:

.\tdbloader.bat --loc="D:\apache jena\tdb" "D:\d2rq\kg_demo_movie.nt"

            【RDF查询语言SPARQL】

             SPARQL即SPARQL Protocol and RDF Query Language的递归缩写,专门用于访问和操作RDF数据,是语义网

        的核心技术之一。

     例子(仅供参考):

周润发演了什么电影
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT DISTINCT ?x 
 WHERE { ?s :personName '周润发'.?s :hasActedIn ?m.?m :movieTitle ?x }
 
 功夫有那些演员
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT DISTINCT ?x 
 WHERE { ?m :movieTitle '功夫'.?m :hasActor ?a.?a :personName ?x }
 
 成龙和李连杰合作的电影
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT DISTINCT ?x 
 WHERE { ?p1 :personName '成龙'.?p2 :personName '李连杰'.?p1 :hasActedIn ?m.?p2 :hasActedIn ?m.?m :movieTitle ?x }
 
 巩俐参演电影大于0.8的电影
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT DISTINCT ?x 
 WHERE { ?p :personName '巩俐'.?p :hasActedIn ?m.?m :movieTitle ?x.?m :movieRating ?r.filter(?r > 0.8) } 
 
 成龙演了多少部电影
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT COUNT(?x) 
 WHERE { ?s :personName ' 成龙'.?s :hasActedIn ?x. }
 
 李连杰简介
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT DISTINCT ?x 
 WHERE { ?s :personName '李连杰'.?s :personBiography ?x. }
 
 功夫简介
 PREFIX : <http://www.kgdemo.com#> 
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
 SELECT DISTINCT ?x 
 WHERE { ?s :movieTitle '功夫'.?s :movieIntroduction ?x. }

四、KBQA Demo

            python代码见github

猜你喜欢

转载自blog.csdn.net/jiyang_1/article/details/80043112