陈文光:云计算、大数据与社交媒体

陈文光:我看芦义很快要走了,最近我和煜全合作,大数据第一需要数据,新浪对数据的抓取限制很厉害,我们的帐号经常封了,淘宝也不卖帐号了,有很大的困难,可能还要考虑怎么获取数据这件事儿,是很大的问题,新浪需要有更加开放的态度。

我开始今天的报告。

其实今天是三个热词的混杂,云计算、大数据日、社交媒体的论坛,所以看起来非常复杂的一些东西,刚才煜全讲的,前两个东西都非常的热,很多人在谈云计算、大数据,其实也出现了很多公司产品系统在这方面,其实社交网络在座的人也不找,虽然没有那么热,也已经非常的热了。这三个之间到底什么关系呢?很简单,我个人的看法,云计算两件事儿,第一件事儿集中管理,第二件事儿叫做成本降低,由于我们集中在一起管理了,作为资源很好的调度,但是它是基础的技术,可以看成底层的技术,从商业模式来看,可以看成降低管理成本和使用成本的方式。

大数据其实就更加的,我对这个词一直没觉得,我本人是做高性能计算的,现在大家讲的这个数据量多大算数据,这个事儿不是很清楚,我有两个解释跟大家分享,到底什么是大数据?社交网络在大数据命题底下,产生大数据的一种途径,获得大数据的一种途径。什么是大数据呢?大家可能看了很多,第一段话叫数据集数量比我们通常用的软件工具,能够处理的更大就算大,这定义等于没定义,现在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的时候是顺序读的,顺序读大大减少了随机读的次数,也可以很好的提高性能,大家有兴趣可以自己看一下使用,也非常得好用。

对于时序数据的分析的存储,既比较省空间又能够提高比较好的局部性,而且它的访问效率还很高,你需要获得某个时间切片的时候要很长时间,具体有很多技术内容不讲了。

实际上还有编程方面的关系时间关系不讲了,这个问题还没有完,我们做的是这个图已经不再时序的更新了,左边输入里没有,我们就在这儿做一个存储,在这个存储里面存很长时间的一段的图,可以输出任意时刻的流。

我总结一下,社会网络分析我们认为它是典型大数据分析的问题,需要处理数据的大容量,高速变化速度和数据的复杂,社会网络分析主要的方法是图的方法,就是图的算法,局部性、大数据量和大计算量对这个系统提出很多的挑战,我们现在在通过国内外的学者和公司通过编程抽象、数据存储这几个方面的挑战来做。谢谢大家。