- 知識圖譜:方法、實踐與應用
- 王昊奮 漆桂林等
- 5887字
- 2020-04-03 12:54:50
2.3 互聯網時代的語義網知識表示框架
隨著語義網的提出,知識表示迎來了新的契機和挑戰,契機在于語義網為知識表示提供了一個很好的應用場景,挑戰在于面向語義網的知識表示需要提供一套標準語言可以用來描述Web的各種信息。早期Web的標準語言HTML和XML無法適應語義網對知識表示的要求,所以W3C提出了新的標準語言RDF、RDFS和OWL。這兩種語言的語法可以跟XML兼容。下面詳細介紹這幾種語言。
2.3.1 RDF和RDFS
RDF是W3C的RDF工作組制定的關于知識圖譜的國際標準。RDF是W3C一系列語義網標準的核心,如圖2-4所示。

圖2-4 W3C的語義網標準棧及其分組
●表示組(Representation)包括URI/IRI、XML和RDF。前兩者主要是為RDF提供語法基礎。
●推理組(Reasoning)包括RDF-S、本體OWL、規則RIF和統一邏輯。統一邏輯目前還沒有定論。
●信任組和用戶互動組。
圖2-4對W3C的語義網標準棧做了分組。目前,跟知識圖譜最相關的有:
2006年,人們開始用RDF發布和鏈接數據,從而生成知識圖譜,比較知名的有DBpedia、Yago和Freebase。2009年,Tim Berners-Lee為進一步推動語義網開放數據的發展,進一步提出了開放鏈接數據的五星級原則,如表2-3所示。
表2-3 開放鏈接數據的五星級原則

Tim Berners-Lee提出了實現五星級原則的四個步驟:
●使用URIs對事物命名;
●使用HTTP URIs,以方便搜索;
●使用RDF描述事物并提供SPARQL端點,以方便對RDF圖譜查詢;
●鏈接不同的圖譜(例如通過owl:sameAs),以方便數據重用。
2007年,不少開放圖譜實現與DBpedia鏈接。如圖2-5為開放鏈接數據早期的發展。

圖2-5 開放鏈接數據早期的發展
1.RDF簡介
在RDF中,知識總是以三元組的形式出現。每一份知識可以被分解為如下形式:(subject,predicate,object)。例如,“IBM邀請Jeff Pan作為講者,演講主題是知識圖譜”可以寫成以下RDF三元組:(IBM-Talk,speaker,Jeff),(IBM-Talk,theme,KG)。RDF中的主語是一個個體(Individual),個體是類的實例。RDF中的謂語是一個屬性。屬性可以連接兩個個體,或者連接一個個體和一個數據類型的實例。換言之,RDF中的賓語可以是一個個體,例如(IBM-Talk,speaker,Jeff)也可以是一個數據類型的實例,例如(IBM-Talk,talkDate,“05-10-2012”^xsd:date)。
如果把三元組的主語和賓語看成圖的節點,三元組的謂語看成邊,那么一個RDF知識庫則可以被看成一個圖或一個知識圖譜,如圖2-6所示。三元組則是圖的單元。

圖2-6 一個RDF知識庫可以被看成一個圖
在RDF中,三元組中的主謂賓都有一個全局標識URI,包括以上例子中的Jeff、IBM_Talk和KG,如圖2-7所示。

圖2-7 三元組的全局標識URI
全局標識URI可以被簡化成前綴URI,如圖2-8所示。RDF允許沒有全局標識的空白節點(Blank Node)。空白節點的前綴為“_”。例如,Jeff是某一次關于KG講座的講者,如圖2-9所示。

圖2-8 前綴URI

圖2-9 沒有全局標識的空白節點
RDF是抽象的數據模型,支持不同的序列化格式,例如RDF/XML、Turtle和N-Triple,如圖2-10所示。

圖2-10 不同的序列化格式
2.開放世界假設
不同于經典數據庫采用封閉世界假設,RDF采用的是開放世界假設。也就是說,RDF圖譜里的知識有可能是不完備的,這符合Web的開放性特點和要求。(IBM-Talk,speaker,Jeff)并不意味著IBM講座只有一位講者。換一個角度,(IBM-Talk,speaker,Jeff)意味著IBM講座至少有一位講者。采用開放世界假設意味著RDF圖譜可以被分布式儲存,如圖2-11所示。

