机器学习-阿里机器学习pai简介

背景与目标

现在有什么?
业务数据有一定的积累
现在需要什么?

  • 更好的理解客户,抽象出准确的用户画像
  • 更好的理解现有内容和商品
  • 把内容、商品与用户连接起来,提高用户粘性以及商品的成交概率

落实到工程中,需要一种高效的数据分析的手段。本博客将阐述机器学习PAI的优缺点。

常规手段

数据分析

分析需求出现的时候,找BI(Business Intelligence,业务情报)部门,BI同学按照需求和对数据的理解,制作相应报表,结果如下(查询结果是跟mysql的差不多,可以导出):
机器学习-阿里机器学习pai简介
qa一下:
q:这是在哪里查的?
a:阿里的dataworks(也就是原来的odps),这些数据的来源有两个:业务数据库终端上报的日志数据

q:为什么不直接用mysql查
a:

  • 聚合查询消耗的性能很大,影响业务库,所以大数据分析的操作需要在分析型数据库进行(如:hive)
  • 分析型数据库,存储数据量更大、更全、查询效率更高,可以专门用于大数据分析和挖掘使用

q:为什么要使用阿里的
a:我们的业务存储也是使用阿里的,导数据方便。。

q:用sql做的事,毕竟是有限的,比如分词、特征提取等操作是做不了的,这怎么办??
a:odps的确做不了这个,这也就是机器学习pai诞生的原因。。

机器学习-分类任务

例如文本分类任务,将爬取的文章进行机器学习分成:体育、教育、科技、社会等。而训练分类模型需要大量的样本,训练也需要耗费大量的机器资源,还有一个更重点的,模型需要不停的纠正才能达标。或许你会出现以下的几个崩溃的瞬间:

  • 获取训练数据用了一上午的时间
  • 在训练过程中经常由于数据的不规范(上报数据经常会出现不规范的现象)而程序崩溃
  • 搭建训练环境,python+jieba+sklearn+gensim+matplotlib+。。。。
  • 数据流每一步的缓存都要自己做。。。
  • 看看准确率、看看模型质量、是不是输入数据还需要优化?
  • 机器性能不行,跑起来以后,我啥都别干了,wait for you baby
  • 等等。。

以下是一个工程的现状,跑起来脚本之后,可以静静的观察命令行,数据库(多个数据表),redis中情况:
机器学习-阿里机器学习pai简介

自建大数据环境

在自建大数据环境中,将遇到以下的种种问题:

  • hadoop搭建繁琐,hdfs+zookeeper+pig+hive+storm+。。。,手动搭建的话,无疑是巨量工作。
  • 版本搭配问题,hdfs升级了,hive是不是要升级?是否兼容?这其中的需要采坑无数。也许你经常会出现以下情况,看某个博客分享的搭建流程,但是自己在搭建过程中,死活过不了第一步,报错都是莫名其妙。。
  • cdh搭建,还算是方便点了,可以快速实现整个集群部署。但是,在使用过程中,经常会出现这样那样的运维问题,例如:节点空间满了,为啥有个节点过载了,等等,需要运维团队的投入
  • 自建spark环境,同样会出现各种问题,比如:调度怎么做?有个任务submit了,咋半天回不来。。
  • 然后就是机器的选择了,需要使用阿里的ecs还是实体机?显然实体机的性能要高。那么实体机要进机房吧,实体机的网络怎么选择呢?业务数据,怎么样同步到大数据集群呢?需要选择的解决方案很多,同时有运维的成本存在。

机器学习PAI

初体验(分词功能)

使用PAI的话上述问题可以得到极大缓解,对应的功能基本都进行了组件化,使用托拉拽的操作,就可以方便的进行功能调试。
数据引入:odps(也就是阿里版本的hive)的数据,可以非常方便的导流到PAI,只需要知道表名就行了。
机器学习-阿里机器学习pai简介
机器学习-阿里机器学习pai简介
做一个分词任务(不过这里吐槽一下,阿里默认的分词组件,效果不理想,我们之后要自定义自己的分词算法组件进行升级):
机器学习-阿里机器学习pai简介
机器学习-阿里机器学习pai简介

丰富的组件

以下是传统机器学习的相关组件,基本上已经够用了。
机器学习-阿里机器学习pai简介
除此之外,还包括:源/目标数据预处理特征工程统计分析深度学习强化学习时间序列文本分析网络分析等模块。博主正在进行PAI的走读,并在之后配有相应的博客。

支持自定义组件

前面在实验的时候,发现分词不太理想,比不上jieba分词,那么我们可以通过自定义算法来实现自己的组件。自定义组件效果如下:
机器学习-阿里机器学习pai简介
可以同正常的组件一样使用
机器学习-阿里机器学习pai简介
组件在编写过程中,可以进行本地调试,这样省去了频繁上传和部署算法的时间
机器学习-阿里机器学习pai简介
本地调试命令:
./bin/spark-submit --driver-class-path cupid/odps-spark-datasource_2.11-3.3.8.jar --py-files python/lib/pyspark.zip,python/lib/py4j-0.10.6-src.zip /home/wang/mine_code/python_blog/a.py inputTable1=xxxxxx outputTable1=xxxxxx idCol=id contentCol=col1

模型支持实时和离线的发布

机器学习-阿里机器学习pai简介

  • 在线部署,最简单的形式是,部署后直接生成API,直接进行新数据的预测(其他的部署形式,需要进一步的整合)。常用的实时场景有:广告推荐、商品推荐等
  • 离线部署,使用调度功能,定时每天生成一个模型、并且通过模型生成新的数据表。常用的场景有:协同过滤推荐等

实验模板

pai把一个需求目标抽象成了一个实验,当有一个新的需求来的时候,可以新创建一个实验,在实验中组合不同的组件(就像搭积木一样),最终完成目标功能。

pai同时提供了实验模板(类似于Hello world),以下是通过模板创建的实验:
机器学习-阿里机器学习pai简介

评价

优点:

  • pai可以非常方便的整合数据
  • 可以提供丰富的组件
  • 支持自定义组件
  • 初学者可以快速实践算法的效果
  • 100+组件,也给初学者提供了学习方向

缺点:

  • pai是付费的

注:使用PAI需要有机器学习知识的前置

总结:pai能极大限度的提高机器学习和数据挖掘的效率