Q:語義網和知識圖譜有區別嗎?如果有,區別何在?
當下關於知識圖譜的討論越來越熱烈,但是經常聽到有人用“語義網”來代替“知識圖譜”,或者說認為知識圖譜本質上就是語義網。這種想法不無道理,我也聚德這兩者很大程度上是相通的,甚至知識圖譜本來本就脫胎於語義網(Google收購Freebase改造后推出Google Knowledge Graph)。然而,我個人認為語義網和知識圖譜還是有區別的。
首先從兩者的源流來看。
語義網是Tim Berners Lee 在1998年提出來的概念。他本人在當年W3C的《Semantic Web Road map》里面對語義網的描述是:
Machine-Understandable information: Semantic Web
The Semantic Web is a web of data, in some ways like a global database.
他的理想和1990年提出Word Wide Web的時候並沒有大不同,都是整合全球的信息,讓每個人都能觸達每一份信息。差別是1998年的時候World Wide Web 本質是是一個全球文件系統 (global file system),因為web上的內容絕大多數都是HTML文件,以及少量的PDF、視頻、音頻之類的多媒體文件。他希望更進一步,把web變成一個全球數據庫 (global database)。這樣一來不僅每個人能得到每一份信息,而且機器也能處理這些信息(即便在今天,機器處理文本信息都是的能力都還是不如處理數據庫中結構化信息的能力)。
知識圖譜是Google在2012年提出來的概念。Google的做法是在自家建立了一個大型的圖數據系統,把自己的信息組織成一個圖譜。有了這個圖數據系統,Google在搜索上的能力上升了一個台階,最起碼多了一道新的程序,而且和原本基於向量空間模型的方案很不同。有了知識圖譜后,Google不僅僅能返回信息量大但密度低文檔,還能返回信息量小但密度高的知識卡片。
我認為語義網和知識圖譜,兩者的最初的動機是不一樣的。一個是開放的、共享的、全球的數據庫,另一個是封閉的、排外的、自家的數據庫(雖說Google的數據也是全球范圍的)。目標的不同會導致方法的不同。
語義網使用的數據模型RDF和W3C制定的語義網技術棧就是圍繞其開放性、共享性、全球性等特點設計的。1998年時數據庫采用的主流的數據模型是關系數據模型(現在也是)。但是關系數據庫的一個缺點是需要事前定義好schema,也可以認為是表結構和表關系。這就帶來幾個問題,最大的問題是改動起來很麻煩,當數據量極大的時候成本會很高。所以語義網采用的數據模型是RDF。RDF最初其實不是數據模型,而是一種數據交換格式,由Ramanathan V. Guha在蘋果公司開發,最初名叫Meta Content Framework,后來改進成Resource Description Framework。用RDF對數據建模,不需要事先定義schema,所以也有人把RDF稱作schemaless的建模語言。RDF本質上也是對實體和關系建模,首先用Unicode將數據(實體entity、關系predicate和字面量literal)編碼,然后用URI唯一標識實體和關系。這樣一來,一個RDF數據模型也成了一個圖數據模型,各種實體通過關系鏈接在一起,實體又有自己屬性(字面量),形成了一個網。為什么使用URI來標識?我認為這是因為語義網上的數據應該像文檔一樣能被訪問,而文檔就是通過URI訪問的,於是這個傳統就被應用到語義網上了。至於為什么文檔用URI標識,Tim Berners Lee的原話是:
A Uniform Resource Identifier (URI) provides a simple and extensible means for identifying a resource
更多URI的好處可以查看相應的RFC文檔
知識圖譜呢?一說起知識圖譜,人們想起的應該不是一個開放共享的全球數據庫,而是一個自有的圖數據系統,就好像自家的關系數據庫一樣。Google的知識圖譜就是一個私有的圖數據系統。互聯網是全體使用,全體維護的(W3C之類的也是公共組織),但是Google的知識圖譜是一個自家使用,自家維護的數據庫。既然是自家經營、自負盈虧,而且規模也沒有全球數據庫那么大、功能上也不要求全世界的人自由編輯,那就可以怎么容易怎么來。想一下互聯網和自家的文件系統。我們自己的文件系統可不是網狀的而是樹狀的,標識用的是文件名而不是URI。當然我們可以把文檔轉化成HTML文檔,把個文檔連城一個網,然后放在服務器上,那么網上其他人就可以通過URI訪問了。而且現在我們也不是把文檔直接放在服務器目錄下,而是放進數據庫,需要時用后台程序從該數據庫中把相應內容調出來,加上HTML模板渲染成一個HTML文檔,然后發到客戶端去。
所以現在工業界做知識圖譜,做的都是像Google那樣自家的數據庫,底層可以用的是關系數據庫,或者改造后的關系數據庫,如postgresql,配合一些nosql的數據庫。對於數據模型,目前業界采用的主流圖數據模型是LPG(Labeled Property Graph)。其標准是Apache的TinkerPop。至於LPG和RDF的優劣勢對比,這是一篇典型的文章,作者是Neo4j的開發者。雖然里面一些觀點我很不同意,但作為思考的起點還是不錯的。(PS:本人不在工業界,本段觀點純屬道聽途說。)
經過以上對比,我認為語義網和知識圖譜不是一個東西,他們的目標和使用的技術都不一樣。但既然有人把它們混在一起說,那就說明這兩個東西還是很像的。事實上也確實如此,它們本質上都是圖數據模型,應該都可以做(至少大部分)相同的事情。而且兩者之間轉換起來也很簡單。Google的知識圖譜就是從Freebase導入的,Freebase就是一個語義網項目,使用了RDF模型、用URI標識數據、能用SPARQL查詢數據、還定義了自己的本體結構。而現行的圖數據庫,要把數據導出成RDF也不難,Neo4j就支持直接導出RDF數據。
如今語義網和知識圖譜都很繁榮,應該都是前景不錯的研究和產業方向。
本作品首發於簡書 和 博客園平台,采用知識共享署名 4.0 國際許可協議進行許可。