這篇文章主要介紹了新浪微博的用戶管理與大數(shù)據(jù)利用經(jīng)驗,作為億級用戶的微博的運營經(jīng)驗,非常值得社區(qū)類網(wǎng)站進行參考,需要的朋友可以參考下
用戶管理
微博是一個很多人都在用的社交應(yīng)用。天天刷微博的人每天都會進行著這樣幾個操作:原創(chuàng)、轉(zhuǎn)發(fā)、回復、閱讀、關(guān)注、@等。其中,前四個是針對短博文,最后的關(guān)注和@則針對的是用戶之間的關(guān)系,關(guān)注某個人就意味著你成為他的粉絲,而他成為你的好友;@某個人意味著你想要他看到你的微博信息。
微博被人們認為是“自媒體”,即普通大眾分享與本身相關(guān)的“新聞”的途徑。最近,有些人使用自己在自媒體上的影響力而盈利的報道屢見不鮮。那微博上個人影響力是怎樣計算的呢?微博上還有哪些算法作為看不見的手在管理著我們?我們的每一個行為怎樣影響著算法呢?
直觀上看,微博其實是人類社會的一個簡單的縮影,微博網(wǎng)絡(luò)的一些特點,也許可以啟發(fā)我們得到真實的社會網(wǎng)絡(luò)上的規(guī)律。得益于社交網(wǎng)絡(luò)的爆發(fā)式發(fā)展,“社會計算”尤其是社交網(wǎng)絡(luò)分析成為數(shù)據(jù)挖掘的新寵兒。下面我們就針對微博網(wǎng)絡(luò)分析的一些算法進行簡單的介紹,其中的有些算法對于其他的社交應(yīng)用可能也適用。
1.標簽傳播
微博用戶量浩大,不同的人有不同的興趣。挖掘每個用戶的興趣有助于更加精準的廣告投放、內(nèi)容推薦。為了得到每個用戶的興趣,可以為用戶打上標簽,每個標簽代表用戶的一個興趣,用戶可以擁有一個或多個標簽。為了得到最終的用戶標簽,先做第一個假設(shè):
每個用戶的好友(或粉絲)中與該用戶具有相同興趣的人占多數(shù)。
這就引出了本文介紹的第一個算法,即標簽傳播算法。在這個算法中,每個用戶的標簽取其好友或粉絲中標簽最多的一個或多個。當然,可以將好友和粉絲的標簽都考慮進來,整合的時候可以考慮賦予好友的標簽和粉絲的標簽不同的權(quán)重。標簽傳播算法的過程如下:
1)對一部分用戶給出初始標簽;
2)對每一個用戶,統(tǒng)計其好友和粉絲的標簽數(shù)目,賦予該用戶出現(xiàn)次數(shù)最多的一個或者多個標簽。
3)循環(huán)進行第2步,直到用戶的標簽不再發(fā)生大的變化為止。
2.用戶相似度計算
標簽傳播算法實現(xiàn)起來比較簡單,其缺點在于當所做的假設(shè)不符合事實時,比如為了社交上的禮貌,我們一般會把自己的親友添加關(guān)注,這些人不一定和我們擁有同樣的標簽;該算法的結(jié)果就會變得很差。解決的辦法就是通過計算用戶之間的相似度來衡量好友或粉絲的標簽對用戶標簽的貢獻率。因而得到第二個假設(shè):
與用戶越相似的好友或粉絲,其標簽越可能是用戶的標簽。
那么,如何衡量用戶之間的相似度呢?這就需要考慮到用戶發(fā)表的微博信息了,包括轉(zhuǎn)發(fā)的和原創(chuàng)的。這里是要考慮用戶之間的相似度而不是用戶微博之間的相似度,因而在實際計算時,將某個用戶的所有微博信息聚集到一起進行計算。一個可選的方法是使用詞袋法將微博信息表示成詞語向量,然后直接使用余弦方法等計算其相似度。但這個方法太過簡單,不容易達到好的結(jié)果,這里介紹一種基于LDA(隱含狄利克雷分布)的相似度計算方法。
LDA仍然使用詞袋法表示文本,但是在中間添加了一個主題層,形成了“文檔-主題-詞語”三層概率模型,即每篇文檔看成是主題的一種概率分布,主題又被看成是單詞的概率分布。在LDA模型下,文檔可以被看成按照如下方式生成:
1)對于每篇文檔:
2)從主題分布中抽取一個主題;
3)從該主題的詞語分布中抽取一個詞語;
4)重復第2步和第3步,直到該文檔的所有詞語都生成。
LDA模型參數(shù)的估計算法不在本文的討論范圍之內(nèi)。這里只需要知道,通過LDA可以得到每個用戶的微博信息的主題分布。然后使用余弦方法、KL距離等計算相似度的方法來得到用戶間主題分布的相似度,以之作為用戶之間的相似度。而后使用該相似度對標簽傳播進行加權(quán)。
3.時間因素和網(wǎng)絡(luò)因素
上述的算法還有什么缺點呢?
隨著時間的變化,用戶的興趣是會變化的,計算用戶相似度的時候每次都把所有微博信息都聚合在一起不太合理。對此,可以通過選取距離當前時間較近的N條微博。比如,對每個用戶,選取距離當前時間最近的50條微博聚在一起放到LDA中訓練。此處的N既不能太大也不能太小。太大則不容易反映用戶興趣的時間變化,太小則由于用戶發(fā)表微博的隨機性容易引起興趣的漂移。為了使效果最好,可以不拘泥于一個固定的N,比如可以考慮對每個用戶按照其發(fā)表微博的時間序列做N值的自適應(yīng)。
至此,在算法中還沒有考慮微博關(guān)系中由回復、轉(zhuǎn)發(fā)、@等所構(gòu)成的網(wǎng)絡(luò)信息。以轉(zhuǎn)發(fā)為例,如果在用戶的微博中頻繁的轉(zhuǎn)發(fā)某個好友的微博,那么用戶和該好友的相似度相比其他好友來說應(yīng)該會更高。這里可以看做是假設(shè)三:
用戶轉(zhuǎn)發(fā)某好友的微博的頻率越高,用戶與該好友的興趣相似度越大。
相似的,可以得到假設(shè)四:
用戶微博中@某用戶的頻率越高,用戶與該好友的興趣相似度越大。
由此就得到了計算相似度的另外的因素。有很多方法可以添加一個新的因素到原有的相似度計算方法中,比如可以考慮將轉(zhuǎn)發(fā)頻率量化為值,作為權(quán)重添加到相似度的衡量中去。
4.社區(qū)發(fā)現(xiàn)
微博社區(qū)是指在微博中關(guān)系緊密的人組成的團體,社區(qū)內(nèi)部的人之間聯(lián)系緊密,社區(qū)之間的聯(lián)系則比較稀疏。這里所指的關(guān)系緊密有兩層含義,第一是社區(qū)內(nèi)部的人之間的興趣相似度大;第二是指社區(qū)內(nèi)部的人之間的關(guān)系要近,比如要求社區(qū)內(nèi)部的兩個用戶不能超過二度關(guān)聯(lián),二度關(guān)聯(lián)即好友的好友。
興趣相似度在上文已有敘述,關(guān)系相似度則需要利用用戶之間的關(guān)注關(guān)系來進行計算。以用戶的關(guān)注關(guān)系為單向鏈,可以將所有的微博用戶之間的關(guān)系表示為一個巨大的有向圖。用戶之間的關(guān)系相似度可以簡單的考慮,比如使用用戶間的最短路徑的倒數(shù)。但是這種方法衡量的不精確,我們知道,在現(xiàn)實世界中,存在著六度理論,在微博網(wǎng)絡(luò)及其他社交網(wǎng)絡(luò)中,往往關(guān)系會更加緊密。因而這種簡單的關(guān)系相似度只能有至多六個離散值,顯然不夠精確。
為了達到更好的效果,這里不僅以最短路徑作為顯式量度,還要考慮一些隱式的量度。這里先給出兩個假設(shè),分別為假設(shè)五和假設(shè)六:
兩個用戶的共同好友越多,這兩個好友的關(guān)系相似度越高。
兩個用戶的共同粉絲越多,這兩個好友的關(guān)系相似度越高。
這里可以借鑒Jaccard相似度的計算方式,將這兩種假設(shè)的量化函數(shù)表示為交集的大小與并集的大小之商。以假設(shè)五為例,其量化指標又被稱為共指向性相似度,量化時使用兩個用戶共同好友的數(shù)目除以兩個用戶所有好友的數(shù)目。假設(shè)六的量化指標被稱為共被指向性相似度,計算方式與共指向性相似度類似。從意義上講,這兩種相似度不僅僅是關(guān)系上的度量,在一定程度上也衡量了用戶之間的興趣相似程度,直觀上看,兩個用戶共同關(guān)注的好友越多,他們的興趣相似程度也越大。這兩種相似度還有一個專業(yè)的名字,是基于結(jié)構(gòu)情景的相似度計算。
得到了最短路徑相似度、共指向性相似度、共被指向性相似度后,可以采用一種加權(quán)函數(shù)將它們?nèi)诤掀饋恚玫阶詈蟮南嗨贫?。之后,可以采用一些聚類算法如K-Means、DBSCAN等進行聚類操作,得到最后的社區(qū)簇。也可以采用相似度加權(quán)的標簽傳播算法,把具有相同標簽的人作為一個社區(qū)。
5.影響力計算
在社區(qū)發(fā)現(xiàn)中,使用微博中的關(guān)系網(wǎng)絡(luò)可以提高相似度計算的精確度。但關(guān)系網(wǎng)絡(luò)能做的事情還有很多,影響力計算便是其中比較重要的應(yīng)用。
說到影響力的計算,這里借鑒了網(wǎng)頁排名中的算法。網(wǎng)頁排名中廣為人知的算法當屬PageRank了,該算法由google創(chuàng)始人拉里·佩奇和謝爾蓋·布林發(fā)明,隨著google在商業(yè)上的成功而聲名鵲起。該算法根據(jù)網(wǎng)頁之間的鏈接來確定網(wǎng)頁的排名,其核心在于一個假設(shè),質(zhì)量高的網(wǎng)頁所指向的網(wǎng)頁的質(zhì)量必定也高。
根據(jù)PageRank的思想,可以得到微博上影響力的假設(shè),稱之為假設(shè)七:
影響力高的用戶關(guān)注的用戶的影響力必定也高。
將用戶看成是PageRank中的網(wǎng)頁,將關(guān)注關(guān)系看做是網(wǎng)頁中的鏈接關(guān)系。從而,可以根據(jù)PageRank的算法流程得到在微博關(guān)注網(wǎng)絡(luò)上的影響力計算算法:
1)賦予所有用戶相同的影響力權(quán)重;
2)將每個用戶的影響力權(quán)重按照其關(guān)注的人數(shù)等量分配;
3)對每個用戶來說,其影響力等于其粉絲分配給他的權(quán)重之和;
4)第2步和第3步迭代,直到權(quán)重不再發(fā)生大的變化為止。
在網(wǎng)頁排名中,基于網(wǎng)絡(luò)關(guān)系的算法還有HITS、HillTop算法等,這些算法也可以借鑒到影響力計算中來。
上面的算法有什么缺點呢?
如果只是基于關(guān)系網(wǎng)絡(luò)的話,那么很容易就造成,粉絲數(shù)目多的人影響力必然會很高。這樣就導致有些用戶去購買一些僵尸粉就可以達到很高的影響力了。這樣的算法顯然是不能應(yīng)對實際情況的,因為還有太多的信息沒有用到。
用戶的影響力除了他的微博關(guān)系之外,還與他的個人屬性有很大的關(guān)系,比如用戶的活躍度、微文的質(zhì)量等。用戶的活躍度可以使用其發(fā)表微博的頻度來衡量,微文的質(zhì)量可以采用其被轉(zhuǎn)發(fā)的數(shù)目、被回復的數(shù)目來得到。通過對這些值進行衡量,再加上上面算法的結(jié)果,就可以得到更加精確的影響力結(jié)果。
當然,也可以這樣考慮,用戶之間的回復關(guān)系、轉(zhuǎn)發(fā)關(guān)系、@關(guān)系均可以構(gòu)成網(wǎng)絡(luò),它們也有相應(yīng)的假設(shè),分別為假設(shè)八、假設(shè)九、假設(shè)十:
影響力越高的用戶回復的微博的影響力越高,從而使該微博主人的影響力變高。
影響力越高的用戶轉(zhuǎn)發(fā)的微博的影響力越高,從而使該微博原創(chuàng)作者的影響力變高。
影響力越高的用戶傾向于在其微博中@影響力高的用戶。
這樣就又得到了轉(zhuǎn)發(fā)網(wǎng)絡(luò)、回復網(wǎng)絡(luò)、@網(wǎng)絡(luò)三種網(wǎng)絡(luò),借鑒PageRank算法,可以得到另外的三種影響力結(jié)果。將它們與關(guān)系網(wǎng)絡(luò)的影響力結(jié)果進行融合,就可以最終的影響力結(jié)果了。這里的融合可以簡單的考慮成結(jié)果的加權(quán)和,復雜的融合方法不在本文的范圍之內(nèi)。
6.話題因素和領(lǐng)域因素
得到了影響力的計算方法之后,可以做些什么呢?
可以對當前的熱點話題進行影響力分析,得到誰在微博上成為當前熱點話題的意見領(lǐng)袖。具體做法是這樣,找到和當前熱點話題相關(guān)的微文,從而找到參與當前熱點話題的用戶。如何找到和當前熱點話題相關(guān)的微文呢?有話題標簽的微文自不必說,對于沒有話題標簽的微文來說,可以使用上文中介紹的LDA算法,它可以在用戶的所有微文中找到用戶的主題分布,也可以對一條微文找到主題分布,一般來說,由于微文的字數(shù)限制在140以內(nèi),比較短,因而一條微文包含的主題數(shù)目不會太多,取該微文的主題分布中概率最高的主題當做其主題即可。
找到話題對應(yīng)的微文與用戶之后,運行影響力計算算法,就可以得到該話題中影響力較大的用戶了。這也是輿情監(jiān)測、社會熱點監(jiān)控的一個方面。
對于標簽傳播算法得到的結(jié)果,對同一標簽下的用戶運行影響力計算算法,可以得到該標簽下的影響力排名,即領(lǐng)域內(nèi)影響力排名。比如,李開復在全部領(lǐng)域內(nèi)的影響力或許不是最高的,但在IT領(lǐng)域,其影響力絕對是數(shù)一數(shù)二的。
7.垃圾用戶識別
在影響力計算中,提到要避免僵尸用戶對影響力計算的干擾。在算法中,如果可以識別這樣的用戶,在計算影響力時將其排出在外,不僅可以提高效果,還可以降低計算量。
與影響力計算相似,垃圾用戶的識別要同時考慮用戶屬性與鏈接關(guān)系兩方面的因素。
對于垃圾用戶來說,有一些統(tǒng)計上的特征與正常用戶不同。比如如下幾點:
垃圾用戶一般發(fā)微文具有一定的時間規(guī)律性,可以使用熵值對此進行衡量,熵是衡量隨機性的一種量度,隨機性越大,熵值越小。具體做法為將一定的粒度進行時間切片統(tǒng)計,得到每個時間片內(nèi)的博文概率,然后依照概率進行熵值的計算。熵值越大代表用戶發(fā)微文的時間越有規(guī)律,越有可能是垃圾用戶。
垃圾用戶有些傾向于在微文中惡意的@其他人,因而有些垃圾用戶的微文中@使用的比例比一般用戶高。
有些垃圾用戶的微文中為了進行廣告的推廣,添加大量的URL??梢酝ㄟ^微文中的URL比例進行衡量。也有些用戶為了騙取URL的點擊,微文中的內(nèi)容與URL對應(yīng)界面的內(nèi)容不一致,這時需要判斷微文與URL內(nèi)容的一致程度,簡單的做法可以使用詞袋法將微文與URL對應(yīng)界面表示成詞語向量,查看微文中的詞語在URL對應(yīng)網(wǎng)頁中出現(xiàn)的頻度。
對于那些為做廣告推銷的用戶,還可以對其微文進行文本分類,判斷其微文是否是廣告,如果某用戶的相當一部分微文是廣告,則該用戶可能是垃圾用戶。
垃圾用戶一般隨意的關(guān)注用戶,故其粉絲數(shù)目與好友數(shù)目的比例與正常用戶會有差別。而且正常用戶一般是通過好友關(guān)系添加好友的,這樣會形成關(guān)注三角形,如A看到其好友B關(guān)注了C,那么若A也去關(guān)注C,就形成了A關(guān)注B、C,B關(guān)注C的三角形。一般來說,由于垃圾用戶關(guān)注的隨意性,其關(guān)注三角形的比例與正常用戶不同。
當然,垃圾用戶與正常用戶的不同之處不止這些,本文不再一一枚舉。垃圾用戶的識別本質(zhì)上是一個二分類問題,獲得了這些屬性之后,就可以將這些信息輸入到一個機器學習的分類模型中,比如邏輯斯蒂回歸(LR)、決策樹、樸素貝葉斯等,就可以對其進行分類了。
當然,還沒有用到鏈接信息。一般來說,垃圾用戶會去關(guān)注正常用戶,而正常用戶不會關(guān)注垃圾用戶。這即是假設(shè)十一:
正常用戶不傾向于關(guān)注垃圾用戶。
這樣就可以再次使用PageRank算法來對用戶是否是垃圾用戶的概率進行計算。這里需要注意的是,算法初始化時采用上面的分類器結(jié)果,將垃圾用戶的概率設(shè)為1,正常用戶的概率設(shè)為0。在PageRank計算過程中,不能通過簡單的求和公式計算,比如如果一個用戶關(guān)注了多個垃圾用戶的時候,求和后概率可能大于1;因而需要使用一些歸一化方法或指數(shù)族函數(shù)進行概率的更新。
大數(shù)據(jù)利用
1.聚合、計算、輸出、反饋形成數(shù)據(jù)和業(yè)務(wù)閉環(huán)
微博大數(shù)據(jù)其實是一個很閉環(huán)的業(yè)務(wù),從底下的原始數(shù)據(jù)開始,微博一條一條的文本,實際都是非結(jié)構(gòu)化數(shù)據(jù)。通過自然語言處理的技術(shù),把每一條文本內(nèi)容提取出來,之后放在底層網(wǎng)絡(luò)上。如一個客戶對一家飯的評論內(nèi)容,將內(nèi)容提取后就放到這個飯店的邊框上。
基于文本處理還可以做語義的分析,把這些非結(jié)構(gòu)化的內(nèi)容進行結(jié)構(gòu)化,再上一層達到算法層,這個算法實際就是跟不同場景不同的算法,到達用戶端,用戶端再回到底層的數(shù)據(jù)算法當中。因此整個過程并不是一個孤立的,而且跟場景的理解關(guān)系非常大。每個點都非常靈活,要把這個合力用到整個閉環(huán)上。
2.平臺化思路建設(shè)計算能力、數(shù)據(jù)能力、服務(wù)能力
大數(shù)據(jù)本身的建設(shè)如果從效率提升來講,其實是一個平臺化的東西。微博的在線場景非常多,每個在線場景都會留下用戶的行為。所以對微博來說,大數(shù)據(jù)的建設(shè)是一個平臺化的思路。所謂平臺化的思路,要從不同的場景里面去做足夠的抽象,這個抽象有三層含義,一個數(shù)據(jù)結(jié)構(gòu)的抽象,還有一個是策略算法的抽象,還有就是輸出的抽象,三個層面的抽象。
從場景上來說,會分成內(nèi)容流,用戶流,推薦搜索,還有開放平臺的輸出,還有離線報告的應(yīng)用,不同的業(yè)務(wù),不會去針對每個業(yè)務(wù)特點去做,而會把場景要用的策略算法做一個梳理,具體在工程實施的時候,有一些是需要批處理的,有一些是需要流處理的。
3.結(jié)合云計算技術(shù)挖掘大數(shù)據(jù)價值
新浪微博數(shù)據(jù)類型非常多,內(nèi)部分基本是幾十個領(lǐng)域,而每個領(lǐng)域從一開始都是從底層往上做,做數(shù)據(jù)非結(jié)構(gòu)化到結(jié)構(gòu)化的轉(zhuǎn)化。但是走到一定階段,如果想要做到場景級別,還是需要垂直領(lǐng)域的理解。新浪有各個頻道,跟音樂、電影這些門戶頻道有比較深入的合作,到這個階段并不是技術(shù)層面的事情,而是跟垂直領(lǐng)域,跟行業(yè)關(guān)系密切。
另外新浪微博也跟外面合作伙伴有一些合作,這些合作伙伴會把算法部署到新浪的計算環(huán)境當中來,因為畢竟涉及到一些數(shù)據(jù)的問題,不可能把這個開放的程度過大。如果能夠有技術(shù)合作的公司把垂直領(lǐng)域的理解還有他們的算法部署在我們這個環(huán)境之上的話,他們獲得數(shù)據(jù)的范圍可以更大,這個也是新浪微博后面的一個發(fā)展方向。新浪微博提供一個云環(huán)境,在這個環(huán)境里面,可以用到基礎(chǔ)的數(shù)據(jù),微博基礎(chǔ)數(shù)據(jù)。另外還可以用到大數(shù)據(jù)這邊已經(jīng)做到的一些標簽,還有自然語言處理這些內(nèi)容,甚至就是這些合作伙伴可以基于新浪微博提供的基礎(chǔ)數(shù)據(jù),還有挖掘出來的標簽,他自己挖掘的標簽,做一些APP,來滿足用戶的訴求。
4.建立合作更好的滿足客戶需求
新浪微博跟一些其他領(lǐng)域合作伙伴進行多方面的嘗試。目標主要是圍繞用戶的衣食住行各種需求,目前已經(jīng)跟央視索福瑞有一些合作,這是已經(jīng)上線的產(chǎn)品,后臺的數(shù)據(jù)包括給微博文本打上標簽,還有大家平時見到的曲線圖。
在微博電視指數(shù)里面,想表達的是某一款電視在播出的時候,在社交媒體上會有口碑的影響力,還會有用戶的覆蓋度,這些都是節(jié)目制作方,電視臺都非常關(guān)心的內(nèi)容。我們從后臺的數(shù)據(jù)來看,某一款節(jié)目在播前、播中、播后都有一個曲線,這個曲線那來之后,比如《爸爸去哪兒》,比如《中國好聲音》,這款產(chǎn)品究竟在哪個地區(qū)哪類用戶有非常好的反響,這個用戶是什么年齡群的,微博上觀眾經(jīng)常關(guān)注什么,看什么,在這樣一個場景里面新浪微博都能夠獲得。前端展示出來的就是一個微博電視指數(shù),但是后臺其實還有很多要做的事情。
5.開放微博大數(shù)據(jù)和云計算環(huán)境
整個微博大數(shù)據(jù)建設(shè)的過程當中,也希望能夠跟有共同服務(wù)用戶這一點理解訴求一致的行業(yè)的合作伙伴去進行合作。這里面微博這邊能夠開放出來的就是UGC的內(nèi)容流,還有基于微博這個生態(tài)體系所打的用戶方面的一些標簽。
還有能夠提供一個開放云計算的環(huán)境,具體合作也有三個層面,最基礎(chǔ)的就是數(shù)據(jù)這個層面的合作,比如數(shù)據(jù)的互補,對奇。第二個是場景層面,比如在微博這個場景上面一些功能,用戶在使用微博的時候,互聯(lián)網(wǎng)產(chǎn)品本身就是在創(chuàng)造場景,不斷滿足人細分場景下的需求。新浪微博跟這個垂直行業(yè)的伙伴一起尋找,在其他場景還有哪些可以做的。第三個就是產(chǎn)品的層面,這個形式不一定在微博內(nèi),具體什么形式不確定。