鄭文琛:基於網絡功能模塊的圖特徵學習 | AI 研習社79期大講堂

AI研習社按:圖是一種常見的數據結構,可以被用於許多不同的預測任務。如何從圖數據學習有效特徵是個重要的問題。我們的新概念是從點和邊出發,拓展到更高階的子圖結構(比如路徑、子圖)來幫助圖特徵學習。這些高階的子圖結構通常具有不同的功能,事實上在一起共同構造了整個網絡,所以我們稱這些高階的子圖結構爲網絡功能模塊(Network Functional Blocks)。

在這次分享中,嘉賓將用語義相關度搜索(Semantic Proximity Search)作爲一個應用例子,來介紹他們最近在探索不同粒度的網絡功能模塊、以進行有效圖特徵學習的一些進展。

分享嘉賓:

鄭文琛,微衆銀行人工智能項目組專家工程師和副總經理。主要研究方向爲結構化數據的特徵學習和遷移學習,已在相關研究領域發表了60餘篇頂級會議和期刊論文,並擁有多項專利和技術。

在圖數據特徵工程的成就獲得國際人工智能頂級會議 IJCAI 2018 年的 Early Career Spotlight,在遷移學習應用於用戶行爲識別的成就獲得國際會議ICCSE 2018年的最佳論文獎。是 Cognitive Computation 雜誌的副主編。同時也是多個頂級人工智能國際會議的編委會委員和研討會的組織者。

公開課回放地址: http://www.mooc.ai/open/course/560?=Leiphone

分享主題:基於網絡功能模塊的圖特徵學習

分享提綱:

  • 圖特徵學習簡介。
  • 網絡功能模塊的概念,及其在語義相關度搜索的應用。
  • 利用節點路徑作爲網絡功能模塊的解決方案。
  • 利用子圖擴展路徑作爲網絡功能模塊的解決方案。
  • 利用異質有向無環圖作爲網絡功能模塊的解決方案。
  • 總結。
  • 微衆 AI 招聘簡介

AI 研習社將其分享內容整理如下:

首先,我給大家做一些簡單的介紹,圖是一種常見的數據結構,我們會發現存在很多不一樣的圖結構,尤其是這種異質圖的網絡,比較常見的類型包括職場網絡、社交網絡、學術網絡和電商網絡等等。

過去我們處理圖數據/圖的特徵學習,主要解決的是「點」層面的圖的特徵學習,比如下面這張圖,左邊是圖的結構,我們通常會據此做圖的特徵學習,就是將圖上的每個點映射到第一維的空間上,這樣做的話圖上相近的點在第一維空間上同樣會很靠近,黃色的點與黃色的點聚在一起,黑色的點與黑色的點聚在一起。

將一個圖的結構映射到一個低維空間,從而得到一個點的表徵,是一種比較簡單的做法。實際上,圖的結構還挺有意思的,特別是當圖存在異質信息的時候。由於圖本身具有拓撲結構,我們會發現存在很多不同的模塊。考慮一個電商圖,這個點可能是個買家,而在功能定位上它是一個角色(role)。除了點的結構以外,還存在其他的一些結構,比如說路徑(買家-車-賣家),更復雜的我們還有子圖(賣家-書&城市-買家)。

因此,同樣的一張圖,通過不同的點、不同的圖來組成模塊,它們之間是有區別的,從點——路徑——子圖,它們各自承載不同的功能,正因爲功能的不同,隨之語義也就不同。所以我們認爲一張圖是由許多不同的模塊組成的,而每一個模塊的功能主要取決於兩個因素:一是拓撲結構,也就是說形狀是什麼樣的;二是它的預測任務究竟是什麼。

這也意味着,圖並不只是點與點之間的連接,實際上這些點與點之間的變化是很豐富的,它們構成了不同子圖的結構,這些子圖結構又爲我們帶來了豐富的語義。

根據傳統的做法,大家會直接把圖上的點單獨做成特徵向量,那麼問題來了,我們能不能利用好這些含有豐富語義的拓撲結構,無論是路徑也好,子圖也好,我們將它們擴展開來,利用語義更豐富的這些結構作爲網絡的功能模塊,再基於這些功能模塊來做網絡特徵學習,最後利用這些特徵來做點的分類、迴歸、排序等等。總之,不侷限於點的層面,而是探索網絡功能模塊這麼一個概念。這是我們的一個整體思路。

語義相關度搜索(Semantic Proximity Search)

我們近期在做的工作,是探索一些比較特殊的網絡功能模塊的使用場景。這裏我會以一個場景作爲例子介紹這個網絡功能模塊的概念。這個例子就是語義相關度搜索(Semantic Proximity Search),這是一個比較常見的異質圖搜索應用。在語義相關度搜索使用場景中,只要給定一個 query 和一個 relation,可以對其他節點進行排序,讓我們對這個應用有了很大的想象空間。再者,異質圖本身存在不同的功能模塊,用來做語義相關搜索可說是最適合不過。

