引言
“数据已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于大数据的挖掘和运用,预示着新一波生产力增长和消费者盈余浪潮的到来。”来自管理咨询公司麦肯锡的分析,或许也能说明大数据对经济的影响力越来越大。
对大数据的分析处理能力是从大数据中获取大价值的决定性因素,数据的深度分析与利用将对推动经济持续增长、提升国家和企业的竞争力起到重要的作用。大数据也将成为新的经济增长点,企业将向分析即服务(AaaS)升级转型,从而改变行业的生态[1]。
相较于传统数据,大数据具有体量巨大、模态繁多、关联复杂等特点,而要从大数据挖掘大价值,往往涉及预处理、分析挖掘、知识推断、决策研判、可视化交互、领域应用这样冗长的分析链路。这些特点使得传统的数据分析算法和处理平台难以适用,主要体现在:(1)传统分析处理算法的深度与智能化程度不足,导致大数据利用率低;(2)分析模型与计算框架不贯通,数据模型的参数复杂,导致大数据分析时效性差;(3)算法易用性差、分析处理链路缺失,导致普适性应用部署困难。由此可见,要实现大数据分析走向全面深入的应用,绝不仅仅是依靠单个分析算法的突破,也不是针对某个应用问题的单方面优化,而是需要探索大数据分析的共性理论、技术和系统架构,要在数据的结构复杂性、算法计算复杂性以及系统设计复杂性之间进行权衡,提供一套新型的大数据分析系统软件栈,既要打通各类复杂分析任务链路,又要给用户提供简单易用的使用模式和交互方法[2]。
大数据分析系统现状分析
对海量数据的有效分析,离不开大数据处理计算平台与机器学习平台的支持。传统的也是流行的分析系统是基于结构化数据的联机分析处理(OLAP)和联机事务处理(OLTP)系统,如Oracle、MySQL等。这类分析系统具有很好的一致性和容错性,缺点是支持的数据单一、扩展性差、对异质数据和异构计算模式的融合能力差。近年来,非结构化数据分布式处理系统广为流行,典型的代表当属Hadoop大数据处理生态系统[3]。由Apache基金会开发的Hadoop作为分布式系统基础架构已被广泛使用,它的出现使得用户更容易开发和运行处理大规模非结构化数据,但是这类分析系统对于机器学习、深度分析等算法的支持较弱,时效性也不强。为了满足分布式机器学习算法在内存计算方面的需求,人们进一步研发了Spark[4]系统。该系统是对分布式计算平台Hadoop的继承和扩展,将大数据集抽象成弹性分布式数据集(RDD, Resilient Distributed Dataset[5]),数据只能产生,不能修改。它是一个无状态的系统,因此Spark可以通过“血统”容错机制(lineage)对容错做良好的支持。Spark将常用数据存放在内存中,特别适合解决一些迭代式求解问题(大部分机器学习算法都可以归为此类),其提供的Spark MLlib[6]对经典的机器学习算法提供了良好的封装,GraphX[7]可以对图数据做较好的处理,Spark Streaming[8]可以对流数据的处理提供支持。此外Spark提供了Spark SQL[9],使熟悉SQL的开发者能够方便地处理大数据查询等操作。尽管如此,由于难以进行异步通讯与分布式参数共享,许多机器学习算法无法在Spark计算框架上得到高效的实现。
近年来深度学习算法在各个领域显现出了其强大的建模能力,各种支持深度学习的平台也不断涌现,包括Caffe[10]、Theano[11]、CNTK[12]和TensorFlow[13,14]等,其中谷歌开发的TensorFlow由于其良好的可扩展架构以及对分布式机器学习的支持,从众多工具中脱颖而出。TensorFlow是一个数据流系统,适合对深度神经网络的训练与预测,它将网络的结构以数据流的形式表示出来,能够自动求导,大大降低了用户求解算法的复杂性。TensorFlow的另一特点是可以高效地利用GPU资源。GPU是一种单指令多数据流(SIMD)硬件,特别适合做矩阵乘法等运算,深度学习算法中的常用操作如卷积通常可以转成矩阵乘积,因此可以利用GPU对深度学习的训练与预测进行加速。TensorFlow提供了足够的深度学习计算支持,然而它对一些非矩阵操作的任务支持并不友好,比如日志分析挖掘等。
尽管Hadoop、Spark、TensorFlow等系统对大数据计算与机器学习提供了较好的平台支持,但是这些平台的使用者通常是有相当技术背景的专家,对于普通的数据分析人员来说其使用门槛相对较高。一个大数据应用通常需要由多个大数据分析算法组成,对于普通用户来说,借助Hadoop、Spark、TensorFlow等多个系统构建一个完整的大数据分析应用是一项艰巨的工作。虽然市场上存在诸多支持大数据分析的计算平台和算法库,但是对于普通行业用户而言,使用大数据分析技术仍存在诸多困难,主要体现在:
1.软硬件环境难以搭建。一般用户的软硬件条件有限,难以在短时间内搭建出满足大数据分析所需的计算环境。同时,搭建一套分析系统需要安装诸多组件,如Hadoop、HDFS[15]、Spark、YARN[16]等,每个组件的安装、配置、匹配需耗费大量时间和精力。
2.普通用户编程能力有限。使用Hadoop和Spark框架进行分析都需要用户进行一定的编码来实现所需的功能,一般的用户对自己的业务流程很清楚但编程能力有限,而且大数据分析可能需要在分布式环境下实现一些复杂的机器学习算法,用户使用门槛较高。
3.缺乏协作与共享能力。一个大数据分析任务的搭建和运行难以一蹴而就,往往需要多人多轮迭代逐步满足业务要求,因此需要系统提供对数据、算法、任务以及分析结果的共享和协作能力,使得用户能够基于已有的分析结果不断积累,逐步提升分析效果。
4.缺乏便捷的用户接口。现有的大数据分析系统主要关注计算和算法能力的提升,对用户接口的便捷性考虑不足,用户与系统的交互往往以编程语言和命令行的形式实现,有必要开发低门槛交互式图形界面和便捷的类SQL分析语言,降低大数据分析系统的使用门槛。
BDA:开放的大数据分析引擎
中科院计算所研制的开放的大数据分析引擎(Big Data Analytics engine,简称BDA),是为了解决将大数据分析技术推向行业应用时遇到的诸多困难而提供的基础支撑平台系统,包括数据处理、算法实现、计算优化、可视化交互和应用部署等方面。BDA系统设计涉及的核心理念包括:(1)单点强化。为多种典型的数据处理需求提供高性能、高效率的核心算法库,提高分析的智能化程度。(2)链路打通。为复杂的分析任务提供基于数据流图的抽象方式和研发方法,大幅降低分析应用的研发复杂性。(3)开放共享。分析系统实现数据、模型、中间结果的高可复用,提供开放的分析接口,有助于推动大数据分析的新型生态体系。
BDA系统的总体架构如图1所示,它主要以现有主流分布式计算框架(如Spark、TensorFlow等)为基本的计算环境,在此基础上构建了大数据分析算法库BDA Lib、交互式大数据分析管理系统BDA Studio、分布式计算框架BDA Inf和大数据分析语言BDA Lang,并构建了大数据分析云平台提供开放式分析服务。
图1 大数据分析引擎(BDA)总体架构图
大数据分析算法库BDA Lib
BDA Lib实现了常用的大规模分布式机器学习算法,包括常用的数据统计分析和机器学习算法,如分类、回归、话题模型、推荐算法等,也包括常用的深度学习算法,如卷积神经网络(CNN)、循环神经网络(RNN)等。算法采用Scala语言开发,能与Spark完美融合,算法效率高,用户可以迅速开发一站式大数据分析应用。BDA Lib的主要特点有:(1)基于Spark和TensorFlow混合式计算框架,算法高效且计算规模可扩展。(2)支持单机、数据分布式(模型共享)、模型分布式三种计算方式,适应不同规模的数据和模型。(3)除了机器学习算法,BDA Lib也提供了进行大数据分析所必须的数据预处理、格式转换、特征归一化、性能评估等,提高了BDA Lib的实用性。
交互式大数据分析管理系统BDA Studio
BDA Studio提供了交互式图形化大数据分析与管理界面,用户可以通过点击和拖拽的方式完成大数据分析任务的创建、配置、复用、提交、运行、监控、可视化等。其核心是将大数据分析任务抽象为有向无环数据流图,通过节点处理数据,通过边引导数据的进一步流向,实现大数据分析流程的建模和操作。
用户可通过浏览器访问BDA Studio服务,它主要提供了以下功能:(1)资源管理。主要管理示例任务、算法和数据,同时支持用户上传算法和数据;(2)任务设计。为用户提供拖拽式的构建数据流图的方案,用户可利用现成模板,也可以自己上传算法构建流程图;(3)任务监控。对任务进行监控,并且返回任务运行的输出,在出错时方便用户定位错误,调试任务;(4)任务重用。用户可对已有的任务进行重用,系统自动识别未改动的已成功任务,直接复用其结果,保证系统的高效性。BDA Studio用户界面如图2所示。
图2 BDA Studio用户界面
分布式计算框架
分布式计算框架基于参数服务器架构,将Spark与TensorFlow进行集成,该系统同时支持数据并行与模型并行。其架构如图3所示。
通过对Spark与TensorFlow的集成,在分析大数据的过程中,可利用Spark在数据的加载、预处理方面的优势,将Spark作为内存数据源,然后将数据传递给TensorFlow集群进行训练,这样可以增强Spark的计算能力(GPU支持),方便研究人员对系统进行部署及提高系统的利用效率。
图3 Spark与TensorFlow集成架构图
大数据分析语言BDA Lang
大数据分析语言的目标是提供类SQL的方便易用的查询语言和常用的流数据机器学习算法,让用户轻松完成实时流数据分析。大数据分析语言的主要优势是:(1)丰富的流数据机器学习算法,包括流式分类算法(如Hoeffding树)和流式聚类算法(如CluStream、StreamKM++);(2)良好的扩展性,便于扩展添加新的算法;(3)实时性,机器学习算法模型实时更新。
目前,BDA大数据分析引擎初步版本已经上线,并提供了线上大数据分析服务,服务入口URL为:http://159.226.40.104:18080/。与此同时,我们在Github上开源了BDA Studio系统代码https://github.com/ICT-BDA/EasyML,对BDA系统的进一步详细介绍请参看[17]。
BDA的主要特点
1. 开放:对数据的开放和对功能的开放。支持对数据的导入导出,用户可以更好地利用数据,方便快捷地进行开发。
2. 高效:大数据分析引擎系统可高效地分析海量数据并且快速得到分析结果。
3. 易用:降低用户的学习成本与开发难度,提高了系统的易用性。
4. 直观:用可视化分析支持用户与系统的良好交互,向用户展示系统分析的流程和当前的执行状态,将分析结果以友好的方式展现给用户,帮助用户以更小的代价参与到大数据分析任务中,高效地实现行业大数据的深度分析和价值挖掘。
5. 兼容:可适用于各种不同的计算与存储资源的应用场景,可通过整合异构资源,降低平台建设成本。
BDA典型应用案例
得益于BDA平台简洁易用、灵活高效的优势,基于BDA平台可以实现多种大数据分析任务,如垃圾短信分类、大规模用户画像、个性化新闻推荐、开放知识引擎系统构建等。
垃圾短信过滤
垃圾短信长期困扰广大手机用户,也是各电信运营商打击的重点。我们与某电信运营商合作,在BDA系统上成功搭建了基于逻辑斯谛回归算法的短信自动分类和垃圾短信过滤模型,任务流程如图4所示。在此任务中,我们将构建分类器算法所必须的数据预处理、短文本分词、常用词过滤、特征抽取、数据分割、分类模型训练、模型测试等多个流程整合为一个任务集中显示,通过BDA系统的协作功能使得多位研发人员可以并行地对不同的模块进行调优,实现了对垃圾短信高效准确的分类和过滤。基于实际的短信数据测试表明,模型对垃圾短信的过滤精度达到95%以上。
图4 垃圾短信过滤模型训练与测试数据流图
中文输入法联想
中文输入法是人们日常使用计算机和移动设备的基本工具之一。为了减轻用户的输入负担,目前主流的输入法软件均提供了输入法联想功能,即在上屏一个字词后,提供自动预测出的用户下次上屏的字词候选,精确的输入法联想能够大幅度提高输入效率。当前输入法的联想主要基于高阶语言模型,在实际应用中存在对长尾词联想缺乏、停用词频繁上屏等问题。我们与某主流输入法厂商合作,基于BDA系统开发了深度学习的神经网络联想模型。得益于BDA系统便捷的协同开发功能和算法调优能力,新提出的神经网络联想模型很快实现了效果的提升,基于实际的用户日志数据的实验表明,调优后的神经网络联想模型的前十的联想命中率较现有方法提升了5%。表1列出了神经网络联想模型的联想示例,第一列为上文信息,第二列为新算法的推荐候选,按照推荐分值从左到右排列,粗体词为命中的用户点击词。对结果进一步分析发现,新的模型能大幅度减少联想无意义词的比例,提高了长距离联想的能力。
表1 中文输入法联想模型效果举例
个性化新闻推荐
基于用户历史访问记录的个性化新闻推荐是一类典型的大数据分析任务,我们与某著名互联网公司合作,基于BDA系统搭建了个性化新闻推荐的模型训练任务。借助BDA平台的交互式协作开发能力,我们进行了多轮迭代开发和模型参数调优, 最终在一个任务中实现了数据的分割、预处理、分词、特征抽取、推荐模型训练和模型测试等关键步骤,实现了个性化新闻推荐任务的一键式模型训练、调优和性能评估。长时间线上测试表明,与原有的推荐模型相比,经BDA系统调优后的新模型推荐的新闻文档用户阅读量和用户点击率都有了显著的提升,如图5所示。
图5 线上用户每天平均阅读数和平均点击数曲线
结语
大数据分析系统是大数据技术创新的基础设施。与传统的数据分析相比,大数据的分析在系统、算法以及人机接口等多方面提出了新的挑战。一个优秀的大数据分析系统需要融合异构资源,提供开放的数据接口与协作功能,高效地分析处理大数据,降低用户对系统和算法的使用复杂度。在上述原则的指导下,中科院计算所网络数据科学与技术实验室研发了BDA大数据分析系统,通过向用户提供通用智能的大数据分析算法库、高可复用的分布式计算框架、面向数据流图的新颖交互模式,大幅降低了应用大数据分析的复杂度,为用户提供了一个高效易用的大数据分析引擎。 ■
参考文献:
[1] 李国杰, 程学旗. 大数据的研究现状与科学思考[J]. 中国科学院院刊, 2012, 27(6): 647-651.
[2] 程学旗, 靳小龙, 王元卓等. 大数据系统和分析技术综述[J].软件学报, 2014, 25(9): 1889-1908.
[3] Apache Foundation. Hadoop project[OL]. http://hadoop. apache.org/.
[4] Apache Foundation. Spark project[OL]. http://spark. apache.org/
[5] Zaharia M, Chowdhury M, Das T, et al. Resilient distributed datasets: a fault-tolerant abstraction for in-memory cluster computing[C]//Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation, 2012: 2-2.
[6] Meng X, Bradley J K, Yavuz B, et al. MLlib: machine learning in apache spark[J]. Journal of Machine Learning Research, 2016, 17(34): 1235-1241.
[7] Gonzalez J, Xin R, Dave A, et al. GraphX: graph processing in a distributed dataflow framework[C]//Proceedings of the 11th USENIX conference on Operating Systems Design and Implementation.USENIX Association, 2014: 599-613.
[8] Zaharia M, Das T, Li H, et al. Discretized streams: fault-tolerant streaming computation at scale[C]//Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Principles, ACM Press, 2013: 423-438.
[9] Armbrust M, Xin R, Lian C, et al. Spark SQL: Relational Data Processing in Spark[C]//Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data. ACM Press, 2015: 1383-1394.
[10] Jia Y, Shelhamer E, Donahue J, et al. Caffe: Convolutional Architecture for Fast Feature Embedding[C]//Proceedings of the 22nd ACM international conference on Multimedia, ACM Press, 2014: 675-678.
[11] Bergstra J, Breuleux O, Bastien F, et al. Theano: A CPU and GPU math compiler in Python[J]. SCIPY , 2010:3-10.
[12] Seide F, Agarwal A. CNTK: Microsoft's Open-Source Deep-Learning Toolkit[C]//Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 2016: 2135-2135.
[13] Abadi M, Barham P, Chen J, et al. TensorFlow: A system for large-scale machine learning[C]//Proceedings of the 12th USENIX conference on Operating Systems Design and Implementation. USENIX Association, 2016:265-283.
[14] Abadi M, Agarwal A, Barham P, et al. TensorFlow: Large-Scale Machine Learning on Heterogeneous DistributedSystems[OL]. (2016-03-16). https://arxiv.org/abs/1603.04467v2.
[15] Shafer J, Rixner S, Cox A L, et al. The Hadoop distributed filesystem: Balancing portability and performance[C]//Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software. IEEE,2010: 122-133.
[16] Vavilapalli V K, Murthy A C, Douglas C, et al. Apache Hadoop YARN: yet another resource negotiator[C]//Proceedings of the 4th annual Symposium on Cloud Computing, 2013:5.
[17] Guo T, Xu J, Yan X, et al. Ease the Process of Machine Learning with Dataflow[C]//Proceedings of the 25th ACM International on Conference on Information and Knowledge Management. ACM Press, 2016:2437-2440.
所有评论仅代表网友意见