如何轻松上手 Alink LocalPredictor?

机器学习训练算法比较复杂,往往需要分布式进行,但是训练出来的模型进行预测相对简单很多,一般是单个节点装载整个模型,可以同时有多个预测节点,每个都装载整个模型,从而进行多路预测。很多不依赖模型的数据预处理算法也是这种模式,单个节点可以进行完整的操作,多个节点可以并行处理。

使用我们的算法组件直接对批式的数据或者流式的数据进行预测,用户也希望我们能提供 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)
 |-- 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 技术交流群 ▼

如何轻松上手 Alink LocalPredictor?_第1张图片

你可能感兴趣的:(机器学习)