基于Spark的机器学习Web服务引擎设计
2018-03-19夏冉
夏 冉
(江苏自动化研究所,江苏 连云港 222061)
人工智能已经在不知不觉中影响着大众,全面渗透到现实业,自动欺诈探测系统使用机器学习可以识别出预示着欺诈性付款行动的行为模式;借助语音识别技术能够自动完成电话客服;声音识别可以核实来电者的身份。在医疗健康领域,美国有一半的医院采用自动语音识别来帮助医生自动完成医嘱抄录,而且使用率在迅速增长;机器视觉系统自动完成乳房X光检查和其他医学影响的分析;IBM 的Watson借助自然语言处理技术来阅读和理解大量医学文献,通过假设自动生成来完成自动诊断,借助机器学习可以提高准确率。在生命科学领域,机器学习系统被用来预测生物数据和化合物活动的因果关系,从而帮助制药公司识别出最有前景的药物。在媒体与娱乐行业,许多公司正在使用数据分析和自然语言生成技术,自动起草基于数据的的公文材料,比如公司营收状况、体育赛事综述等。在石油与天然气行业,厂商将机器学习广泛运用在矿藏资源定位、钻井设备故障诊断等众多方面。在零售业,零售商利用机器学习来自动发现有吸引力的交叉销售定价和有效的促销活动。科技制造公司正利用机器视觉、机器学习等认知技术来改进产品或者开发全新产品,比如机器人吸尘器、智能恒温器。
作为前沿技术,人工智能涉及认知科学、数学、计算机科学、信息论、控制论、不定性论等学科,具有很高的技术门槛。在工程实现方面,人工智能的计算平台需要大规模的计算、存储等基础硬件环境,硬件基础设施的搭建、管理、运维等,也在很大程度上影响人工智能的更广泛应用。
本文提出了一种基于Spark[1]的机器学习Web服务引擎,通过构建通用化的计算、存储等基础设施,向业务端应用提供Restful形式的预测查询服务,仅通过网络即可随时随地、方便快捷地享受人工智能服务,极大降低了应用集成人工智能功能的成本。
1 系统架构
基于Spark的机器学习服务引擎面向多种类型的机器学习应用提供动态、实时的预测查询响应。如图1所示为机器学习服务引擎的系统架构图。
数据服务平台:用于存储系统元数据、机器学习模型数据以及样本数据,并提供统一逻辑的数据访问接口;样本数据的来源主要包括两种类型:一是业务服务器,另一种是其他的样本数据源。
机器学习建模框架:机器学习服务引擎的核心组件,提供构建机器学习模型的框架,包括用于算法训练的可伸缩计算平台、样本数据准备模块、算法训练与评估模块,以及机器学习算法库;
机器学习服务器:基于算法训练得到的机器学习模型形成决策/预测服务,响应业务终端的决策/预测查询请求。
业务终端是指PC终端应用、移动终端应用等生产业务数据、发送预测查询请求、接受决策/预测结果的业务客户端应用程序。业务服务器除了包括自身的业务服务逻辑,还包括机器学习逻辑,用于扩展机器学习功能。机器学习逻辑功能实际在机器学习引擎端实现,业务服务器端的机器学习逻辑仅仅是基于Restful接口的数据上传以及反馈结果的接收,极大简化了业务应用添加机器学习功能的开发难度。
机器学习建模框架提供从样本数据准备到算法训练、模型评估等全栈式建模服务,根据业务应用模式,选择机器学习算法,利用样本数据训练并评估算法模型,最终向业务服务器输出机器学习模型。机器学习服务器部署机器学习模型,形成决策/预测服务,接收并响应业务端的决策/预测查询请求。机器学习服务器可同时部署多个机器学习模型,面向多个业务端应用提供服务。
2 工作流程
机器学习服务引擎以 Web服务形式部署,面向多种类型的机器学习应用提供动态、实时的预测查询响应,其工作流程如图2所示。
业务终端仅与业务服务器通信、交互,一方面上传业务数据,另一方发起机器学习服务请求。由业务服务器负责与机器学习服务引擎的交互,业务服务器通过Restful接口向机器学习服务引擎的数据服务平台上传样本数据,数据服务平台存储样本数据。机器学习建模框架通过统一存储访问接口提取样本数据,对机器学习算法进行训练、评估,得到机器学习模型。机器学习服务器基于得到的机器学习模型构建决策/预测服务。业务服务器在接收到业务终端的查询请求时,向机器学习服务器转发该请求,机器学习服务器接收请求,调用相应的决策/预测服务,得到决策/预测结果,并反馈结果至业务服务器,业务服务器转发反馈结果,响应业务终端的请求。
3 组件实现
以下对各个组件的原理及实现途径进行详细描述。
3.1 数据服务平台
数据服务平台提供统一逻辑的数据访问接口,包括系统元数据、模型数据、样本数据,其架构如图3所示。机器学习服务引擎涉及的三种类型数据分别采用不同的存储单元:元数据存储单元记录系统中各实例化模块的ID、版本、创建时间等结构化信息,采用关系型数据库,访问接口为JDBC(Java DataBase Connectivity,java数据库连接);模型数据存储单元记录机器学习模型数据,以文件形式通过HDFS(Hadoop Distributed File System,hadoop分布式文件系统)进行存储;样本数据存储单元记录大规模的样本数据,并涉及数据检索、查询等操作,通过HBase进行存储。统一存储访问接口通过存储配置文件Storage.conf读取各个存储单元的后端存储实体的URL、用户名、密码等信息,提供三种类型数据的访问接口。机器学习建模框架访问数据服务平台的样本数据单元,并存储训练好的模型数据;机器学习服务器通过获取模型数据、模型元数据构建机器学习Web服务;样本数据Web服务接收业务端数据存储在数据平台。
数据服务平台的Web服务向业务端提供Restful形式的访问接口,在设计上采用Actor模型框架Akka[2],并使用Spray作为Restful框架。业务端上传的数据被封装成Message类的实例,Web服务的创建过程如图4所示,MessageServer创建Actor系统,向MessageServer Actor发送发送启动服务器消息,MessageServerActor响应启动消息,创建Web服务MessageServiceActor,并绑定IP地址与端口。MessageServiceActor启动http监听,在其路由中针对“messages.json”路径设计get、post、delete操作用于通过统一存储接口获取、上传、删除数据。
3.2 机器学习建模框架
机器学习建模框架[3]是机器学习服务引擎的核心,采用通用大数据快速处理平台Spark作为机器学习算法的训练计算平台,Spark的内存计算特性能够大幅提高机器学习算法迭代运算的速度。算法由Spark的机器学习算法库MLlib提供,机器学习建模框架的架构如图5所示。该框架包括数据准备、算法、预测综合以及评估[5]等模块。数据准备模块根据算法训练数据的内容格式要求,从数据服务平台提取样本数据,并转换为训练数据。算法模块封装MLlib中的算法,提供算法训练及预测等接口。在某些情况下,应用端需要综合多种算法的预测结果,提供更准确的预测结果,预测综合模块主要实现这部分功能。评估模块主要实现算法超参数的自动优选。每个特定类型的机器学习应用需要根据自身算法需求,实例化建模框架的各个模块。
机器学习建模框架的工作流程:数据准备模块读取样本数据并转换为训练样本;算法模块训练算法得到机器学习模型,多个模型的预测结果最后由预测综合模块实现按需综合,输出最终的预测结果。
机器学习算法的超参数的自动优选过程:
第一步:数据准备模块读取评估用样本数据,并使用k-fold法划分样本数据为k个{训练样本、验证样本}集合;
第二步:分别针对每一个超参数测试值,依次测试K个{训练样本、验证样本}集合,并根据评估标准给出评估结果;
第三步:根据每个超参数的评估结果,选择最优超参数输出。
3.3 机器学习服务器
机器学习服务器基于算法训练得到的机器学习模型构建服务后端,提供机器学习Web服务,其设计实现上仍采用Actor模型Akka以及Restful架构Spray。机器学习服务器的创建过程如图6所示,对象MLServer根据配置文件设置服务器网络及机器学习模型的配置信息,从而获取模型数据及相关的元数据,创建MLServerActor作为服务器的控制Actor,并向它发送启动服务器消息StartServer。MLServerActor在处理服务器启动消息时,创建机器学习Web服务Actor,并绑定相应的网络接口,启动HTTP监听。Web服务MLServiceAcor基于Restful架构Spray,在其路由中针对“queries.json”路径设计请求查询的响应过程。
4 实验
实验选择垃圾邮件分类[8]为应用目标构建机器学习Web服务引擎,样本数据选择某邮件服务平台提供的数据,通过数据服务Restful接口上传样本数据。样本数据以JSON文本形式表示,例如某封邮件的内容样例:
{"messageTime": "2015-06-08T16:45:52.285+0000", "entityId": 9781, "properties": {"text": "Subject: Re: programming for rdi model michelle,I ' ve just met with cecil and christin. We have divided the code into 3 parts,and cecil 's looking at the first part. Cecil, Helen and I will meet again tomorrow morning to go through the logic of the other two parts. Since cecil is devoted completely to this project, once he starts coding, it should not take too long.best, alex", "label": "not spam"}, "message": "e-mail", "entityType": "content"}。
机器学习建模框架的数据准备单元将样本数据转换为机器学习算法使用的格式。首先进行text文本的矢量化,以及特征的缩减。text转变成包含特征词的向量,去除判定价值低的特征词,这里使用MLLib中HashingTF类将text转变成词频向量(特征词出现的次数构成向量)。计算词频向量对应的t.f.-i.d.f.值[10],使那些普遍大量存在于所有文档的词以小的权值,从而获得用于训练或者预测的向量集。
模型算法运用多项式朴素贝叶斯算法,通过实现MLLib中Naive Bayes-RDD-based API,设置平滑参数,得到如下形式预测结果:
{category: String, confidence: Double}。
其中,Category为预测的分类,confidence为该类型的概率。
通过在业务端运行Restful形式的查询命令:
curl-H "Content-Type: application/json"-d '{"text":"It’s very important for me,I am looking forward to your response."}' http:∥localhost:8000/queries.json,
得到预测结果:
{"category":"not spam","confidence":0.845823746259427}。
通过在业务端运行Restful形式的查询命令:
curl-H "Content-Type: application/json"-d '{"text":"Harry Up,Join us,Follow your heart.It will no longer be a dream"}' http:∥localhost:8000/queries.json,
得到预测结果:
{"category":"spam","confidence":0.663752971249385}
完成查询预测服务。
并将输入1000封邮件对比标签893封符合。准确率89.3%。验证邮件分类系统准确性。
第二个对比试验拿漫画推荐作为参考。每个漫画都有一些对应的分类标签。漫画推荐如同垃圾邮件分类,将标签最为相似的达到一定阈值后,标记为喜欢。
漫画推荐采用推荐常用的交替最小二乘法。输入为两类数。其一为数据库csv文件。
如其中一个漫画信息,分别为id、名字、分类标签、漫画url信息。
89270 Bark Comedy,Romance,Drama http:∥tapastic.com/episode/89270
第二部分为不同用户id喜欢的漫画id。如:
2 89270
表示id为2的用户喜欢id为8270的漫画(Bark)。
向服务器输入喜欢漫画,推荐个数。模型会根据标签相似度和用户喜欢此漫画还喜欢其他相似漫画的关联度综合出最为相似的漫画,进行输出。
Curl-H "Content-Type:application/json"-d '{"Id":89270,"num":1}' http:∥localhost:8000/queries.json
curl-H "Content-Type: application/json"-d '{"Text":"Bark","num":1}' http:∥localhost:8000/queries.json
得出输出结果
{"TapsterId":"89143", "TapsterName ": Epic QuestSlice"TapsterUrl":
http:∥tapastic.com/episode/89143}
两个实验面对两个不同方向(分类和推荐)都简易实现机器学习应用。表明框架能搭载不同机器学习模块实现不同应用,框架简化参数选优过程简化机器学习运用复杂度。
5 结束语
机器学习系统涵盖基础层、技术层和应用层。其中基础层包括计算、数据、存储等基础设施;技术层主要包括计算平台、算法库等基础运行环境;应用层指具体的人工智能应用。业务端通过Restful形式上传样本数据、发送预测查询,实时得到预测结果。机器学习作为一种服务提供给业务应用,使应用方便地获得了机器学习功能。实验通过封装复杂的机器学习框架构建和机器学习算法参数选取、调优过程,来实现简化机器学习应用的目的。研究成果简化了构建机器学习系统的构建过程,封装复杂的技术层对外提供SaaS模式[11]服务。只需结构化输入训练样本,就可得到想要的预测结果,完成简化机器学习的功能,从而解决了机器学习易用性的问题。
[1] Spark, Lightning-fast cluster computing.[EB/OL]. http:∥www.spark.apache.org/,2011-07-01.
[2] J Hunt. Introduction to Akka Actors[M].Springer International Publishing,2014:383-398.
[3] 胡于响. 基于Spark的推荐系统的设计与实现[D].杭州:浙江大学,2015.
[4] 岑凯伦,于红岩,杨腾霄. 大数据下基于Spark的电商实时推荐系统的设计与实现[J]. 现代计算机(专业版),2016(24):61-69.
[5] 岑凯伦,于红岩,杨腾霄. 大数据下基于Spark的电商实时推荐系统的设计与实现[J]. 现代计算机(专业版),2016(24):61-69.
[6] 刘建国,周涛,郭强,等. 个性化推荐系统评价方法综述[J]. 复杂系统与复杂性科学,2009(3):1-10.
[7] A Gunawardana,G Shani.A Survey of Accuracy Evaluation Metrics of Recommendation Tasks[J]. Journal of Machine Learning Research, 2009, 10 (10):2935-2962.
[8] 黄国伟,许昱玮. 基于用户反馈的混合型垃圾邮件过滤方法[J]. 计算机应用,2013,33(7):1861-1865.
[9] 马小龙.一种改进的贝叶斯算法在垃圾邮件过滤中的研究[J].计算机应用研究, 2012, 29 (3):1091-1094
[10] J Beel, S Langer, B Gipp.TF-IDuF: A Novel Term-Weighting Sheme for User Modeling based on Users’ Personal Document Collections[C]∥Proceedings of the iConference 2017, Wuhan, China,2017: 452-459.
[11] 刘嘉,惠成峰,都兴中,等. 基于SaaS模式的电子商务推荐平台[J]. 计算机应用,2012,32(9):2679-2682.