天天看點

知識圖譜——領域知識問答系統簡單介紹            【RDF查詢語言SPARQL】

一、概念介紹

      【知識圖譜】

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

繼續閱讀