阿里開源 GNN 框架 Graph-Learn,實現了各類可複用模型和編程接口

阿里開源 GNN 框架 Graph-Learn,實現了各類可複用模型和編程接口

近日,阿里巴巴開源了面向圖神經網絡(GNN)的框架Graph-Learn(GL,原AliGraph)。該框架由阿里內部團隊研發,面向工業場景而設計,為當下主流GNN算法提供了基礎運行框架。

  • 項目地址:https://github.com/alibaba/graph-learn

由於起源於工業界,GL天然支持大規模圖數據、異構圖、屬性圖等十分必要但棘手、而當下深度學習框架(TensorFlow、PyTorch等)又不擅長的問題。同時,考慮到上層NN極具面向業務定製化的特點,GL支持與任意Python接口的深度學習框架結合。GL框架輕便靈活,內部模塊都預留了充足的擴展空間,方便基於不同的場景進行定製。此外,GL內置了基於TensorFlow實現的各類GNN模型和編程接口,供複用和參考。

阿里內部早在幾年前就開始了GNN相關的探索,從研究到實際落地積累了很多有價值的經驗。現在把這些經驗傳遞出來,希望能對相關從業者有所幫助。

阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口

GL 設計初衷

GNN是當下AI領域中非常熱門的子領域,被研究者給予了很高的期待。在一切皆向量的深度學習中,深度學習逐漸由感知學習邁向認知學習。

從深度學習過渡到GNN,開發者深知落地一個GNN算法的難點在哪裡、阻礙GNN被大範圍應用的環節是什麼。GNN雖熱,但也並不像每個人說的那麼好,應用場景的拓寬、算法理論的變化、編程範式的變化都可能帶來平臺的變化甚至顛覆,面對這些不確定性,平臺究竟該做什麼?

阿里將這些摸爬滾打的經驗積累下來,融入到GL,無論是對GL的直接用戶、還是參考GL做類似系統設計的同學,希望有所助益。只有更多人瞭解GNN,玩的起GNN,由感知到認知的跨越才不會是一句空話。

GL遵循輕便易用的原則,充分保留內部子模塊的擴展性,併兼容開源生態。概括來講包括:輕量可移植,模塊可擴展,接口可複用,生態可兼容。

輕量可移植

和主流深度學習框架一樣,GL平臺代碼由C++寫成,Linux系統下,所有支持C++11的編譯器都可以對源碼進行編譯打包,所依賴的幾個外部庫也都是開源社區廣為人知的。第一次編譯過程由於下載外部依賴,需要大概幾分鐘,後續每次開發編譯打包只需秒級,部署成本很低。GL可運行於物理機,也可運行於Docker內,也可基於阿里雲的ACK服務一鍵拉起,確保分佈式的機器間網絡連通即可。

模塊可擴展

系統內部實現高度模塊化,每個模塊都可獨立擴展。可擴展給系統足夠的彈性,以適應未來發展的不確定性,以及和不同運行環境的適配。可擴展也為廣大開發者提供自由伸縮的空間,快速進行原型驗證,而不侷限於系統當前提供的功能。

存儲模塊,抽象了FileSystem和Storage兩層,如需擴展自定義存儲,一般只需實現FileSystem接口即可,或者通過實現Storage接口直接外接其他圖存儲系統。Partition模塊,定義了數據如何在分佈式Server間分佈,以及一個分佈式計算請求如何正確的轉發,新的Partition策略(例如某種更適合業務場景的圖切分)只需擴展該模塊即可。計算模塊,由一個個算子組成,算子可自定義。算子被框架分佈式執行,每個算子定義的計算根據指定的Partition策略進行轉發,並可通過資源的形式訪問全局存儲。目前內置的算子種類包括:Sampling,Negative Sampling,Aggregation,Graph Traverse,Graph Query,Graph Update。RPC模塊,解耦於其他模塊,只負責請求的收發,很容易對接其他RPC框架。Naming模塊,用於分佈式地址發現,可方便對接不同的調度環境。

阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口

接口可複用

