科普文:從人人網看網絡科學(Network Science)的X個經典問題


轉:https://zr9558.wordpress.com/2013/12/05/科普文:從人人網看網絡科學(network-science)的x個經典問/

長文,寫了N個小時寫完的。你肯定能看懂,所以希望你能看完,沒看完就分享/點贊沒有意義。有圖有超鏈接,不建議用手機看。相關內容我想應該可以弄成一個小項目加到某門課中。

網絡科學是這兩年非常熱門的研究方向,具體的研究方向、問題也很多。本文用人人網舉幾個簡單例子,粗淺的說明一下網絡科學中的一些經典問題。

社交網絡(社會網絡)是典型的的復雜網絡,有小世界、模塊化、無標度等特性。網絡中節點(node)代表人,連邊(edge/link)代表兩個人是好友關系。下圖是示意圖,紅點的意思后面說。

1、鏈路預測(Link Prediction)

鏈路預測是預測網絡中“不存在但應該存在的邊”或“現在不存在但以后可能存在的邊”。對應到人人網,前者是說倆人實際上認識,但在人人里沒加好友(人人數據相比真實來說缺失了一部分)。后者說倆人現在不認識,但有成為朋友的潛質(比如有共同興趣等)。本文以前者為例進行說明,對應人人里的好友推薦

人人的好友推薦大體會給你推薦和你的共同好友多的人。潛台詞:兩人的共同好友數越多,他們認識的可能性也越高。

 (1)最簡單的指標(Common Neighbors,CN)

某人的好友即為其在網絡中的neighbors(有邊相連的node),共同好友即為兩人好友的交集。

CN為兩人共同好友的個數,直觀感覺CN越大,此二人是好友的可能性越大。

CN(x,y)=|N(x)∩N(y)|        N(x)為節點x的所有鄰居(計算原因也可以加上x自己)

直觀感覺基本沒有問題,但CN會讓好友多的人“占便宜”。舉一個例子:你的好友A和你在人人里還沒加好友,A不太玩人人,在人人里只有2個好友,這兩個人你都認識,你和A的CN=2。而你的輔導員和你的CN=50(你班里很多同學都和輔導員是人人好友)。如果人人按CN從高到低推薦,那很可能推薦輔導員,很可能不會給你推薦A。

  (2)改進指標(Jaccard index)

從上得知,好友多的人沾光,應進行修正(懲罰),Jaccard系數定義如下:

Jaccard(x,y)=|N(x)∩N(y)| / |N(x)∪N(y)|

當然,改進方法還有很多,大體都是懲罰度數高的節點。比如如除以 k(x)+k(y) 或 k(x)*k(y) 等。k(x)為網絡中節點的度,相當於鄰居個數。

你會發現人人也會給你推薦只有兩三個共同好友的朋友,就是這個原因。

代碼如何實現?

數據結構里學過圖(graph),圖就是網絡(network)。圖的存儲可以有鄰接矩陣、鄰接表等。

鄰接矩陣:方陣,行和列都是網絡里所有節點,矩陣元素0代表兩節點有連邊,1代表無連邊。

鄰接表:每行為一個節點,后面跟鏈表,鏈起來它的所有鄰居。適合存儲稀疏網絡。

先說鄰接矩陣,節點x所在行/列所有為1的元素對應的列/行即為x的好友(鄰居),同理求y的好友,即可進行計算。

鄰接表更簡單,x所在行的鏈表就是x的好友。

 我剛注冊人人,一個好友都沒有,何談共同好友?

這是鏈路預測的一個經典挑戰:冷啟動(Cold Start)。即對新用戶(信息很少)的推薦。

人人網當然不會在共同好友一棵樹上吊死,對於新用戶,它會根據用戶填寫的資料進行推薦。如推薦和你同年入學同所學校,或同年齡家鄉在相同城市的人等。

    這里還有問題大家可以考慮:推薦的都是目前和你沒加好友的人,但整個人人里和你不是好友的有幾千萬人,總不能給這些人全都和你算一個共同好友數目,然后排序推薦。如何能圈定一個大致的范圍?

==================================

2、社團發現(Community Detection)

社團發現是網絡科學里另一個火爆問題。社團通常指網絡中比較稠密(dense)的部分,就是連邊緊密的幾個人組成的一個小團體。社團具有“內緊外松”的性質,即社團內部連邊稠密,而和社團外部的點連邊相對稀疏。

