從語義網到知識圖譜——語義技術工程化的回顧與反思

本文根據鮑捷在雲知聲的演講稿整理

感謝Leona對演講錄音的記錄和整理

發佈於2016年3月11日

知識圖譜的皮相

知識管理這個領域,有個分支叫語義網,這兩年就改了名字叫知識圖譜。知識圖譜其實有狹義的和廣義的區別。這裡講的是狹義的知識圖譜。我覺得華東理工大學的王昊奮教授定義得挺好,抄在這裡:知識圖譜旨在描述真實世界中存在的各種實體或概念。其中,每個實體或概念用一個全局唯一確定的ID來標識,稱為它們的標識符。每個屬性-值對用來刻畫實體的內在特性,而關係用來連接兩個實體,刻畫它們之間的關聯。

但我覺得,當我們在工程上去講這個事情的時候,並不需要太拘泥於知識圖譜到底是什麼。有人問我說是否必須要用RDF(資源描述框架)才是知識圖譜?或者說是不是必須用Neo4j圖資料庫才是知識圖譜?其實不是。以前我們領域裡有一個語義網研究論壇,叫XML論壇,劉昇平(雲知聲語義技術負責人)以前在那是老版主。2002、03年的時候,有人在上面問Jena怎麼解析RDF。前兩天,我偶然看到王叢(文因互聯首席知識官)的語義網QQ群,裡面有人還在問十幾年前同樣的問題。大家還是著了那個皮相,我要做知識圖譜,我要做語義網,那麼我就要用RDF,我用了RDF就解決問題了。不是這樣。關鍵是,它的本質是什麼?不在於你具體用了哪一種Syntax,哪一種數據存儲的資料庫。

從語義網路到描述邏輯

知識圖譜的前身早在上世紀六十年代就出現了,演進過程中經歷了很多節點,才有了今天。這個過程遵循著一個趨勢分成了幾步,具體有很多東西我就不提了。最早的六十年代末就有了,叫Frame Network,又叫Semantic Network,什麼樣子呢,就這個樣子:節點—關係—屬性。這個東西是什麼?就是知識圖譜嗎。

看到這個東西的時候,邏輯學家一般會說,這玩意兒沒法做推理嘛!然後大家就想,怎麼去自動化這個推理的過程,然後就把它變成各種奇怪的東西。就從語義網路變成了Description Logic(描述邏輯)。六七十年代的時候,大家想了這東西不能做推理。First-order logic(一階邏輯),在Frege(弗雷格)、Russell(羅素)那個時代,也就是在二十世紀初就已經搞得很完備了,這個一階邏輯已經被玩壞了。但後來大家發現這東西不能完備推理,很多東西是不可判定的。

當時學者的思路,就是不去考慮成本,他考慮的就是soundness and completeness (正確性和完備性)。就是說:我能做任何一個可推理出來的結果,我一定要能夠推理出來;所有我能推理出來的結果,一定要是正確的。那麼當他發現一個邏輯做不到這一點的時候,他的心裏面是百爪撓心。他想的就是soundness and completeness,對應到機器學習裡面就是precision and recall(準確率和招回率)。

怎麼能夠達到最好的狀態呢,後來發現了這麼一個東西,叫做描述邏輯。當這個新概念出來的時候,很多人也是對它很迷信,就好像現在的深度學習一樣。就感覺這玩意兒一出來什麼問題都解決了。甚至曾經有人問我,描述邏輯能不能通過圖靈測試。當時大家的期望那麼高,然而過了幾年,果不其然,大家都失望了,再也沒有人理它。

Web本體語言

有了這個東西以後,各種非常美妙的數學性質被證明了,就有人想怎麼去應用這個東西。特別是九十年代末的時候,Web已經很好了,大家就想怎麼把這個東西和Web結合在一起。

Tim Berners-Lee(蒂姆·伯納斯-李),我在MIT的老闆,Web的發明人,一直有一個宏偉的理念。他在八十年代初,比在座的大多數人都還年輕的時候,就說過要把知識都關聯起來。

1980年,他寫了一個系統,沒人用。

1989年,他寫了個proposal(項目申請),沒人理。

1991年,他終於把Web寫出來了,沒人在乎。