那麼做語義相關檢索會遇到哪些挑戰呢?我們認爲主要有兩個:

1)點嵌入(node embedding)是一個比較間接的解法。我們做語義相關度檢索,關心的是兩個節點之間的語義相關度,對於點嵌入來說,它更關心的是每個節點之間的向量。考慮到兩個節點之間並不一定直接相鄰的,在給定兩個點的向量後,我們需要算出兩個點之間的距離,這意味着必須通過很多種方式去計算,然而我們並不知道哪種計算方式是最好的。此外,在大部分情況下,點嵌入更多被用來處理同質圖;如果是異質圖,我舉個例子:「我買了一個牙刷」,不能說我跟牙刷的 embedding 很像,這說明什麼呢?傳統的 node embedding 是很難處理這種圖的異質性的。總而言之,node embedding 是一個比較間接的解法,因爲關心的是兩個點之間的結構,而不是單個點的結構。

2)有沒有一些工作是專門做異質圖嵌入的呢?有,比較常見的是知識圖譜嵌入,目前這塊有許多特別好的工作。我們認爲知識圖譜的 embedding 是非常有意思的解法,不過要強調的是,知識圖譜其實是比較特殊的異質圖,一般會分爲 head、 relation、tail 幾個部分,然而一般的異質圖很少存在這麼「乾淨」的關係鏈。如果考慮的是兩個點之間的距離,那麼我們關心的重點不是究竟哪個點先嵌入的,而是這兩個點之間的結構的嵌入。

這是我們認爲在工作上比較有挑戰性的地方。

利用節點路徑作爲網絡功能模塊的解決方案

接下來我會介紹我們的三個工作——三種用於解決語義相關搜索任務的網絡功能模塊(Network Function Blocks)。

第一個工作很簡單,我們利用異質路徑作爲網絡功能模塊,我們的主體思路是,既然關心兩個節點之間的距離,那就乾脆把兩個點之間的網絡結構做成輸入,由此算出引向量特徵,再綜合算出相關度。這樣做的好處是,一是把節點之間的結構變成一個映射,這是一種比較直接的做法;另外,由於這是一個異質子圖結構,這種做法可以避免我們不停地去考慮每個節點的處境。

在具體的操作上,我們首先把兩個節點之間的結構(通過異質路徑獲得)輸入到特徵學習裏(可以採用任意序列的學習模型),接着做一些 discounted pooling,因爲對於整個特徵表達而言,有些路徑可能很長,有些路徑可能很短,有些路徑則可能不是非常顯著。結束後,我們將這些不同的路徑整合成一個向量,最終得到一個 embedding,再將 embedding 乘以參數向量來得到最終的距離值。對於語義相關度搜索來說,只要給定點和點之間的距離,我們就可以做一個排序。這也是我們選擇做一對一的訓練和對路徑做 discounted pooling 的原因,過程非常簡單,結果卻挺有意思的。

ProxEmbed 是一種基於路徑的操作方法,事實上是通過一堆路徑給兩個節點之間的網絡結構做近似。這樣的 idea 也被利用到許多其他領域的工作裏。這種 path-based 的方法儘管很成功,但我們後來發現路徑是一種比較低階的結構,如果對每個路徑進行單獨考慮,其實能夠挖掘出來的信息是非常有限的,除非擁有非常優秀的 pooling 策略,不然你沒法判斷信息是如何被不同路徑相互看到的,因此不一定足以描述豐富的語義。

利用子圖擴展路徑作爲網絡功能模塊的解決方案

接着我們做了第二個工作,我們將路徑做了擴展。剛剛我們有提到兩個節點之間的關係不只有路徑,還包括頻繁子圖,於是我們就在思考,有沒有可能通過頻繁子圖去擴充路徑的結構。爲什麼要做路徑的擴充呢?因爲點和點之間的路徑能夠很好地描述點和點之間的距離,如果再給點和點之間的關係增加一些豐富的子圖語義信息,路徑的表達能力將會因此大大增強。通過增加頻繁子圖的語義信息,我們最終可以得到 subgragh-augmented path,接着我們將它作爲模型特徵的學習,將 subgragh-augmented path 作爲映射,從而學習到特徵表達,最終算出它的語義距離(Proximity Score)。

可能有人會問,爲什麼在具體的操作上考慮的是用戶和用戶之間的關係,而不是任意兩個點之間?原因是我們在提到語義相關搜索的時候,其實指的是和用戶相關的語義相關搜索,這種應用考慮的更多還是用戶和用戶之間的關係,所以我們只對用戶做兩兩交叉。另外,這種交叉還有一個好處,那就是可以減少計算的複雜度。

考慮到並不是所有子圖、S-node、S-path 的貢獻都是一樣的,我們專門做了一個分層級注意力(hierarchical attention)模型來幫我們做篩選。此外,我們還考慮到子圖路徑其實是有結構的,所以專門針對子圖的 embedding 結構的相似性,我們來描述兩個節點之間的 embedding 關係,由此得到每一個節點和節點之間的 subgragh-augmented path 的一個全新 embedding。