圖2-11 RDF圖譜可以被分布式儲存
同時,分布式定義的知識可以自動合并,如圖2-12所示。

圖2-12 分布式定義的知識可以自動合并3.RDFS簡介
RDF用到了類以及屬性描述個體之間的關系。這些類和屬性由模式(schema)定義。RDF Schema(RDF模式,簡稱RDFS)提供了對類和屬性的簡單描述,從而給RDF數據提供詞匯建模的語言。更豐富的定義則需要用到OWL本體描述語言。
RDFS提供了最基本的對類和屬性的描述元語:
●rdf:type :用于指定個體的類;
●rdfs:subClassOf:用于指定類的父類;
●rdfs:subPropertyOf:用于指定屬性的父屬性;
●rdfs:domain:用于指定屬性的定義域;
●rdfs:range:用于指定屬性的值域。
舉例來說,下面的三元組表示用戶自定義的元數據Author是Dublin Core的元數據Creator的子類,如圖2-13所示。

圖2-13 Author是Creator的子類
RDF Schema通過這樣的方式描述不同詞匯集的元數據之間的關系,從而為網絡上統一格式的元數據交換打下基礎。下面用圖2-14說明RDFS,為了簡便,邊的標簽省略了RDF或者RDFS。知識被分為兩類,一類是數據層面的知識,例如haofen type Person (haofen是Person類的一個實例),另外一類是模式層面的知識,例如speaker domain Person(speaker屬性的定義域是Person類)。

圖2-14 RDFS示例
2.3.2 OWL和OWL2 Fragments
前面介紹了RDF和RDFS,通過RDF(S)可以表示一些簡單的語義,但在更復雜的場景下,RDF(S)語義的表達能力顯得太弱,還缺少常用的特征:
(1)對于局部值域的屬性定義。RDF(S)中通過rdfs:range定義了屬性的值域,該值域是全局性的,無法說明該屬性應用于某些具體的類時具有的特殊值域限制,如無法聲明父母至少有一個孩子。
(2)類、屬性、個體的等價性。RDF(S)中無法聲明兩個類或多個類、屬性和個體是等價還是不等價,如無法聲明Tim-Berns Lee和T.B.Lee是同一個人。
(3)不相交類的定義。在RDF(S)中只能聲明子類關系,如男人和女人都是人的子類,但無法聲明這兩個類是不相交的。
(4)基數約束。即對某屬性值可能或必需的取值范圍進行約束,如說明一個人有雙親(包括兩個人),一門課至少有一名教師等。
(5)關于屬性特性的描述。即聲明屬性的某些特性,如傳遞性、函數性、對稱性,以及聲明一個屬性是另一個屬性的逆屬性等,如大于關系的逆關系是小于關系。
為了得到一個表達能力更強的本體語言,W3C提出了OWL語言擴展RDF(S),作為在語義網上表示本體的推薦語言。W3C于2002年7月31日發布了OWL Web本體語言(OWL Web Ontology Language)工作草案的細節,是為了更好地開發語義網。
1.OWL的語言特征
如圖2-15所示,OWL1.0有OWL Lite、OWL DL、OWL Full三個子語言,三個子語言的特征和使用限制舉例如表2-4所示。

圖2-15 OWL 1.0的主要子語言
表2-4 三個子語言的特征和使用限制舉例