比如你和宿舍的7個人,一共8個人,每兩個人都加了人人好友。在網絡里就是8個兩兩相連的點,構成一個大小為8的完全圖(complete graph/clique,圖中任兩點間都有連邊)。

假設有N個點,若最極端情況兩兩相連構成完全圖,共有 N(N-1)/2條邊。這是N個點之間邊數的上線。

可以用簡單的方法衡量網絡中的一個子圖(M條邊,N個節點)的稠密程度:dense=M/[N(N-1)/2],顯然dense∈[0,1]。

說着簡單,給你一個網絡看着好像也簡單,上圖左邊三個紅點之間就明顯有一個社團,但找着可就難了。社團發現的方法流派很多,我之前發的一篇日志列了主流的一些方法。

在社團發現中,還有一大類方法是處理重疊社團(overlapping community)。所謂重疊社團,指節點可以屬於多於一個的社團。比如考慮你的好友,高中同學可以聚成一個社團,本科同學可以聚成一個社團,而你既屬於高中同學的社團,也屬於本科同學的社團。

需要注意的是:在網絡中(尤其是生物網絡),一個社團/模塊未必會表現出連接稠密的性質。

==================================

3、中心性(Centrality)

復雜網絡研究中的“中心性”包括:度中心性(Degree Centrality)、介數中心性(Betweenness Centrality)、接近中心性 (Closeness Centrality) 等多種度量方式。

先簡單介紹一下度中心性

度中心性就是節點的度(節點鄰居個數),度數高的節點一般叫做Hub節點。

度中心性說明了什么?

人人網絡中度數高的節點就是好友多,微博網絡中度數高的節點就是粉絲多。Hub節點對於網絡信息擴散有很大幫助。

度中心性有什么應用?

我想在微博上打廣告,只要在李開復、留幾手這種Hub節點上投放廣告,很快很多用戶就能看到。

對於傳染病傳播來說,Hub節點因為能接觸到多人,因此一旦得病很容易傳染給周邊人群。

對於鐵路網絡(節點是火車站,邊表示兩火車站間存在鐵路),像徐州、鄭州這種交通樞紐城市即為Hub節點。有意識的在全國不同地區設置Hub節點,可以優化車次中轉。

然后稍詳細說一下介數中心性

介數中心性用來衡量網絡中節點和邊的重要性,和最短路徑緊密相關。

節點s的介數中心性 = 網絡中任意兩點間的最短路徑中通過s的最短路徑條數 / 網絡中任意兩點間的最短路徑數

邊e的介數中心性 = 網絡中任意兩點間的最短路徑中通過e的最短路徑條數 / 網絡中任意兩點間的最短路徑數

對於連通網絡,上式分母即為 N(N-1)/2。分子是看這么多條最短路徑中,有多少條經過s。

顯然 節點的介數中心性∈[0,1]。對於邊緣節點(葉子),介數中心性為0;對於星型網絡的中央節點,因為所有的最短路徑都經過它,所以它的介數中心性為1。

介數中心性說明了什么?

介數中心性高的節點/邊一般處於網絡的“交通要道”,起到信息傳輸橋梁的作用,通常處於兩個社團之間。上圖中紅色的點都是介數中心性較高的點。

介數中心性有什么應用?

對於網絡攻擊而言,希望擊毀盡可能少的節點就讓網絡癱瘓,則可以選擇介數中心性高的節點進行攻擊。若把上圖中6個介數中心性高的節點移除(同時刪除紅點連接的邊),網絡就會被分割成多個碎片。

對於上面說的社團發現而言,也可以通過移除介數中心性高的節點,讓網絡自然分成內緊外松的幾部分。但這樣做會有一個問題:移除的點到底屬於哪個社團?大家可以自己考慮。

介數中心性怎么算?

先用Floyd-Warshall算法計算網絡中任意兩點的最短路徑算法,作為分母。分子就是通過某個頂點或某條邊的最短路徑。但是,Floyd算法就復雜度O(節點數的3次方),對於大網絡效率太低(社會網絡甚至可以得到千萬甚至億級節點)。

經典的Brandes算法對於無權圖(認為每條邊的長度均為1)的復雜度可以到O(節點數*邊數)。

最后簡單說說接近中心性

