社區發現技術淺析

2022.11.29

社區發現技術淺析


社區發現算法能夠用於在復雜網絡中揭示社區結構,是一種能夠在微觀視角對網絡進行分析的新穎工具。我們日常生活中能夠接觸到的抖音用戶風控、QQ/微博的好友推薦,以及基於真實世界數據的城市交通流量預測、電網負荷分析,這些應用的背後都離不開社區發現算法的驅動。

Part 01、社區發現簡介 

複雜網絡是由大量的網絡節點以及節點之間錯綜複雜的鏈接關係所形成的一種網絡結構。生活中所接觸到的許多自然、科學、社會關係和基礎設施系統可以用複雜網絡建模表示,如電力系統、社交網絡、通信網絡、交通網絡等。用數學的語言來表述,複雜網絡就是一個有著足夠複雜的拓撲結構特徵的圖。

圖片

圖1 各類複雜網絡將現代社會中的人與人、人與物相聯結

複雜網絡中總是能夠被進一步劃分為各種各樣的社區。所謂社區,就是一種網絡中特殊的子圖結構,在拓撲結構上表現為:社區成員內部緊密連接,但與網絡其餘部分的連接較為稀疏。社區發現算法能夠用於在復雜網絡中揭示社區結構,是一種能夠在微觀視角對網絡進行分析的新穎工具。因此,目前各種互聯網企業中都廣泛使用社區發現算法輔助研究人員理解複雜網絡中的信息,在社交網絡分析、推薦系統、風控等領域都能夠見到它的身影。無論是基於社交網絡數據的抖音用戶風控、QQ/微博的好友推薦,還是基於真實世界數據的城市交通流量預測、電網負荷分析,這些應用的背後都離不開社區發現算法的驅動。

Part 02、常用社區發現技術

社區檢測是一個豐富且極具挑戰性的問題,部分原因是社區的定義仍然沒有明確的描述。在圖論中,社區被定義為不重疊的節點組,且組內的邊連接遠多於組間的邊。但是這個定義仍然留下了許多可能性,相應地也有許多基於不同領域學說的計算方法被提出。

- 基於優化的方法

最常見的是基於優化的方法,貪婪算法、模擬退火算法、Louvain算法、PSO算法、進化多目標優化算法等均屬於此類。一種典型的優化方法首先需要建立一種社區質量評分標準,能夠通過判斷子圖結構和社區定義的接近程度來分配對應的分數;再利用貪婪/分佈迭代等算法搜索網絡中每個可能的社區劃分,記錄並輸出得分最高的劃分結果。目前有眾多的社區質量函數被提出,其中應用最為廣泛的是模塊度(Modularity)質量函數,模塊度將社區評分定義為組內邊的連接數量與隨機網絡中期望數量的差值。

- 基於統計推斷的方法

另一種在近年來引起了廣泛關注的方法是基於統計推斷的社區發現方法。這類方法將社區視為網絡結構的主要驅動因素,而非一種孤立的特徵,認為節點之間的連接概率與它們所屬的社團是否相關有著密切聯繫,類似於社交網絡中有相似興趣的人之間更容易產生鏈接。

通過利用隨機塊模型(SBM)等概率模型,基於統計推斷的方法能夠利用現有的社區劃分計算各節點間邊分佈的概率,進而重新生成圖的鏈接結構。該方法認為,若由這種方式重新生成的圖結構和原始圖結構的相似程度越高,則社區劃分的質量越高。

- 基於隨機遊走的方法

隨機遊走可以通過在節點之間隨機跳轉,獲得圖中節點與節點之間的共現關係,以檢測圖中的社區結構。由於網絡社區之間通常只有稀疏的連接,跳轉到的節點往往處於同一社區的內部,因此可以利用該方法自底向上地合併不同的節點組以生成社區。遊走的關鍵在於下一跳節點的選擇,根據所應用的場景和數據特徵的不同,需要不同的策略進行處理,常見的遊走策略包括uniform、frequency、markov等。

