关于机器学习:如何轻松上手-Alink-LocalPredictor

33次阅读

共计 2173 个字符,预计需要花费 6 分钟才能阅读完成。

机器学习训练算法比较复杂,往往须要分布式进行,然而训练进去的模型进行预测绝对简略很多,个别是单个节点装载整个模型,能够同时有多个预测节点,每个都装载整个模型,从而进行多路预测。很多不依赖模型的数据预处理算法也是这种模式,单个节点能够进行残缺的操作,多个节点能够并行处理。

应用咱们的算法组件间接对批式的数据或者流式的数据进行预测,用户也心愿咱们能提供 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 技术交换群 ▼

正文完
 0