接口可複用體現在兩個方面:向後兼容與功能擴展。兼容性不言而喻,很多開發者受困於版本更新後的接口兼容問題。功能擴展,一般的做法是新增API,意味著在用戶能關注到的基礎上帶來學習成本。新增API對用戶的困擾相對小於兼容性,但API增加也帶來龐大的系統維護成本。在GNN快速迭代的當下,功能擴展幾乎時刻都在發生,比如新增一種圖採樣算法,而向後兼容更是由於應用場景和算法更迭帶來的變化而不容易做到,我們儘可能使得當這些變化發生時,對用戶的損失最小。

GL通過提高User Interface的抽象程度,來降低上述風險。我們發現很多GNN研究者都有圖的背景,因為對Gremlin或多或少有了解。Gremlin是一種抽象的圖查詢語言,Gremlin之於Graph,類似SQL之於Table。GL設計了一套Gremlin-Like的python接口,接口內部會翻譯成各種算子實現,每新增一種算子,只需改變接口對應的參數即可。例如,用戶隨機採樣某種頂點的鄰居,當新增一種採樣算法時,只需改動如下:

<code>import graphlearn as gl/<code><code>g = gl.Graph/<code><code># sample 10 neighbors for each node in this batch by random sampler/<code><code>g.V("vertex_type").shuffle.batch(512).outV("edge_type").sample(10).by("random")/<code><code># sample 10 neighbors for each node in this batch by new sampler/<code><code>g.V("vertex_type").shuffle.batch(512).outV("edge_type").sample(10).by("new")/<code>

在GNN模型編程接口方面,我們也進行了一定程度的抽象,且提供了諸多可供參考示例。

生態可兼容

GL提供python形式的用戶接口,結果以NumPy形式呈現,易於上手。此外,GL可與當下主流的深度學習框架,如TensorFlow、PyTorch等配套使用,豐富上層NN的表達能力。在一個e2e的GNN應用場景中,GL和深度學習框架之間有良好的互補關係,把計算交給擅長的框架,Graph->GL,Numeric->TensorFlow、PyTorch。

阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口

GL 的落地應用

GL已在阿里集團內數十個場景落地,包括搜索推薦、安全風控、新零售、知識圖譜等。GL日常任務數據為規模達百億級邊、十億級頂點的異構圖,且包含百餘個混合類型屬性。相比之前通過大數據計算任務(如Map-Reduce)把圖數據處理成可供深度學習框架使用的樣本的方式,每個模型日均可節省萬CPU時(core x hour)算力、百TB存儲,從GNN算法開發到上線的週期被縮短到原來的1/3,而且帶來了顯著業務效果的提升。此外,GL還獲得了2019世界人工智能大會SAIL先鋒獎。從一鍵運行到深度定製

GL基於大規模異構圖的場景,提供了一套簡潔靈活的API,加速圖神經網絡的開發。圖神經網絡學習有兩種方式,一種是在全圖上通過鄰接矩陣計算,比如GCN/GAT等算法,這種方式受到內存的限制;另一種方式是對圖採樣,做mini-batch的計算,比如GraphSAGE等,這種方式更具有擴展性。

GL支持這兩大類型的算法,提供了GraphEngine API、Data Model API以及Graph learning models。

工業級大規模GNN圖採樣

採樣作為GL的核心功能,在所有使用graph-learn的作業中都起著非常重要的作用。常見的用法是遍歷圖的點或者邊產生正樣本,然後採樣給定節點的n-hop鄰居對節點進行編碼,對於非監督學習場景使用負採樣來得到負樣本並對負樣本做類似的鄰居編碼。最後對採樣後的結果進行特徵的組合和reshape等處理成batch的數據,接入頂層算法模型。

基於這一流程graph-learn目前支持GCN(包括採樣版實現), GAT(包括採樣版實現), GraphSage, 二部圖GraphSage, DeepWalk, LINE, TransE等算法,並且可以方便擴展實現其他的圖學習模型。

GNN風控落地場景

阿里將graph-learn應用在安全防控的各個環節之中,取得了良好的效果,下面重點介紹幾個GNN的風控落地場景。

