机器学习训练算法比较复杂,往往须要分布式进行,然而训练进去的模型进行预测绝对简略很多,个别是单个节点装载整个模型,能够同时有多个预测节点,每个都装载整个模型,从而进行多路预测。很多不依赖模型的数据预处理算法也是这种模式,单个节点能够进行残缺的操作,多个节点能够并行处理。
应用咱们的算法组件间接对批式的数据或者流式的数据进行预测,用户也心愿咱们能提供 SDK 的形式,即,由参数或模型数据间接构建一个本地的 java 实例,咱们称之为 LocalPredictor,能够对单条数据进行预测。这样的话,预测不再必须由 Flink 工作实现,能够嵌入到提供 RestAPI 的预测服务零碎,或者嵌入到用户的业务零碎里。
本文将以中文情感剖析场景为例,介绍 Alink LocalPredictor 的具体应用办法。对于如何建设 Pipeline 及训练出 PipelineModel,读者能够参阅上面这篇文章:
如何应用 Alink 进行中文情感剖析?
在下面的示例中,模型训练实现后间接用之进行预测,在一个工作中实现,没有进行模型保留。咱们须要进行模型保留操作,以便在另一利用中的 LocalPredictor 加载此模型。Alink PipelineModel 提供了简略的保留办法,提供文件门路,运行 save 办法即可。留神,save 办法是将模型连贯到了 sink 组件,还须要等到 BatchOperator.execute(),才会真正写出模型。
Java 代码如下:
model.save("/Users/yangxu/alink/temp/sentiment_hotel_model.csv");
BatchOperator.execute();
Python 代码如下:
model.save("/Users/yangxu/alink/temp/sentiment_hotel_model.csv")
BatchOperator.execute()
有了存储好的模型,上面进入本文的主题,如何构建 LocalPredictor?
通过 PipelineModel 的 load 办法,加载模型数据,失去 loadedModel,而后,调用 getLocalPredictor 办法失去 LocalPredictor 的实例。
PipelineModel loadedModel = PipelineModel.load("/Users/yangxu/alink/temp/sentiment_hotel_model.csv");
LocalPredictor localPredictor = loadedModel.getLocalPredictor("review string");
留神:因为待预测的数据也是 Row 类型,还须要阐明数据列的 schema 状况,即输出一个 Alink Schema String 格局的参数。这里的参数为 ”review string”。
至此,曾经构建了 LocalPredictor。在介绍如何用其进行预测前,在深刻理解一下 LocalPredictor,其输出的数据是 Row 格局,其输入后果也是 Row 格局,即,会蕴含多列的信息。应用 getOutputSchema() 办法,能够失去预测后果的 schema 信息。对于咱们刚构建的 localPredictor,应用该办法并打印显示。
System.out.print(localPredictor.getOutputSchema());
运行后果为:
root
|-- review: STRING
|-- featureText: STRING
|-- featureVector: LEGACY(GenericType<com.alibaba.alink.common.linalg.SparseVector>)
|-- pred: INT
能够看出,其预测输入共 4 列,最要害的分类预测后果列“pred”在最初。
localPredictor 应用 map() 办法用来进行预测,具体代码如下:
Row[] rows = new Row[] {Row.of("不错,在等同品位酒店中应该是值得举荐的!"),
Row.of("房间感觉还能够,然而洗漱用的毛巾浴巾品质不好,感觉没有洗洁净,房间隔音成果不好"),
Row.of("服务态度机械,表情生硬,治理不人性化,晚退 10 分钟房就加收半天房费"),
Row.of("酒店位子不好找外, 前台服务还需进步. 其它还不错.")
};
for (Row row : rows) {System.out.print(localPredictor.map(row).getField(3));
System.out.print("\t");
System.out.println(row);
}
计算结果为:
1 不错,在等同品位酒店中应该是值得举荐的!0 房间感觉还能够,然而洗漱用的毛巾浴巾品质不好,感觉没有洗洁净,房间隔音成果不好
0 服务态度机械,表情生硬,治理不人性化,晚退 10 分钟房就加收半天房费
1 酒店位子不好找外, 前台服务还需进步. 其它还不错.
以上。Alink 是基于 Flink 的机器学习算法平台,欢送拜访 Alink 的 GitHub 获取下载链接及更多信息。也欢送退出 Alink 开源用户群进行交换~
Alink GitHub 链接:
https://github.com/alibaba/Alink
▼ 钉钉扫码退出 Alink 技术交换群 ▼