接近中心性的基本思想:如果一個人能很容易的聯系到其他人,那么TA就是中心的。即TA到其他所以人的距離比較短。在定義時采用網絡中兩點間最短距離的概念(Dijkstra算法沒忘吧),定義如下:

節點i的接近中心性 = ( n-1 ) / ( i到網絡中其他點的最短距離的和 )。其中n為網絡中節點個數,n-1即為除了i之外的總節點數目。

接近中心性的應用在后面會說。

==================================

4、復雜網絡的一些拓撲特性

 (1)小世界(Small World)

常聽到的一個概念,社交網絡中的“六度分隔”原理(Six Degree Separation)就是小世界現象的一個表現。其核心是網絡中任意兩點的平均最短距離低。

從人人網也能看出,它是很稀疏的網絡,整個網絡幾千萬個節點,每個節點的鄰居一般就是幾十到幾百個。任意選出兩個節點,它們之間有連邊的可能性很低,但它們的最短路徑一般很短(從Facebook數據來看,網絡中任意兩點的平均最短路徑約為4)。

那么,如何能把一個規則網絡變成滿足小世界特性的網絡呢?可以通過隨機重連邊的方式,看下圖(a),原版的網絡(深灰色邊)是一個規則網絡,每個節點的度均為4(連接它左右的4個節點)。通過隨機把一些邊重連(黑色邊),會產生一些“捷徑”(short cut),能迅速降低網絡中各點的平均最短距離。

 (2)無標度(Scale-free)

整個人人網里,如果把每個節點的度(好友個數)做一個統計,會是什么樣的分布呢?

可以想象,度數高的節點是很少的,度數低的節點占絕大多數

無標度網絡各節點之間的連接狀況(度數)具有嚴重的不均勻分布性:網絡中少數Hub節點擁有極其多的連接,而大多數節點只有很少量的連接。具體來說,節點的度分布符合冪率分布(power law)。所謂無標度,指的是少數高度數的節點的度數非常高,高到爆表。

那么,如何能生成一個無標度網絡?經典的BA模型是這樣說的:當有新的點加入到網絡中時,它會根據概率和網絡中的其他點相連,新的點X和老的點Y相連的概率正比於Y的度,即新的節點更傾向於連接到原本度數高的節點(Hub),也稱為“優先連接(preferential attachment)”特性,或者叫“富者更富(rich get richer)”或者“馬太效應(Matthew effect)”。通過反復添加新節點,就能構建出一個無標度網絡。

這個用人人舉例不是非常形象,我換用微博舉例。一個新注冊的微博用戶會關注哪些微博呢?有很大可能是關注那些已成名的“大V”(手哥、李開復……)。“大V”即為Hub節點,新節點偏向於和這些Hub相連。如果沒有突發情況,“大V”的粉絲增加速度始終會快過普通用戶,即“富者更富”。

冪率分布是個復雜網絡研究中的大神級概念,感興趣的同學務必自己多查資料。這里舉個簡單例子:你一天要發很多短信,我們考慮一下兩條短信之間的相隔時間。首先,間隔肯定不是固定的(比如你每小時發一條短信),顯然是隨機的。那這個隨機的時間是否符合某種概率分布?直觀想可能是高斯分布(鍾形),大多數短信間隔時間差不多(比如每小時左右發一條),但少數短信間隔時間很長(半天也沒發一條)或很短(1小時發了3條)。但實際上,發短信存在着“爆發”現象,某些情況下你可能10分鍾就發了10條(聯系其他同學吃飯,或者通知),而有時可能10小時也沒有發一條(睡覺)。而這種爆發在高斯分布中是不可能出現的,感興趣的同學可看巴拉巴西的《爆發》

 (3)Giant Component

一個規模很大的網絡中,可能存在多於一個的連通分支/連通分量(Connected Component),即網絡中並非所有節點都連通。但是在真實網絡中通常存在一個規模很大的連通分支(即Giant Component)會包含網絡中大多數的節點(比如超過80%的節點)。

如果一個人剛注冊人人,還沒加好友,那他就是一個孤立點(沒有和任何其他點相連)。而一旦有了好友,就不再是孤立點。如果某個學校規定學生在人人只能加本校好友,不能有外校好友,那么這個學校的學生也會構成一個小的獨立的連通分支。不過可以想到,人人里絕大多數的同學都處在一個超大的連通分支中,真正孤立的節點或小的連通分支所占用戶數是很少的。