垃圾註冊識別

淘寶每天新註冊的用戶中,正常用戶佔絕大多數,但也有許多黑灰產用戶偽裝成正常用戶,企圖獲取一個賬號從而進行刷單、垃圾評論等等活動,這些賬戶被稱為“垃圾賬戶”。“垃圾賬戶”如果註冊通過,就可能從事各種危害活動,因此在註冊時將其識別並刪除非常有必要。通過手機號,設備信息,ip地址等多種關係構建賬戶與賬戶之間的連接關係,基於 graph-learn 構建賬戶和賬戶之間的同構圖以刻畫賬戶的新表徵,垃圾註冊圖模型目前線上已穩定運行近1年,相比於單純使用賬戶的特徵,每日額外識別10-15%的垃圾賬號。

淘系假貨識別

通過仔細甄別假貨商品和售假賣家之間的多種關係,比如售假賣家之間的團伙關係,物流等產業鏈關係,並且通過這些關係構建商家-商品之間的異構圖,基於graph-learn開發的淘寶假貨圖模型目前已在服飾類、鞋類、首飾等諸多大類中落地,相比於直接使用商品、商家的特徵信息,圖模型能夠額外識別10%以上的假貨商品。

閒魚垃圾評論識別

閒魚是目前國內最大的二手商品交易平臺,買賣家可以在商品下面評論進行溝通和詢問,但其中也有黑灰產會在商品下面留下一些涉嫌廣告、欺詐、假貨甚至違禁的評論,影響了用戶的使用體驗,也給用戶帶來了風險。為了識別閒魚上的垃圾評論,阿里結合業務特點,自主設計了基於異構圖卷積網絡的反垃圾系統-GAS,相對於單節點的深度模型,能夠在同樣準確率情況下獲得16%的覆蓋率提升,同時我們將該項目中的方法進行總結,所著文章《Spam Review Detection with Graph Convolutional Networks》發表在信息檢索領域頂級會議CIKM2019上,並斬獲最佳應用論文獎。

阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口

惡意評價識別

惡意評價包括評價要挾、同行攻擊和虛假評價等多種類型,在淘寶平臺上一直是困擾商家的主要問題之一。和傳統圖模型相比,異構圖神經網絡通過聚合不同子圖的方式消除主觀上對強弱邊的判斷,能夠通過圖間融合的方式融合不同強度的邊信息。在淘系惡意評價的場景上,基於graph-learn 開發的惡意評價圖模型優化了整體數據準備流程,提高訓練效率,上線後已穩定運行近半年,日均額外識別7%以上的惡意評價。

“職業吃貨”行為識別

淘寶平臺上還有一部分“職業吃貨”存在,他們在淘寶、餓了嗎等平臺瘋狂下單,收貨後卻立即申請“僅退款”而拒不退貨,繼而以職業投訴等方式威逼商家妥協,這就是典型的“職業吃貨”行為。對這種濫用淘寶會員權利,損害平臺正常運營秩序的人,通過各種媒介關係基於graph-learn構建“職業吃貨”圖模型,相對於GBDT的傳統模型,“職業吃貨”圖模型在相同準確率的情況下,額外識別了15%的惡意買家。

阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口

GL 下一步發展規劃

圍繞GL,阿里未來預計會在以下幾個方面投入精力。

新硬件

以圖像為代表的應用催化了GPU的發展,可以預見,Graph作為實際生產中最廣泛的數據格式,與NN的結合,也會引發更多從硬件角度追求卓越性能的思考。目前阿里內部已經在這方面開始了探索。

新算法

近年來GNN算法相關的paper主要在GCN框架下做延伸,編程方式比較固定,目前或多或少遇到了一些瓶頸。阿里也開始在算法理論上嘗試做一些創新,GL的易用和可擴展會助力這一過程。

新業務

GNN覆蓋的業務非常廣,也會帶來很多意想不到的效果。當前落地的應用主要集中在了少數大公司內,還沒有普及開來。GL的開源也希望能夠助力相關從業者,共同擴大GNN的生態。


分享到:


相關文章: