基于Flink的机器学习算法平台 Alink(二)推荐算法介绍-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

基于Flink的机器学习算法平台 Alink(二)推荐算法介绍

简介: Alink在“周二开源日”的第二节分享,主要介绍了推荐算法的框架和设计细节。 内容简要: 一、Alink介绍 整体介绍 和SparkML对比 算法调用方式 二、Alink 推荐 Demo Alink推荐相关算法整体介绍 影片推荐Demo CTR点击率预估Demo Web Demo

一、Alink介绍
(一)整体介绍
什么是Alink?

 Alink是基于Flink的机器学习算法平台
1) 由阿里巴巴计算平台事业部PAI团队研发;
2) 同时支持批式/流式算法,提供丰富的算法库;
3) 帮助数据分析和应用开发人员能够从数据处理、特征工程、模型训练、预测,端到端地完成整个流程。
 相关名称的公共部分
Alibaba,Algorithm,AI,Flink,Blink

(二)和SparkML对比
SparkML是目前市面上使用较为广泛的机器学习的库,下面从性能和功能两个方面对Alink与SparkML进行比较。
1、性能对比
image.png
Alink与SparkML性能对比图

上图为开源Alink与SparkML算法运行时间对比,纵坐标为各类算法,横坐标为运行同一算法时,SparkML相较开源Alink所花费的时间倍数。由上图可看出,在大多数情况下,开源Alink比SparkML效率更高。

2.功能对比
image.png
Alink与SparkML功能对比图

由上图可知,Alink拥有SparkML支持的大多数功能。在此基础上,Alink还支持流式算法、批流混跑、在线学习与中文分词等SparkML不具备的功能,Alink功能种类更丰富与齐全。

(三)算法调用方式
1.Link
Link是批式/流式算法通用的串联方式。
下方为三个Alink搭建的实验:批示实验,流式实验,批流混合实验。
image.png
批式实验(Batch Experiment)

image.png
流式实验(Stream Experiment)

image.png
流批混合实验(Batch-Stream Mixed Experiment)

2. Python 脚本调用Alink算法
除了用Web的方式,还可以用写脚本的方式调用Alink,用脚本完成机器学习的训练与预测,Demo如下:
image.png

二、Alink 推荐 Demo
(一)基于 Alink 推荐算法

image.png
线上服务流程图

在线上服务的时候,首先需要召回有用数据,例如真实用户关心的商品,或者相近的商品数据,然后针对商品做特征拼接,接着进行特征编码,最后通过排序算法得出结果,将排序比较靠前的推荐给用户。
针对线上服务流程,Alink能提供什么帮助?如下图所示:
image.png
针对线上服务,在离线模型中,Alink对召回、特征拼接、特征编码、排序等流程对应提供了多种算法。在线模型中,Alink支持在线学习,实时训练模型,不断将模型部署到线上,实现模型更高更快时效性。

(二)影片推荐Demo
接下来,以影片推荐Demo为例介绍一下算法的使用。
1.数据集介绍
我们在Moivelens网站上采集了不同时间段的电影观众的评分,做出了以下数据集:
image.png
如上图所示,这个数据集包括了User的ID,Movie的ID,还有观众的打分。下面针对这个数据集,我们来看Alink算法是如何实现对电影的推荐。

2.ALS训练模型(ALS model training)
image.png
ALS训练模型脚本Demo

上图为ALS训练模型的脚本Demo。得到一个数据集后,它会Link ALS的训练算法,在算法里面设置User、Item还有Rating列名,然后设置一些参数,包括Lambda,Rank,NumIter。
下面第二个Link是将它写到对应的目录中,这个目录可以是本地的环境目录,也可以是网络文件的目录,Alink都是支持的。然后加上执行代码后,脚本就可以直接执行。
训练完数据集Train_set对应的模型后,最后写到对应的目录中,以上就是ALS训练模型的一个简单脚本。

3. 使用ALS模型求TOPK的电影(topK movie with ALS model)
下面解析ALS模型如何实现对电影进行求TOPK。
image.png
使用ALS模型求TOPK的电影

通过上图脚本可以看到,首先通过创建一个Pipeline Model,然后ALS模型通过Source组件将它读取,设置到Pipeline对象中。接着设置User的列,设置Top的数量(如Top10),然后设置推荐的列名,最后通过Transform就可以得到推荐电影数据,推荐数据如下:
image.png
例如对43号电影,这边推荐了与它最相近的10部电影与相应的打分。

4. 使用ALS模型对电影打分(Rating movie with ALS model)
image.png
ALS实现电影打分Demo