Facebook的數據顯示約99.7%的用戶處在一個超大的Giant Component中。

==================================

5、高影響力節點(high influential nodes)/傳播(spread)

識別網絡中的高影響力節點(leader)有什么用?拿信息傳播來說,如果你希望你的信息能迅速在網絡中傳播,那你就要考慮選擇通過高影響力節點來傳播信息。

早期的研究結果認為網絡中的高度數(Hub節點)或高介數的節點是傳播中最有影響力的節點,這是因為Hubs節點擁有更多的人際關系,而高介數的節點有更多的最短路徑通過。

高度數節點的例子:你把一卡通丟了,在人人發了一個尋物狀態,然后@了一些公共主頁(西電小喇叭、西電睿思、在西電……)。因為你覺得這些公共主頁因為好友比較多(degree高,屬於網絡中的Hub),能更有效地把你的信息擴散出去。

高介數節點的例子:你班里的同學A和計算機學院的同學B是情侶。你的班級想和計算機學院合辦一個講座,班長發狀態圈了A,A分享給B,B的分享就讓很多計算機學院的同學看到了這個信息。盡管A、B兩人的好友(degree)未必很高,但A、B算是軟件學院、計算機學院兩個社團之間的“橋梁”(請回看2中的圖中的紅點),介數中心性比較高(請回看3),也在信息傳播中扮演重要角色。

上面兩個例子都很好理解,很符合直觀思維,但說的就是對的么?

從直觀來想,對於一個網絡,應該是靠近網絡“中心”的節點具有較高的傳播能力。如上圖中間紅圈中的4個點,可以很迅速的把信息傳播到綠圈和藍圈。

對於上圖中的黃色點,雖然其度數很高,但由於並不處於網絡“中心”,傳播能力顯然不如紅圈中的4個點。例如:黃色點要把信息傳給最下方的紅點(位於藍圈),就需要先傳到紅圈中,再向下傳到綠圈中的紅點,最后才能傳到藍圈。

上例和之前認為”高度數節點的影響力高“存在着明顯矛盾。“度數高的點影響力高”好理解且好計算,因為網絡中一個節點的度數,就是其鄰居個數,不管是用鄰接矩陣還是鄰接表存儲,都很容易求得。但“靠近中心”這是個很模糊的說法,和網絡的布局(layout)有關系。如果一個網絡已經畫出來了,我們一眼就能看出所謂的“中心”在哪里。但如果是采用另一個畫法,比如你人為把上圖中的藍色點拖到網絡外圍,那它也就不在中心了。

說到這里,就產生了一個新問題:如何形式化的(用數學手段)確定網絡的“中心”?

直觀的看,可以用上面的“接近中心性”來計算。位於網絡中心的節點,和其他節點的最短距離都比較小;而位於網絡邊緣的節點,和很多節點(位於網絡另一側的節點)的最短距離都比較大。但是,接近中心性需要計算網絡中任意兩點間的最短距離,計算量很大。

也有研究者提出利用圖論中的概念“K-Shell”來進行:

1、首先刪除網絡中所有度為1的節點。刪完以后檢查,原來某些度大於1的節點會變成度為1的,就繼續刪,刪完再檢查,再刪……直到沒有度為1的節點為止。最終,認為剛才所有刪掉的的節點屬於第一層,即ks=1的節點(上圖外圍藍色圈);

2、現在網絡中肯定沒有度為1的節點了(都刪掉了),那就開始刪除度為2的節點(和上一步方法一致)。這次刪掉的就是ks=2的節點(上圖綠圈);

3、依此類推,接着刪度為3的節點,然后是度為4的節點……最終網絡刪干凈了,網絡中所有的點都被分配了一個ks值。

實驗研究表明,對於單個傳播源的情形(你只圈一個公共主頁讓其幫你轉發),Hubs節點或者高介數的節點不一定是最有影響力的節點,而通過K-shell分解分析確定的網絡核心節點(K-shell值大的節點)才是最有影響力的節點;對於多傳播源情況下(你圈了多個公共主頁來幫你轉發),傳播的規模很大程度依賴於初始傳播源之間的距離,此時選擇多個Hub節點是比較有效的。

==================================

6、網絡的比對(alignment)、去匿名化(de-anonymization)

我們一般不止用一個SNS(比如同時在用QQ和人人),那多個SNS網絡存在着部分一致(比如你宿舍8個人在人人上互相加了好友,在QQ上也互相是好友)。網絡比對的目的就是尋找兩個網絡中的節點的對應關系。