可以采用以下原則選擇這些語言:
●選擇OWL Lite還是OWL DL主要取決于用戶需要整個語言在多大程度上給出約束的可表達性;
●選擇OWL DL還是OWL Full主要取決于用戶在多大程度上需要RDF的元模型機制,如定義類型的類型以及為類型賦予屬性;
●當使用OWL Full而不是OWL DL時,推理的支持可能不能工作,因為目前還沒有完全支持OWL Full的系統實現。
OWL的子語言與RDF有以下關系。首先,OWL Full可以看成是RDF的擴展;其次,OWL Lite和OWL Full可以看成是一個約束化的RDF的擴展;再次,所有的OWL文檔(Lite、DL、Full)都是一個RDF文檔,所有的RDF文檔都是一個OWL Full文檔;最后,只有一些RDF文檔是一個合法的OWL Lite和OWL DL文檔。
2.OWL的重要詞匯
(1)等價性聲明。聲明兩個類、屬性和實例是等價的。如:
exp:運動員owl:equivalentClass exp:體育選手
exp:獲得owl:equivalentProperty exp:取得
exp:運動員A owl:sameIndividualAs exp:小明
以上三個三元組分別聲明了兩個類、兩個屬性以及兩個個體是等價的,exp是命名空間http://www.example.org的別稱,命名空間是唯一識別的一套名字,用來避免名字沖突,在OWL中可以是一個URL。
(2)屬性傳遞性聲明。聲明一個屬性是傳遞關系。例如,exp:ancestor rdf:type owl:TransitiveProperty指的是exp:ancestor是一個傳遞關系。如果一個屬性被聲明為傳遞,則由a exp:ancestor b和b exp:ancestor c可以推出a exp:ancestor c。例如exp:小明exp:ancestor exp:小林;exp:小林exp:ancestor exp:小志,根據上述聲明,可以推出exp:小明exp:ancestor exp:小志。
(3)屬性互逆聲明。聲明兩個屬性有互逆的關系。例如,exp:ancestor owl:inverseOf exp:descendant指的是exp:ancestor和exp:descendant是互逆的。如果exp:小明exp:ancestor exp:小林,根據上述聲明,可以推出exp:小林exp:descendant exp:小明。
(4)屬性的函數性聲明。聲明一個屬性是函數。例如,exp:hasMother rdf:type owl:FunctionalProperty指的是exp:hasMother是一個函數,即一個生物只能有一個母親。
(5)屬性的對稱性聲明。聲明一個屬性是對稱的。例如exp:friend rdf:type owl:SymmetricProperty指的是exp:friend是一個具有對稱性的屬性;如果exp:小明exp:friend exp:小林,根據上述聲明,有exp:小林exp:friend exp:小明。
(6)屬性的全稱限定聲明。聲明一個屬性是全稱限定。如:
exp:Person owl:allValuesFrom exp:Women
exp:Person owl:onProperty exp:hasMother
這個說明exp:hasMother在主語屬于exp:Person類的條件下,賓語的取值只能來自exp:Women類。
(7)屬性的存在限定聲明。聲明一個屬性是存在限定。如:
exp:SemanticWebPaper owl:someValuesFrom exp:AAAI
exp:SemanticWebPaper owl:onProperty exp:publishedIn
這個說明exp:publishedIn在主語屬于exp:SemanticWebPaper類的條件下,賓語的取值部分來自exp:AAAI類。上面的三元組相當于:關于語義網的論文部分發表在AAAI上。
(8)屬性的基數限定聲明。聲明一個屬性的基數。如:
exp:Person owl:cardinality “1”^^xsd:integer
exp:Person owl:onProperty exp:hasMother
指的是exp:hasMother在主語屬于exp:Person類的條件下,賓語的取值只能有一個,“1”的數據類型被聲明為xsd:integer,這是基數約束,本質上屬于屬性的局部約束。
(9)相交的類聲明。聲明一個類是等價于兩個類相交。如:
exp:Mother owl:intersectionOf _tmp
_tmp rdf:type rdfs:Collection
_tmp rdfs:member exp:Person
_tmp rdfs:member exp:HasChildren
指_tmp是臨時資源,它是rdfs:Collection類型,是一個容器,它的兩個成員是exp:Person和exp:HasChildren。上述三元組說明exp:Mother是exp:Person和exp:HasChildren兩個類的交集。
此外,OWL還有如表2-5所示詞匯擴展。
表2-5 OWL詞匯擴展

3.OWL版本
目前,OWL2 是OWL的最新版本,老的OWL版本也被稱為OWL1。OWL2定義了一些OWL的子語言,通過限制語法使用,使得這些子語言能夠更方便地實現,以及服務不同的應用。OWL2的三大子語言是OWL 2 RL、OWL 2 QL和OWL 2 EL。
OWL 2 QL是OWL2子語言中最為簡單的,QL代表Query Language,所以OWL 2 QL是專為基于本體的查詢設計的。它的查詢復雜度是AC0,非常適合大規模處理。它是基于描述邏輯DL-Lite定義的。表2-6給出了OWL 2 QL詞匯總結。
表2-6 OWL 2 QL詞匯總結

另外一個能夠提供多項式推理的OWL是OWL 2 EL。與OWL 2 QL不同,OWL 2 EL專為概念術語描述、本體的分類推理而設計,廣泛應用在生物醫療領域,如臨床醫療術語本體SNOMED CT。OWL 2 EL的分類復雜度是Ptime-Complete,它是基于描述邏輯語言EL++定義的。表2-7給出了OWL 2 QL詞匯總結。
表2-7 OWL 2 QL詞匯總結