如何得到每位观影的User对所看电影的打分数据。通过上图可以看到,这里使用的方法与之前类似,首先建一个Pipeline Model,然后设置打分组件,接着设置User、Item、Recomm的列,最后设置ALS模型,完成模型录入。
第二个组件KeyToValue,它将电影的ID对应到电影的名字。
通过上述两个组件,可以得到用户和用户对电影打分的结果。例如下图,是用户1对各个电影的打分情况Rating以及系统推荐的分数Recomm。
image.png
打分之后希望看到打分效果,于是接了评估组件EvalRegressionBatchOp,如下图所示:
image.png
EvalRegressionBatchOp组件相当于将打分结果跟真实结果做一个回归对比,下方是它的一个MSE和RNSE的结果,可以看到用ALS对数据进行打分的话,效果十分不错。

5.基于物品的协同过滤——模型训练
接下来介绍基于物品的协同过滤算法训练模型,调用方式与ALS类似,Demo如下:
image.png
首先在脚本中设置对应的模型与参数,然后linkFrom对应的打分数据,接着将它放到Pipeline Model,最终执行就完成了。这样数据对应的模型渲染出来,并将它存到对应的pipeline_model.ak中。

6. 基于物品的协同过滤——推荐预测
如果有这个模型,如何用它来做推荐预测?
image.png
如上图左边所示,首先用Pipeline_lodel可以Load函数,然后给出对应的文件路径。这样的话就将模型Load到内存中,然后Transform就可以将对应的数据集进行推理预测。右边为输出结果。

7.基于物品的协同过滤——Java/Python LocalPredictor预测
训练模型最终要部署到线上,这边提供了LocalPredictor机制,它支持Java与Python接口。在Java或Python环境下,直接通过LocalPredictor就加载模型,然后模型可以通过Map函数完成推理的操作。有了Python和Java这两个接口,我们可以在相应的环境下部署想要的一些服务。
image.png
image.png

(三)Click-Through Rate Prediction DEMO
在网络广告中,点击率(CTR)是衡量广告效果的一个非常重要的指标。因此,点击预测系统在赞助搜索和实时竞价中具有重要的应用价值。该Demo 使用 FTRL方法实时训练分类模型,并使用模型进行实时预测评估,展现了在线学习的能力。
image.png
上图为一个经典的数据集,有一些是字符串,有些特征是对应的数值性。

如何针对这个数据集去做在线学习呢?
image.png
在线学习流程图
该流程存在四个问题:
1)如何进行特征建模?
2)如何训练初始模型?
3)如何进行在线训练和预测?
4)如何对结果进行评估?

1.如何进行特征建模?
image.png
上图为脚本Demo,首先对原始数据做标准化操作,然后对这数据链做了一标准化操作,之后通过FeatureHash将它映射到数组中,生成一个Pipeline,Fit将整个数据相进行特征工程训练,训练出模型。

2.如何训练初始模型?
image.png
FTRL本质上是Online的逻辑回归,初始模型调了逻辑回归组件,通过设置参数,以LinkFrom方式对数据训练,最终完成初始模型的训练。

3.如何进行在线训练和预测?
在线训练和预测主要分为三步,第一是准备流数据,第二是FTRL算法实时更新模型,第三是对实时数据进行预测,对应Demo如下:
image.png
准备流数据
image.png
FTRL算法实时更新模型
image.png
对实时数据进行预测

4.如何对结果进行评估?
image.png
如上图所示,得到模型之后,希望对模型进行评估。
通过 EvalBinaryClassStreamOp组件,就可以完成对模型的评估操作。上图下方为得到的评估指标,可以根据相应的信息去考虑这个模型是否要部署到线上。

(四)Web Demo
上方为脚本的方式,这边用Web的方式也可以实现这样的操作,操作流程图如下:
image.png
Alink支持大屏显示,实时结果写一个数据库中,大屏会实时读取数据库的数据进行展示,如下图所示:image.png
图上方为评估结果,下方为AUC曲线和准确率曲线。

我们也可以直接对模型进行评估,而不是预测,如下图所示:
image.png
image.png
当FTRL训练完模型,会有一个实时的评估组件,组件对模型进行评估。这里要注意的是,两个特征工程调用的是同一个特征模型。
image.png
FTRL模型过滤参数配置

(分享人:赵伟波)

第一期分享内容《基于Flink的机器学习平台Alink》

云原生场景中的AI调度

欢迎加入机器学习PAI钉钉群交流!
PAI钉钉群二维码.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章