我們的工作基於這麼一個假設,那就是子圖的 patterns 和 instances 都是預先算好的。在實際的操作中我們發現這個假設是可以被接受的,因爲頻繁子圖經常會被離線算好,再用來作爲圖索引。我舉幾個比較典型的例子,比如阿里巴巴的反欺詐和 Twitter 的用戶內容推薦,都是如此。另外,我們發現過往的一些工作中,也存在很多這種高效的子圖挖掘和匹配的算法。

那麼問題來了,我們能不能不做子圖挖掘,然後將這些豐富的子圖結構給利用起來呢?

利用異質有向無環圖作爲網絡功能模塊的解決方案

帶着這個問題,我們又做了另外一項工作,那就是利用異質的有向無環圖作爲網絡功能模塊。我們使用 DAGs(Directed Acyclic Graphs)代替路徑去計算節點結構的特徵,主要是基於這麼一項考慮:關係通常是有向的,然而路徑的表達能力卻有限。另外,DG 一般是環狀結構,環則意味着更長的距離,對於描述兩個點之間的關係並沒有多大好處。況且從計算角度來說,環結構對於圖的 inference 是不友好的。於是我們將部分的環去掉,最終得到 DAG 結構。

接下來,我們需要解決的是 DAGs 的產生效率問題,爲此我們引入了一個距離可感知的 DAG 產生機制。我們會預先進行採樣,採樣好路徑以後,我們將這些路徑拼成一個圖,然後利用路徑遍歷來構建 DG,過程中通過一套計算來進行去環,經過不停地遍歷所有的 path 以後,我們最終可以得到 DAG 結構。這樣處理的好處是,可以避免一個點到另一個點的結構只有一種 DAG。接着我們可以利用一堆 DAG 去給兩個點之間的結構做近似,讓語義變得更加豐富。

解決了 DAG 的產生效率問題,接下來我們要解決的是如何去描述和做特徵學習,爲此我們做了一個距離遞減機制(recursive distance discount mechanism),因爲我們發現點和點之間的結構路徑的貢獻率不一定都是一樣的,這就凸顯了距離的重要性。當我們仔細觀察每一個 DAG 的結構時,每個節點都有不同的前驅。爲了區分不同節點的迭代貢獻率,我們可以根據不同前驅到達 query 的距離,將之與 predecessor 綜合起來進行計算,來得到最終目標節點的 embedding,每個節點我們可以不停往後推,直至得到最終的 embedding 爲止。

實驗結果

最後我們做了一些實驗,主要測試三個數據集的六種語義關係,這些數據集包括了 LinkedIn、Facebook 和 DBLP。因爲這是一項排序任務,因此我們加入了一些評估指標,那就是 NDCG(normalized discounted cumulative gain)和 Map(mean average precision)。

同時我們還列了一些比較典型的 Baseline 算法:首先是 deep walk ranking(DWR)算法,它從一個點採集一堆的路徑,來學習節點特徵;第二個是 meta-graph proximity(MGP),通過數任意兩個節點間的 meta-graph 個數來計算節點間距離;第三個是 Metapath2vec,通過採樣 metapaths 來學習節點特徵。

最終結果顯示,ProxEmbed、SPE 以及 D2AGE 三者在不同的 symmetric 和 asymmetric 裏的效果都比較好,當中 SPE 的表現是最出色的,因爲 SPE 爲了在挖掘頻繁子圖方面做了較多工作,因此得到的信息更多更好。其次就是 D2AGE,效果跟 SPE 比較接近,有些地方甚至表現得更好,說明了即使不挖掘頻繁子圖,也有可能獲得比較穩定的效果。

總結

最後我再總結以下我們的工作。我們主要想利用圖特徵學習來解決語義相關度檢索任務,而我們認爲點嵌入(node embedding)是一個間接的解決方案,所以我們提出把 query 和 target 之間的結構拿來做特徵學習。具體要如何獲得結構特徵?我們採用的是 network functional blocks 方法,也就是三種基於網絡功能模塊的圖特徵學習方法。第一項工作是 ProxEmbed,利用異質路徑作爲網絡功能模塊;第二項工作是 SPE,利用子圖擴充路徑作爲網絡功能模塊;第三項工作是 D2AGE,利用有向無環圖作爲網絡功能模塊。

最後這些模塊都在數據集上取得了比 baselines 要好的效果。

我們整理了一份關於 network functional blocks 近期工作的文獻集,同時我們也開源了我們所有的工作數據和代碼,感興趣的同學可以到網上去檢索,然後自己做一些復現。

分享完我們的工作,我想順便做個招聘廣告。我目前就職的微衆銀行,是騰訊發起的國內首家民營銀行、互聯網銀行。我們目前在微衆做很多的 AI 落地實踐,包括如何利用 AI 獲客、如何用機器人來低成本高質量地服務客戶、以及如何在保護隱私的前提下跨越數據牆和最大化數據使用效率等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章