社團發現算法研究和在SNS網絡中的應用

原文出自:http://blog.chinaunix.net/uid-27105712-id-3309665.html


分類: IT業界

篇首語:不知道大家有沒有用過QQ圈子,或者看過相關新聞,當QQ圈子剛出來時候,很多震撼了,因爲把其社會關係很多隱私的部分都挖掘出來。很多人驚呼,QQ圈子利用了騰訊朋友網數據,因爲朋友網是實名制網絡,和實際社會關係比較接近,只有這樣才能解釋QQ爲什麼把其實際社會網絡圈子(社團)挖掘出來。其實有這個本能反應很正常,並且相信90%人看到這樣推斷也不會質疑。這就數學神奇的地方。雖然QQ只是一個虛擬的SNS,但是實際社會關係有摻雜和滲透其中。譬如你的QQ好友中有你虛擬的網友,但是也有你同學或親人。這些社會關係已經不知不覺隱藏在你的關係鏈中,利用合適的數學算法,就能把這些關係鏈準確無誤的挖掘出來。

 

最近在研究關於SNS網絡中人羣分類,發現其中很有趣,對於SNS公司的實際生產來說也是很有用的。現在分享一下技術成果。純粹從技術上討論,不會透漏有關商業數據。

 

阿基米德說:“給我一根足夠才的棍子,我可以撬起地球”,這句話很好的闡釋了槓槓原理。這裏我也以這樣一句話作爲開篇引子:

 

“給我一條關係鏈,我可以找出你身邊各個親密團體”

 

聽起來貌似有點模糊。其實這個條件並不難,目前很多網絡公司都有這樣關係鏈,微博,微信,郵箱,IM,存在各種各樣的關係鏈,只需要其中一個產品的數據,就可以算出你這些人中,那些是你的同學,那些事你的同事,那些你的密友。甚至還可以算成那些還未聯繫上的同學,同事或親戚。

 

是的,就是這麼神奇,“給我一條關係鏈,我可以找出你身邊各個親密團體”,這就是數學的神奇。你也可以稱之爲數據挖掘。

 

找出親密團體。這裏用專業一點詞來說,就是找出社團,找出聚類。也就是社團發現算法,聚類算法。

 

先說一下我們SNS網絡中的模型,在SNS網絡中,每個人都有一個關係鏈,這條關係鏈是以自己爲中心的,屬於星形結構。

clip_image002

這個星形結構對我們來說,沒有多大用.現在我們對他們進行分類,那些人是一類的。例如,A,B,C是我的同學,E、F、G是我的同事。如果能準確找出這些數據,那是很有商業價值的,對廣告推廣,信息發佈都是相當有用。

慢着!這裏要補充一下的是,前面所講的關係鏈,是隻知道某某和我存在社會關係,至於這個關係是同事,同學,親戚還是網友。是不需要事先知道和註明的。而是通過我們所說社團算法,能夠一一分解出來,算出來的一個個團體。但是這裏需要說明的是,社團發現算法也是隻知道A,B,C是屬於一個類別,但是無法確定他們是屬於同學這一類別。至於要找出這個類別的具體屬性,就要通過輔助手段,例如通過關係鏈以外的數據分析,例如A,B,C的名字,出生地,年齡,教育經歷,行業。等,有這些數據,就能輕而易舉找出該團體的屬性名字。

 

一條孤零零的關係鏈是沒有任何價值,當衆多關係鏈湊到一起,就不一樣了。

clip_image004

然而,人類的社會關係並不是如上圖那樣簡單結構,上圖可以看成是一個輻射狀樹形結構,實際上存在這樣情況:我的朋友也是你的朋友。這條關係太重要了。我稱之爲“社會三角形”——這個詞不知道是不是我首創。

clip_image006

這個社會三角形稱之爲黃金三角形也當之無愧,因爲它太重要了,可以說我們算法就建立於它的存在之上。

因爲有這樣的社會三角形的存在,前面那個關係圖從樹狀輻射變成下面的網狀結構了。

clip_image008

結構一下子複雜好多倍了,實際上社會網絡節點很多,看起來像下面一樣,像一坨麻線。

clip_image010

好了,如何從這複雜的網絡中找出一個個社會團體呢,正是本文要介紹的。本文介紹三種算法。這三種算法可以互爲補充,也可以獨立應用。

社團親近度算法:算法基本原理是:判斷一個人是否屬於某個社團,看這個人和社團內部關係是否比社團外部關係多,如果和社團內部關係比較多,就很可能是屬於這個社團。

clip_image012

假如上圖使我們SNS網絡中部分節點,假設我們已經找出兩個部分社團,分別用黃色和綠色圈住的部分。現在我們要繼續計算,判斷A是否也屬於這兩個社團中一個。我們計算A的邊。A節點的度是 7,和黃色社團度=3,和綠色社團度爲2。我們使用一個目標函數來量化社團。Q=   clip_image014。我們使用這個公式表示社團凝聚度,意思就是Q值越大,越有可能是一個社團。

上圖中我們嘗試把A分別加入黃色和綠色社團,計算Q值大小,如果Q值在增加,並且增加最多的話。那麼A應該屬於哪個社團一成員,應該加入該社團。

 

社團密度算法:這是利用幾何學原理來計算。前面算法計算出來的社團可能會存在“雜質”,所謂“雜質”,就是在你同學社團裏面有可能混入一個不是同學的成員。用這個密度算法可以很好的“去噪”。所以這兩種算法結合起來。可以得出很精確的結果。

算法原理是認爲,一個社團內部成員必定互相聯繫多,這個算法是計算聯繫度的。相信成每個成員是多邊形的每個頂點。一個三角形最多有3條邊,4邊形最多6條邊,5邊形最多10條邊。N邊形最多N(N-1)/2條邊.

clip_image016

我們假設最大密度是1,那麼密度m=實際邊數*2/N(N-1); m越大,說明越有可能是一個社團。具體算法如下:

加A加入該社團,計算其m值,如果m增大,說明A應該是該社團成員。或者m值可以控制在0.7大小。大於這個值,應該是屬於社團成員。

 

迷宮算法:這個算法是利用遊戲迷宮原理。同樣,一個社團內部必定互相聯繫很多,把這些聯繫看着迷宮的一條條路。這樣一個社團必定組成一個複雜的迷宮。

clip_image018

現在判斷A是否屬於紅色社團,就假設一個遊戲者,從A點出發,完全隨即沿着邊走,如果走10次還在紅色區域類,說明A應該屬於該紅色社團成員。當然這個次數10可以自己控制。

 

上面幾個算法在實際生產環境中得到驗證,並且數據很準確。社團算法多種多樣,但是大多數太複雜,學術性太嚴重。本文介紹的幾種算法比較平民化,通俗易懂,這也是我寫本文的目的。希望大家能對這塊領域有所瞭解。


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