這種方法的一個很好的特性是,我們不需要實際執行任何隨機遊走來計算信息:無限長的隨機遊走會收斂到一個固定的概率值的熵的封閉表達式,我們可以直接使用它作為社區檢測的質量函數。

上述方法所涉及的學科、領域各不相同。由於篇幅原因,這裡節選出Louvain算法—— 一種基於優化的社區發現方法來進行相對詳細的學習。

Part 03、Louvain——基於模塊度最優化的方法 

上一節中提到,基於優化的方法需要通過社區質量函數來評估子圖結構和社區定義的接近程度,而目前應用最為廣泛的質量函數是模塊度(Modularity),Louvain算法正是基於模塊度來進行社區發現的。因此我們先對模塊度的定義進行簡要介紹。

Newman等人提出了模塊度(modularity)的概念,用來衡量社區劃分的好壞,公式如下:

圖片


其中圖片表示圖節點圖片和節點圖片之間邊的數目,圖片表示圖中邊的個數,圖片表示節點圖片的度,圖片表示邊隨機放置的情況下,節點圖片圖片之間邊數量的期望值。

因此可以將模塊度簡單理解為:在社區內部的邊的比例,減去邊隨機放置時社區內部期望邊數的比例,除以某個常數後所得到的值。如果一個社區劃分算法能夠盡可能多的將連接比較稠密的點劃分在相同社區中,而盡量減少社區之間的連接,這樣就能得到較高的模塊度評分。

可以通過下面的Python Demo簡單的計算網絡劃分的模塊度:

    
    import networkx as nx
    # G1为原始图,G2为划分后的图,均用networkx.graph来表示
    def Modularity(G1,G2):
        m=len(G1.edges())
        Aab=0
        Q=0.0
        for a in G1.nodes():
            for b in G1.nodes():
                if nx.has_path(G2,a,b):
                    Aab=0
                    if b in G1.neighbors(a):
                        Aab=1
                    Q=Q+(Aab*m*2-nx.degree(G1,a)*nx.degree(G1,b))/(4*m*m)
        return Q
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.

    Louvain算法則是由Blondel等人提出的基於模塊度的社區發現算法。可以將整個算法分為兩個階段:

    ➣ 模塊度優化階段——每個節點自身作為自己的社區標籤,此時網絡中的社區數和結點數一致。計算此時圖劃分的模塊度作為基準,然後逐個嘗試改變圖中某一個節點的社區標籤,將其更新成鄰居節點的社區標籤,計算此時的模塊度與基準值的差距,記為當前劃分下的模塊度增量。選出能夠使得模塊度增量最大的網絡劃分。

    ➣ 網絡凝聚階段——將上個階段劃分出來的每個社區合併為一個新的超級節點,節點的邊權重為原始社區中所有節點的邊權重之和,構建一個新的網絡。

    Louvain算法不斷在1,2兩個階段之間迭代,直到模塊度增量為負時停止;此時的社區劃分即為算法的輸出。


    Part 04、展望 

    總的來說,CAT作為綜合性的平台,提供的監控功能較為全面;Zipkin是由Twitter開源的調用鏈分析工具,非常輕量,使用部署簡單;Pinpoint和SkyWalking都專注於鏈路和性能監控,追踪數據粒度較細、用戶界面功能強大。隨著信息技術的發展和工業互聯網的廣泛應用,生活中能夠接觸到的複雜網絡結構越來越多,比如交通網絡、金融網絡、通信網絡、輸電網絡等等。通過在後端對這些網絡中蘊含的信息進行分析預處理,為用戶提供更貼心、智能的服務成為了信息時代的新興增長點。作為國內領先的電信運營商,中國移動必將能夠依靠廣泛且先進的網絡基礎設施,為城市服務數字化和智能化貢獻力量。