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