-
大数据似乎在一夜之间迅速走红,它势不可挡地冲击着金融、零售等各个行业。云计算将如何改变计算的世界?未来将有怎样的应用前景?如何解决“信息孤岛”的问题?大数据又将如何提高我们决策的准确性,帮助我们更准确地预测未来?
-
在2014年7月25日腾讯互联网与社会研究院主办的“大数据连接的未来——2014腾讯互联网与社会研究院高峰论坛”上,中国人民大学信息学院副院长文继荣分享了《大数据的经验主义解释》。
中国人民大学信息学院副院长文继荣
大数据的经验主义解释
今天很高兴来到这里跟大家分享一下我在大数据方面的一些思考,可能比较偏向哲学思考。我过去在微软亚洲研究院工作了14年,主要研究工作集中在互联网大数据挖掘、搜索,还有机器学习这些方面。所以,我跟大数据打交道已经有十几年的历史了。
我最近也一直在思考一些问题:一些大数据里最重要或者最本质的问题是什么?什么是大数据?多大的数据是大数据?大数据是一种新的资源还是一种新的方法论?这些问题我今天都试图给出我自己的答案。
这里是大数据一个通常的定义,来自维基和百度百科,其实这个定义我不是特别喜欢,因为它基本就集中在“大”这个方面,数据大到我们现在的系统和平台不太能Hold住的就是大数据,这个没有揭示很多更深刻的问题。
回过头来思考一下,在整个科学史上,我们一直有个理性主义的传统,理性主义的传统是什么?我们总是试图从自己的直觉或者根据自己有限的经验去找到一些一般性的、规律性的东西。所以,我们希望从个别特殊的情况推到一般性的东西,比如在物理学上有牛顿的力学定理,这些都是希望以简洁有效的理论模型来描述一个普遍的现象。有了这个,它的威力在哪里呢?我们又从一般到特殊,可以去解释任何将来的类似的情况。
我自己是做计算机科学的,计算机科学里也有这种理性主义的传统,大家都知道机器学习的方法,完全是理性主义传统,希望能从理性或者直觉中建立一些模型,或者从小量的样本归纳出一些模型,有了这个模型以后我们对任何新的样本就可以进行判断。大家知道手写体的识别,我们可以收集一百个人手写的数字,用这些数字我们可以训练出一些模型,对新用户写的数字就可以进行识别,可以得到相当高的精准度,都是这样一种方法。
为什么需要模型?我不知道大家有没有思考过。实际上模型是试图从有限的经验或者有限的样本数据得出普遍性的规律。在人类整个发展历程中,尤其是几千年的历史上,我们普遍存在着对数据收集和分享的困难。这个事情最近20年才得到了改变,我们可以更容易地收集数据,在历史上是非常困难的,我没办法分享我自己对某个事情丰富的经验,别人也很难从我这里得到这样的经验,而模型就缓解了这种数据不足的情况。但是模型一个重要的功能就是进行泛化,我们可以从有限的东西得到一般的东西,但是这种理性主义的方法,通过构建模型的方法走到今天,逐渐遇到了很多问题。
比如我们是不是总能从特殊推到一般?我们是不是总能从看见的东西推导出对没看见的这些东西的一样的规律,我们是不是有这种泛化的能力?另外一点,现在有很多问题其实是非常复杂的,我现在在中国人民大学工作,人民大学是人文社会科学很强的一个学校,我跟其他做社会科学的教授进行过交谈,他说在社会科学领域里有很多问题非常复杂。大家都知道对股票、对股市进行预测,这个问题是非常复杂的,比我们在自然科学里遇到的问题复杂得多,因为股票市场里有很多因素在影响着几千万甚至上亿的个体,这些个体在博弈,这样的问题我们是不是能像以前那样找到一个简洁的模型进行描述?这个问题是没有答案的。对这种复杂的问题,我们可能就没办法用模型和理性主义方法解决,那有没有其他的办法解决呢?通过前面的分析就知道,实际上,走到今天,大量的新技术使得数据的收集和分享变得非常容易。物联网的技术、互联网的技术,移动设备,这些新技术在过去20年,尤其最近10年,极大加强了我们收集和分享数据的能力。当数据越多的时候我们可能就越不需要模型。当数据很多的时候,我们找到一种新的方法,这种方法代表了经验主义的复活。
这一页PPT可能是我今天讲的最重要的一页PPT。我比较了一下传统的方法、思维方式和大数据的方法,尤其和大数据思维方式的本质的不同。大家请看上面这部分,上面是我们传统的理性主义,基于模型的解决问题的方法,我们首先是基于小数据,我们可能对某个问题有一些经验数据,有一些样本数据,但这是小数据,数据量有限,我们为了把它进行泛化就需要模型,我们通过这些小的训练数据,小的样本数据得到一个普遍性的模型。通过收集一些特征,我们得到这样的模型。对一个新的样本或者新的特例,我们也抽取它的特征,通过这个模型进行判断,最后得到一个结果,这个方法是一个普遍性的方法。
我们看一看大数据的方法,它使我们对目前的问题有大量的样本,可能覆盖了所有的情况,我们对整个样本空间有很大的覆盖。对一个新的样本,我们就可以直接在已知的样本中进行搜索和查找,找到相同或相似的,然后根据以前的样本结果进行判断,最后得到一个结果。
这就是一个非常简单的模型。我再从另外一个层面给大家解释一下,你如果把它看成一个人的话,传统的方法就是希望找到那种很有理性的人,他通过一些有限的经验就能够得到一些一般性的规律。这个人很聪明,他能进行抽象、归纳,得到一些普遍性的理论。这个人呢?这个人实际上可能不怎么聪明,他的抽象能力和归纳能力也不强,但他有一个优势,脑容量特别大,他能够记住很多很多以前的经验,而且他到处去学习,到处去看,收集了很多很多这样的经验,所以,他是一个记忆力特别强的人。他还有一个能力,遇见一个新样本的时候,他能快速地在以前的记忆里进行查找,比如进行KNN的查找,找到以前跟它相同或相似的案例进行判断。其实大数据的方法或思维无非就是这样一种事情。这种方法最大的优点是什么?它避开了模型,它对那种很难建模、很难进行分析的问题避开了建模,比如因果关系推导的问题。直接是一个经验主义的解决方案,就是对以前经验的查找和匹配。
我下面给大家举几个以前的例子。因为我在微软做了十几年的搜索,实际上搜索引擎是大数据很多基本方法和基本思考方式的一个起点。网络大数据是最大的免费数据源,大家知道这就是Google的Mission,它就是要组织世界上的信息。搜索引擎公司实际上就是一个大数据公司,很多很著名的技术,如MapReduce,都是来自于这样的公司对大数据处理的需求。我过去在微软的时候也做了很多跟大数据有关的研究,我通过这些例子给大家解释一下前面这种大数据思维方式的应用。
第一个例子是查询结果排序,在座的都知道,用搜索引擎结果排序是最重要的,怎么能把结果很好地排列,让你很快找到你要的结果,这就是结果排序。传统的解决方法就是理性主义的方法,是用排序模型,用概率模型、语言模型或者神经网络这种机器学习的模型,有很多方法。我们做了60年,在这60年中我们都希望找到一个通用的模型,使得任何一个查询我都可以把结果排得很好,一直在这样做。
大概2004年、2005年左右,我们用了一种新的方法,就是大数据的方法解决这个问题,它是对用户点击的挖掘。我们后来做的排序模型越来越复杂,但是有些结果还是排不好。后来我们就用了另外一种方法,根据点击。比如有一个查询,假设是对“腾讯”的查询,你去收集过去用户对查询结果点击的行为,比如很多人点了腾讯的主页,可能很多人又点了微信的主页,收集了一万个人的点击行为以后,就很容易得到一个统计的分布图,哪个网页点得最多,哪个第二,哪个第三,得到这么一个统计数据。当有人再进行查询的时候,你直接根据点击分布的排序对它进行结果排序就可以了。点得最多的就排在第一,这个点的第二多就排在第二,这是目前搜索引擎里大家普遍采用的方法,这个方法非常有效。它绕开一个重要的问题,我不去理解为什么这个网页会排在前面,我的大数据告诉我很多人投票,它应该排在前面就行了。所以就绕开了建模的问题。
第二个例子叫查询聚类,这是我在国际会议上发的第一篇比较重要的论文。大概2000年的时候,我接到一个任务,把一些字面上相关但是语义不同的查询聚在一起。比如“原子弹”这个查询,“曼哈顿计划”这个查询,要把它识别出来,它们在语义上是相近的,要把它们聚在一起,是个很难的问题。传统的方法还是用模型的方法,我们试图发现一些通用的模型,使得对任意两个查询可以计算它的相似度,但这个问题非常难,“原子弹”和“曼哈顿计划”有什么通用的数学公式判断吗?我想了很久,后来找到一个大数据的解决方法,跟前面一样,根据用户的点击行为来判断。当用户做了“原子弹”这个查询后会点击网页,一万个人查询了“曼哈顿计划”后也点了网页,看他们网页的相似度可以倒推出查询的相似度,这个方法效果也非常好。
再给大家举第三个例子,就是机器翻译,把一种语言翻译到另外一种语言。传统方法还是用翻译模型,找到通用的模型,给了一句中文我就翻译成一句英文,但是这种模型的方法越来越困难,因为语言太复杂了,我们很难找到一种很完美的模型。比如莎士比亚《哈姆雷特》里的“To be or not to be, that is the question”的翻译跟语境都有关系。2004年Google提出一种新的方法,就是用大数据的方法做翻译。这个方法很简单,就是平行语料挖掘。在很多网页有很多平行语料。曾经写了一句中文,翻译成英文,有很多这样的数据。它就把这些平行语料都提取出来,然后得到很多训练数据,再去统计词语、短语,乃至句子、双语之间的对照关系,比如一万个网页里大家都翻译成“生存还是毁灭”,将来再有人让我翻译,我就把这个句子给他。这就是利用了以前很多人曾经在这个翻译上的经验数据,效果很好。那年参加翻译比赛拿了第一名,可能在座的人都知道,很容易比传统的方法做得好。现在很多机器翻译都是用这种方法。
第四个例子是我离开微软之前做的一个研究工作,当时是2012年,美国大选预测奥巴马和罗姆尼谁能赢。传统方法可以做民意调查,通过一些专家做模型调测,我们就通过大数据方法,监控了一百个美国的媒体网站和社交媒体,还有跟选举有关的网站,我们把里面公开的数据都拿来做了一个分析。分析很简单,比如有一个句子说他支持奥巴马,我们给奥巴马加1分,他反对奥巴马减1分,如果他支持罗姆尼,我们给罗姆尼加1分,分析完以后我们把这个东西做了一个简单的统计,最后效果非常好。这个事情我们是实时发布的,做完以后,最后的结果跟实际结果非常接近。
这四个例子都是我过去工作中实际上遇到的。当模型的方法或者理性主义的方法达到了某个瓶颈的时候,如果采用某种大数据的方法去做往往会有意想不到的效果。
什么是大数据?这是很多人都会问的问题。这是我自己对它的定义:大数据是一种能力,它是一种进行判断和预测的能力。不是数据很大就是大数据,它是一种能力,这种能力建立在群体智慧之上,是建立在很多人的群体经验和智慧基础上的一种预测判断能力。它的前提就是我们现在掌握了这种海量数据收集存储和处理的技术,就是在过去十几年间发生的事情。我们有了这样的技术,有能力做这种海量数据的收集存储和处理,就产生了这种新的能力。“经验主义比理性主义更重要,数据比模型更重要,相关关系比因果关系更重要”,这些都是它的一些内涵含义。
第二个问题,多大的数据是大数据?很多人会问这个问题。1T是不是足够大?100 T是不是足够大?对这个问题的回答,我们没有一个绝对的数量,我们不能说100个T的数量是不是大数据。一个数据是不是大数据,跟这个数据所应用问题的规模大小是有关系的,就是说你要把数据用在某一个问题上,这个问题的规模,尤其是样本空间的大小会决定你的数据足不足够大。
比如大家都知道掷硬币,就是正面、反面,可能扔一百次知道大概百分之多少概率朝上,百分之多少概率朝下,一百次可能就够了,一千次就很大了。但是对机器翻译的问题样本空间就是无穷大的,可能数据再怎么多都不敢拍着胸脯说是大数据,一个数据是不是大数据是跟问题相关的,如果你能充分覆盖你问题的样本空间,针对这个问题就是大数据。因为各种可能出现的情况都有数据进行覆盖,这样数据就足够大了。
回到我刚才讲的,大数据的方法很好,但是模型是不是就真的没有用?其实不然。因为实际上我们在实际解决问题的时候,发现数据总是不够。除非那种很小的问题,一般复杂的问题,因为它复杂,样本空间非常大,问题的各种可能情况非常多。所以,数据总是不够。还有就是样本空间在不停地变化,刚才的查询结果排序的例子里不停地有新的查询、新的网页出现,你需要不停地用新的数据补充,所以,你的数据总是不够的。
模型需要和数据结合提供适当的泛化能力。当数据不够的时候怎么结合,把模型和大数据进行结合?这其实是一个新的问题。原来我们的思考方式不是这样的,我们原来的方法是以模型为主,模型解决一切。现在倒过来看,假设我以大数据为主,在大数据力不能及的地方我们用模型进行补充。应该怎么做,这本身是做研究的人可以进行思考的问题。
我再讲一个问题,最近大家讲大数据的时候,数据大了就行了,但是很多人忽略一个问题,就是数据的质量问题。拿着一堆质量不可靠或者不知道质量怎么样的一些数据,然后就去做一些统计分析、去做大数据,这其实是很危险的。举个例子,当时法国网球公开赛的时候,李娜第一轮就被淘汰。当时已经晚上快12点了,我就马上到新浪的用户调查看,因为那个地方老发布一些调查,大家就投了票,比如李娜能不能再获得世界第一。大家觉得这种投票有多可靠?这个数据一点都不可靠,因为你不知道投票的人是谁。我们传统上要做很多统计分析的时候,特别强调数据抽样的无偏性、随机性。可是今天大家用大数据的时候好像就忘了这个东西,觉得只要我收集了很多数据简单统计一下就行了。因为我是大数据,是全样本,就不用去管数据的质量,这是非常危险的一个趋势。这个例子中,半夜12点还在网上投票的人我不相信在整个人群里代表一个随机的分布,肯定不是。一般半夜12点还在网上投票的肯定很多是学生,或者看比赛的网球爱好者,但是肯定不是一个随机抽样。关于整个大数据质量控制的问题,现在还没有特别多的研究和思考,但这个问题是非常重要的。
大数据也需要进行抽样,即使你拿到大数据也不能简单进行统计,你还是要进行一些再抽样,使得它的数据分布服从人群的普遍分布。
最后讲一下大数据应用开发的一个典型流程,这是我们做过的一些应用的总结。第一,要找到一个重要的应用,要确定这个问题的数据类型和样本空间,要确定这个样本空间有多大,首先要做到心中有数,因为只有知道这个,你才可以有效地进行第二步。就是收集到尽可能多的相关数据来覆盖这个样本空间,比如样本空间是一百万,我至少要收集到多少数据才能把这个样本空间充分覆盖,情况才能都考虑到。第二步就是尽可能收集数据覆盖样本空间。第三步,在选择或者搭建一个大数据处理平台时,有很多大数据处理平台,但是选择什么?你要选择一个合适的平台处理。第四步很重要,就是要针对这个应用对数据进行预处理,包括格式转换、数据抽取和集成,这是非常难的一步,然后进入到数据的处理分析,最后对结构进行解读和应用。
很多做大数据应用的人容易犯一个错误,对第一步和第二步不重视,而是手里有什么数据就用什么数据。但是要做一个应用,一开始就要想一想数据、问题有多复杂,问题的样本空间有多大,这个问题是非常重要的。