陳文光:我看蘆義很快要走了,最近我和煜全合作,大資料第一需要資料,新浪對資料的抓取限制很厲害,我們的帳號經常封了,淘寶也不賣帳號了,有很大的困難,可能還要考慮怎麼獲取資料這件事兒,是很大的問題,新浪需要有更加開放的態度。
我開始今天的報告。
其實今天是三個熱詞的混雜,雲計算、大資料日、社交媒體的論壇,所以看起來非常複雜的一些東西,剛才煜全講的,前兩個東西都非常的熱,很多人在談雲計算、大資料,其實也出現了很多公司產品系統在這方面,其實社交網路在座的人也不找, 雖然沒有那麼熱,也已經非常的熱了。 這三個之間到底什麼關係呢? 很簡單,我個人的看法,雲計算兩件事兒,第一件事兒集中管理,第二件事兒叫做成本降低,由於我們集中在一起管理了,作為資源很好的調度,但是它是基礎的技術,可以看成底層的技術,從商業模式來看,可以看成降低管理成本和使用成本的方式。
大資料其實就更加的,我對這個詞一直沒覺得,我本人是做高性能計算的,現在大家講的這個資料量多大算資料,這個事兒不是很清楚,我有兩個解釋跟大家分享,到底什麼是大資料? 社交網路在大資料命題底下,產生大資料的一種途徑,獲得大資料的一種途徑。 什麼是大資料呢? 大家可能看了很多,第一段話叫資料集數量比我們通常用的軟體工具,能夠處理的更大就算大,這定義等於沒定義,現在Hadoop算不算大資料。 第二個,諮詢公司給出來的,大的容量,大容量剛才講過,我做高性能計算,早就見過幾百T的資料了,對我來說不叫大問題。 第二個叫做高速度,這個資料量不僅大,還有很高的資料產生資料,動態變化的過程,這點給處理資料帶來了很麻煩的事情,很嚴重的挑戰。
第三叫做High-velocity,我們資料可能是非結構化,很多種類型,怎麼把多種類型非結構化資料怎麼有效的處理起來,因為有了這些東西,資料量又大,又有很高的產生的速度,產生資料的形式又多樣,你怎麼能夠處理這些呢? 就需要新的處理方式。 我們回頭來看,今天叫社交媒體或者社交網路的資料,到底從這三個角度來看,是不是大資料? 我們前一段抓了一千萬人的微博,這個資料是5TB,我們知道現在新浪,新聞發佈有4億使用者,這個資料是100TB,100TB我們至少小型公司還沒有太多處理這種資料級別的經驗,但是這個資料還不包括評論和圖片,只抓了微博本身。 另外一類資料,使用者的profile,新浪所有使用者大概100TB這個量級。 使用者關係,新浪三億使用者100GB量級把使用者和他們之間的關注關係表達出來了,像facebook有10億使用者,新浪今後可能增加到10億使用者這個量級,也就是幾個TB量級的資料,這個資料不算特別大的。
速度,這個速度其實是估算的,只能看一些新聞,因為沒有到新浪裡面看這個資料,每天發上億條微博,40個漢字就是280個字元,做增加一些輔助的連結,512個位元組,算這麼一個塊的話,一億條微博就是50GB, 一天增加50GB的資料量。 除了每天發微博以外,大家關注關係在演化,一種增加了新使用者,這樣的增加根據新浪半年報來看,半年增加了八千萬使用者,反映到這個圖上每天增加40萬的結點,關注關係一取消就不太好說了。
資料的多樣性,首先有微博,微博而且用自然語言來寫的,這裡面還有各種各樣的表達方式,第二是profile,相對來說比較乾淨一點,你所在的學校,性別,出生日期這些東西,相對比較結構化一點,但是有很多自訂的tags, 還有使用者關注關係,實際上表達為一個複雜的圖,非常典型的非結構化的資料,是我們傳統的資料庫處理起來比較困難的。 另外還有一些是微博的轉發各評論關係,實際上微博的轉發和評論關係歸回到原來誰轉發誰的微博,造成人和微博,微博和微博,微博和評論之間都有很複雜的關係,都可以用圖來表示。 確實也具有多種屬性的。
可以說社交網路的資料是典型的大資料,它和其他大資料有什麼區別呢? 我們在學校接觸政府部門,比如說電力部門,電力部門有很多智慧電錶,這些資料從創業公司來講,很難獲得的,剛才講到百度或者谷歌,他們植入了很多軟體以後,其實擁有你的很多資訊,包括運營商,但是這些資訊我們其實也跟運營商去討論過, 能不能把你的資訊逆命化以後我們拿出來分析,實際上都是非常隱私。 第一,我們很難獲得,第二,獲得以後很難合法使用。 但是微博不一樣,協定就是公開的,你寫這條東西的時候,你就知道其他人都可以看得到,這是你自願公開你隱私的東西。 我們覺得社交網路的資料,實際上是使用者自願公開的隱私的資料,這是我們創業者真實獲得的機會,只要新浪保持開放的政策,我們希望他能夠做得更加開放。
我們到底期望從中間獲得什麼? 社交網路形成的大資料,從裡面得到什麼東西? 第二是困難在哪兒? 怎麼解決它? 社交化網路分析有各種各樣的內容,網路的統計分析,一個很重要的叫冪律分佈,所以是一個符合左邊這個圖,大部分人的粉絲數很說,極少數人擁有很高的粉絲。 社區發現,我們想知道微博這麼大的圖裡面,大家比較緊密的形成了哪些很小的社區,這個是很有用的,舉個例子,我們要去行銷一個產品,剛才煜全講過,我朋友推薦一個東西,或者我關注的人推銷一個東西,比一個商業帳號推銷更有用誰有影響力 ,能影響哪些人? 實際上經過分析,這裡面很重要的方法,我要能夠定位到很多社區,找那個社區裡面有影響力的人,這是很重要的方法。
結點標記,很多沉默的大多數,並沒有發很多微博,但是我知道你關注了很多人,有些人關注你,我們怎麼能夠通過一些已知的人的特徵把他相關屬性傳播給你,這樣精准的定位,客戶有非常大的好處等等。 更加深入一點,我們基於微博內容的分析,剛才講了很多,分析只在關係上完成,當你考慮到微博內容的時候,計算量變得非常龐大,清華做的微博關鍵字,很多人都用過,實際上是最初步微博分析的基礎,我們講過大資料有速度, 實際上不斷變化和演化的,這個在目前的微博分析裡面,是非常缺失的,主要原因是因為現有的電腦系統技術,沒有辦法很好的支援動態網路資訊的表達、存儲和使用,沒有跟新浪特別仔細談過,新浪自己也沒有這樣的資料,我們剛才講過, 我們整個人的關注關係可以表示了一個圖,這個圖經常可以增加一個結點,又要刪除一個邊,這個演化的過程非常重要。
我們舉一個例子,假如說一個人,我們看到他有很多朋友,在最近一段時間內都從移動的客戶轉成了聯通客戶,這個人很危險,這個人的朋友裡面確實有一部分是移動的使用者,一部分是聯通使用者,這個狀態保持了很久,同樣一個圖的現狀, 對於這個使用者的行為可能非常不同的,我們叫做動態網路持續的資料是非常重要的,現在是非常缺失的。 如果我們要做到對微博內容的即時的分析和回饋,實際上有非常大的計算量。
舉一個例子,我們清華唐傑老師做的研究,右邊這個圖,我們取兩個時刻網路的切片,如果在前面一個時刻,B已經關注A了,A也關注C了,這個時候在後面這個切片裡面,這個B會關注C的概率,我們做分析可以得出來, 如果我們看到前一個切片A關注C,後一個切片B關注C,這兩個概率有明顯的區別,B關注A以後的一段時間內,B就關注C,說明A對B有影響力的,我們仍然需要動態資訊的關注,這是對動態網的處理有很大的挑戰。
後面這個例子是計算量的示例,betweennes Centrality,核心方法做這個圖上所有點之間的最短路徑,經過多,所謂的betweennes Centrality就更高一點。 如果對新浪微博幾億個結點,需要多少條邊,計算量是非常大的,對我們這個軟體有非常多的挑戰,我們說過傳統的結構化資料好分析,而非結構化資料不好分析,其中很重要的原因因為圖的資料所謂的局部性比較差, 電腦裡面的緩存都有記憶體這樣的東西,因為它把你最常用的資料放在cash裡面,而跑到記憶體裡面去了,大概需要兩百個時鐘週期,根據不同的,這個速度可能慢十倍。 如果說訪問了另外一台機器的新聞,至少需要一千個以上的週期,所以這個是提高性能非常大的方法。
資料量很大,我們剛才講到新浪微博,肯定要用分散式系統做這個事情,記憶體和IO的系統來做,可能會面臨很多的挑戰,負載平衡,還有容錯,承載很多的時候錯了怎麼辦,社會網狀圖還有一個問題,它的結點非常的不平衡,也就是說, 某些人具有非常多的粉絲,大多數人很少,很多粉絲的人面臨一個問題,不管放到哪個裡面,都很難去計算。 剛才說的增量的資料或者說持續的資料這樣的問題,我們傳統的一些方法,保留多寸快照,這個資料量太大了。 還有就是log的方法,我有年初的切片記錄了從年初到現在所有的變化,你得播放多長時間獲得現在圖的狀態。 基於這個內容的分析,還有即時分析和回饋,也是計算量非常巨大的事情,特別是現有的,現在深入的處理技術基本上沒有用,一旦用到,它的計算量過於龐大。
今後這樣的趨勢是什麼? 實際上是目標,我們想知道什麼,想從這些資料裡面拿到什麼,這個要由創業公司,由社會學研究者,由他們提這個問題,另一類是電腦科學家演算法的研究者他們會根據這樣的目標找到更加好的演算法,剛才提的例子, 如果我們能夠對社區發展找到不是結點數乘以邊數,可以大大提高性能。
第三個是系統,有了目標和演算法以後仍然需要系統對它的支援,這種支援也是很困難的,我們現在不管是公司還是學術界,在這方面做很多努力。 我本人做系統的,我把系統的方式描述一下。 解決這個挑戰主要有三個方法來做,第一個是你怎麼程式設計,程式設計的介面兩個好處,第一個讓程式師寫程式更快,運行著的系統優化這個程式更加容易,第二是這個資料的存儲,存儲存得好,提高這個資料局部性提高性能。 第三是性能緩存和通訊的優化。 第一個是谷歌,大家知道谷歌專門提出了BSP模型,P同步模型,做一段時間計算,再做一段時間的通信,再同步。 但是這種同步的模型大家可以看這個圖,會被最慢的系統極大的脫慢性,其他幾個子任務早就完了,最慢的任務決定了整個任務的結果,所以它會有很大的問題,這是最慢的路徑。
實際上現在我們科學界提出了叫做非同步平行算法,這個例子影響傳播,有它的路徑,不需要等到上面都傳完了以後傳到這邊來,非同步傳播有很好的結果,理論上比這個同步的方法演算法快很多。
剛才講過這個圖有很多人和很多條邊,有很多的粉絲,像姚晨這樣的,他們很難處理,最近有一種方法提出來,怎麼想辦法把這個界定區分開劃分成不同的子結點,就是這種GRACE的方式,把次數降低,不是每次都通信,我們每個分區裡面做通信 ,通信完了以後統一和外面進行通信。 這是一個結果,藍線是谷歌的先提出來的一種方式,這個Power Graphlab進行冪律分析以後拆分可以得到很好的結果。 這是我們做高性能計算的人更熟悉的方法,實際關係不多講了。
這個可能對大家有一點用,GraphChi,社會網路的資料還是很大,但是也沒有那麼大,剛才講到關係資料,其實是幾百GB量級的資料,對於這樣的資料,如果自己只有一個筆記本,大概有個4G、8G的記憶體, 怎麼想辦法在筆記本上做圖的分析,這個GraphChi的系統,通過資料做成多個切片,分析某一個切片的時候,把那個切片的資料放到記憶體裡面來。 還做了一個事情是排序,把這個資料按照一定方式排序以後,每次讀硬碟或者讀SSD的時候是順序讀的,順序讀大大減少了隨機讀的次數,也可以很好的提高性能,大家有興趣可以自己看一下使用,也非常得好用。
對於時序資料的分析的存儲,既比較省空間又能夠提高比較好的局部性,而且它的訪問效率還很高,你需要獲得某個時間切片的時候要很長時間,具體有很多技術內容不講了。
實際上還有程式設計方面的關係時間關係不講了,這個問題還沒有完,我們做的是這個圖已經不再時序的更新了,左邊輸入裡沒有,我們就在這兒做一個存儲,在這個存儲裡面存很長時間的一段的圖,可以輸出任意時刻的流。
我總結一下,社會網路分析我們認為它是典型大資料分析的問題,需要處理資料的大容量,高速變化速度和資料的複雜,社會網路分析主要的方法是圖的方法,就是圖的演算法,局部性、大資料量和大計算量對這個系統提出很多的挑戰, 我們現在在通過國內外的學者和公司通過程式設計抽象、資料存儲這幾個方面的挑戰來做。 謝謝大家。
(責任編輯:蒙遺善)