在知識表示這三個層面上,從開始的命名到元組,到本體,我們都需要考慮這三個因素。
先講命名的問題,這里要引用另外一位大師的話: 計算機科學(xué)里只有兩個困難的事情:緩存失效和起名字 。
在做基于RDF的建模的時候,每一個實體和每個關(guān)系都用URI網(wǎng)址的方式命名,這種方式有好處也有壞處。跟它對應(yīng)的是用字符串進行命名。用URI命名是高成本的方式,維護成本和構(gòu)造成本都會比較高。字符串成本相對小一點。URI是一個全局的東西,URI是唯一的:因為它是唯一的,它也是全局的。所以在全球任何一個地方的瀏覽器的你都可以得到同樣一個資源。字符串是多義的,也是上下文相關(guān)的。 “蘋果”這個詞在不同的context下面,它的意義是不一樣的。URI是面向機器的,機器可讀,人很難去記下來一個很長的URI。人是可以讀字符串的。URI的好處是便于互聯(lián),所以linked open data強調(diào)用URI。字符串是難以互聯(lián)的。另外還有一點是政治上的考慮,每一個URI都是有主人的,因為它有一個domain(域名),每一個domain都是有組織或者個人去擁有它的,字符串沒有主人,要相對自由一些。
所以在怎么去對資源進行命名的問題上面,我們要綜合考慮。很多情況下可能URI是一種過早的優(yōu)化,如果我們能夠用字符串保持盡可能長的時間,會降低我們的構(gòu)造成本。URI的另外一個問題就是它承載了兩個功能,一個就是命名(Naming),還有一個就是尋址(Addressing)。命名一個資源然后找到一個資源,其實這兩件事情相互之間是沖突的。
最近我在看一篇文章,叫Reference by Description,知識圖譜之父Guha寫的,他提出來一個解決方案,之前我也想到過類似的這種方法,犧牲命名的一致性。有時候允許我們犯一點點錯誤,也許我們找URI、找一個資源找錯了,但是因為我們犧牲了這個唯一性,我們獲得了系統(tǒng)構(gòu)造成本的極大降低和可維護性的極大提高。其實這也是當年NoSQL興起的時候的一個想法,因為以前數(shù)據(jù)庫里我想要強一致性,就帶來很多問題;NoSQL興起以后,我們不要強一致性,只要最終一致性(Eventual Consistency),也行。所以我覺得現(xiàn)在從URI往前走,可能到另外一種新的知識表示的方法。這種犧牲URI,犧牲這個一致性,來換取工程上的極大的好處,這個很值得去看一看。
第二點就是元組,我們有了實體之后,我們把實體關(guān)聯(lián)在一起,形成一個結(jié)構(gòu)。我們最常用的就是主語-謂語-賓語(s p o)這種結(jié)構(gòu),我們把它稱為一個三元組,就是RDF或者現(xiàn)在的知識圖譜大家都經(jīng)常用的。但是長期以來我們知道,三元組非常難以表達定語、狀語和補語。林老師早上提到了這個Marriage建模,我為什么不直接說張三和李四的關(guān)系呢,然后非要構(gòu)造Marriage這個關(guān)系,因為Marriage它有一個時間的這個狀語,就是說什么時間到什么時間。我們在傳統(tǒng)的這種建模里面,為了表達三元組以上的東西,這個四元組、五元組的話,我們會用reification,這種奇技淫巧,這種東西會極大地降低我們的知識庫的可維護性和可讀性。所以我稱 三元組是尼安德特人的語言 。這什么意思?我們在座的都是智人,如果有尼安德特人舉個手——感覺沒有 :D。為什么呢?因為他們被我們吃掉了。語言學(xué)家有一個假說,為什么我們智人會把尼安德特人給消滅掉?尼安德特人其實也有語言,也有宗教什么都有。但他們的語言有一種本質(zhì)的缺陷,他基本上只能說主語謂語賓語。我們”清華打北大“,他可以說這句話對吧。但是我們智人可以說得更完美,說我們”清華的學(xué)生,我們明天早上8點鐘,每人帶根棍子,到北大去“。這樣的語言,是尼安德特人沒有辦法說的,因為是超出主語謂語賓語。所以RDF是尼安德特人的語言,也是為什么我們智人用它非常地別扭。
可能的另外一種解決方案我認為是JSON,特別是現(xiàn)在有了JSON-LD,融合了JSON和RDF的優(yōu)點,部分地彌補了他們的缺點,形成了一個在表達力和可讀性、可維護性之間的一個折衷。這個東西也是剛剛開始興起,本身它還有很多不足的地方,也還沒有成為一個特別被廣泛應(yīng)用和支持的格式。但是我認為這是一個方向。還有就是一些Document Graph Database,就是能夠支持JSON的圖數(shù)據(jù)庫,我認為值得看一看的。因為它可以有效地降低輸入輸出的成本和理解的成本,而且我們又可以獲得圖數(shù)據(jù)庫的各種各樣的優(yōu)勢。比如OrientDB就支持這種。這些數(shù)據(jù)庫比較新,也有種種問題,我并不推薦大家在生產(chǎn)系統(tǒng)中用。但我覺得很值得去探索一下。也可能有其他的解決方案,在后面我也會繼續(xù)提到。