如上圖(圖片來自http://botao.hu/works/research/de-anonymizingsocialnetworks)所示,比如說左邊網絡是人人,右邊是QQ。根據兩個網絡極其中節點的拓撲特征,我們把兩個網絡中的節點進行映射(虛線),即虛線相連的兩個點,是同一個實體(人)。

通過網絡比對,得到兩個網絡間節點映射,有啥用?

一個應用是“去匿名化”,顧名思義就是搞清楚網絡中的匿名用戶到底是誰。比如說公安機關發現人人網里一個名為wurht的用戶在瘋狂造謠(左圖左下角翠綠節點),但人人中其注冊所用信息是假的。通過網絡比對,可以知道人人中的wurht用戶對應着QQ中的wurh用戶,而通過騰訊可以查到其身份,自然也就知道了人人中wurht的真實身份。

需要注意的是,網絡比對可以僅利用拓撲特征,也可整合更多的特征(比如節點的某些個人信息)。比如騰訊的圈子中的“智能備注”功能,會根據一個用戶的好友對其的備注,來推斷其真實身份(根據騰訊官方說明:如果圈子內有半數以上的好友對您設置相同的QQ備注名,這個備注名將默認成為您在圈子內展現的名稱。)。這和標簽傳播(Label Propagation,用已標記節點的標簽信息去預測未標記節點的標簽信息)的思想有些類似。

==================================

7、動態網絡(Dynamic Networks)/演化(Evolution)

這里的動態網絡主要指網絡在不同時間點的變化。拿人人網為例,如果你每月的一號把人人網里你好友的數據儲存一次(保存你的好友、好友的好友之間的連邊關系),連續存上一年,就形成了由12個靜態網絡組成的動態網絡。在這12個靜態網絡中,節點和邊可能都不一樣(注意在前面鏈路預測研究中,節點是不變的)。

我們把這12個靜態網絡依次來看,看每個月和下一個月之間的差異。可以用前面講的社團發現的方法,對每個靜態網絡進行聚類,然后研究相鄰兩個月之間社團的變化情況。可以定義如下六種相鄰時刻間的變化:

(1)Growth:同一個社團,在相鄰時刻出現了增長(如節點變多了)。和Growth相對的就是Contraction。

(2)Merging:t時刻的兩個社團,在t+1時刻合並成了一個社團。和Merging相對的就是Splitting。

(3)Birth:t+1時刻新出現了一個社團(該社團在t時刻不存在)。和Birth相對的就是Death。

比如在1月1號時,軟件學院的小帥(男)和人文學院的小美(女)的兩個宿舍,各自構成了一個社團(比如是8個節點的完全圖)。但由於這兩個宿舍的人互相之間並不認識,所以兩個社團間的連邊很少。在1月中旬,小帥和小美成為了情侶,兩個宿舍的人也開始互相認識,大部分同學之間也加了人人好友。在2月1號,由於這兩個宿舍原先構成的社團之間多了很多連邊,這兩個社團就合成了一個大的社團(16個節點的近似完全圖)。這就是上圖的Merging。又過了幾個月,倆人又分手了,兩個宿舍的人也紛紛取消刪了之間的好友關系,一個大社團又回到了最早的兩個社團,即為Splitting。

 

【未完待續】

==================================

網絡科學自學資料

一、書

1、《網絡科學導論》《鏈路預測》《網絡科學》 、《Network Science》 入門且全面,正統的Network Science

2、《推薦系統實踐》《推薦系統》 主流的Web應用里都有推薦系統,算是網絡科學的主要應用方向

3、《網絡、群體與市場》 也是入門書,結合經濟學、社會學、計算與信息科學以及應用數學的有關概念與方法,考察網絡行為原理及其效應。

4、《鏈接》 巴拉巴西早期經典著作

二、公開課

1、Social Network Analysis 2013.3開課時我全程跟下來並拿到了成績。2013.10再次開課。強烈建議英文差不多的10級不考研同學10月跟一下這個。

2、網絡、群體與市場 中文公開課,在Coursera也有。對軟件方向的同學,建議重點看一下課程的第2、3、9、11、13~17章。

3、Social and Economic Networks: Models and Analysis,斯坦福,2014.1開課(來自文后留言)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM