Alink LocalPredictor简介

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

使用我们的算法组件直接对批式的数据或者流式的数据进行预测,用户也希望我们能提供SDK的方式,即,由参数或模型数据直接构建一个本地的java实例,我们称之为LocalPredictor,可以对单条数据进行预测。这样的话,预测不再必须由Flink任务完成,可以嵌入到提供RestAPI的预测服务系统,或者嵌入到用户的业务系统里。

本文将以中文情感分析场景为例,介绍Alink LocalPredictor的具体使用方法。关于如何建立Pipeline及训练出PipelineModel,读者可以参阅下面两篇文章:

Alink品数:Alink中文情感分析示例(Java版本)​zhuanlan.zhihu.com图标Alink品数:Alink中文情感分析示例(Python版本)​zhuanlan.zhihu.com图标

 

在上面的示例中,模型训练完成后直接用之进行预测,在一个任务中完成,没有进行模型保存。我们需要进行模型保存操作,以便在另一应用中的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	酒店位子不好找外,前台服务还需提高.其它还不错.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值