例如,OWL 2 EL允許表達如下復雜的概念:
Female ? ?likes.Movie ? ?hasSon.(Student ? ?attends.CSCourse)
指的是所有喜歡電影、兒子是學生且參加計算機課程的女性。
下面給出一個例子。假設有一個本體,包含以下公理:
公理1.Apple ? ?beInvestedBy.(Fidelity ?BlackStone):蘋果由富達和黑石投資。
公理2.?beFundedBy.Fidelity ? InnovativeCompanies:借助富達融資的公司都是創新企業。
公理3.?beFundedBy.BlackStone ? InnovativeCompanies:借助黑石融資的公司都是創新企業。
公理4.beInvestedBy ? beFundedBy:投資即是幫助融資。
由公理1可以推出公理5:Apple ? ?beInvestedBy.Fidelity;由公理5和公理4可以推出公理6:Apple ? ?beFundedBy.Fidelity;最后,由公理6和公理2可以推出公理7:Apple ? InnovativeCompanies。
還有一個推理復雜度是多項式時間的OWL2子語言叫OWL 2 RL。OWL 2 RL擴展了RDFS的表達能力,在RDFS的基礎上引入屬性的特殊特性(函數性、互反性和對稱性),允許聲明等價性,允許屬性的局部約束。OWL 2 RL的推理是一種前向鏈推理,即將推理規則應用到OWL 2 RL本體,得到新的知識,即OWL 2 RL推理是針對實例數據的推理。下面給出兩個OWL 2 RL上的推理規則:
p rdfs:domain x, spo ? s rdf:type x
p rdfs:range x, spo ? o rdf:type x
其中,s、p、o、x為變量。第一條規則表示如果屬性p的定義域是類x,而且實例s和o有關系p(這里把屬性與關系看成是一樣的),那么實例s是類x的一個元素。第二條規則表示如果屬性p的值域是類x,而且實例s和o有關系p,那么實例o是類x的一個元素。例如exp:hasChild rdfs:domain exp:Person, exp:Helen exp:hasChild exp:Jack,由第一條規則可以推出exp:Helen rdf:type exp:Person。OWL 2 RL允許的核心詞匯有:
●rdfs:subClassOf;
●rdfs:subPropertyOf;
●rdfs:domain;
●rdfs:range;
●owl:TransitiveProperty;
●owl:FunctionalProperty;
●owl:sameAs;
●owl:equivalentClass;
●owl:equivalentProperty;
●owl:someValuesFrom;
●owl:allValuesFrom。
OWL 2 RL的前向鏈推理復雜度是PTIME完備的,PTIME復雜度是針對實例數據推理得到的結果。
2.3.3 知識圖譜查詢語言的表示
RDF支持類似數據庫的查詢語言,叫作SPARQL,它提供了查詢RDF數據的標準語法、處理SPARQL查詢的規則以及結果返回形式。
1.SPARQL知識圖譜查詢基本構成
●變量,RDF中的資源,以“?”或者“$”指示;
●三元組模板,在WHERE子句中列出關聯的三元組模板,之所以稱為模板,因為三元組中允許存在變量;
●SELECT子句中指示要查詢的目標變量。
下面是一個簡單的SPARQL查詢例子:

這個SPARQL查詢指的是查詢所有選修CS328課程的學生,PREFIX部分進行命名空間的聲明,使得下面查詢的書寫更為簡潔。
2.常見的SPARQL查詢算子
(1)OPTIONAL。可選算子,指的是在這個算子覆蓋范圍的查詢語句是可選的。例如:

指的是查詢所有選修CS328課程的學生姓名,以及他們的郵箱。OPTIONAL關鍵字指示如果沒有郵箱,則依然返回學生姓名,郵箱處空缺。
(2)FILTER。過濾算子,指的是這個算子覆蓋范圍的查詢語句可以用來過濾查詢結果。例如:

指的是查詢學生姓名、選修課程以及他們的年齡;如果有年齡,則年齡必須大于25歲。
(3)UNION。并算子,指的是將兩個查詢的結果合并起來。例如:

