大家好,見字如面。我是教授老邊。本專欄將基于我個人的觀察,為大家?guī)黻P(guān)于圖數(shù)據(jù)庫技術(shù)的分享。從基礎(chǔ)概念出發(fā),深入剖析算法邏輯,分享實際應(yīng)用案例,探討市場現(xiàn)狀,展望未來趨勢,希望能為大家?guī)韴D相關(guān)知識,引發(fā)思考與啟發(fā)。讓我們一同踏上這場圖數(shù)據(jù)庫技術(shù)的探索之旅 。
2024年諾貝爾物理學(xué)獎頒發(fā)給了機器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)領(lǐng)域的研究者,這是歷史上首次出現(xiàn)這樣的情況。這項獎項原本只授予對自然現(xiàn)象和物質(zhì)的物理學(xué)研究作出重大貢獻的科學(xué)家,如今卻將全球范圍內(nèi)對機器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的研究和開發(fā)作為了一種能夠深刻影響我們生活和未來的突出成果。比如,DeepMind開發(fā)的AlphaFold,它是一種革命性的人工智能(AI)系統(tǒng),一舉解決了過去50年都無法完成的蛋白質(zhì)折疊問題,可以準確預(yù)測蛋白質(zhì)的結(jié)構(gòu)。

圖1:世界上最有影響力的科學(xué)期刊Nature將其評價為:它將改變一切
在現(xiàn)實環(huán)境中,越來越多的商家、企業(yè)喜歡使用機器學(xué)習(xí)來增強它們對于商業(yè)前景的可預(yù)測性,有的采用了深度學(xué)習(xí)、神經(jīng)元網(wǎng)絡(luò)的技術(shù)來獲取更大的預(yù)測能力。圍繞這些技術(shù)手段,以下3個問題一直縈繞不斷:
1、生態(tài)中的多系統(tǒng)間割裂問題(siloed systems within AI eco-system)|
2、低性能(low performance AI)
3、黑盒化(black-box AI)

