基于 PredictionIO 搭建全栈式机器学习平台
Posted 彭宇成
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 PredictionIO 搭建全栈式机器学习平台相关的知识,希望对你有一定的参考价值。
场景
怎么从零构建自己的机器学习平台(以下简称平台)?
分析
我们不妨从 平台的终端用户 -App开发人员 与 平台自身的开发人员 入手,分析一下,机器学习平台应该具备哪些能力。
对于使用者而言,平台需要简单易接入、能实时提供服务
怎么在app中植入机器学习相关算法,让app变得智能? 对于App开发者而言,我们当然希望植入机器学习算法像调用普通 api 一样简单。事实上,目前成熟的AI类产品正是这么做的,这里参考一下百度AI开放平台:
以上,机器学习类产品需求具备这样的能力:
1)提供 各类 SDK 方便接入用户的请求。
2)能以 json 等格式实时返回相关的数据(即服务,推荐的新闻列表)。
对于自身开发人员来说,平台要可扩展,能接入各类机器学习算法库;机器学习常用的算法应该模板化,算法人员写小量代码甚至不写代码,调整一下相关参数即可完成算法的开发。
方案
发现 PredictionIO这款开源产品比较满足我们的需求。这里以官方自带的 推荐类场景,介绍 基于PredictionIO 如何构建机器学习平台 - 先看整体效果:
注: predictionIO搭建过程文档
[ 官方文档已经够详细了,按照操作一步步来,可能存在的问题主要是 sbt 相关包的下载 ]
推荐类场景
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonObject;
import org.apache.predictionio.EngineClient;
// create client object
EngineClient engineClient = new EngineClient(<ENGINE DEPLOY URL>);
// query
JsonObject response = engineClient.sendQuery(ImmutableMap.<String, Object>of(
"user", "1",
"num", 4
));
架构解读
PIO有三种类型的数据:
1) event data : 用户的行为数据。eg、
"eventId":"AWP4XGs3BWDRTgrl7tbG","event":"buy","entityType":"user",
"entityId":"u1","targetEntityType":"item",
"targetEntityId":"i2","properties":,
"eventTime":"2014-11-11T04:34:56.123+08:00",
"creationTime":"2018-06-13T16:56:36.394+08:00"
2) model data : 训练好的模型 。
3) meta data : pio build 、pio train 、pio deploy 。
环境搭建
存储: 选用 Elasticsearch 与 HDFS 。其中 ES 存放 meta data 与 event data ; HDFS 保存模型 。
计算: Spark 组件。支持的算法库 Spark MLLib 、OpenNLP …
具体安装过程文档,待补充 。
算法定制
问题
1) 模型保存到 HDFS 上如何配置?目前是保存到本地上,按照 官网文档中的说明配置,实际运行的时候有问题。
2) 目前,内置的算法模板都是基于 java、scala开发的。用python开发的算法能不能部署到 PIO 上跑?怎么部署。
3) 周期性更新模型的 crontab 模板待开发。
参考
以上是关于基于 PredictionIO 搭建全栈式机器学习平台的主要内容,如果未能解决你的问题,请参考以下文章
也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
基于NodeJS+Express+mongoDB+Bootstrap的全栈式工程化开发前后端分离博客系统实战