等到1994年,大家終於認識到了Web的重要性。實際上,你去看他89年寫的Web的第一個申請書,那裡面寫的東西就是語義網,但是一直沒有實現。即便他後來的人生已經如此成功,但對自己的追求仍然念念不忘。所以他找到我在RPI的老闆,Jim Hendler(當時在馬里蘭大學)說咱們一起幹嘛!後來Jim Hendler第一個(語義網方向的)學生做出了SHOE這個語言,語義網的第一個語言,具體的Syntax大家不用太糾結,總之就是用HTML來寫邏輯,可以想像到是多麼奇怪。當時是第一個實驗,後來就不斷的演化。因為當時的英國和美國,主要是國防部門被這玩意兒忽悠得很厲害。

Agent這個技術有誰聽過?當時就是主要忽悠這玩意兒。DAML它有個A嘛,就是DARPA Agent Markup Language,這玩意兒忽悠,最後忽悠得(應用上)不成功。後來他們(學術界)忽悠了另外一個東西,CALO計劃,Cognitive Assistant,其實也就是Agent。那個項目成功了,變成了什麼呢,對,變成了Siri。所以咱們做學術的,大的項目十個死了九個,但還有一個成功了,咱們對人類也是做了一點貢獻。

OWL工作組

所以這玩意兒就是從邏輯往前走,然後變成了Web上的各種本體的語言,有OWL和OWL2。在2007年的時候就成立了W3C的工作組,就是Web本體語言的工作組。我在2008年進去,在裡面工作了兩年的時間。

我們做了一個語言,叫OWL2。這個語言非常失敗,基本沒有人用。為什麼呢?實際上那個時候我開始反思這個領域。因為整個工作組,它是被邏輯學家所主導的。邏輯學家和工程師有什麼樣的不同想法呢?比如說,我們曾經有一次在討論,我們這個數據查詢語言要不要有等價關係(就是A=B,北京=帝都這種關係)?邏輯學家就說,no no no,絕對不可以,因為有了這個東西以後,我們就不再能保證多項式時間複雜性了。他們老是說這個,最後把現場的Oracle的人都說火了,說不管你加不加這個我們都要用,我一定會加這個東西,我不會在乎你這個語言是怎麼寫的。這就是工程師思維和科學家思維的區別嘛!所以說,當時Facebook、Google根本沒有加入這個工作組,因為邏輯離現實非常非常遠。

工作組裡面遇到了很多很多問題,包括路線鬥爭,分成兩派。一派叫做SEMANTIC Web,就是Semantics、Semantics、Semantics,邏輯、邏輯、邏輯。另外一派呢叫做semantic WEB。現在研究的所有邏輯問題其實我們二十年前都研究過了。現在唯一新的東西就是Web。Web是什麼?讓數據流動起來。數據流動起來最大的問題是什麼?不是機器,是人。我們天天要多考慮人的問題。當時還有個特別有趣的討論,就是我們這個語言規定的是不是太複雜了,是不是太難了?那些邏輯學家就會說no no no,這是polynomial-time(多項式時間)怎麼會難呢?然後我們那個文檔列印出來,600+頁紙。我們正常人類覺得,600頁紙是一個難的東西,而邏輯學家就覺得多項式時間是一個容易的詞。其實我們之間有一個mindset(思維方式)不一樣,大家真是掀桌子的那種討論,鬥爭非常激烈。

我們在設計工程系統的時候,考慮計算複雜性、認知複雜性、工程複雜性。其實,就是我剛才講到的成本嘛,機器的成本、人的成本、數據的成本,每一點成本我們都是要考慮到的。但是對於非工程師(科學家)而言,他們是不會在乎這些東西的。為了這上面每一點啊,大家都要不停地吵。每一點後面都有幾千封電子郵件在後面吵,吵了兩年時間。最終,這個東西是不成功的。

從一開始弱語義的語義網路,到最後的強語義的OWL,還有一個怪胎我沒有提到,叫RIF,規則語言,比OWL還要變態好幾倍,是完全徹底的失敗,標準的完美的失敗。這個東西非常不成功,告訴了我們什麼?就是工程一定不要太條條框框,一定不能去想,因為這個東西理論上不漂亮,所以它不能做,不能有這種完美的精神。

元數據和RDF

當時還有另外一套,叫元數據,主要是在1998年的時候,網景公司有一群人開始做,後來演變成RDF,然後演變成了一堆奇奇怪怪的語言,然後是schema.org,是Google提出來的,最後演變到了今天的知識圖譜。