圖2:AI機器學(xué)習(xí)技巧以及性能與可解釋性
圖2就很好地呼應(yīng)了上面提到的3大問題。首先,機器學(xué)習(xí)的技巧很多,從統(tǒng)計學(xué)模型到神經(jīng)元網(wǎng)絡(luò),從決策樹到隨機森林,從馬爾科夫模型到貝葉斯網(wǎng)絡(luò)到圖模型,不一而足,但是這么多零散的模型卻并沒有一個所謂的一站式服務(wù)平臺。大多數(shù)的AI用戶和程序員每天都在面對多個相互間割裂的、煙囪式的系統(tǒng)——每個系統(tǒng)都需要準備不同類型、不同格式的數(shù)據(jù)、不同的軟件硬件配置,大量的ETL或ELT類的工作需要完成。
其次,基于機器學(xué)習(xí)和深度學(xué)習(xí)的AI還面臨性能與解釋性的雙重尷尬,所謂高準確率的深度學(xué)習(xí)往往并不具備良好的過程可解釋性,這在各類神經(jīng)元網(wǎng)絡(luò)中體現(xiàn)得尤為強烈——人類用戶作為最終的決策者是很難容忍過程不可解釋、非白盒化的AI解決方案的。這也是為什么在歐洲、美國、日本、新加坡等地,金融機構(gòu)、政府職能部門都在推動AI技術(shù)與應(yīng)用落地時的白盒化、可解釋性。
最后,性能問題同樣不可忽視,數(shù)據(jù)處理、ETL、海量數(shù)據(jù)的訓(xùn)練和驗證,整個過程是復(fù)雜和漫長的。這些問題都是不可忽視的存在。理想狀態(tài)下,我們需要基礎(chǔ)架構(gòu)層的創(chuàng)新來應(yīng)對并解決這些挑戰(zhàn)。
圖數(shù)據(jù)庫恰好就是那個基礎(chǔ)架構(gòu)層的創(chuàng)新。我們在本文中會解讀為什么和如何解決以上的問題。
傳統(tǒng)意義上,數(shù)學(xué)和統(tǒng)計學(xué)的操作在圖(數(shù)據(jù)集)上是非常有限的。在以前的文章中,我們也介紹過圖數(shù)據(jù)結(jié)構(gòu)的演進路線,感興趣的讀者可以翻閱。簡而言之,在相鄰矩陣或相鄰鏈表類的數(shù)據(jù)結(jié)構(gòu)中,很少的數(shù)學(xué)和統(tǒng)計學(xué)的操作可以被完成,在靈活性與性能上也存在很多挑戰(zhàn)。為了在圖數(shù)據(jù)集上可以支持更豐富的數(shù)學(xué)、統(tǒng)計學(xué)的計算與操作,引入向量型數(shù)據(jù)結(jié)構(gòu)有其必然性與合理性,圖嵌入也應(yīng)運而生。
圖嵌入是近幾年來圖計算領(lǐng)域中相當熱門的研究方向,不僅僅是因為相當多的AI研究者把深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)的研究方向轉(zhuǎn)為圖嵌入、圖神經(jīng)網(wǎng)絡(luò),另一方面工業(yè)界也越來越多的發(fā)現(xiàn)結(jié)合圖嵌入可以獲得更好的反欺詐或智慧營銷的效果。
對于圖嵌入操作而言,這種底層的向量空間數(shù)據(jù)結(jié)構(gòu)就是以嵌入的方式、原生圖的方式存儲圖的基礎(chǔ)數(shù)據(jù)(點、邊、屬性等),任何在此基礎(chǔ)之上的數(shù)學(xué)、統(tǒng)計學(xué)計算等需求都可以更容易被實現(xiàn)。而當我們在數(shù)據(jù)結(jié)構(gòu)、基礎(chǔ)架構(gòu)以及算法的工程實現(xiàn)層面做到了可以充分釋放和利用底層硬件的并發(fā)能力的時候,在圖上的很多非常耗時的圖嵌入操作就可以非常高效和及時地完成。
舉例來說,在一臺雙CPU的X86 PC服務(wù)器架構(gòu)中,超線程數(shù)可達112甚至更高,也就是說如果全部100%并發(fā),CPU最大并發(fā)規(guī)模可以達到11200%,而不是100%。遺憾的是,很多互聯(lián)網(wǎng)后臺開發(fā)程序員試圖證明在不讓一臺服務(wù)器的最大并發(fā)能力充分釋放(滿負荷運轉(zhuǎn))的情況下,可以通過多機的分布式系統(tǒng)來實現(xiàn)更高的效率。高并發(fā)的正確打開方式是我們需要先把一臺機器的并發(fā)能力釋放出來后,才會以水平可擴展的方式去釋放第二臺、第三臺的算力。
下面,讓我們通過Word2Vec的例子來解釋為什么圖嵌入類的操作在嬴圖數(shù)據(jù)庫可以跑得更快,也更簡潔(如輕量級存儲、過程可解釋)。Word2Vec方法可以看作是其他面向頂點、邊、子圖或全圖的圖嵌入方法的基礎(chǔ)。簡而言之,它把單詞(word)嵌入(轉(zhuǎn)換)到了向量空間——在低維向量空間中,意思相近的單詞有相似的嵌入結(jié)果。著名的英國語言學(xué)家J.R.Firth在1957年曾說過:你可以通過了解一個單詞的鄰居(上下文)而了解這個單詞。也就是說,具有相似含義的單詞傾向于具有相似的近鄰單詞。
在以下三張配圖(圖3、圖4、圖5)當中,介紹了實現(xiàn)Word2Vec所用到的算法和訓(xùn)練方法:
·Skip-gram算法;
·Softmax訓(xùn)練方法;
·其他的算法,如Continuous Bag of Words、Negative Sampling(負取樣)等。

