原文連接:https://zhuanlan.zhihu.com/p/31726910node
標題的命名順序可能讓有的讀者不太習慣。一般在介紹一個陌生事物的應用前,咱們會給出其定義。之因此換個順序,是爲了避免讓讀者一開始就接觸比較冰冷生硬的概念刻板描述(後面我儘可能用更具體、準確的例子來表達),另外一方面也是爲了經過現實生活中的例子天然的引入知識圖譜的概念。但願經過這種方式加深讀者的印象和理解。爲了減輕讀者理解的負擔,我儘量地避免引入過多的概念和技術細節,將其留到後續的文章進行介紹。數據庫
言歸正傳,本文主要分爲三個部分。第一個部分介紹咱們爲何須要知識圖譜,第二個部分介紹知識圖譜的相關概念及其形式化表示。最後,做一個簡單的總結,並介紹該專欄後續文章會涉及的內容。微信
1、看到的不只僅是字符串
當你看見下面這一串文本你會聯想到什麼?網絡
Ronaldo Luís Nazário de Lima數據結構
估計絕大多數中國人不明白上面的文本表明什麼意思。不要緊,咱們看看它對應的中文:框架
羅納爾多·路易斯·納薩里奧·德·利馬搜索引擎
這下大部分人都知道這是一我的的名字了,固然,不出什麼意外,仍是個外國人。但仍是有一部分人不知道這我的具體是誰。下面是關於他的某張圖片:人工智能
從這張圖片咱們又獲得了額外信息,他是一位足球運動員。對足球不熟悉的可能仍是對他沒有什麼印象。那麼再看看下面這張圖片:spa
我再加上當初那洗腦的廣告詞:「保護嗓子,請用金嗓子喉片。廣西金嗓子!」。這下應該許多人都知道他是誰了,畢竟多年前被這洗腦的廣告語摧殘了很長一段時間。.net
之因此舉這樣一個例子,是由於,計算機一直面臨着這樣的困境——沒法獲取網絡文本的語義信息。儘管近些年人工智能獲得了長足的發展,在某些任務上取得超越人類的成績,但離一臺機器擁有一個兩三歲小孩的智力這樣一個目標還有一段距離。這距離的背後很大一部分緣由是機器缺乏知識。如同上面的例子,機器看到文本的反應和咱們看到羅納爾多葡萄牙語原名的反應別無二致。爲了讓機器可以理解文本背後的含義,咱們須要對可描述的事物(實體)進行建模,填充它的屬性,拓展它和其餘事物的聯繫,即,構建機器的先驗知識。就以羅納爾多這個例子說明,當咱們圍繞這個實體進行相應的擴展,咱們就能夠獲得下面這張知識圖。
機器擁有了這樣的先驗知識,當它再次看到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羅這個實體做爲備選項列出),以下圖紅色方框中的內容。若是咱們只是想知道羅納爾多的國籍、年齡、婚姻情況、子女信息,那麼咱們不用再作多餘的操做。在最短的時間內,咱們獲取了最爲簡潔,最爲準確的信息。
固然,這只是知識圖譜在搜索引擎上的一部分應用場景。舉這個例子也是爲了代表,知識圖譜這樣一種概念、或者技術,它的誕生是符合計算機科學、互聯網發展潮流的。關於知識圖譜的更多應用,會在以後的另外一篇文章中給出。
2、知識圖譜的前世此生
經過上面這個例子,讀者應該對知識圖譜有了一個初步的印象,其本質是爲了表示知識。其實知識圖譜的概念並不新,它背後的思想能夠追溯到上個世紀五六十年代所提出的一種知識表示形式——語義網絡(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每一個部分的類型約束:
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: <http://www.kg.com/ontology/>
即,kg:chineseName其實就是"http:// www.kg.com/ontology/chineseName"的縮寫。
將上面的知識圖用更正式的形式畫出來:
咱們其實能夠認爲知識圖譜就包含兩種節點類型,資源和字面量。借用數據結構中樹的概念,字面量相似葉子節點,出度爲0。如今讀者應該知道爲何我會說以前那幅圖不許確,並會誤導你們對知識圖譜的理解了吧。"羅納爾多·路易斯·納薩里奧·德·利馬"做爲字面量,是不能有指向外部節點的邊的,何況以前的圖並不能直觀地體現知識圖譜中資源/實體(用IRI表示)這樣一個極其重要的概念。
3、總結
本文經過羅納爾多這個例子引出了知識圖譜的現實需求,繼而給出了知識圖譜的定義和相關概念,並介紹了知識圖譜的RDF形式化表示。做爲一篇科普文章,文中省略了許多技術細節。後續我會根據語義網技術棧(Semantic Web Stack,以下圖)來介紹知識圖譜實現過程當中所須要的具體技術。另外,可能會結合實踐,介紹如何利用關係型數據庫中的數據來構建一個知識圖譜,並搭建一個簡易的基於知識圖譜的問答系統(KBQA)。
W3C: RDF 1.1 Concepts and Abstract Syntax
Exploiting Linked Data and Knowledge Graphs in Large Organisations
Google: Introducing the Knowledge Graph: things, not strings
Blog:Problems of the RDF model: Blank Nodes
Blog:Compound Value Types in RDF
Chen, L., Zhang, H., Chen, Y., & Guo, W. (2012). Blank nodes in rdf. Journal of Software, 7(9).
本文分享自微信公衆號 - R語言和Python學堂(gh_02c4f77a735e)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。