技术总结:图算法、开源工具及其在工业界的应用场景概述
知識圖譜本質上是一種圖結構,在圖內部數據規模大且質量高、外部算力足夠的情況下,充分利用好圖算法,能夠最大程度地發揮出其數據價值。實際上,圖(Graph)是一個常見的數據結構,現實世界中有很多很多任務可以抽象成圖問題,比如社交網絡,蛋白體結構,交通路網數據,以及很火的知識圖譜等,甚至規則網絡結構數據(如圖像,視頻等)也是圖數據的一種特殊形式。而隨著數據多樣性的發展,圖計算已經成為業界的一個重要的研究方向,其中圖神經網絡廣泛應用于圖的表征學習,與傳統的圖學習相比,既能學習圖網絡的拓撲結構,也能聚合鄰居特征,從而能夠有效的學習到圖網絡中的信息,為后續的推薦工作起到關鍵作用。
一、圖模型的典型應用場景
圖模型的應用場景可以分為:節點分類、鏈接預測、聚類、推薦等幾類。其中,節點分類旨在基于其他標記的節點和網絡拓撲來確定節點的標簽(也稱為頂點)。鏈路預測是指預測缺失鏈路或未來可能出現的鏈路的任務。聚類用于發現相似節點的子集,并將它們分組在一起;推薦場景則根據節點特征以及其他特征進行搜索推薦。
1、搜索推薦場景
推薦場景是圖模型的一個典型應用。例如,在社交人物中的推薦場景中,可以通過一些圖結構結合一些算法,比如典型的pagerank算法,找到關鍵人物,通過對關鍵人物采取特定性策略(比如定向推廣)以提升推薦效果,也可以基于地理、人物任務關系、興趣愛好組成的圈子,進行產品和廣告的推薦。
2、團伙挖掘場景
關聯關系識別團伙,無監督方法:通過連通子圖算法識別出一個個連通的社區,如果社區規模較大,可能背后業務含義是黑產控制一批賬戶。 定義社區規模為score,通過調節閾值來控制誤殺、召回。
有監督方法-傳統:等價為節點分類問題,通過提取節點業務特征、拓撲特征、所屬社區特征,訓練一個機器學習模型(如GBDT)去預測。有監督方法-圖神經網絡,將節點業務特征X與網絡拓撲結構A作為輸入學習函數 ,用于對未知數據的預測。
3、鏈接預測場景
鏈路預測場景中主要完成的是對網絡中的兩個節點是否可能存在鏈路進行預測。例如,在推薦系統中,我們推薦的是高度“連接”的產品。可以用GNN訓練模型來預測這種鏈路是否存在。
4、節點分類場景:
與序列自然語言處理類似,圖模型還可以應用應用于主題文本分類,包括新聞分類、Q&A、搜索結果組織等。
二、圖的概念與主要類型
“圖”是一種直觀自然的數據結構,在數學上表示成G=(V, E),
從圖的屬構成上看,圖可以分成連通圖與非連通、未加權圖與加權圖、有向圖與無向圖、非循環圖和循環圖等多種類型。其中: 1)連通圖與非連通圖。 連通圖(Connected Graphs)指圖內任意兩個節點間,總能找到一條路徑連接它們,否則,為非連通圖(Disconnected Graphs);2)未加權圖與加權圖。**未加權圖(Unweighted Graphs)的節點和邊上均沒有權重,對于加權圖(Weighted Graphs),所加權重可以代表成本、時間、距離、容量、甚至是指定域的優先級;3)有向圖與無向圖。**在無向圖(Undirected Graphs)中,節點的關系是雙向的(bi-directional),如朋友關系,而在有向圖(Directed Graphs)中,節點的關系可以指定方向,邊如果指向了一個節點,稱為 in-link,邊如果從一個節點出發,則稱為 out-link;4)非循環圖和循環圖。*圖論中,循環指一些特殊的路徑,它們的起點和終點是同一個節點。在非循環圖(Acyclic Graph)中,不存在循環路徑,相反則為循環圖(Cyclic Graphs)。
2、節點關系分類下的圖類型
根據節點關系的不同,可以將分類下的圖類型主要包括同構圖(Homogeneous graph),二部圖(Bipartile graph)和異構圖(Heterogeneous graph)。1)同構圖:**同構圖是一個最簡單的圖類型,圖中所有的節點(node)類型和邊(edge)類型都只有一種。常見的圖算法基本是作用在同質圖中,圖中的節點類型和關系類型都僅有一種。2)二部圖:**二部圖中只有兩種類型的節點,并且一種類型的節點只會對另一種類型的節點產生關系。如傳統的推薦系統中用戶與物品的形成的關系圖就是二部圖。3)異構圖:**異構圖中可包含多種類型節點和多種關系,相比同構圖可以提供更多的信息,減少了冗余邊,并且能展示更好的連接關系。比如在風險中我們的交易圖。在交易發生過程中會使用到很多實體(圖上表現為節點),除了交易本身,比如IP郵箱、郵寄地址、設備ID等都是圖上的節點。
三、圖模型的典型算法
1、圖的路徑搜索(生成)
圖搜索算法(Pathfinding and Search Algorithms)旨在探索一個圖,用于一般發現或顯式搜索,這些算法通過從圖中找到很多路徑,但并不期望這些路徑是計算最優的(例如最短的,或者擁有最小的權重和),在實現上包括廣度優先搜索和深度優先搜索,它們是遍歷圖的基礎,并且通常是許多其他類型分析的第一步。
路徑搜索算法,具體可進一步分為DFS(深度優先遍歷) & BFS(廣度優先遍歷)、最短路徑、最小生成樹、隨機游走算法等。最短路徑(Shortest Paths)算法和隨機游走算法(Random Walk)是其中的兩個重要概念。
最短路徑(Shortest Paths)算法計算給定的兩個節點之間最短(最小權重和)的路徑,能夠給出關系傳播的度數(degree)以及兩點之間的最短距離,并計算兩點之間成本最低的路線。這個在networkx、neo4j等圖數據庫中進行節點關聯分析等場景中有直接應用。
隨機游走(Random Walk)算法從圖上獲得一條隨機的路徑,該算法從一個節點開始,隨機沿著一條邊正向或者反向尋找到它的鄰居,以此類推,直到達到設置的路徑長度,一般用于隨機生成一組相關的節點數據,作為后續數據處理或者其他算法使用。例如隨機游走生成的序列,可以作為node2vec 和 graph2vec 算法的一部分,用于節點向量的生成,從而作為后續深度學習模型的輸入,也可以作為 Walktrap 和 Infomap 算法的一部分,用于社群發現。如果隨機游走總是返回同一組節點,表明這些節點可能在同一個社群,也可以作為其他機器學習模型的一部分,用于隨機產生相關聯的節點數據。
2、圖的中心性(重要性)計算
圖的中心性算法(Centrality Algorithms)用于識別圖中特定節點的角色及其對網絡的影響,能夠幫助識別最重要的節點,包括節點的可信度、可訪問性、事物傳播的速度以及組與組之間的連接。在實現上,圖的中心度算法包括DegreeCentrality、 ClosenessCentrality、BetweennessCentrality、PageRank幾種。 其中:
度中心性(Degree Centrality) 表示連接到某節點的邊數,一個節點的節點度越大就意味著該節點在網絡中就越重要;接近中心性(Closeness Centrality)從某節點到所有其他節點的最短路徑的平均長度,以此反映在網絡中某一節點與其他節點之間的接近程度;介中心性(Betweenness Centrality)表示某節點在多少對節點的最短路徑上,能夠反映相應的節點或者邊在整個網絡中的作用和影響力。
PageRank 算法是所有的中心性算法中最為出名的一個,并在當前的網頁排名,文本關鍵詞抽取中使用十分廣泛。該算法統計到節點的傳入關系的數量和質量,從而決定該節點的重要性,不但考慮節點的直接影響,也考慮 “鄰居” 的影響力。例如,一個節點擁有一個有影響力的 “鄰居”,可能比擁有很多不太有影響力的 “鄰居” 更有影響力。例如,在網頁排名當中,不同的網頁之間相互引用,網頁作為節點,引用關系作為邊,就可以組成一個網絡,被更多網頁引用的網頁,應該擁有更高的權重;被更高權重引用的網頁,也應該擁有更高權重。在文本中,通過相似度將不同的句子或者關鍵詞作為節點進行連接,通過 PageRank思想的變體textrank也可以得到相應重要的詞語或者句子,完成關鍵詞提取或者摘要生成的任務。
3、圖的社群發現(劃分)
社群發現算法,又稱社團發現,其目標就是將節點準確地劃分至不同的社團中, 形成不同的聚類簇,簇內部連邊稠密、與外部連邊稀疏的節點,這些聚簇也就是社團(Community),這一算法對于識別社群對于評估群體行為或突發事件十分關鍵。對于一個社群來說,內部節點與內部節點的關系(邊)比社群外部節點的關系更多。識別這些社群可以揭示節點的分群,找到孤立的社群,發現整體網絡結構關系。在具體實現上,包括MeasuringAlgorithm、ComponentsAlgorithm、 LabelPropagation Algorithm、 LouvainModularity Algorithm等算法,其中, LabelPropagation Algorithm、 LouvainModularity Algorithm算法使用較多。
標簽傳播算法是一種社群快速發現的算法,該算法認為節點的標簽完全由它的直接鄰居決定,在初始階段,標簽傳播算法對于每一個節點都會初始化一個唯一標簽,每一次迭代都會根據與自己相連的節點所屬的標簽改變自己的標簽,更改的原則是選擇與其相連的節點中所屬標簽最多的社區標簽為自己的社區標簽,隨著社區標簽不斷傳播,最終連接緊密的節點將有共同的標簽,每個節點都有一個標識其所屬社團的標簽,也就完成了社團劃分。計算結果的高隨機性,重復運行兩次 LPA 的社團劃分結果往往并不一致。
Louvain Modularity 算法,非常適合龐大網絡的社群發現,算法采用啟發式方式從而能夠克服傳統 Modularity 類算法的局限。這類算法可以用于檢測網絡攻擊,在大規模網絡安全領域中進行快速社群發現,并以來預防網絡攻擊,也可以用于主題建模,如從 在線社交平臺中提取主題,基于文檔中共同出現的術語,作為主題建模過程的一部分。
四、基于圖的嵌入算法
圖的嵌入學習是將機器或深度學習算法應用于圖網絡的重要前提。圖嵌入,又稱Graph Embedding(GE,Network Embedding),是一種將圖數據(通常為高維稠密的矩陣)映射為低微稠密向量的過程,是將節點和關系進行數值化的重要方式,其思想在于把圖中的節點或者邊嵌入到一個低維的向量空間中,且節點或邊在該低維空間的關系能比較完整地保留原圖的結構信息,以解決圖數據難以高效輸入機器學習算法的問題。圖形嵌入領域已經有了大量的研究,大體上分為三大類:基于因子分解的方法、基于隨機游走的方法以及基于深度學習的方法。基于隨機游走的嵌入學習先進行圖的結構學習,再與屬性特征融合進行下游任務學習,學習任務是割裂的,圖神經網絡的結構學習和下游任務是端對端的一個學習過程,比起割裂的學習更加高效,性能也更好。
1)基于因子分解的圖嵌入
圖分解(Graph Factorization)使用鄰接矩陣的近似分解作為嵌入。LINE擴展了這種方法,并試圖保持一階和二階近似。HOPE通過使用廣義奇異值分解( SVD )分解相似性矩陣而不是鄰接矩陣來擴展LINE以試圖保持高階鄰近性。SDNE 使用自動編碼器嵌入圖形節點并捕捉高度非線性的依賴關系。
2)基于隨機游走的圖嵌入
做過自然語言處理的朋友都知道,word2vec 是一種常用的 word embedding 方法,其通過語料庫中的句子序列來描述詞與詞的共現關系,進而學習到詞語的向量表示,Graph Embedding 采用了類似 的的思想,使用圖中節點與節點的共現關系來學習節點的向量表示,其首先在 graph 中隨機游走生成頂點序列,構成訓練集,然后采用 skip-gram 算法,訓練出低維稠密向量來表示頂點。GE類的算法本質上就是將低階特征進行Embedding化,業界常用的有DeepWalk、Node2Vec(基于拓撲結構的)、LINE(加入屬性信息的)、EGES、以及通過標簽信息和隨機性共同考慮去做的圖剪輯。Perozzi等人在KDD 2014提出的DeepWalk模型是圖嵌入學習的一個開山之作,該方法采用截斷式隨機游走方式把圖中每個節點的局部拓撲結構轉換成序列信息,并把Word2vec模型應用于階段一產生的序列數據,學習序列中每個節點的embedding表示。圖嵌入這種做法通常適用于無監督學習,其監督信號與最終目標通常不一致,只適用于多階段訓練。也沒有充分發掘高階的潛在關聯關系。
3)基于圖神經網絡的圖嵌入
圖神經網絡,又稱(Graph Neural Networks,GNN),指在圖上利用圖神經網絡,通過端對端的方式,在一個學習過程中進行任務學習。圖神經網絡在學習的過程中,可以分為信息傳遞和信息聚合兩個階段,前者通過對鄰居節點的Embedding進行消息傳遞,后者對鄰居節點的Embedding進行聚合處理, 不同的GNN對應的聚合方式會有不同, 譬如取均值,加權求和,做基于長短期記憶(LSTM)變換處理。
根據消息的聚合方式不同,目前有圖卷積網絡GCN、GraphSage、圖注意力機制GAT等常見的消息聚合方式。其中:圖卷積網絡(GCN)是對鄰居的Embedding取均值然后與目標節點的Embedding進行加權求和;GraphSage在K-hop的隨機采樣的子圖上對其鄰居進行廣義的聚合,然后與目標節點的Embedding進行拼接,其聚合方式包括取均值、池化操作以及LSTM計算等;圖注意力機制(GAT)認為不同的鄰居節點其重要性是不同的,在具體聚合的過程中根據注意力機制,首先計算目標節點和鄰居節點的注意力系數,然后把注意力系數標準化后的值作為權重。
實際上,圖嵌入的目標是發現高維圖的低維向量表示是一件極具挑戰的事情,與word2vec一樣,如何選擇一個質量高的嵌入表示,直接決定了下游任務的精度,一個好的圖嵌入,需要從屬性選擇、可擴展性以及維數等多個方面進行考慮。例如,在屬性選擇上,節點的“良好”向量表示應保留圖的結構和單個節點之間的連接。在實際嵌入時很難找到表示的最佳維數,較高的維數可能會提高重建精度,但具有較高的時間和空間復雜性。較低的維度雖然時間、空間復雜度低,但無疑會損失很多圖中原有的信息。
五、開源圖算法或模型工具
幸運的是,目前已經陸續開源出來了一些可以即插即用的圖算法代碼、工具或者框架,這為我們進行快速的實驗、效果驗證、工程落地提供了有利的條件。通過收集整理,下面列舉了當前較為流行的圖表示學習與計算框架、知識圖譜表示學習框架。
1、圖表示學習與計算框架
**1)PyTorch Geometric(PyG):**由德國多特蒙德工業大學研究者推出的基于PyTorch的幾何深度學習擴展庫。PyG在學術中是比較熱門的框架,但是PyG對于異構圖以及大規模的圖的學習存在著較大的局限性。地址:https://github.com/rusty1s/pytorch_geometric、https://pytorch-geometric.readthedocs.io/
**2)tf_geometric:**受到PyG啟發,為GNN創建了TensoFlow版本。在其Github開源的demo中,可以看到GAE、GCN、GAT等主流的模型已經實現。地址:https://github.com/CrawlScript/tf_geometric;https://tf-geometric.readthedocs.io/
**3)Deep Graph Library(DGL):**由New York University(NYU)和Amazon Web Services(AWS)聯合推出的圖神經網絡框架。如今已發布至0.4版本的DGL更是全面上線對于異質圖支持模塊,復現并開源了相關異質圖神經網絡的代碼,如HAN、Metapath2vec等,此外,DGL也發布了訓練知識圖譜嵌入專用包DGL-KE,并在許多經典的圖嵌入模型上進一步優化了性能。地址:https://github.com/dmlc/dgl;https://docs.dgl.ai/
**4) CogDL:**清華大學知識工程研究室推出了一個大規模圖表示學習工具包 CogDL,可以讓研究者和開發者更加方便地訓練和對比用于節點分類、鏈路預測以及其他圖任務的基準或定制模型。該工具包采用 PyTorch 實現,集成了Deepwalk、LINE、node2vec、GraRep、NetMF、NetSMF、ProNE 等非圖神經網絡和GCN、GAT、GraphSage、DrGCN、NSGCN、GraphSGAN 等圖神經網絡模型基準模型的實現。地址:https://github.com/THUDM/cogdl
5)GraphEmbedding: github上開源的圖embedding算法實現,包括DeepWalk、LINE、Node2Vec、SDNE和Struc2Vec。地址:https://github.com/shenweichen/GraphEmbedding。
**6)Spark GraphX:**企業對龐大網絡中社區結構的洞察需求也越發迫切,基于分布式架構的圖處理引擎應運而生,比如Google的Pregel, Apache的開源的圖計算框架Giraph,以及卡內基梅隆大學主導的GraphLab等。Spark GraphX是一個分布式圖處理框架,它是基于Spark平臺針對圖計算和圖挖掘提供了簡潔、易用、豐富的接口,包括連通子圖算法、標簽傳播算法和louvain算法。極大的方便了對分布式圖處理任務的需求。地址:http://spark.apache.org/graphx/
7)networkx: networkx是一個用Python語言開發的圖論與復雜網絡建模工具,內置了常用的圖與復雜網絡分析算法,可以方便的進行復雜網絡數據分析、仿真建模等工作。利用networkx可以以標準化和非標準化的數據格式存儲網絡、生成多種隨機網絡和經典網絡、分析網絡結構、建立網絡模型、設計新的網絡算法、進行網絡繪制,通常配合matplotlib一同使用。地址:https://networkx.org
8)Plato: 圖計算的發展和應用有井噴之勢,各大公司也相應推出圖計算平臺,例如Google Pregel、Facebook Graph、阿里GraphScope等。Plato是騰訊開源的一款高性能圖計算框架。Plato 的算法庫中的圖特征、節點中心性指標、連通圖、社團識別、圖表示學習等多種算法都已經開源。地址:https://github.com/tencent/plato
2、知識圖譜表示學習框架
**1)DGL-KE:**亞馬遜 AI 團隊繼 DGL 之后,又開源了一款專門針對大規模知識圖譜嵌入表示的新訓練框架 DGL-KE,旨在能讓研究人員和工業界用戶方便、快速地在大規模知識圖譜數據集上進行機器學習訓練任務。相比于已有的開源框架,基于Pytorch或MXNet的高性能大型圖嵌入開源框架,其測評訓練速度遠快于Pytorch-BigGraph。此外,DGL-KE 支持各種主流知識圖譜表示學習算法,包括 TransE、ComplEx、DistMult、TransR、RESCAL、RotatE 等。地址:https://github.com/awslabs/dgl-ke
2)OpenKE: OpenKETHUNLP基于TensorFlow、PyTorch開發的用于將知識圖譜嵌入到低維連續向量空間進行表示的開源框架。OpenKE提供了快速且穩定的各類接口,也實現了諸多經典的知識表示學習模型,提供了大規模知識圖譜的預訓練向量,可以直接在下游任務中使用。地址:https://github.com/thunlp/OpenKE
3)Pytorch-BigGraph: PyTorch-BigGraph(PBG)是faccebook發布的一個分布式系統,用于學習大型圖的圖形嵌入,特別是具有多達數十億個實體和數萬億條邊的大型Web交互圖。地址:https://github.com/facebookresearch/PyTorch-BigGraph
4)GraphVite: GraphVite是通用的圖形嵌入引擎,專用于各種應用中的高速和大規模嵌入學習,其全部由C++實現,但目前支持的包括transE、RotateE、DeepWalk、Line、node2vec等模型。地址:https://github.com/DeepGraphLearning/graphvite
5)pykg2vec: pykg2vec是一個集成了當前大部分主流KGE算法的開源庫,其基于Pytorch實現,代碼結構比較清晰,適合用于KGE算法實現的學習。地址:https://github.com/Sujit-O/pykg2vec。
六、參考文獻
1、https://mp.weixin.qq.com/s/svmhGL2i-U0NZRXazcl2pg
2、https://mp.weixin.qq.com/s/jb8c3e1HZn3uLL870rhqUw
3、https://blog.csdn.net/weixin_39526706/article/details/112655303?utm_source=app&app_version=4.15.1
4、https://mp.weixin.qq.com/s/6Obc3RNv5kkz2OEuIwN4SA
5、https://zhuanlan.zhihu.com/p/354867179
6、https://www.cnblogs.com/alan-blog-TsingHua/p/10924894.html
7、https://zhuanlan.zhihu.com/p/100586855
8、https://www.zhuanzhi.ai/document/7913eba0f04d30040b693dd7238d2601
關于作者
劉煥勇,liuhuanyong,現任360人工智能研究院算法專家,前中科院軟件所工程師,主要研究方向為知識圖譜、事件圖譜在實際業務中的落地應用。
得語言者得天下,得語言資源者,分得天下,得語言邏輯者,爭得天下。
1、個人主頁:https://liuhuanyong.github.io。
2、個人博客:https://blog.csdn.net/lhy2014/。
歡迎對自然語言處理、知識圖譜、事件圖譜理論技術、技術實踐等落地應用的朋友一同交流。
總結
以上是生活随笔為你收集整理的技术总结:图算法、开源工具及其在工业界的应用场景概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: TypeError: unhashabl