1. 程式人生 > >為什麼需要知識圖譜?什麼是知識圖譜?

為什麼需要知識圖譜?什麼是知識圖譜?

為什麼需要知識圖譜?什麼是知識圖譜?——KG的前世今生

SimmerChan

SimmerChan

研究僧/長途騎行/自然語言處理(KG)

211 人讚了該文章

標題的命名順序可能讓有的讀者不太習慣。通常在介紹一個陌生事物的應用前,我們會給出其定義。之所以換個順序,是為了不讓讀者一開始就接觸比較冰冷生硬的概念刻板描述(後面我儘量用更具體、準確的例子來表達),另一方面也是為了通過現實生活中的例子自然的引入知識圖譜的概念。希望通過這種方式加深讀者的印象和理解。為了減輕讀者理解的負擔,我儘可能地避免引入過多的概念和技術細節,將其留到後續的文章進行介紹。

言歸正傳,本文主要分為三個部分。第一個部分介紹我們為什麼需要知識圖譜,第二個部分介紹知識圖譜的相關概念及其形式化表示。最後,作一個簡單的總結,並介紹該專欄後續文章會涉及的內容。

 

一、看到的不僅僅是字串

當你看見下面這一串文字你會聯想到什麼?

Ronaldo Luís Nazário de Lima

估計絕大多數中國人不明白上面的文字代表什麼意思。沒關係,我們看看它對應的中文:

羅納爾多·路易斯·納薩里奧·德·利馬

這下大部分人都知道這是一個人的名字了,當然,不出什麼意外,還是個外國人。但還是有一部分人不知道這個人具體是誰。下面是關於他的某張圖片:

從這張圖片我們又得到了額外資訊,他是一位足球運動員。對足球不熟悉的可能還是對他沒有什麼印象。那麼再看看下面這張圖片:

我再加上當初那洗腦的廣告詞:“保護嗓子,請用金嗓子喉片。 廣西金嗓子!”。這下應該許多人都知道他是誰了,畢竟多年前被這洗腦的廣告語摧殘了很長一段時間。

之所以舉這樣一個例子,是因為,計算機一直面臨著這樣的困境——無法獲取網路文字的語義資訊。儘管近些年人工智慧得到了長足的發展,在某些任務上取得超越人類的成績,但離一臺機器擁有一個兩三歲小孩的智力這樣一個目標還有一段距離。這距離的背後很大一部分原因是機器缺少知識。如同上面的例子,機器看到文字的反應和我們看到羅納爾多葡萄牙語原名的反應別無二致。為了讓機器能夠理解文字背後的含義,我們需要對可描述的事物(實體)進行建模,填充它的屬性,拓展它和其他事物的聯絡,即,構建機器的先驗知識。就以羅納爾多這個例子說明,當我們圍繞這個實體進行相應的擴充套件,我們就可以得到下面這張知識圖。

機器擁有了這樣的先驗知識,當它再次看到Ronaldo Luís Nazário de Lima,它就會“想”:“這是一個名字叫Ronaldo Luís Nazário de Lima的巴西足球運動員。”這和我們人類在看到熟悉的事物,會做一些聯想和推理是很類似的。


Notice: 需要說明的是,上面的知識圖並不代表知識圖譜的實際組織形式,相反,它還會讓讀者對知識圖譜產生一定的誤解。在下一個部分,我會給出這張圖所包含內容在知識圖譜中更形式化的表示。實際上,我看到許多介紹知識圖譜的文章都喜歡給出此種類型的圖,卻又不給出相應的說明,這可能會讓讀者一開始就進入理解的誤區。


