作者:孫宇熙,王昊
在之前的幾篇文章中《圖數據結構的進化》與《數據庫查詢語言的進化》中,我們介紹了圖數據結構與數據庫查詢語言及其發展歷程,我們同時也以一種廣譜的視角展示了真實場景中的圖技術的相關應用。社交網絡在本質上是一張圖,它精準的表達了人們之間的關聯關系;生物科技與制藥行業通過圖來了解蛋白質之間的互動關系以及化合物的藥效;在供應鏈、電信網絡、電網中,圖也能天然的表達各自網絡所包含的實體間的關聯關系。越來越多的行業開始關注并利用圖來幫助他們解決所遇到的問題。
在大數據時代,越來越多的商家、企業喜歡使用機器學習來增強它們對于商業前景的可預測性。有的采用了深度學習、神經元網絡的的技術來獲取更大的預測能力。但是,圍繞著這些技術手段,三個問題一直縈繞不斷:
- 生態中的多系統間割裂問題(Siloed Systems within AI Eco-system)
- 低性能(Low Performance AI)
- 黑盒化(Black-Box AI)

Graph-0: AI機器學習技巧以及性能&可解釋性
Graph-0中就很好的呼應了上面提到的3大問題。首先,機器學習的技巧很多,從統計學模型到神經元網絡,從決策樹到隨機森林,從馬可夫模型到貝葉斯網絡到圖模型,不一而足,但是這么多星羅棋布的零散的模型卻并沒有一個所謂的一站式服務平臺。大多數的AI用戶和程序員每天都在面對多個、相互間割裂的、煙囪式的系統 – 每個系統都需要準備不同類型、不同格式的數據、不同的軟件硬件配置,大量的ETL或ELT類的工作需要完成(后面我們會給出具體的例子)。其次,基于機器學習和深度學習的AI還面臨著性能與解釋性的雙重尷尬,所謂的高性能的深度學習往往并不具備良好的過程可解釋性,這個在各類神經元網絡中體現的尤其強烈 – 人類決策者是很難容忍過程不可解釋、非白盒化的AI解決方案的 – 這也是為什么在歐洲、美國、日本、新加坡等地,金融機構、政府職能部門都在推動AI技術與應用落地時的白盒化、可解釋性。最后,性能問題同樣的不可忽視,數據處理、ETL、海量數據的訓練和驗證,整個過程是如此的復雜和漫長。這些問題都是不可忽視的存在。理想狀態下,我們需要基礎架構層的創新來一攬子的應對并解決這些挑戰。
圖數據庫恰好就是那個基礎架構層的創新。我們在本文中會解讀為什么和如何解決以上的問題。
傳統意義上,數學和統計學的操作在圖上面是非常有限的。要想更好的了解這個問題,我們需要先明白圖數據結構的演進,在我們之前的一篇名為《圖數據結構的進化》的文章中介紹了相關的信息,有興趣的讀者不妨翻閱一下。簡而言之,在相鄰矩陣或相鄰鏈表類的數據結構中,很少的數學和統計學的操作可以被完成,更不用說它們大體都無法應對高并發的場景。為了解決這個挑戰,我們創造性的設計了一種支持高并發的相鄰哈希的數據結構,而在其之上可以支持更豐富的數學、統計學計算與操作可以算作是一個額外的紅利吧——不過這是后話。
圖嵌入(Graph Embedding)理念的基礎是把一張屬性圖(Property Graph)轉換到向量空間(Vector Space),因為向量空間內更多的數學、統計學的操作可以被實現和完成。這種轉換實際上是把高維度數據壓縮到了低維空間來表達,同時保留了一些屬性,例如圖的拓撲結構、點邊的關系等等。這種轉換還有其它的優點,例如向量操作簡單、迅捷。需要指出的是,向量空間的操作所指和覆蓋的是非常廣泛的一大類數據結構,而上面提到的相鄰哈希(adjacency hash*)也屬于廣義上的向量空間數據結構 – 在其之上可以實現高性能、高并發的操作。
關于相鄰哈希與圖數據庫,我們需要向讀者提供一些必要的、延展的信息。嬴圖數據庫通過在內存存儲與計算架構中使用了”相鄰哈希“實現了前所未有的高并發、高性能以及高數據處理吞吐率。當然,對于圖嵌入操作而言,這種底層的向量空間數據結構天然的就是以嵌入的方式、原生圖的方式存儲圖的基礎數據(點、邊、屬性等),任何在此基礎之上的數學、統計學計算等需求都可以更容易實現。而當我們在數據結構、基礎架構以及算法的工程實現層面都做到了可以充分的釋放和利用底層硬件的并發能力的時候(例如對CPU的內核的充分利用——在一臺雙CPU的X86 PC服務器架構中,超線程數可達112,也就是說如果全部100%并發,CPU的全速、滿負荷運行%為:11,200%,而不是100%??!遺憾的是,相當多的互聯網后臺開發程序員試圖想證明當他們不能讓1臺服務器跑滿的情況下,可以通過多機的分布式系統來實現更高的計算效率,這是典型的本末倒置——我們當然要先把1臺機器的并發能力釋放出來后,才會以水平可擴展的方式去釋放第二臺、第三臺的算力…),在圖上的很多原來非常耗時的圖嵌入的操作就可以以非常高效和及時的方式完成。
下面,讓我們通過Word2Vec的例子來解釋為什么圖嵌入類的操作在嬴圖數據庫上可以跑的更快,也更簡潔(例如:輕量級存儲、過程可解釋)。Word2Vec方法可以看做是其它面向頂點、邊、子圖或全圖的圖嵌入方法的基礎。簡而言之,它把單詞(word)嵌入(轉換)到了向量空間 – 在低維向量空間中,意思相近的單詞有著相似的嵌入結果。著名的英國語言學家J.R. Firth在1957年曾說過:你可以通過了解一個單詞的鄰居(上下文)而了解這個單詞。也就是說,具有相似含義的單詞傾向于具有相似的近鄰單詞。
在以下的三張配圖(Graph-1/2/3)當中,介紹了實現Word2Vec所用到的算法和訓練方法:
- Skip-gram算法
- Softmax訓練方法
還有其它的算法,例如Continuous Bag of Words和方法,例如Negative Sampling(負取樣)等。