在座有多少人用RSS,或者曾經用過RSS?今天在座的小夥伴們可能很多人壓根就沒聽說過這個詞,它是第一個被應用起來的語義網的元數據的格式,後來被改名叫Rich Site Summary,第一個R被稱為Rich。實際上最早的時候它是RDF,就是RDF Site Summary(1999年)。

Guha是我們領域裡非常重要的一個人,他是麥卡錫的學生。麥卡錫是1956年人工智慧的創始人之一,我們邏輯學派的大泰斗。Guha是他早期的一個博士生,後來去了Cyc,在那裡面做CycL這個邏輯語言。然後1995年的時候跳槽到蘋果公司,在蘋果做了MCF,就是Meta Content Framework。蘋果公司實際上是我們現在知識圖譜的各種格式的鼻祖,從那裡出來的,源頭在那裡。他做完這個東西以後跳槽到了Netscape,在那裡碰到了XML的發明人,Tim Bray。他一開始的語法是很奇怪的,後來Tim說你應該用XML把他重新規劃一下。97年的時候XML還是一個先進的技術。那麼他們就把這個東西變成了RDF。

這玩意兒當時就算是很新穎的東西吧。在那之前元數據也有很多,比如說有Dublin Core,還有其他的我記不清了。為什麼那些東西最後沒能發展起來呢?因為都是面向機器的,它考慮的是怎麼提高機器的效率。

RSS是不一樣的,它想的是怎麼提高人的效率,這樣就火起來了。人是最重要的一件事情。到了1999年的時候,RDF就變成了W3C 的Recommendation(推薦標準)。

說一個小八卦吧。RDF的其中一個作者(Aaron Swartz)只有14歲,後來自殺了。因為他是一個熱愛自由的人,他就偷那些論文,偷了幾百萬篇,然後被FBI給抓起來了,他就自殺了,死的時候年僅二十幾歲。RDF就是有這麼一個自由的基因在裡頭,由一群熱愛自由的人創造出來的。

但是很不幸,1998年,它落入了邏輯學家的魔爪。2004年,被一群邏輯學家綁架了一個怪胎在上面,這個怪胎叫RDF語義,非常奇怪的一個高階語義。把它說完就得花兩天時間。2014年,有了RDF1.1。RDF曾經成了一個面向人的語言,後來到了某一個時期成了面向機器的語言。被綁架了,就是它厄運的開始。

在實踐當中推理是很少被用到的,大多數時間我們有數據就夠了,有一個結構化的東西就好。關鍵是成本,推理是非常需要成本的。

互聯數據和開放數據

2006年,我們這個語義堆棧已經變成了這樣一個複雜的東西。一開始語義網有一個叫做層次蛋糕的東西。大家都知道在網路領域有一個七層協議嘛。語義網也有一個類似的七層協議。有一些好事之徒把它從平面的變成立體的。這裡面涉及到的概念絕大多數人讀兩個PhD都讀不完。完全沒有人能看得懂這東西。

2006年,Tim Berners-Lee(就是我們的神),已經看不慣這種事情了。他說,要有光!(呵呵)不是,要有Linked Data,於是就有了Linked Data。他發了個聖旨之後,大家都開始研究。然後到了2009年的時候,他跑到TED上去喊,Raw Data Now!大家也很打雞血一樣在那兒喊,就像練氣功一樣。他就是希望用這種個人魅力去逆轉錯誤的趨勢。所以後來他就是強調,數據一定要公開。

當然他也在不斷地修正自己的理論,作為一個原教旨主義的數據公開主義者,到2006年,他認識到數據的公開和互聯這件事情本身是高成本的,要先從低成本的東西開始做,一步一步地往前走。所以又是海一樣的銀子扔進去。他忽悠的最主要的成功對象就是軍方。美國軍方和英國軍方又扔了上十億的英鎊和美元進去來做這個事情。

然後他終於成功忽悠了白宮。2009年的一個巨大的勝利就是白宮要求所有的部門都要有公開數據。每一個部門都必須把它的數據公開了。公開了以後怎麼樣呢?結構化吧。用什麼結構化呢?就用RDF結構化。2009年,我們RPI就把這個項目給吃下來了,結構化美國所有的政府公開數據,最後大概有幾百萬個數據集。你能想像到的國民經濟每一個領域的數據都有。

有了DBpedia(一個基於維基百科的結構化資料庫),有了這個政府公開數據,然後才有了IBM Waston。所以Waston項目能走完最後的十個百分點。我記得Waston的文章里也提到了,就是把Linked Data給turn on和turn off,就是最後十個百分點的差距。所以說這十個(百分)點就是美國和英國的上十億的錢砸進去砸出來的一點響,為我們在問答領域裡做出了貢獻。真的是有多少人工就有多少智能。

