作者為了不讓讀者一開始就接觸比較冰冷生硬的概念刻板描述(后面盡量用更具體、準確的例子來表達),通過現實生活中的例子自然的引入知識圖譜的概念。希望通過這種方式加深讀者的印象和理解。為了減輕讀者理解的負擔,作者盡可能地避免引入過多的概念和技術細節(jié),將其留到后續(xù)的文章進行介紹。
言歸正傳,本文主要分為三個部分。第一個部分介紹我們?yōu)槭裁葱枰R圖譜、知識圖譜的相關概念及其形式化表示;第二個部分將詳細介紹語義網絡、語義網和鏈接數據等概念;最后,將結合實例對RDF和RDFS/OWL,這兩種知識圖譜基礎技術作進一步的介紹。
KG的前世今生
▌一、看到的不僅僅是字符串
當你看見下面這一串文本你會聯想到什么?
Ronaldo Luís Nazário de Lima
估計絕大多數中國人不明白上面的文本代表什么意思。沒關系,我們看看它對應的中文:
羅納爾多·路易斯·納薩里奧·德·利馬
這下大部分人都知道這是一個人的名字了,當然,不出什么意外,還是個外國人。但還是有一部分人不知道這個人具體是誰。下面是關于他的某張圖片:
從這張圖片我們又得到了額外信息,他是一位足球運動員。對足球不熟悉的可能還是對他沒有什么印象。那么再看看下面這張圖片:
我再加上當初那洗腦的廣告詞:“保護嗓子,請用金嗓子喉片。廣西金嗓子!”。這下應該許多人都知道他是誰了,畢竟多年前被這洗腦的廣告語摧殘了很長一段時間。
之所以舉這樣一個例子,是因為,計算機一直面臨著這樣的困境——無法獲取網絡文本的語義信息。盡管近些年人工智能得到了長足的發(fā)展,在某些任務上取得超越人類的成績,但離一臺機器擁有一個兩三歲小孩的智力這樣一個目標還有一段距離。這距離的背后很大一部分原因是機器缺少知識。如同上面的例子,機器看到文本的反應和我們看到羅納爾多葡萄牙語原名的反應別無二致。為了讓機器能夠理解文本背后的含義,我們需要對可描述的事物(實體)進行建模,填充它的屬性,拓展它和其他事物的聯系,即,構建機器的先驗知識。就以羅納爾多這個例子說明,當我們圍繞這個實體進行相應的擴展,我們就可以得到下面這張知識圖。
機器擁有了這樣的先驗知識,當它再次看到 Ronaldo Luís Nazário de Lima,它就會“想”:“這是一個名字叫 Ronaldo Luís Nazário de Lima 的巴西足球運動員?!边@和我們人類在看到熟悉的事物,會做一些聯想和推理是很類似的。
Notice:
需要說明的是,上面的知識圖并不代表知識圖譜的實際組織形式,相反,它還會讓讀者對知識圖譜產生一定的誤解。在下一個部分,我會給出這張圖所包含內容在知識圖譜中更形式化的表示。實際上,我看到許多介紹知識圖譜的文章都喜歡給出此種類型的圖,卻又不給出相應的說明,這可能會讓讀者一開始就進入理解的誤區(qū)。
Google 為了提升搜索引擎返回的答案質量和用戶查詢的效率,于2012年5月16日發(fā)布了知識圖譜(Knowledge Graph)。有知識圖譜作為輔助,搜索引擎能夠洞察用戶查詢背后的語義信息,返回更為精準、結構化的信息,更大可能地滿足用戶的查詢需求。Google 知識圖譜的宣傳語“things not strings” 給出了知識圖譜的精髓,即,不要無意義的字符串,而是獲取字符串背后隱含的對象或事物。還是以羅納爾多為例,我們想知道羅納爾多的相關信息(很多情況下,用戶的搜索意圖可能也是模糊的,這里我們輸入的查詢?yōu)椤傲_納爾多”),在之前的版本,我們只能得到包含這個字符串的相關網頁作為返回結果,然后不得不進入某些網頁查找我們感興趣的信息;現在,除了相關網頁,搜索引擎還會返回一個“知識卡片”,包含了查詢對象的基本信息和其相關的其他對象(C羅名字簡稱也為羅納爾多,搜索引擎只是根據“羅納爾多”的指代概率返回了“肥羅”這個羅納爾多的基本資料,但也許你需要C羅的相關信息,那么搜索引擎把C羅這個實體作為備選項列出),如下圖紅色方框中的內容。如果我們只是想知道羅納爾多的國籍、年齡、婚姻狀況、子女信息,那么我們不用再做多余的操作。在最短的時間內,我們獲取了最為簡潔,最為準確的信息。
當然,這只是知識圖譜在搜索引擎上的一部分應用場景。舉這個例子也是為了表明,知識圖譜這樣一種概念、或者技術,它的誕生是符合計算機科學、互聯網發(fā)展潮流的。關于知識圖譜的更多應用,會在之后繼續(xù)給出。
▌二、知識圖譜的前世今生
通過上面這個例子,讀者應該對知識圖譜有了一個初步的印象,其本質是為了表示知識。其實知識圖譜的概念并不新,它背后的思想可以追溯到上個世紀五六十年代所提出的一種知識表示形式——語義網絡(Semantic Network)。語義網絡由相互連接的節(jié)點和邊組成,節(jié)點表示概念或者對象,邊表示他們之間的關系(is-a關系,比如:貓是一種哺乳動物;part-of 關系,比如:脊椎是哺乳動物的一部分),如下圖。在表現形式上,語義網絡和知識圖譜相似,但語義網絡更側重于描述概念與概念之間的關系,(有點像生物的層次分類體系——界門綱目科屬種),而知識圖譜則更偏重于描述實體之間的關聯。
除了語義網絡,人工智能的分支——專家系統(tǒng),萬維網之父 Tim Berners Lee于1998年提出的語義網(Semantic Web)和在2006年提出的關聯數據(Linked Data)都和知識圖譜有著千絲萬縷的關系,可以說它們是知識圖譜前身。
目前,知識圖譜并沒有一個標準的定義(gold standard definition)。我在這里借用一下“Exploiting Linked Data and Knowledge Graphs in Large Organisations”這本書對于知識圖譜的定義:
A knowledge graph consists of a set of interconnected typed entities and their attributes.
即,知識圖譜是由一些相互連接的實體和他們的屬性構成的。換句話說,知識圖譜是由一條條知識組成,每條知識表示為一個 SPO 三元組(Subject-Predicate-Object)。
在知識圖譜中,我們用 RDF 形式化地表示這種三元關系。RDF(Resource Description Framework),即資源描述框架,是W3C制定的,用于描述實體/資源的標準數據模型。RDF 圖中一共有三種類型,International Resource Identifiers(IRIs),blank nodes 和 literals。下面是 SPO 每個部分的類型約束:
Subject 可以是 IRI 或 blank node。
Predicate 是 IRI。
Object 三種類型都可以。
IRI 我們可以看做是 URI 或者 URL 的泛化和推廣,它在整個網絡或者圖中唯一定義了一個實體/資源,和我們的身份證號類似。
literal 是字面量,我們可以把它看做是帶有數據類型的純文本,比如我們在第一個部分中提到的羅納爾多原名可以表示為"Ronaldo Luís Nazário de Lima"^^xsd:string。
blank node 簡單來說就是沒有 IRI 和 literal 的資源,或者說匿名資源。關于其作用,有興趣的讀者可以參考 W3C 的文檔,這里不再贅述。我個人認為 blank node的存在有點多余,不僅會給對 RDF 的理解帶來額外的困難,并且在處理的時候也會引入一些問題。通常我更愿意用帶有 IRI 的 node 來充當 blank node,行使其功能,有點類似 freebase 中 CVT(compound value type)的概念。最后的參考資料會給出一篇寫 blank node 缺陷的博客,有興趣的讀者可以看一看。
那么“羅納爾多的中文名是羅納爾多·路易斯·納扎里奧·達·利馬”這樣一個三元組用RDF形式來表示就是:
"www.kg.com/person/1"是一個 IRI,用來唯一的表示“羅納爾多”這個實體。"kg:chineseName"也是一個 IRI,用來表示“中文名”這樣一個屬性。"kg:"是 RDF 文件中所定義的 prefix,如下所示。
@prefix kg:
即kg:chineseName 其實就是
"http://www.kg.com/ontology/chineseName" 的縮寫。
將上面的知識圖用更正式的形式畫出來:
我們其實可以認為知識圖譜就包含兩種節(jié)點類型,資源和字面量。借用數據結構中樹的概念,字面量類似葉子節(jié)點,出度為0?,F在讀者應該知道為什么我會說之前那幅圖不準確,并會誤導大家對知識圖譜的理解了吧。"羅納爾多·路易斯·納薩里奧·德·利馬"作為字面量,是不能有指向外部節(jié)點的邊的,況且之前的圖并不能直觀地體現知識圖譜中資源/實體(用IRI表示)這樣一個極其重要的概念。
▌三、總結
本文通過羅納爾多這個例子引出了知識圖譜的現實需求,繼而給出了知識圖譜的定義和相關概念,并介紹了知識圖譜的 RDF 形式化表示。作為一篇科普文章,文中省略了許多技術細節(jié)。后續(xù)我會根據語義網技術棧(Semantic Web Stack,如下圖)來介紹知識圖譜實現過程中所需要的具體技術。另外,可能會結合實踐,介紹如何利用關系型數據庫中的數據來構建一個知識圖譜,并搭建一個簡易的基于知識圖譜的問答系統(tǒng)(KBQA)。
語義網絡,語義網,鏈接數據和知識圖譜
上面提及了和知識圖譜相關的一些早期概念。為了讓讀者能夠更好地區(qū)分這些概念,以及更好地在整體上把握知識譜圖發(fā)展過程,下面將對這些概念作一個更為詳細的介紹。
▌一、語義網絡(Semantic Network)
對于初學者來講,這個概念很容易和語義網(Semantic Web)相混淆。為了行文一致,除非特別說明,語義網絡指 Semantic Network,語義網指 Semantic Web。
語義網絡是由 Quillian 于上世紀60年代提出的知識表達模式,其用相互連接的節(jié)點和邊來表示知識。節(jié)點表示對象、概念,邊表示節(jié)點之間的關系。
語義網絡的優(yōu)點:
容易理解和展示。
相關概念容易聚類。
語義網絡的缺點:
節(jié)點和邊的值沒有標準,完全是由用戶自己定義。
多源數據融合比較困難,因為沒有標準。
無法區(qū)分概念節(jié)點和對象節(jié)點。
無法對節(jié)點和邊的標簽(label,我理解是schema層,后面會介紹)進行定義。
簡而言之,語義網絡可以比較容易地讓我們理解語義和語義關系。其表達形式簡單直白,符合自然。然而,由于缺少標準,其比較難應用于實踐??催^上一篇文章的讀者可能已經發(fā)現,RDF 的提出解決了語義網絡的缺點1和缺點2,在節(jié)點和邊的取值上做了約束,制定了統(tǒng)一標準,為多源數據的融合提供了便利。另外,RDF 對 is-a關系進行了定義,即,rdf:type(是rdf標準中的一個詞匯,之后的文章會介紹)。因此,不管在哪個語義網絡中,表達 is-a關系,我們都用 rdf:type,在語法上形成了統(tǒng)一。比如上圖中貓、熊與哺乳動物的關系就可以形式化的表達為:
貓 rdf:type 哺乳動物 熊 rdf:type 哺乳動物
但還有個問題,如何區(qū)分概念和對象?即定義 Class 和 Object(也稱作Instance, Entity)。如果不能區(qū)分,會對我們產生什么影響?舉個例子,假如我們有兩個語義網絡A和B。在A中,熊是哺乳動物的一個實例。在B中,熊是哺乳動物的一個子類。前者是 is-a 關系,后者是 subClassOf 關系。這種情況常有發(fā)生,我們建模的角度不同,那么同一個事物的表示也可能不同。如果我們不能用一種方法來區(qū)別兩者,不僅會給我們帶來理解上的困難,在進行融合的時候也會造成數據沖突。我們不能說 A既是B的一個實例,又是 B的一個子類。W3C 制定的另外兩個標準 RDFS/OWL解決了這個問題,如下圖。
在語義網技術棧中,RDFS 和 OWL 是 RDF 更上一層的技術,主要是為了解決語義網絡的缺點 3和缺點 4,其提供了 schema層的描述。在后續(xù)文章中,我們將更詳細地介紹 RDF,RDFS/OWL。在這里,讀者只需要知道,通過RDFS 或者 OWL 中的預定義詞匯,我們可以形式化地聲明一個類:
哺乳動物 rdf:type rdfs:Class
或者
哺乳動物 rdf:type owl:Class
通過 RDFS 也可以聲明一個子類:
熊 rdf:type rdfs:Class熊 rdfs:subClassOf 哺乳動物
或者聲明一個實例
熊 rdf:type 哺乳動物
我們也可以把rdf:type用a代替,即:
熊 a 哺乳動物
RDF,RDFS/OWL 屬于語義網技術棧,它們的提出,使得語義網克服了語義網絡的缺點。
盡管語義網絡有這些缺點,還是有許多項目是基于語義網絡的思想建立起來的。下面列幾個比較出名和實用的項目:
WordNet。它是一個英語的詞匯庫,將英語單詞劃分為同義詞集合,用不同的語義關系將這些集合關聯起來。其在自然語言處理的中有許多應用,比如消歧、信息檢索、文本分類、文本摘要等等。
BabelNet。相對于 WordNet,BabelNet 是一個多語言的詞匯庫。它是通過自動把維基百科鏈接到 WordNet 上構建起來的,另外也用到了其他的一些詞匯資源。
HowNet,即知網,中文語義詞典。其以漢語和英語詞語所代表的概念為描述對象,構建了一個包含概念之間以及概念所具有的屬性之間的關系的常識知識庫。
▌二、語義網(Semantic Web)和鏈接數據(Linked Data)
語義網和鏈接數據是萬維網之父 Tim Berners Lee 分別在1998年和2006提出的。相對于語義網絡,語義網和鏈接數據傾向于描述萬維網中資源、數據之間的關系。其實,本質上,語義網、鏈接數據還有 Web 3.0 都是同一個概念,只是在不同的時間節(jié)點和環(huán)境中,它們各自描述的角度不同。它們都是指 W3C 制定的用于描述和關聯萬維網數據的一系列技術標準,即,語義網技術棧。
語義網是一個更官方的名稱,也是該領域學者使用得最多的一個術語,同時,也用于指代其相關的技術標準。在萬維網誕生之初,網絡上的內容只是人類可讀,而計算機無法理解和處理。比如,我們?yōu)g覽一個網頁,我們能夠輕松理解網頁上面的內容,而計算機只知道這是一個網頁。網頁里面有圖片,有鏈接,但是計算機并不知道圖片是關于什么的,也不清楚鏈接指向的頁面和當前頁面有何關系。語義網正是為了使得網絡上的數據變得機器可讀而提出的一個通用框架?!癝emantic”就是用更豐富的方式來表達數據背后的含義,讓機器能夠理解數據。“Web”則是希望這些數據相互鏈接,組成一個龐大的信息網絡,正如互聯網中相互鏈接的網頁,只不過基本單位變?yōu)榱6雀〉臄祿?,如下圖。
鏈接數據起初是用于定義如何利用語義網技術在網上發(fā)布數據,其強調在不同的數據集間創(chuàng)建鏈接。Tim Berners Lee 提出了發(fā)布數據的四個原則,并根據數據集的開放程度將其劃分為1到5星5個層次。鏈接數據也被當做是語義網技術一個更簡潔,簡單的描述。當它指語義網技術時,它更強調“Web”,弱化了“Semantic”的部分。對應到語義網技術棧,它傾向于使用 RDF 和SPARQL(RDF查詢語言)技術,對于 Schema 層的技術,RDFS 或者 OWL,則很少使用。鏈接數據應該是最接近知識圖譜的一個概念,從某種角度說,知識圖譜是對鏈接數據這個概念的進一步包裝。開放鏈接數據項目進展的可視化,也通常用來展示當前開放知識圖譜的規(guī)模,涉及的領域以及知識圖譜間的鏈接關系。
▌三、知識圖譜(Knowledge Graph)
上一篇文章中,我們用平實的語言給出了知識圖譜的定義和組織形式。用更正式的說法,知識圖譜是由本體(Ontology)作為 Schema 層,和 RDF 數據模型兼容的結構化數據集。本體本身是個哲學名詞,AI 研究人員于上個世紀70年代引入計算機領域。Tom Gruber把本體定義為“概念和關系的形式化描述”,分別指實體的類層次和關系層次。我們以上篇文章羅納爾多知識圖為例,我們用 IRI 唯一標志的節(jié)點都是某個類的一個實例,每一條邊都表示一個關系。羅納爾多是一個人,里約熱內盧是一個地點,我們用 RDF 來表示就是:
www.kg.com/person/1 rdf:type kg:Person. www.kg.com/place/10086 rdf:type kg:Place.
關系我們也稱為屬性(Property),根據是實體和實體之間的關系還是實體和數據值之間的關系分為對象屬性(Object Property)和數據屬性(Data Property)。在圖中,羅納爾多和里約熱內盧的關系(本例中是對象屬性)與羅納爾多和全名的關系(本例中是數據屬性)用 RDF 就可以表示為:
www.kg.com/person/1 kg:
hasBirthPlace www.kg.com/place/10086
www.kg.com/person/1 kg:
fullName "Ronaldo Luís Nazário de Lima"^^xsd:string
這里kg:Person,kg:Place,kg:hasBirthPlace,kg:fullName是我們在 Ontology中定義好的類和關系。
鏈接數據和知識圖譜最大的區(qū)別在于:
正如上面 Open Linked Data Project 所展示的,每一個圓圈代表一個獨立存在和維護的知識圖譜;鏈接數據更強調不同 RDF 數據集(知識圖譜)的相互鏈接。
知識圖譜不一定要鏈接到外部的知識圖譜(和企業(yè)內部數據通常也不會公開一個道理),更強調有一個本體層來定義實體的類型和實體之間的關系。另外,知識圖譜數據質量要求比較高且容易訪問,能夠提供面向終端用戶的信息服務(查詢、問答等等)。
▌四、總結
這部分介紹了和知識圖譜相關的幾個早期概念,以及他們之間的異同。在下面的內容當中,我們將會介紹語義網技術棧中比較基礎和重要的技術標準:RDF,RDFS 和 OWL。另外,會結合實踐,讓讀者學會用 protege 自頂向下地構建自己的本體結構。
知識圖譜基礎之RDF,RDFS與OWL
看到這里大家應該對 RDF 有了一個大致的認識和理解。接下來就是本次內容的最后一部分,將結合實例對 RDF 和 RDFS/OWL,這兩種知識圖譜基礎技術作進一步的介紹。其實,RDF、RDFS/OWL 是類語義網概念背后通用的基本技術,而知識圖譜是其中最廣為人知的概念。
▌一、知識圖譜的基石:RDF
RDF表現形式
RDF(Resource Description Framework),即資源描述框架,其本質是一個數據模型(Data Model)。它提供了一個統(tǒng)一的標準,用于描述實體/資源。簡單來說,就是表示事物的一種方法和手段。RDF 形式上表示為 SPO 三元組,有時候也稱為一條語句(statement),知識圖譜中我們也稱其為一條知識,如下圖。
RDF 由節(jié)點和邊組成,節(jié)點表示實體/資源、屬性,邊則表示了實體和實體之間的關系以及實體和屬性的關系。在上文中我們結合羅納爾多的例子,介紹了 RDF 節(jié)點和邊的類型約束。
RDF序列化方法
RDF 的表示形式和類型有了,那我們如何創(chuàng)建 RDF 數據集,將其序列化(Serialization)呢?換句話說,就是我們怎么存儲和傳輸 RDF 數據。目前,RDF 序列化的方式主要有:RDF/XML,N-Triples,Turtle,RDFa,JSON-LD等幾種。
RDF/XML,顧名思義,就是用 XML 的格式來表示 RDF 數據。之所以提出這個方法,是因為 XML 的技術比較成熟,有許多現成的工具來存儲和解析XML。然而,對于 RDF 來說,XML 的格式太冗長,也不便于閱讀,通常我們不會使用這種方式來處理 RDF 數據。
N-Triples,即用多個三元組來表示 RDF數 據集,是最直觀的表示方法。在文件中,每一行表示一個三元組,方便機器解析和處理。開放領域知識圖譜DBpedia 通常是用這種格式來發(fā)布數據的。
Turtle, 應該是使用得最多的一種 RDF 序列化方式了。它比 RDF/XML 緊湊,且可讀性比 N-Triples好。
RDFa, 即“The Resource Description Framework in Attributes”,是HTML5 的一個擴展,在不改變任何顯示效果的情況下,讓網站構建者能夠在頁面中標記實體,像人物、地點、時間、評論等等。也就是說,將 RDF 數據嵌入到網頁中,搜索引擎能夠更好的解析非結構化頁面,獲取一些有用的結構化信息。讀者可以去感受一下 RDFa,其直觀展示了普通用戶看到的頁面,瀏覽器看到的頁面和搜索引擎解析出來的結構化信息。
JSON-LD,即“JSON for Linking Data”,用鍵值對的方式來存儲 RDF 數據。
下面,我們結合上文中羅納爾多知識圖的例子,給出其 N-Triples 和 Turtle 的具體表示。
Example1N-Triples:
用 Turtle 表示的時候我們會加上前綴(Prefix)對 RDF 的 IRI 進行縮寫。
Example2Turtle:@prefixperson:
同一個實體擁有多個屬性(數據屬性)或關系(對象屬性),我們可以只用一個 subject 來表示,使其更緊湊。我們可以將上面的 Turtle 改為:
Example3Turtle:@prefixperson:
即,將一個實體用一個句子表示(這里的句子指的是一個英文句號“.”)而不是多個句子,屬性間用分號隔開。
RDF的表達能力
在第二部分中我們提到,RDF 的表達能力有限,無法區(qū)分類和對象,也無法定義和描述類的關系/屬性。我的理解是,RDF 是對具體事物的描述,缺乏抽象能力,無法對同一個類別的事物進行定義和描述。就以羅納爾多這個知識圖為例,RDF 能夠表達羅納爾多和里約熱內盧這兩個實體具有哪些屬性,以及它們之間的關系。但如果我們想定義羅納爾多是人,里約熱內盧是地點,并且人具有哪些屬性,地點具有哪些屬性,人和地點之間存在哪些關系,這個時候 RDF 就表示無能為力了。不論是在智能的概念上,還是在現實的應用當中,這種泛化抽象能力都是相當重要的;同時,這也是知識圖譜本身十分強調的。RDFS 和 OWL 這兩種技術或者說模式語言/本體語言(schema/ontology language)解決了 RDF 表達能力有限的困境。
▌二、RDF的“衣服”——RDFS/OWL
之所以說 RDFS/OWL 是 RDF 的“衣服”,因為它們都是用來描述 RDF 數據的。為了不顯得這么抽象,我們可以用關系數據庫中的概念進行類比。用過Mysql 的讀者應該知道,其 database 也被稱作 schema。這個 schema 和我們這里提到的 schema language 十分類似。我們可以認為數據庫中的每一張表都是一個類(Class),表中的每一行都是該類的一個實例或者對象(學過java等面向對象的編程語言的讀者很容易理解)。表中的每一列就是這個類所包含的屬性。如果我們是在數據庫中來表示人和地點這兩個類別,那么為他們分別建一張表就行了;再用另外一張表來表示人和地點之間的關系。RDFS/OWL 本質上是一些預定義詞匯(vocabulary)構成的集合,用于對 RDF 進行類似的類定義及其屬性的定義。
Notice:
RDFS/OWL 序列化方式和 RDF 沒什么不同,其實在表現形式上,它們就是RDF。其常用的方式主要是 RDF/XML,Turtle。另外,通常我們用小寫開頭的單詞或詞組來表示屬性,大寫開頭的表示類。數據屬性(data property,實體和literal字面量的關系)通常由名詞組成,而對象數據(object property,實體和實體之間的關系)通常由動詞(has,is之類的)加名詞組成。剩下的部分符合駝峰命名法。為了將它們表示得更清楚,避免讀者混淆,之后我們都會默認這種命名方式。讀者實踐過程中命名方式沒有強制要求,但最好保持一致。
輕量級的模式語言——RDFS
RDFS,即“Resource Description Framework Schema”,是最基礎的模式語言。還是以羅納爾多知識圖為例,我們在概念、抽象層面對 RDF數據進行定義。下面的 RDFS 定義了人和地點這兩個類,及每個類包含的屬性。
@prefixrdfs:
我們這里只介紹 RDFS 幾個比較重要,常用的詞匯:
rdfs:Class. 用于定義類。
rdfs:domain. 用于表示該屬性屬于哪個類別。
rdfs:range. 用于描述該屬性的取值類型。
rdfs:subClassOf. 用于描述該類的父類。比如,我們可以定義一個運動員類,聲明該類是人的子類。
rdfs:subProperty. 用于描述該屬性的父屬性。比如,我們可以定義一個名稱屬性,聲明中文名稱和全名是名稱的子類。
其實 rdf:Property和rdf:type 也是 RDFS 的詞匯,因為 RDFS 本質上就是RDF 詞匯的一個擴展。我們在這里不羅列進去,是不希望讀者混淆。RDFS其他的詞匯及其用法請參考W3C 官方文檔。
為了讓讀者更直觀地理解 RDF 和 RDFS/OWL 在知識圖譜中所代表的層面,我們用下面的圖來表示例子中的數據層和模式層。
Data 層是我們用RDF對羅納爾多知識圖的具體描述,Vocabulary 是我們自己定義的一些詞匯(類別,屬性),RDF(S) 則是預定義詞匯。從下到上是一個具體到抽象的過程。圖中我們用紅色圓角矩形表示類,綠色字體表示rdf:type,rdfs:domain,rdfs:range 三種預定義詞匯,虛線表示 rdf:type這種所屬關系。另外,為了減少圖中連線的交叉,我們只保留了 career 這一個屬性的 rdf:type 所屬關系,省略了其他屬性的此關系。
RDFS的擴展——OWL
上面我們提到,RDFS 本質上是RDF詞匯的一個擴展。后來人們發(fā)現 RDFS 的表達能力還是相當有限,因此提出了 OWL。我們也可以把 OWL 當做是RDFS 的一個擴展,其添加了額外的預定義詞匯。
OWL,即“Web Ontology Language”,語義網技術棧的核心之一。OWL 有兩個主要的功能:
提供快速、靈活的數據建模能力。
高效的自動推理。
我們先談如何利用 OWL 進行數據建模。用 OWL 對羅納爾多知識圖進行語義層的描述:
@prefixrdfs:
schema 層的描述語言換為 OWL 后,層次圖表示為:
數據屬性用青色表示,對象屬性由藍色表示。
羅納爾多這個例子不能展現 OWL 豐富的表達能力,我們這里簡單介紹一下常用的詞匯:
描述屬性特征的詞匯
owl:TransitiveProperty. 表示該屬性具有傳遞性質。例如,我們定義“位于”是具有傳遞性的屬性,若A位于B,B位于C,那么A肯定位于C。
owl:SymmetricProperty. 表示該屬性具有對稱性。例如,我們定義“認識”是具有對稱性的屬性,若A認識B,那么B肯定認識A。
owl:FunctionalProperty. 表示該屬性取值的唯一性。 例如,我們定義“母親”是具有唯一性的屬性,若A的母親是B,在其他地方我們得知A的母親是C,那么B和C指的是同一個人。
owl:inverseOf. 定義某個屬性的相反關系。例如,定義“父母”的相反關系是“子女”,若A是B的父母,那么B肯定是A的子女。
本體映射詞匯(Ontology Mapping)
owl:equivalentClass. 表示某個類和另一個類是相同的。
owl:equivalentProperty. 表示某個屬性和另一個屬性是相同的。
owl:sameAs. 表示兩個實體是同一個實體。
本體映射主要用在融合多個獨立的 Ontology(Schema)。舉個例子,張三自己構建了一個本體結構,其中定義了 Person 這樣一個類來表示人;李四則在自己構建的本體中定義 Human 這個類來表示人。當我們融合這兩個本體的時候,就可以用到 OWL 的本體映射詞匯?;叵胛覀冊诘诙恼轮刑岬降?Linked Open Data,如果沒有 OWL,我們將無法融合這些知識圖譜。
更多的OWL詞匯和特性請參考
[W3C官網文檔] (OWL Web Ontology Language Overview)
https://www.w3.org/TR/2004/REC-owl-features-20040210/
接下來我們談一下 OWL 在推理方面的能力。知識圖譜的推理主要分為兩類:基于本體的推理和基于規(guī)則的推理。
我們這里談的是基于本體的推理。讀者應該發(fā)現,上面所介紹的屬性特征詞匯其實就創(chuàng)造了對 RDF 數據進行推理的前提。此時,我們加入支持 OWL 推理的推理機(reasoner),就能夠執(zhí)行基于本體的推理了。RDFS 同樣支持推理,由于缺乏豐富的表達能力,推理能力也不強。舉個例子,我們用 RDFS 定義人和動物兩個類,另外,定義人是動物的一個子類。此時推理機能夠推斷出一個實體若是人,那么它也是動物。OWL 當然支持這種基本的推理,除此之外,憑借其強大的表達能力,我們能進行更有實際意義的推理。想象一個場景,我們有一個龐大數據庫存儲人物的親屬關系。里面很多關系都是單向的,比如,其只保存了A的父親(母親)是B,但B的子女字段里面沒有A,如下表。
如果在只有單個關系,數據量不多的情況下,我們尚能人工的去補全這種關系。如果在關系種類上百,人物上億的情況下,我們如何處理?當進行關系修改,添加,刪除等操作的時候,該怎么處理?這種場景想想就會讓人崩潰。如果我們用 inversOf 來表示 hasParent 和 hasChild 互為逆關系,上面的數據可以表示為:
綠色的關系表示是我們 RDF 數據中真實存在的,紅色的關系是推理得到的。通過這個例子,相信讀者應該初步了解了 OWL 的推理功能和能力。
目前,OWL 的最新版本是 OWL 2,在兼容 OWL 的基礎上添加了新的功能,有興趣的讀者可以查閱W3C文檔。另外,OWL2 包含了三個標準,或者三種配置(Profile),它們是 OWL2 完整標準(OWL 2/Full)的一個子集。讀者目前不用考慮它們之間的差別,只有當我們要用到 OWL 自動推理功能的時候才需要考慮到底使用哪一種配置。且在大多數情況下,我們需要知道哪種配置才是最合適的。下面簡單說說它們使用的場景:
OWL 2/EL 使用場景:本體結構中有大量相互鏈接的類和屬性,設計者想用自動推理機得到里面復雜的關系。
OWL 2/QL 使用場景:有大量的實例數據。OWL 2 QL 本體可以被改寫為SQL 查詢,適用于使用 OBDA(ontology based data access)的方式來訪問關系數據庫。也就是說我們不用顯式地把關系數據庫中的數據轉為RDF,而是通過映射的方式,將數據庫轉為虛擬 RDF 圖進行訪問。
OWL 2/RL 使用場景:需要結合基于規(guī)則的推理引擎(rule-based reasoning engine)的場合。
▌三、總結
本部分主要介紹了 RDF 的序列化方式,如何利用 RDFS/OWL 進行 schema層的建模,和 OWL 的推理功能。
-
RDF
+關注
關注
0文章
10瀏覽量
7747 -
知識圖譜
+關注
關注
2瀏覽量
7683
原文標題:知識圖譜系列 | 知識圖譜的前世今生與RDF的實踐
文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論