Graph-1: Word2Vec從原文到訓練采樣數據集
Graph-1中展現的是當采樣窗口大小為2的時候(意味著每個當前關注、高亮的單詞的前兩個和后兩個相連的單詞會被采樣),采集到的樣本集的效果。注:在改進的Word2Vec方法中,Subsamplings技術被用來去除那些常見的單詞,例如“the”,并以此來提高整體的采樣效果和性能。
為了表達一個單詞并把它輸入給一個神經元網絡,一種叫做one-hot的向量方法被使用到了,如圖Graph-2所示。輸入的對應于單詞ants的one-hot向量是一個有1萬個元素的向量,其中只有一個元素為1(對應為ants),其它元素為全部為0。同樣的,輸出的向量也包含1萬個元素,但是包含著每一個近鄰的單詞出現的可能性。

Graph-2: Word2Vec神經元網絡架構示意圖
假設我們的詞匯表中只有1萬個單詞,以及對應的300個功能(features)或者是可以用來調優Word2Vec模型的參數。這種設計可以理解為對應著一個10,000*300的二維矩陣,如下圖Graph-3所示,在隱藏層(hidden layer)中的300個神經元。

Graph-3: 巨大的單詞向量 (3,000,000 Weights!)
從上圖中可以看到,隱藏層和輸出層每個都負載著權重達3,000,000的數據結構。對于真實世界中的應用場景,詞匯數量可能多達數百萬,每個單詞有上百個features的話,one-hot的向量會達到數以十億計,即便是使用過了sub-sampling、negative-sampling或word-pair-phrase等(壓縮)優化技術,計算復雜度也是不可忽略的。很顯然,這種one-hot向量的數據結構的設計方式過于稀疏了,它很像相鄰矩陣。同樣的,利用GPU盡管可以通過并發來實現一定的運算加速,但是對于巨大的運算量需求而言依然是杯水車薪(低效)。
現在,讓我們回顧Word2Vec的訴求是什么?我們想要預測,在一個搜索與推薦系統中,當一個單詞(或多個)被輸入的時候,我們希望系統給用戶推薦什么其他單詞?對于計算機系統而言,這是個數學-統計學(概率)問題:有著最高可能性分值的單詞,或者說最為近鄰的單詞,會被優先推薦出來。從數據建模的角度上來看,這個挑戰是典型的圖計算挑戰!當一個單詞被看做是圖中的一個頂點的時候,它的鄰居(和它關聯的頂點)是那些經常在自然語句中出現在它前后的單詞 – 這個邏輯可以以遞歸的方式延展開來,進而構成一張自然語言中的完整的圖。每個頂點、每條邊都可以有它們各自的屬性、權重、標簽等等。
上文中描述的圖的存儲結構可以對應于下圖(Graph-4)。我們設計了兩種基于相鄰哈希的數據結構,表面上看它們類似于Big-Table,但是在實現層,通過高并發架構賦予了這些數據結構超高的無索引查詢(Index-Free Adjacency)可計算性能。

