Cisco发布的总结报告《
泽字节时代:趋势和分析》中指出:2016年末,全球年度互联网流量将突破ZB大关(1ZB 泽字节:1000EB艾字节),并将于2020年达到2.3ZB;互联网的流量将在未来五年内增长三倍;智能手机终端的流量将于2020年超过PC终端。(注:泽字节为十万亿亿字节)
IT业内很多公司都开始研究怎样能超越传统数据处理模式,实现对大数据的处理以收获前所未有的信息价值。
TalkingData是一家独立的第三方移动数据服务平台公司,其平台上每天新产生14TB的数据,有超过370亿条的消息。在9月12日至9月14日举办的T112016暨TalkingData智能数据峰会上,InfoQ采访了TalkingData首席数据科学家张夏天,下文来自对采访内容整理。
TalkingData的机器学习
TalkingData的日均处理量,现在每天在TalkingData的平台上新产生14TB的数据,有超过370亿条的消息。
机器学习有很多算法,学术上的分类都是公认的。TalkingData内部更多的是看一个算法或者算法的实现是适合处理大数据还是小数据,会根据这个标准分成两类。
我们既要处理互联网公司的超大规模数据,又要支持很多小规模数据的客户需求,所以我们的情况比较复杂。大规模数据处理的算法栈基于Spark,我们做了大量基于Spark的算法创新和优化;小规模数据的处理主要是一些具体客户项目,比如银行、房地产,对一些乙方数据的挖掘,因为数据处理中遇到的技术问题不是特别大,所以主要使用基于Python、R的算法库。
大规模与小规模数据项目的处理模式
项目很多,可供选择的算法也很多;那在实际中怎么选择使用呢?这个与上面一样,还是要分两类讨论。
大规模机器学习的整个体系还不够成熟,市面上没有特别好用的工具;大互联网公司都是自研平台和系统,实现各自业务的需求。开源那些技术则各有各的问题,像Spark的MLlib,我们进行测试时发现在处理TalkingData规模级别的数据上有些力不从心。形势所迫,我们也是没办法只好自己重新做对应的研发工作。目前看来,大规模机器学习中可用的模型并不多,会考虑一些简单的线性模型,因为数据规模太大,太复杂的模型并不一定好,我们会用到Logistic Regression这样的模型去解决问题。
在处理小规模数据时,其实没有绝对偏好;首先理解清楚具体问题;再去寻找找哪个算法更适合,这其中的过程可能会测试很多算法。对小规模问题我们有一些基准算法,比如Random Forest、Random Decision Tree、Random Decision Hashing。在这些基准算法的基础上,在逐步细化并尝试其他算法,其中有一些问题我们也在用深度学习去解决。换句话说,我们的原则是哪个适用用哪个。通常,解决小规模问题的逻辑是先用简单的快速的,如果能够解决问题,就用简单的模型;如果问题不能解决,再逐步引入一些更复杂的模型。
什么时候进行数据降维
在实际应用中,我们的最高维度会超过一千万。在降维的这个处理上,可能比较令大家想象不到的是:大维度的问题,我们反而是不做降维;对维度不太大的小规模问题,会用传统的PCA或者其他方法去做降维。
为什么大规模的问题不做降维?首先是很难去做降维,因为维度太大了,数据空间太大了,如果做一次降维,付出的代价非常大。比如如果用PCA做降维,就需要有很多矩阵操作,矩阵操作现在以MapReduce为核心的计算模型效率非常低,尤其对大矩阵而言,那么为降维付出的代价是不值得的。
小规模的问题与大规模的问题有很大的不同:小规模数据问题主要面向我们的客户,他们会追求可解释性,需要找到起决定性的稳定因素;这种情况下希望把不重要的维度摒弃掉。
反观大规模问题,一千万维度的模型,人工解读也非常难。对于大规模问题我们更多的关注模型的预测能力,为了预测的更精准;很多情况下我们会放弃对模型的理解,而是看在实际中这个模型能不能起到很好的效果。
大数据团队的内部工作分工
在TalkingData内部,从职位上来看,大数据工作分为两类:大数据工程师、数据科学家。在我们公司内部,大数据工程师主要建设大数据平台,基于大数据平台做一些数据处理工作,涉及算法的工作内容并不太多。TalkingData内部定义跟算法相关的职位是数据科学家。大数据领域更希望有数学和计算机的复合人才,目前复合人才比较稀缺;不过,作为一个团队来说会看重一个团队本身的复合型。
从工作内容上讲,我们大数据团队有不同的分工,可以分成三块。有两三个同学一起在做大规模机器学习、深度学习,他们是在底层打基础,提升系统平台基础能力。中间层的工作是挖掘数据,比如人口属性挖掘,丰富标签体系;从地理位置数据挖掘信息,如识别Wi-Fi的类型是家庭还是公司,把我们数据变得更丰富、价值更大。还有一部分工作在上层,要结合到具体的客户项目,比如给某家银行做推荐系统、互联网金融风控、帮助房地产企业做营销等等。
算法书中的大数据对接业务
TalkingData的有些产品,比如营销云,要面对来自客户的很多需求。我们要帮助客户去筛选人群。怎么筛选?首先,我们提供简单的方法,基于标签的、统计学的去筛选;然后,还有一些基于所谓的人群扩大的方式,这个工作无法通过统计学完成,必须使用机器学习。
虽然我们会使用很成熟的机器学习算法,但是由于一方面候选库是十亿级别以上的样本,另一方面我们的数据维度也是超过千万,所以需要将大规模机器学习的能力嵌入到产品里面。
对某个业务而言,如果仅从纯数学的角度讲,可能这个业务背后并不是一个特别难、特别复杂的算法;从工程角度看,实际上较大的难点在于怎样算法做到可用,并且在大规模下可用。用传统方法也是可以得出结果的,但是那样可能需要跑一个礼拜才能跑出一个结果;对于项目而言,这个结果实际上是过期的,已经完全没有意义了。需要通过很多努力做到十分钟内算出结果,这样才算的上真正的作用。
数据和计算结果的存储
这么多年来我们数据一直都有备份,TalkingData作为大数据公司,所有的数据都是存储在自己的云上面。只有一些边缘的系统会去用现在的一些云服务,核心的系统都是我们自己的系统。这样做有两个原因:第一,公司是在2011年发展起来的,那时候云计算还没有到现在的能力;第二,我们本身是一个大数据公司,我们要对自己的数据负责。
“初始数据和计算结果是否都有保存?”都会有的,原始的log也会做备份。我们有一个理念:数据经过处理以后,不管处理得多好,里面的信息都会有丢失。对信息做任何操作,信息量不可能增加,只可能减少,最多就是不变。为了实现某个目的,中间做了很多处理,那不可避免地在处理中就舍弃了一些信息。所以,TalkingData原始数据都会做备份;不过会做大量的压缩,用更廉价的方式存放起来,中间过程中某些使用频率高的数据也会都存下来。
如何成为一名大数据工作者
这一点分两个方向谈,一个是具有IT背景的职场人怎样转向大数据,另外一个方向是在校生怎样踏入大数据领域。
IT工程师是可以转向大数据的。个人而言,比起工程方面经验,我更看重的是一个人的基本功。不论是大数据基础还是计算机技术,如果你目前的基本功不扎实,想转大数据,一样有很大的困难。如果你有很强的代码能力,其实要转到大数据并不是一个特别难的事情。如果你有比较好的基础,在大数据公司,比如TalkingData;可能半年、一年也就能够成长为一个还不错的大数据工程师。上面提到,大数据工程师负责建设大数据平台,数据科学家从事算法相关功做。
IT背景想成长为数据科学家,我感觉个人如果想做好,可能确实需要补一补数学方面的基础,比如直接看一些相关书籍。团队内部的信任,如果是毕业生,我一般会要求先把大学的概率统计好好复习一遍,这是非常基础的一个学科;然后还有相关如线性代数,如果能够很好掌握,对深入算法非常有帮助。
现在还有一种趋势,在小规模问题上,提供的工具越来越多、越来越好用。有些人认为用这些工具处理一个或者同类的问题就可以了。但我认为只能说会使用算法包,但对算法原理不能有清晰认识,不能举一反三,这样的数据科学家,不管你做多长时间,始终会停留在初级的层面上。会使用一千种算法却没有深入了解,相当于是学了一千种招式但内功没有练好;如果你把内功练好,招式学的很快。
不能盲从,哪个工具好就用哪个。比如,现在深度学习很火,大家都是用深度学习,但是对深度学习的基本原理又不太了解。这种心态的话是走不长远的,因为使用层面上这个基本上没门槛,对于懂编程的人来说,调用人家的库做一个事情可能也就是一天两天的事情。这样做我不认为有什么特别大价值,一定要去深入了解算法背后的原理。即使你自己不去实现算法,这个对你以后遇到什么问题,用什么样的算法,或者自己去定义问题有很大帮助。数据科学里面有很多是定义问题,你对算法、对数学掌握的更深一些,就能够把问题数学化更好,选择更好的工具来解决。
对于学生而言,如果你是一名大学生,学校若是有相关的选修课可以去选修。虽然有一些大学已经开设了大数据专业,但是这还不是普遍性的;因为从高等教育的专业设置跟时代的发展是有一定的滞后性,更多需要自己去关注。网上学习资料很多,包括TalkingData University也有很多的公开课程,如果自己真的有兴趣的话,可以去自学很多东西。想找到这样的学习资料,机会都是比较容易的,就看自己用不用心。如果是中学生还是好好学习,争取在好大学就读计算机、数学的相关专业,不管大数据还是科学方面打下好的基础。如果既有数学的背景又有计算机背景,在数据科学方面有很大的优势。纯数学背景或者纯计算机背景在数据科学方面都会有一些短板。
谈机器学习、人工智能带来的变化
怎么看待机器学习和人工智能给人类带来的影响?这个问题很大。AlphaGo是一个非常大的突破:因为之前认为按照计算量的发展,需要50年或者100年才能够达到超越人的水平;没想到2016年就超过了。这突破式发展让大家现在对人工智能抱有很大热情。
我个人认为现在人工智能确实可以做很多很多的事情。其实在AlphaGo之前,就已经有很多智能的技术就在影响我们的生活,像推荐系统、精准广告,只不过这是个比较平缓的发展,大家没有感觉出来。未来认为还将依旧是平缓的发展,AlphaGo更像一个标志性事件,意味着达到了一个水平,但是这个突破并不是突然,经过多年的不管是数据、技术还是算法的积累,这是一个必然结果。
未来的人工智能应用,目前整个业界更关注的就是智能驾驶,不管是国内的百度、国外的Uber都在做测试。这可能是接下来五年之内人工智能有希望取得比较大的进步方向。其他领域,人工智能可能会比较润物细无声,不会有特别大的变化。
现在一直在发展,像广告会做得越来越智能,越来越符合你的需求。我们看看,原来广告是怎么做的,我们会分析人的兴趣;我们昨天还在跟一个剑桥的教授聊,他们在分析人的性格,根据性格,同一个广告我给你不同的广告素材,这不是一个飞跃性的发展,是逐步渐进式的发展。现在还会看到很火热的聊天机器人,我们目前认为通用性的聊天机器人短期内看不到真正落地的场景,现在更多会垂直化发展。
在垂直领域产生价值,国外有一些公司在做小场景的应用创新,比如有一家公司在做一个简单的事情,国外很多人都会收到贴停车罚单,这家公司做的是一个法庭申诉咨询聊天机器人,他给你建议,怎么到法庭上申诉,成功率可以达到64%。这里的case不是通用性的,是在法律范围内,属于非常固定的场景,但是能够起到很好的效果。聊天机器人我们用了很多的技术,但现在即使是比较成熟的技术,还没有到能够真正理解人的话语里面的逻辑。做成通用的无所不能的聊天机器人,短期内还是难以实现。在限定领域,第一,问题空间变得很小;第二,人对机器的期望会降低,我并不是说真的把你当做一个朋友在聊,你帮我解决特定的问题。人对体验上的要求降低了,问题空间减少了,这样就能够起到比较好的效果,未来就有比较微小的智能会逐步围绕着我们生活出现。
至于人工智能的发展,什么时候量变变成质变。我个人认为,如果从强人工智能的角度看,现在的技术水平离这块比较遥远。举例说明,深度学习的发展,本质上深度学习、神经网络,从数学上看是函数拟合器,现在还不太具备理解世界的能力,更多是去从某种层次上模仿人的决策函数,或者说它并不会理解里面的因果关系。我个人认为在这方面还不能够有特别大的突破,也就是说科幻片里面人工智能还是相对来说比较遥远的。
基于现在的技术,包括未来数据会越来越多,在两者的发展结合下,我认为智能确实会越来越多,但是都是功能性的智能:驾驶领域有驾驶的智能,推荐领域有推荐的智能,语音助手中有语音助手的智能,这些都是未来5-10年内能够看到的。
其他问答
问:“是不是可以理解机器学习都是基于已有的数据进行概率统计学习,选择合适的模型?”
张夏天:可以这么认为。不过,我更认可的一种观点,不见得尽然对:机器学习是统计学发展到一定程度,无法解决大数据量的情况下做的一个妥协。在以往,对于很多问题都能够用概率的模型描述,或者概率密度函数,或者概率函数进行描述;但是发展到后来,我们发现在多维度,尤其高维度的情况下,用统计学不可能精确地求解或估计出这样的函数。机器学习就退而求其次,在分类问题上不要求精确到概率的结果,比如90%是A或者80%是B;机器学习需要的结果就是,要看到在某个空间里面,给出一个分类界面,指出结果是在哪边就OK了。
问:在处理大规模问题时,你们会对算法进行一些优化,并且考虑开源出来?
张夏天:我们内部是,刚才说到了大规模机器学习的问题,现在市面上没有特别成熟的东西,不像小规模问题,我找一个Python的包就能解决很多问题了。这种情况下很多大的公司,不管是国外的谷歌、脸书,国内的BAT,自己内部有相当大的投入,不管是在系统上还是人员上都构建自己的能力。
这方面做的一些工作我们愿意开源出来,帮助大规模机器学习能够得到更好的应用。
问:对于小规模问题是不是会采那些历史很悠久的统计算法?
张夏天: 是的,但是我们也不拒绝新的算法。
问:那么在您看来,人工智能距离发展成科幻片还差对人脑科学理解?
张夏天:现在人工智能最好的模型就是人脑,很多科学家正在研究人脑,琢磨怎么模仿人脑来实现智能。我认为大脑确实是一个好的参照对象,但是我们更多的应该是受大脑运行机制的启发,而不是严格的去“山寨”大脑。因为大脑的运行机制是受制于生物体的限制下的机制,是炭基的智能。现在的计算机技术是硅基的,我们并不一定要让硅基的智能来模拟炭基的智能,而是发展更适合现有计算机技术的智能机制。而且,目前对人脑的研究也还谈不上特别深入,想模仿好都不容易。