那麼在這一點上我們看到,我們之所以在關聯數據領域裡面能夠取得突破,是解放了思想。可以說當年Waston出來的時候,就好像在2012年在ImageNet上面發現了原來圖像識別可以這麼玩一樣。一種震撼性的東西,哇哦,還可以這樣子。我們2010年,發現原來Linked Data可以這樣玩。我們解放了思想以後,從強語義可以推理、推理,然後soundness and completeness,我們想怎麼能夠降低成本。一個弱語義就夠了,工程夠用就可以了嘛!所以我們就有了後來一系列勝利。

數據交換和數據存儲

這一塊就是講交換語言和存儲語言的區別。RDF開始就是作為知識的交換語言被提出來,最早的時候,RSS嘛,還有就是元數據的管理,像蘋果裡面管理圖片的數據,這樣一種交換格式。如果大家還記得話,最早還有KIF,九十年代末的那些知識交換語言。

很不幸的是,到了某一個程度的時候,大家就把這個東西變成了數據存儲語言。2006年前後,有一堆公司在想,既然用RDF可以做數據交換,也可以用RDF來做數據建模語言,然後再用RDF做數據存儲語言。當時有PowerSet、Hakia,還有Twine啊這些公司來做這件事情。然後他們遇到了各種各樣的問題,就是這個性能上不去,自己從頭來做一整套的工具鏈,成本非常非常得高。

PowerSet沒挺住,就把自己給賣掉了。

Hakia也把自己賣掉了。

Twine沒有找到人去賣,最後就死掉了。

當時對RDF的定位,大家沒有想清楚。當時誰也想不清楚,因為後來它們死了,我們才想清楚,這玩意兒不能作為存儲語言。2013年,Google開始推Microdata,所以它現在推的knowledge graph都是Microdata。它是想,一定要輕,跟現有的工具鏈去儘可能融合在一起。後來它就推出了JSON-LD,另外一種格式,充分利用了現有的工具。

為什麼?還是回到成本問題上來。人的成本,機器的成本,數據的成本。如果我們能儘可能地利用現有的工程基礎,可以有效地降低這三樣的成本。不需要去重新訓練程序員,不需要去訓練用戶。我們可以用現成的軟體,這些parser都不需要去重新寫。我們原來寫過的那些代碼,運行的那些傳統的介面,都可以重新去用。有效地降低了成本。

後來,存儲語言就慢慢的就不再是RDF數據,變成了圖資料庫。微軟有他自己的,Google也開發了自己的,雅虎也有。每個公司都內部開發一套,主要都是內存資料庫。像Trinity的底層就是key-value store(鍵值資料庫)。都是已經成熟的工程技術上面,包裝出新的東西來,說到底還是一個成本的問題。

現在這幾年在初創公司裡面,大家用Graph Database(圖資料庫),興起了一堆新的資料庫。也有少量的人還在用triple store(三元組資料庫),用SPARQL,但已經不再是主流了。這是大家血的教訓換來的。

小結

我們回過頭來看,向工程妥協的時候,我們就勝利。向教條主義堅持的時候,我們就失敗。就是整個領域的總結吧。2006年之前的時候,我們由弱語義轉向強語義,我們就失敗了,因為我們看重的是科學。2006年的時候,我們看重的是工程,所以就取得了小小的成功。

往前走的話,我覺得我們做工程,不是某一個領域,某一個演算法就能解決的。比如我們現在構造知識圖譜,需要知識工程的技術,需要自然語言處理的技術,需要規則系統,需要正則表達式,有時候可能正則表達式是最重要的。各種low的、high tech的東西。我們今天在寫正則表達式,明天就在玩詞嵌入。各種有機的演算法我們都要融合在一起。沒有什麼人工智慧技術是高的或者低的,一定是有效的才是最好的。


推薦閱讀:

揭開知識庫問答KB-QA的面紗4·向量建模篇
報名 | 知識圖譜前沿技術課程(暨學術交流)
關於醫療大腦、知識圖譜與智能診斷,這是最全的解讀 | 硬創公開課
項目實戰:如何構建知識圖譜
PaperWeekly 第42期 | 基於知識圖譜的問答系統關鍵技術研究 #04

TAG:人工智能 | 知识图谱 | 语义网 |