Graph-4: 原生支持圖嵌入的圖數據結構
基于相鄰哈希(adjacency hash*)數據結構,Word2Vec問題可以被分解為如下兩個清晰(但是并不簡單)的步驟:
- 為圖中每個關聯兩個單詞(頂點)的有向邊賦值一個“可能性”權重 – 這個可以通過基于統計分析的預處理的方式實現。
- 搜索和推薦可以通過簡短的圖遍歷操作來實現,例如對于任何出發的單詞(頂點),查詢并返回前X個數量的鄰居頂點。該操作可以以遞歸的方式在圖中前進,每次用戶選定一個新的頂點后,就會實時的進行新的推薦。當然也可以進行深度的圖路徑計算以實現出類似于返回一個完整的、長句子的推薦效果。
上面的第二步中的描述非常類似于一套實時搜索系統&推薦(suggestion)系統,并且它的整個的計算邏輯就是人腦是如何進行自然語言處理(NLP)的白盒化過程。
上面我們描述的就是一個完整的白盒化的圖嵌入的處理過程。每一個步驟都是確定的、可解釋的、清晰的。它和再之前的那種黑盒化和帶有隱藏層(多層)的方法截然不同(參考配圖Graph-2、3)。這也是為什么我們說深度的實時圖計算技術會驅動XAI的發展 – XAI = 可解釋的人工智能(eXplainable AI)。
相鄰哈希數據結構天然的就采用圖嵌入的方式構造 – 當圖中的數據通過相鄰哈希的結構被存儲后,嵌入的過程就自然而然的完成了,這也是相鄰哈希類原生圖存儲在面向圖嵌入、圖神經網絡時的一個重要優勢。

Graph-6: 深度游走(DeepWalk)的步驟分解
讓我們來看第二個例子:DeepWalk(深度游走)。它是一個典型的以頂點為中心的嵌入方法,通過隨機游走(random walks)來實現嵌入過程。利用相鄰哈希,隨機游走的實現極為簡單 – 僅僅需要從任一頂點出發,以隨機的方式前往一個隨機相鄰的頂點,并把這個步驟以遞歸的方式在圖中深度的前行,例如前進40層(步)。需要注意的是,在傳統的計算及IT系統中(包含所有的在嬴圖之前的傳統的圖數據庫),通常來說每一層深入查詢或訪問都意味著計算資源的消耗是指數級的增加 – 如果平均每個頂點有20個鄰居,查詢深度為40層的計算復雜度為:2040,沒有任何已知的系統可以以一種實時或近實時的方式完成這種暴力運算任務。但是,得益于相鄰哈希數據結構,我們知道每一層的頂點可以以并發的方式去訪問它的相鄰頂點,時間復雜度為O(1),然后每個相鄰頂點的下一層鄰居又以并發的方式被分而治之,如果有無窮的并發資源可以被利用,那么理論上的深度探索40層的時間復雜度為O(40*20) – 當然,實際上計算并發資源是有限的,因此時間復雜度可能會高于O(800),但是可以想見,會遠遠低于 O(2040)!
Graph-6中示意的是典型的深度游走的步驟。利用相鄰哈希,隨機游走、訓練和嵌入過程被降解為原生的圖操作,例如K-鄰和路徑查詢操作 – 這些操作都是直觀、可解釋的,也就是說是XAI友好的!
深度游走(DeepWalk)在學術界和業界經常被批評缺少通用性(普適性),它沒有辦法應對那種高度動態的圖。例如,每個新的頂點(及邊)出現后都要被再次訓練,并且本地的鄰居屬性信息也不可以被保留。
Node2Vec被發明出來就是要解決上面提到的DeepWalk非通用性中的第二個問題。Graph-7中展示了整個學習過程的完整的步驟 – 10步(含子進程),其中每個步驟又可以被分解為一套冗長的計算過程。傳統意義上,像Node2Vec類的圖嵌入方法需要很長時間(以及很多的資源,例如內存)來完成(用過Python的讀者可能會更有體會!),但是,嬴圖數據庫的圖嵌入AI算法集把這些步驟都進行了高并發改造,通過高效的利用和釋放底層的硬件并發能力來縮短步驟執行時間。如下的進程都被改造為并發模式了:
- Node2Vec隨機游走(random walks)
- 準備預計算 Table
- 詞匯學習 (from Training File)
- 剔除低頻詞匯Low-Frequency Vocabularies
- 常見單詞(vectors)的Sub-sampling
- 初始化網絡 (Hidden Layer, Input and Output Layers)
- 初始化Unigram Table (Negative Sampling)
- Skip-Gram訓練