圖3:Word2Vec從原文到訓(xùn)練采樣數(shù)據(jù)集
圖3中展示的是當采樣窗口大小為2時(意味著每個當前關(guān)注、高亮的單詞的前兩個和后兩個相連的單詞會被采樣),采集到的樣本集的效果。
為了表達一個單詞并把它輸入給一個神經(jīng)元網(wǎng)絡(luò),一種叫做one-hot的向量方法被使用到了,如圖所示。輸入的對應(yīng)于單詞ants的one-hot向量是一個有1萬個元素的向量,其中只有一個元素為1(對應(yīng)為ants),其它元素為全部為0。同樣的,輸出的向量也包含1萬個元素,但是包含著每一個近鄰的單詞出現(xiàn)的可能性。

圖4:Word2Vec神經(jīng)元網(wǎng)絡(luò)架構(gòu)示意圖
假設(shè)我們的詞匯表中只有1萬個單詞(words),以及對應(yīng)的300個功能(features)或者是可以用來調(diào)優(yōu)Word2Vec模型的參數(shù)。這種設(shè)計可以理解為一個10 000×300的二維矩陣對應(yīng)在隱藏層(hidden layer)中的300個神經(jīng)元(neurons),如下圖所示。

圖5:巨大的單詞向量(3 000 000種權(quán)重組合)
從上圖看到,隱藏層和輸出層都負載著權(quán)重達3 000 000的數(shù)據(jù)結(jié)構(gòu)。對于真實世界的應(yīng)用場景,詞匯數(shù)量可能多達數(shù)百萬,每個單詞有上百個features的話,one-hot的向量會達到數(shù)以十億計,即便是使用了sub-sampling、negative-sampling或word-pair-phrase等(壓縮)優(yōu)化技術(shù),計算復(fù)雜度也是不可忽略的。很顯然,這種one-hot向量的數(shù)據(jù)結(jié)構(gòu)設(shè)計方式過于稀疏了,類似于相鄰矩陣。同樣地,利用GPU盡管可以通過并發(fā)來實現(xiàn)一定的運算加速,但是對于巨大的運算量需求而言依然是杯水車薪(低效)。
現(xiàn)在,讓我們回顧Word2Vec的訴求是什么?在一個搜索與推薦系統(tǒng)中,當輸入一個單詞(或多個)的時候,我們希望系統(tǒng)給用戶推薦其他什么單詞?對于計算機系統(tǒng)而言,這是個數(shù)學(xué)——統(tǒng)計學(xué)(概率)問題:有著最高可能性分值的單詞,或者說最為近鄰的單詞,會被優(yōu)先推薦出來。從數(shù)據(jù)建模的角度來看,這是個典型的圖計算問題。當一個單詞被看作是圖中的一個頂點時,它的鄰居(和它關(guān)聯(lián)的頂點)是那些經(jīng)常在自然語句中出現(xiàn)在它前后的單詞。這個邏輯可以以遞歸的方式延展開來,進而構(gòu)成一張自然語言中完整的圖。每個頂點、每條邊都可以有它們各自的屬性、權(quán)重、標簽等。
我們設(shè)計了兩種近鄰存儲的數(shù)據(jù)結(jié)構(gòu)(相鄰哈希,adjacency hash),如下圖所示,表面上看它們類似于bigtable,但是在實現(xiàn)層,通過高并發(fā)架構(gòu)賦予了這些數(shù)據(jù)結(jié)構(gòu)無索引查詢(index-free adjacency)可計算性能。
基于此類數(shù)據(jù)結(jié)構(gòu),Word2Vec問題可以被分解為如下兩個清晰(但并不簡單)的步驟:
1)為圖中每個關(guān)聯(lián)兩個單詞(頂點)的有向邊賦值一個“可能性”權(quán)重,可以通過基于統(tǒng)計分析的預(yù)處理方式實現(xiàn)。
2)搜索和推薦可以通過簡短的圖遍歷操作來實現(xiàn),例如對于任何出發(fā)的單詞(頂點),查詢并返回前X個數(shù)量的鄰居頂點。該操作可以以遞歸的方式在圖中前進,每次用戶選定一個新的頂點后,就會實時地進行新的推薦。當然也可以進行深度的圖路徑計算以實現(xiàn)類似于返回一個完整的、長句子的推薦效果。

