开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:机器学习 PAI 行业解决方案】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14126
机器学习 PAI 行业解决方案
内容介绍
一、PAI 灵活组合的 AI 产品体系介绍
二、使用 NVIDIA 多个系列加速训练
三、PAI 继承的推荐算法的介绍
四、推荐解决方案架构
五、实际操作演示
一、PAI 灵活组合的 AI 产品体系介绍
在今天的分享中我会介绍一下客户如何基于我们的机器学习 PAI 去构建自己相关的业务,同时我们在 PAI 的解决方案中也大量地运用了 GPU 作为我们的资源。
首先看一下目录,分为四个环节,在第一个环节展示一下 PAI 的整个产品体系,介绍一下整个 PAI 平台从上到下需要哪些模块。
第二部分会重点介绍一下 PAI 团队在 NVIDIA 的 GPU 的时候的心得和训练。
第三部分介绍一下推荐业务中常用的一些算法。
第四部分讲一下如何把算法组合起来,来构造一套推荐的业务流程,我还会专门准备一个小的实例,进入实验中来进行一个演示。
PAI 是阿里云上的一个产品,现既服务内部的客户,又有其他 AI 相关的需求。对外也有很多的客户,比如微博,天荣基金,我们也为他们提供诸如推荐的解决方案。
整个的 pAI 我们自己的定位是 AI的 pass 层产品,pass 层产品起一个承上启下的作用,下面会对接阿里系的计算引擎,包括硬件。在上层也为客户提供建模服务,包括模型的服务。
下面这张图是对整个 PAI 的产品组合的介绍:在最下层是基础计算引擎层,最下的层有很多的硬件:CPU、GPU、NPU,这里面 GPU 就是用的是 NV 提供的 M 系列,P 系列,V 系列的一些卡行,有 M40,有 P100等等。
大家也知道现在深度学习非常火,再推荐的场景中其实也应用到大量的深度学习算法,底层其实会用到 GPU 资源。
再往上一层是引擎层,现在提供的是 Max Computer,也有 EMR跟相结合的引擎,有实时计算引擎,那就是得益于人员升涨的概念,其实也有对阿里的 ACK 服务。
再往上一层是 ML Frameworks,这一层有很多的机器学习框架,比如大家熟知的 TensorFlow、Caffe 还有 Allnk 框架我们自己做的一套算法框架。
再往上其实可以把下面的 services 做成一个 Dockers 服务,我们有一个 Deep Learning Container 的服务,去很方便地拉起计算引擎,PAI 的所有原子化的算法。
再上一层其实就跟业务相关了,可以从左到右去看这张,其实AI 的 service 可以大致分为数据准备,在训练,训练完再布置模型,再布置成服务,这样大致一个过程。
可以通过这张图来看一下,首先看一下数据标注的工具,无论是视频还是图像,还是文本,我们都可以通过智能标注进行标注,另外在这里还可以进行数据集的管理,当我们有了训练数据之后,其实给用户提供了两种不同的建模方式,一种是格式化建模,格式化建模的用户是算法应用者,自己不需要开发模型,开发一个算法,更多的是应用我们现成的算法比如推荐领域常用的 Deep wifm ,比如说 jbtd 这样一些算法就够让我业务。
在Studio 中就可以通过简单的方式去拖拽,另外有些客户说不满足于现成的算法,有很强的技术能力,那可以使用 Data Science Workshop交互式的建模的工具去做交互式建模,在里面可以自己写代码进行开发。所以我们在模型构建方面提供了两款截然不同的工具,这两款截然不同的工具生成的模型都可以一键部署到 EAS 上,成为一个请求支持上层业务,当然在我们今天的分享里更多的支持我们推荐的业务。
另外在右侧可以看到我们提供了很多的生态支持方面的工具,比如说 Open API 的算法市场,大家可以提供算法和模型到我们的平台上,有很多的工具跟体系去对接,比如说 MN,SOL FLOW 等等。整个这张图就对 pAI 的大图给大家介绍。在推荐的业务中更多地利用 Studio,利用现成的算法去生成排序模型,然后通过ES将他部署。
二、使用 NVIDIA 多个系列加速训练
第二章的图是介绍基于 NV 去做的工作,PAI 团队有大量的人员再做一些模型优化,我们也自己深度的定制了一款与开源的 TENS Flow 内核不同的深度学习框架,我们叫 TF。
大家可以看一下 PAI TF 和开源的 TENS Flow,和其他框架对比一下 KPU 加速比,比如 VGG16,比如说推荐模型 DIN 上,随着增加之后的一些线性的加速比,这里面可能跟推荐相关的 DIN 模型,它是一个 EN 里非常出名的推荐排序模型,包括我们基于文本要构建一些特征向量的时候,可能会用到 Bert 模型,可能会是一个比较大的 PAITF 的线性。
这是基于 NV 的 GPU 用件上的一些工作。
三、PAI 继承的推荐算法的介绍
接下进行推荐的介绍,首先我们通过一张图介绍一下推荐流程:
当我们假设一个新闻推荐的平台,用户甲有一个 ID 是 A,首先平台上方会有非常多的已有的一些内容,比如 item1,item2,这些文章的数据量会非常大,第一件事是从海量的候选集中去召回出 A 可能感兴趣的新闻,也就是说我们会先进入一个召回模块,再找回模块中会发现 A 可能喜欢的新闻,在召回新闻后还不确定 A 在这500个中第一喜欢哪个,这时就通过排序模块获取,可以看到最喜欢的是33,第二喜欢的是22,经过排序模块后就知道最先给 A 推荐哪个文章,也就是退的两个核心流程是召回和排序,接下来我们就是通过算法去把提升这两个模块的效率,也就是我们推荐的解决方案要做的工作。
接下来看一下再推荐算法上的工作,目前 PAI 的召回模块为大家提供了三个算法,i2i 和 u2i 的区别:i2i 是已经有了一个 item 去推荐一个相似的 item,基于 item 推荐相似的。
U2i 是基于两个用户的爱好相似,把 A 的推给 B。目前 PAI 的解决算法提供了这三个,它们各自有各自的特点,比如 Etrec 是很经典的协同过滤的算法,是在任何一个基于算法的系统中都有大量应用。第二个是 GraphSage 比较新,它其实是基于图关系的推荐,PAI 团队也自己开发了一条 GAN框架,我们提供的GraphSage其实也是基于我们的GNN的框架计算的,第三是 ls,它是基于矩阵分解的算法,他会把行为数据变成向量,这时召回的时候只要去计算每一个用户和向量之间的距离,找到最近的距离,就是用户最感兴趣的商品。这样的话通过这三个召回算法其实给用户提供不同召回选择,因为召回与排序的区别是召回可以有多步。
有三个找回算法,比如每一个召回算法返回500个结果,最终是1500个结果,去重后,得到五百个结果。召回讲究的是丰富性,这些找回算法其实在一些客户上是有验证的,比如短视频平台试用了召回算法,很多在业务上有所提升。大部分做推荐系统的可能比较感兴趣的就是 CTR,用户提升百分之三。因为你推荐的好,停留时长也增加。另外就是挖掘成为视频。因为对一个平台来说,不只是热门视频。第三个是随着长尾视频的发掘,会提升整个生产者的积极性。这些就是找回算法给业务带来的效果。
接着就是排序算法,排序算法其实决定了最终找回结果给用户的顺序,是非常关键的,排序算法目前的领域里,太多解决方案是为客户提供深度学习的模型。
有 DeepFM、Multi Tower 还有 MMoE,还有 DIN,算法各有各的特点,比如第一个是业内使用非常广泛的深度学习算法,第二个源于 Youtube 的一个论文,它其实是一个多塔。BST 可以基于用户的历史行为,比如说序列。
MMoE 是一个多目标的学习算法。比如在学习中我们经常要 CTR 提升,也要停留时长提升,这样我们可以通过一个算法去实现多个目标的融合。DIN 是阿里推出的比较出名的算法。由此可以看一下,针对广告推送,社交媒体,还有直播,以上的算法都可以达到不同的效果。我们这一些算法和算法及的总称叫做库。我们看以看到我们使用不同的算法模型,在很多的业务都可以拿到收益,比如广告。消耗也会减少,然后在大型社交媒体上数据非常大,在大型社交媒体上,数据可以达到五亿左右。
AUC 也会得到应用点的提升,直播领域的客户是非常多也是非常火的。也可以达到平均两个点击,这些就是目前提供的算法。
四、推荐解决方案架构
刚才我们也介绍了 pAI 提供的产品,算法该如何形成一个解决方案。一个解决方案,算法在里面的作用可能不是最大的,最难的是怎么把数据计算的结果串起来,我们可以看一下离线的解决方案图:
我们从下到上去看,用户最原始的数据,也是这个平台最原始的数据,其实是表示每一个用户的数据,比如用户的消费情况,年龄地域,还有个 ITEM 的视频的长度,内容。
比如说推荐的是新闻,那新闻的题材有多少字,里面有没有插图,这些是物料。还有行为是用户对作品的点击,收藏,关注,都叫一个行为。行为跟目标有关,比如说你的推荐系统希望跟点击率,那你就要多收集一些用户的行为。再往上分召回和排序两个模块,找回模块用刚才讲的算法,一般向量找回会多一些,这两个向量分别表示每个用户的属性。大家可以理解其实每个用户的属性可以用每个向量去表示。排序模块也是通过以上的排序进入到排序算法。
这里还有一个 Auto ML-Turning,就是自动调参,因为就是一些深度学习算法。如果是让开发人员手动调,其实是困难的而且工作量大,一般我们会采取自动化调参,生成一个排序 MOdel,这样的话,下面是底层,上面是业务层。用户还要给他推荐个结果,第一件事就是到 Redis 里,去查它的向量,把它的查出来。
到 Faiss Server 里去找相似路径计算,去找与它最近的 TOPN 的 item,达到找回结果。当然 Redis 加 Faiss Server,如果是在阿里云的平台上也可以使用叫 Hologres 解决这个问题。拿到找回之后,我们的 MOdel可以部署到 ES 里面。最终靠这个 API,拿到排序的结果。我们使用的 model 都是生成的,包括我们线上的 USER,ITEM 的计算,都是离线生成的,比如说用一天以前的数据去做的。其实现在的推荐信都很强调时效性,再推荐领域非常被关注的一个方案,如何增强数学实效性,也就要求我们实时的产生模型,这里与离线方案不同的是,我们会实时的训练出排序模型,然后会存到一个模型库,我们这会有一个评估的模块,会实时的去 check 我们的模型跟线上模型对比的效果,当我们实时更新的模型比线上的模型好之后,会实时的替换,实时的推荐和离线的推荐区别就是他更好的利用了数据的时效性。
比如说我今天要做一个大促,比如说是针对24位女性的行为都会有很大的变化,大的跳动,大的平台的用户属性的跳动,有个10分钟更新模型的能力的话,实时的对平台的数据做一个相应,这是实时推荐的一个好处,我现在就把我们离线的和事实的推荐的链路给大家介绍完了。
五、实际操作演示
接下来为了更好的直观的展示我们的建模平台,我有一个实操的环节:
进去控制台以后会发现我们刚才介绍的产品都在左侧,这里用 studio给大家做个演示,在 studio 创建项目就可以。
首先 studio 给大家提供了很多 demo,有很多是跟推荐相关的,大家只要点击从某个位置创建,就会自动的生成一个画布,这个话不会包含所有的数据和拼接好的实验,召回的算法的实验是如何通过协同过滤去做一个商品的找回,比如说这是我们的原始数据。
这里面提供了四个字段,一个是说用户 ID,每个 ID 代表一个用户,还有一个 ITEM ID,每个 ID 代表一个物品,第三个字段是行为,零表示用户点击过这个商品,1表示购买过,2表示收藏过。
我们的第一件事是做购买预测,购买的推荐,第一件事是把购买的行为挑出来,把 active 等于1的挑出来,得到一个效果,然后我们可以使用协同过滤算法里面所有的算法其实都是以组件形式提供的,想要什么算法,就把它拖到画布上,然后把数据链一下,然后在这里设置你的字段,需要的参数就好了,这里直接给看一眼结果就好了,他要求你的输入是用户 ID,这里需要选配置一下选协同过滤算法的一些参数,
比较直观有效果的就是 TOP N,协同过滤算法会找出跟每个商品同时被购买的商品,并且计算出概率,i2i 的结果是它经常会买一个手机,那会大概率买一个手机壳,也会买一个手机卡,它们同时被购买的概率是比较高的,这里他的计算结果可以这样理解,ITEM ID 是一个商品,假设1001就代表一个手机,通过逗号分隔,每个 kv 对都表示目标商品的关联程度,假设我们看第一个:4277:1,这个前面是 k,代表 ITEM ID,冒号后面是这两个商品同时被购买的概率,也就是说1010这个商品和2477这个商品被同时购买的概率是1,在看最后一个18612,1000这个商品跟6812这个商品同时被购买的权重是0.5,也就是说如果用户买了1000,你可以推荐它24277后者是3这些商品,因为它们被同时购买的概率是非常大的,几乎是百分之百,这些商品都推荐完之后,就推荐这些比较小的商品,这样就完成了一个i2i的召回,这样的基于这个商品简单的召回就可以做出来了。
也可以通过平台去构建算法,比如说刚刚介绍的排序算法,包括很多深度学习的算法,都可以在里面找到,然后又排序算法之后我们可以把它部署成一个 API,可以把自己生成的模型,排序在这里进行一个上传,每一条可以理解为请求,可以通过请求去调用排序模型,拿到一个结果,操作演示就介绍完了。