Graph-7: Outer Steps of Node2Vec Relying on Word2Vec
通過高度的并發實現,我們實現了高性能與低延遲。值得指出的是:每一秒鐘沒有實現高并發的運算,對于底層的計算(或存儲、網絡)資源而言都是一種浪費 – 是對環境污染的一種漠視 – 對于環?;蛘哂嬎阗Y源的充分并發,我們是嚴肅、認真的。
還有其它的圖嵌入技巧具有相似的理念和步驟,例如:
- 取樣和標簽(Sampling and labeling)
- 模型訓練(e., Skip-Gram, n-Gram, and etc.)
- 嵌入計算(Computing embeddings)
有些計算需要在頂點或子圖級別完成,有些則需要對全圖進行運算,因此也會因計算復雜度的指數級增加而耗費更多的計算資源。無論是哪一種模式,可以實現以下的效果將會是非常美妙的:
- 在數據結構、架構和算法實現層面實現高性能、高并發;
- 每一步的操作都是確定、可解釋的以及白盒化的;
- 理想狀態下,每個操作都以一站式的方式完成(連貫的、統一的,無需數據遷移或反復轉換的)。
現在,讓我們回顧本文開頭的地方,Graph-0所觸及的可解釋性vs.性能的問題。決策樹有著較好的可解釋性,因為我們明白它每一步在做什么,樹在本質上就是簡單的圖,它并不包含環路、交叉環路這種數學(計算)意義上復雜的拓撲結構 – 因為后者更難解釋,當這種高難度的不可解釋性層層疊加后,整個系統就變成了一個巨大的黑盒,這也是我們今天的很多AI系統所面臨的真實的窘境 – 試問人類可以忍受一套又一套的AI系統在為我們服務的時候,始終以黑盒、不可解釋的方式存在嗎?例如通過AI來實現的人臉識別或者小微貸款額度計算,即便在10億人身上經過認證它是準確的,你如何能確保在下一個新用戶出現的時候它是準確的且公正的呢?只要人類不能精準、全面的回溯整個所謂的AI計算過程,這種風險就一直存在。不可解釋的AI,注定是不會長久的,即便在一定時期內它可能還很火爆。
今天市面上絕大多數的圖算法和圖嵌入實現都采用了或者性能不友好的相鄰鏈表,或者空間不友好但是論文友好的相鄰矩陣的方式來實現。不得不說,在XAI的方向上,有著巨大的IT系統的升級換代的空間與機遇。

Graph-8: 一體化的嬴圖實時圖數據庫與知識圖譜管理平臺
通過實現高性能、高并發的圖數據結構與系統框架,我們做到了實現前文提到的3個預期的效果。在后續的文章中,我們會介紹更多的基于嬴圖中臺(圖數據庫、圖計算-存儲引擎)實現的XAI的功能。
在Graph-8和Graph-9中,我們展示了嬴圖的前端可視化界面。前者是以表單化的方式支持用戶進行圖上的各類操作(搜點、搜邊、搜路徑、搜K鄰、自動展開、多節點自動組網、模板搜索、全文本搜索、豐富的圖算法以及數據庫管理操作);后者展示了一種以3D(WebGL)高可視化的方式展示圖譜(子圖)的空間拓撲結構。

Graph-9: 3D模式的知識圖譜管理前端(嬴圖Manager)
圖是用來表達高維空間的,電腦屏幕是2維的,但是大腦是以高維的方式處理信息的。圖數據庫、圖中臺、圖計算引擎是最忠實的還原高維空間表達的終極方案。如果人腦是終極數據庫,那么圖數據庫是邁進終極數據庫的最短路徑!