圖6:原生支持圖嵌入的圖數(shù)據(jù)結(jié)構(gòu)
第二步的描述非常類似于一套實時搜索與推薦系統(tǒng),并且它的整個計算邏輯就是人腦如何進行自然語言處理的白盒化過程。
上面描述的就是一個完整的白盒化的圖嵌入處理過程,每一個步驟都是確定的、可解釋的、清晰的。它和之前的那種黑盒化和帶有隱藏層(多層)的方法截然不同(參考圖3、圖4)。這也是為什么說深度的實時圖計算技術(shù)會驅(qū)動XAI(eXplainable AI,可解釋的人工智能)的發(fā)展。
相鄰哈希數(shù)據(jù)結(jié)構(gòu)采用圖嵌入的方式構(gòu)造——當圖中的數(shù)據(jù)通過相鄰哈希的結(jié)構(gòu)被存儲后,嵌入過程就自然而然地完成了,這也是相鄰哈希類原生圖存儲在面向圖嵌入、圖神經(jīng)網(wǎng)絡(luò)時的一個重要優(yōu)勢。

圖7:深度游走(DeepWalk)的步驟分解
讓我們來看第二個例子:深度游走(deep walk)。它是一個典型的以頂點為中心的嵌入方法,通過隨機游走來實現(xiàn)嵌入過程。利用相鄰哈希,隨機游走的實現(xiàn)極為簡單,僅僅需要從任一頂點出發(fā),以隨機的方式前往一個隨機相鄰的頂點,并把這個步驟以遞歸的方式在圖中深度前行,例如前進40層(步)。需要注意的是,在傳統(tǒng)的計算及IT系統(tǒng)中,通常來說每一層深入查詢或訪問都意味著計算資源的消耗指數(shù)級增加。如果平均每個頂點有20個鄰居,查詢深度為40層的計算復(fù)雜度為2040。
,沒有任何已知的系統(tǒng)可以以一種實時或近實時的方式完成這種暴力運算任務(wù)。但是,得益于相鄰哈希數(shù)據(jù)結(jié)構(gòu),我們知道每一層的頂點可以以并發(fā)的方式去訪問它的相鄰頂點,時間復(fù)雜度為O(1),然后每個相鄰頂點的下一層鄰居又以并發(fā)的方式被分而治之,如果有無窮的并發(fā)資源可以被利用,那么理論上的深度探索40層的時間復(fù)雜度為O(20*40)。當然,并發(fā)計算資源實際上是有限的,因此時間復(fù)雜度會高于O(800),但是可以想見,會指數(shù)級低于0(20 40)!
上圖中示意的是典型的深度游走的步驟。利用相鄰哈希,隨機游走、訓(xùn)練和嵌入過程被降解為原生的圖操作,例如K-鄰和路徑查詢操作。這些操作都是直觀、可解釋的,也就是說是XAI友好的!

圖8:node2vec算法步驟中對于word2vec的依賴
深度游走(DeepWalk)在學(xué)術(shù)界和業(yè)界經(jīng)常被批評缺少通用性(普適性),它沒有辦法應(yīng)對那種高度動態(tài)的圖。例如,每個新的頂點(及邊)出現(xiàn)后都要被再次訓(xùn)練,并且本地的鄰居屬性信息也不可以被保留。
Node2Vec被發(fā)明出來就是要解決上面提到的DeepWalk非通用性中的第二個問題。圖7中展示了整個學(xué)習(xí)過程的完整的步驟——10步(含子進程),其中每個步驟又可以被分解為一套冗長的計算過程。傳統(tǒng)意義上,像Node2Vec類的圖嵌入方法需要很長時間(以及很多的資源,例如內(nèi)存)來完成(用過Python的讀者可能會更有體會!),但是,如果可以把這些步驟都進行高并發(fā)改造,通過高效利用和釋放底層的硬件并發(fā)能力來縮短步驟執(zhí)行時間,node2vec完全可以在大數(shù)據(jù)集上以近實時的方式完成。
以圖9為例,如下的進程(步驟)都被改造為并發(fā)模式:
Node2Vec隨機游走(random walks)
1、準備預(yù)計算Exp. Table
2、詞匯學(xué)習(xí) (from Training File)
3、剔除低頻詞匯Low-Frequency Vocabularies
4、常見單詞(vectors)的Sub-sampling
5、初始化網(wǎng)絡(luò) (Hidden Layer, Input and Output Layers)
6、初始化Unigram Table (Negative Sampling)
7、Skip-Gram訓(xùn)練

