开发者学堂课程【跟阿里云技术专家学习智能推荐系统:实操10分钟实现一个简单的推荐架构(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/662/detail/11078
实操10分钟实现一个简单的推荐架构(二)
四、实操构建简单的推荐系统
进入到 PAI 的控制台中会看到这样的页面:
这里面会用到刚刚介绍的Studio(主要应用里面的召回算法)、EAS(把最终的结果部署成服务 API)、AutoLearning(完成策略的生成)
搭建过程
l 数据创建
首先在 Studio 里新建一个项目,并且把原始数据传入到这个项目。在首页的协同过滤算法找到商品推荐,点击从文本创建,然后把其中的前三个组件留下来,剩下的组件删除掉即可。
数据里包括 User ID、item ID、active type,每个 User ID 代表一个用户,同理每个 ID 代表一个商品,active type 有的时候也可以称为 behaviour,其中0代表用户点击了这个商品,1代表这个用户购买了这个商品,2则表示这个用户收藏了这个商品,在推荐系统中我们认为1,也就是说购买这个行为是最关键的,所以首先要通过SQL语句把 activetype=1
的行为挑拣出来。此时再看一下数据,只剩下 active type=1
这样的数据。
接下来从左边的画布里找到协同过滤,把他拖入进来,然后把它与数据进行连接,把 User ID 和 Item ID 填入,然后会发现 topN 里有很多参数,每个参数的细节可以在文档里了解其具体的细节。
这里比较关键的参数是 topN,它是发现商品相似度的,即匹配相似度的数量,比如是跟手机相关的商品有手机壳,如果设置 topN 为1,就只能反馈手机壳,但是如果设置 topN 为2,就会继续找和手机相关的其他商品,则推荐结果可能就是手机壳和手机支架。注意虽然 topN 可以控制整个的推荐数量,但是如果设置 topN 超过5时,最终的推荐结果最多也不会超过5。查看推荐结果,可以发现第一列是 ItemId,第二列 similarity,它是 CB 形式的,每一个结果 Item 的前面是 key,后面则表示权重。
例如 ItemID 为的1000商品和 ItemID 为24277商品的权重相似度为1,ItemID 为1000的商品跟 ItemID 为15784商品的权重相似度为0.5,因为数值越大,两商品同时被购买的概率越高,就可以这样理解,假设1为满分,在现在这份数据里,购买 ItemID 为1000的用户全部都会购买 ItemID 为24277的商品,只有部分用户会同时购买 ItemID 为15784的产品。
也就是说当一个用户购买了 ItemId 为1000的商品,此时如果他没有购买 ItemId 为24277的商品,此时把 ItemID 为24277的商品推送给该用户,用户选择同时购买ItemId为24277的概率是非常大的,因为在这份数据里历史经验是100%成交的。
在 PAI-Studio 里经过原始的数据训练后,生成了最终的结果,接下需要把这个结果变成服务(API),这样系统就可以完成调用了。
l 数据灌入
首先需要把 User Item Data和Item Item Data 两个表写入进来,第一张表是原始的输入数据,第二张表是刚刚生成的数据,两个表应用的都是系统里面写入数据表的组件。这时候 Studio 部分的数据就完成了,把原始数据和生成的经过计算后的数据写了出来。
接下来要把数据灌入到数据库里,利用的是阿里云的表格存储(PAI-Store)。进入表格存储里,首先要创造一个实例,这个实例叫做 racism,实例下面会有数据列表概念.创建两个表,分别是 User item 表和 Item item 表 ,创建表名并把主件写上,然后再添加一个列。
因为最终生成 table 里的表要进入到 AutoLearning 产品里,而 AutoLearning 对于表的格式是有要求的,所以选择推荐召回方案时要把刚才 PAI-Store 里生成的数据绑定上,起上名字然后打开,此时会发现有很多召回策略可以配置。协同过滤的策略表也是有严格求的,要有自带的名称,比如 User ID 、item ID,所以我们在 Table Store 里生成的表一定要与字段名相对应。
首先我们创建两张表,此时这两张表里没有数据,因为在数据都在 PAI 里,接下来要把数据从 Studio 放入到 table 里,这时候要借用数据集成的工具,而数据集成工具在 Dataworks 里,Dataworks 与 PAI 是共用项目的, Dataworks 可以理解为是 PAI 的收藏工具,进入到 Dataworks,点击管理控制台。数据集成是一个数据的打通工具,可以把 PAI 里的数据输入到表格存储里。下面要配置一个数据源,默认的会有 ODPS 数 据,ODPS 数据就是 PAI-Studio 里所有的数据,所以只需要再增加一个 table store 数据。
配完数据源之后就可以新建一个同步任务,然后会生成一个脚本,这个脚本大体的意思就是原始数据 Studio。
原始表的特征有两列,ItemID 和 UserId。然后需要标明,这样就需要创建两个同步任务,因为是两个表,所以需要分别把两个 PAI-Studio 的数据灌倒 Table Store里,然后点击运行可以了。
上述涉及到的概念可以参考推荐召回的案例,查看详细的步骤。此时在 PAI—Studio 里生成数据,并且把数据灌倒了 PA-Store 里。
l 配置召回策略
接下来要在 AutoLearning 把数据配置成召回的策略。
进入到 PAI-AutoLearning 界面,然后新建一个实例并打开,里面有多种的召回策略,可以用语义召回,例如推荐一个短视频,短视频有一个标题,然后分析那个标题里的文本意思,确定语义属于哪个主题,然后基于主题进行推荐。
此处选用的是协同过滤推荐,因为刚刚在PAI里使用的协同过滤算法生成的数据,所以这里也要选用协同过滤。
第一步起一个名字test1,然后点击之前的表,user item 表是关键词,召回数量就是推荐的最后一个候选结果,根据策略通常就是100,通常根据业务需要来定。需要使用的时候可以点击添加策略,可以发现已经添加过去了,可以有多路策略,可以添加多个策略。
语意策略也是如此,如果有一个策略可以添加过去,然后会根据所有的策略结果得到综合的结果。自定义策略就是说,不使用 PAI 提供的协同过滤算法和语义算法,而使用自己根据某种逻辑写出的算法。比如自己有一个业务,某人购买了LV的包,需要推荐给迪奥的包,要把这些内容放在 TableStore 里。
l 过滤
下一步要去配置一些过滤,比如说有一些推荐结果不希望展示,例如不希望给用户 a 推荐商品 b,就需要把 a 和 b 的这种关系也写到 TableStore 里,然后设置一个策略。
因为在电商推荐的时候,有一些用户不希望将某两个品牌的商品进行同时推荐,比如说三星和苹果,这个时候就要在这里进行相关的配置。配置一些过滤的策略,即一旦推荐结果里面有了三星,就要把苹果给过滤掉,这里通常会有一些 item ID 的表,可以把它们写到这里,以达到过滤的效果。
l 部署
最后进行部署,将刚才已经配置的协同过滤的召回部署一个服务 API。
l 测试
然后进入到测试界面,可以测一下整个的服务效果如何。这时候可以随便发送一个 UseID 去查看推荐的结果。
需要注意的是:使用的 ID 必须是已经存在的一个真实 ID,不然的话测试结果一定是空的。例如我们为已知的 UserId:10064500做推荐,召回数量写为3,即可推荐3个商品。
API 就是 post 一个 UserID 然后给一个反馈结果,这样一个简单的推荐系统完成了。而 Feed 流就是每当一个用户进到一个页面后需要推荐商品,底层的逻辑无非就是把 UserId 发到系统里,然后系统给出 response,告诉我们该用户可能喜欢的商品,这就完成了一个账户的策略。
l 优化
如果想进一步的优化这个系统,可以在 PAI-Studio 里再去生成一个排序的模型,并将排序模型也部署成 API。
系统先发一个 UserID,得到召回的结果,即得到用户可能喜欢的三个商品,但此时并不知道这三个商品哪个是用户最喜欢的,哪个是用户第二喜欢的,这时候再去利用排序的 API,就可以知道在召回结果范围内这个用户最喜欢的商品以及第二喜欢的商品。
l 应用
如果用户测试后发现系统的测试效果不错,可以点击前往 EAS 部署(在线的服务系统),把整套的系统生成 API,这样就能够在自己的生产系统进行应用。部署完成之后就会生成一个实例,而这个实力就是一个 API,可以在这里查看 API 的调用情况、底层资源的水位、一些日志情况等等。