Google為了提升搜尋引擎返回的答案質量和使用者查詢的效率,於2012年5月16日釋出了知識圖譜(Knowledge Graph)。有知識圖譜作為輔助,搜尋引擎能夠洞察使用者查詢背後的語義資訊,返回更為精準、結構化的資訊,更大可能地滿足使用者的查詢需求。Google知識圖譜的宣傳語“things not strings”給出了知識圖譜的精髓,即,不要無意義的字串,而是獲取字串背後隱含的物件或事物。還是以羅納爾多為例,我們想知道羅納爾多的相關資訊(很多情況下,使用者的搜尋意圖可能也是模糊的,這裡我們輸入的查詢為“羅納爾多”),在之前的版本,我們只能得到包含這個字串的相關網頁作為返回結果,然後不得不進入某些網頁查詢我們感興趣的資訊;現在,除了相關網頁,搜尋引擎還會返回一個“知識卡片”,包含了查詢物件的基本資訊和其相關的其他物件(C羅名字簡稱也為羅納爾多,搜尋引擎只是根據“羅納爾多”的指代概率返回了“肥羅”這個羅納爾多的基本資料,但也許你需要C羅的相關資訊,那麼搜尋引擎把C羅這個實體作為備選項列出),如下圖紅色方框中的內容。如果我們只是想知道羅納爾多的國籍、年齡、婚姻狀況、子女資訊,那麼我們不用再做多餘的操作。在最短的時間內,我們獲取了最為簡潔,最為準確的資訊。

當然,這只是知識圖譜在搜尋引擎上的一部分應用場景。舉這個例子也是為了表明,知識圖譜這樣一種概念、或者技術,它的誕生是符合電腦科學、網際網路發展潮流的。關於知識圖譜的更多應用,會在之後的另一篇文章中給出。

二、知識圖譜的前世今生

通過上面這個例子,讀者應該對知識圖譜有了一個初步的印象,其本質是為了表示知識。其實知識圖譜的概念並不新,它背後的思想可以追溯到上個世紀五六十年代所提出的一種知識表示形式——語義網路(Semantic Network)。語義網路由相互連線的節點和邊組成,節點表示概念或者物件,邊表示他們之間的關係(is-a關係,比如:貓是一種哺乳動物;part-of關係,比如:脊椎是哺乳動物的一部分),如下圖。在表現形式上,語義網路和知識圖譜相似,但語義網路更側重於描述概念與概念之間的關係,(有點像生物的層次分類體系——界門綱目科屬種),而知識圖譜則更偏重於描述實體之間的關聯。

除了語義網路,人工智慧的分支——專家系統,全球資訊網之父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每個部分的型別約束:

  1. Subject可以是IRI或blank node。
  2. Predicate是IRI。
  3. 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: < http:// www.kg.com/ontology/>

即,kg:chineseName其實就是"http:// www.kg.com/ontology/chineseName"的縮寫。

將上面的知識圖用更正式的形式畫出來:

我們其實可以認為知識圖譜就包含兩種節點型別,資源和字面量。借用資料結構中樹的概念,字面量類似葉子節點,出度為0。現在讀者應該知道為什麼我會說之前那幅圖不準確,並會誤導大家對知識圖譜的理解了吧。"羅納爾多·路易斯·納薩里奧·德·利馬"作為字面量,是不能有指向外部節點的邊的,況且之前的圖並不能直觀地體現知識圖譜中資源/實體(用IRI表示)這樣一個極其重要的概念。

三、總結

本文通過羅納爾多這個例子引出了知識圖譜的現實需求,繼而給出了知識圖譜的定義和相關概念,並介紹了知識圖譜的RDF形式化表示。作為一篇科普文章,文中省略了許多技術細節。後續我會根據語義網技術棧(Semantic Web Stack,如下圖)來介紹知識圖譜實現過程中所需要的具體技術。另外,可能會結合實踐,介紹如何利用關係型資料庫中的資料來構建一個知識圖譜,並搭建一個簡易的基於知識圖譜的問答系統(KBQA)。

  1. W3C: RDF 1.1 Concepts and Abstract Syntax
  2. Exploiting Linked Data and Knowledge Graphs in Large Organisations
  3. Google: Introducing the Knowledge Graph: things, not strings
  4. Blog:Problems of the RDF model: Blank Nodes
  5. Blog:Compound Value Types in RDF
  6. Chen, L., Zhang, H., Chen, Y., & Guo, W. (2012). Blank nodes in rdf. Journal of Software, 7(9).

編輯於 2017-12-05