圖9:中型圖數(shù)據(jù)集上運行高并發(fā)node2vec算法
通過高度的并發(fā)實現(xiàn),node2vec算法完全可以實現(xiàn)高性能與低延遲。在上圖中,我們對增強的AMZ0601數(shù)據(jù)集運行node2vec,可以在完全實時的條件下完成以上列表中的全部操作。
值得指出的是:每一秒鐘沒有實現(xiàn)高并發(fā)的運算,對于底層的計算(或存儲、網(wǎng)絡(luò))資源而言都是一種浪費——是對環(huán)境污染的一種漠視。還有其它的圖嵌入技巧具有相似的理念和步驟,例如:
取樣和標簽(Sampling and labeling)
模型訓(xùn)練(i.e., Skip-Gram, n-Gram, and etc.)
嵌入計算(Computing embeddings)
有些計算需要在頂點或子圖級別完成,有些則需要對全圖進行運算,因此也會因計算復(fù)雜度的指數(shù)級增加而耗費更多的計算資源。無論是哪一種模式,可以實現(xiàn)以下的效果將會是非常美妙的:
在數(shù)據(jù)結(jié)構(gòu)、架構(gòu)和算法實現(xiàn)層面實現(xiàn)高性能、高并發(fā);
每一步的操作都是確定、可解釋的以及白盒化的;
理想狀態(tài)下,每個操作都以一站式的方式完成(連貫的、統(tǒng)一的,無需數(shù)據(jù)遷移或反復(fù)轉(zhuǎn)換的)。
現(xiàn)在,讓我們回顧本文開頭的地方,圖2所觸及的可解釋性vs.性能的問題。決策樹有著較好的可解釋性,因為我們明白它每一步在做什么,樹在本質(zhì)上就是簡單的圖,但是它并不包含環(huán)路、交叉環(huán)路這種數(shù)學(xué)(計算)意義上復(fù)雜的拓撲結(jié)構(gòu)——因為后者更難解釋,當這種高難度的不可解釋性層層疊加后,整個系統(tǒng)就變成了一個巨大的黑盒,這也是我們今天的很多AI系統(tǒng)所面臨的真實的窘境——試問人類可以忍受一套又一套的AI系統(tǒng)在為我們服務(wù)的時候,始終以黑盒、不可解釋的方式存在嗎?例如通過AI來實現(xiàn)的人臉識別或者小微貸款額度計算,即便在10億人身上經(jīng)過認證它是準確的,你如何能確保在下一個新用戶出現(xiàn)的時候它是準確的且公正的呢?只要人類不能精準、全面的回溯整個所謂的AI計算過程,這種風(fēng)險就一直存在。不可解釋的AI,注定是不會長久的,即便在一定時期內(nèi)它可能還很火爆。不得不說,在XAI的方向上,有著巨大的IT系統(tǒng)升級換代的空間與機遇。
圖是用來表達信息與數(shù)據(jù)的高維關(guān)聯(lián)關(guān)系的,圖數(shù)據(jù)庫、圖中臺、圖計算引擎是忠實的還原高維空間表達的終極方案。如果人腦是終極數(shù)據(jù)庫,那么圖數(shù)據(jù)庫是邁進終極數(shù)據(jù)庫的必然途徑!