指的是查詢選修課程CS328或CS909的學生姓名以及郵件。注意,這里的郵件是必須返回的,如果沒有郵件值,則不返回這條記錄。需要注意UNION和OPTIONAL的區別。
下面給出一個SPARQL查詢的例子。給定一個RDF數據集:

以及一個SPARQL查詢:

這個SPARQL查詢期望查詢所有的收購關系,可以得到查詢結果如表2-8所示。
表2-8 查詢結果

給定論文一個SPARQL查詢:

這個查詢期望查詢所有具備關聯交易的公司。假設有下面兩條規則:
hold_share(X, Y):- control(X, Y)
conn_trans(Y,Z):- hold_share(X, Y), hold_share(X, Z)
第一條規則指的是如果X控制了Y,那么X控股Y;第二條規則指的是如果X同時控股Y和Z,那么Y和Z具備關聯交易。通過查詢重寫技術,可以得到下面的SPARQL查詢:

但是這個查詢比較復雜,可以通過下面的SPARQL查詢簡化:

在這個查詢中,SPARQL允許嵌套查詢,即WHERE子句中包含SELECT子句。
2.3.4 語義Markup表示語言
語義網進一步定義了在網頁中嵌入語義Markup的方法和表示語言。被谷歌知識圖譜以及Schema.Org采用的語義Markup語言主要包括JSON-LD、RDFa和HTML5 MicroData。
1.JSON-LD
JSON-LD(JavaScript Object Notation for Linked Data)是一種基于JSON表示和傳輸鏈接數據的方法。JSON-LD描述了如何通過JSON表示有向圖,以及如何在一個文檔中混合表示鏈接數據及非鏈接數據。JSON-LD的語法和JSON兼容。JSON-LD處理算法和API(JSON-LD Processing Algorithms and API)描述了處理JSON-LD數據所需的算法及編程接口,通過這些接口可以在JavaScript、Python及Ruby等編程環境中直接對JSON-LD文檔進行轉換和處理。
下面是一個簡單的JSON例子:

JSON文檔表示一個人。人們很容易推斷這里的含義:“name”是人的名字,“homepage”是其主頁,“image”是其某種照片。當然,機器不理解“name”和“image”這樣的術語。JSON-LD通過引入規范的術語表示,例如統一化表示“name”、“homepage”和“image”的URI,使得數據交換和機器理解成為基礎。如下所示:

可以看出,JSON-LD呈現出語義網技術的風格,它們有著類似的目標:圍繞某類知識提供共享的術語。例如,每個數據集不應該圍繞“name”重復發明概念。但是,JSON-LD的實現沒有選擇大部分語義網技術棧(TURTLE/SPARQL/Quad Stores),而是以簡單、不復雜以及面向一般開發人員的方式推進。
2.RDFa
RDFa(Resource Description Framework in attributes)是一種早期網頁語義標記語言。RDFa也是W3C推薦標準。它擴充了XHTML的幾個屬性,網頁制作者可以利用這些屬性在網頁中添加可供機器讀取的資源。與RDF的對應關系使得RDFa可以將RDF的三元組嵌入在XHTML文檔中,它也使得符合標準的使用端可以從RDFa文件中提取出這些RDF三元組。
RDFa通過引入名字空間的方法,在已有的標簽中加入RDFa相應的屬性,以便解析支持RDFa技術的瀏覽器或者搜索引擎,從而達到優化的目的。

上面的代碼示例中用到了RDFa屬性中的about屬性和property屬性。這段代碼示例說明了一篇文章,然后描述了和這篇文章相關的信息,例如標題、創建者和創建日期,就可以讓支持RDFa的機器識別這些屬性。RDFa可以從機器可理解的層面優化搜索,提升訪問體驗以及網頁數據的關聯。
3.HTML5 Microdata
Microdata(微數據)是在網頁標記語言中嵌入機器可讀的屬性數據。微數據使用自定義詞匯表、帶作用域的鍵值對給DOM做標記,用戶可以自定義微數據詞匯表,在自己的網頁中嵌入自定義的屬性。微數據是給那些已經在頁面上可見的數據施加額外的語義,當HTML的詞匯不夠用時,使用微數據可以取得較好的效果。下面是一個HTML5 Microdata的示例。

這個例子給出了Person類下一個叫Andy的人的照片和URL地址。
通過HTML5 Microdata,瀏覽器可以很方便地從網頁上提取微數據實體、屬性及屬性值。