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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Alink在“周二开源日”的第二节分享,主要介绍了推荐算法的框架和设计细节。内容简要:一、Alink介绍整体介绍和SparkML对比算法调用方式二、Alink 推荐 DemoAlink推荐相关算法整体介绍影片推荐DemoCTR点击率预估DemoWeb 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

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
20天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
9天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
29天前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
30 0
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
1月前
|
机器学习/深度学习 算法 数据可视化
【机器学习】ID3、C4.5、CART 算法
【机器学习】ID3、C4.5、CART 算法