推荐引擎的离线算法和在线算法初探

推荐引擎是阿里云的一套推荐服务框架。大家可能在淘宝上很早就听过“个性化推荐”、“千人千面”一类的词,对于为什么能把喜欢的宝贝准确得推给不同的买家感到好奇,希望自己也能有这样一套推荐系统吧。这篇帖子,就以推荐引擎产品上的离线算法和在线算法给大家说明下,并且方便后续如果在产品使用中如果发现通用的计算规则不符合自己的场景的时候,需要做一些优化的时候,也能更好地指导怎么调。
如果是最开始的怎么使用产品,可以看产品文档,和视频

系统架构

推荐引擎是怎么工作的,为什么只需要提供一些用户、商品、行为数据,就知道谁谁喜欢什么呢?我们可以一起来看下文档里的一个图,推荐引擎的框架大概是这样:
screenshot
咱们先不讨论API写入和实时修正一段。数据从MaxCompute准备好,到最后能被调用,实时地生成推荐结果,需要经过2个步骤:要先在离线计算里计算出推荐结果,离线计算的结果会被保存到表格存储里。第二步会通过在线算法,对推荐结果进行加工并展示。所以,如果算的结果不对,比如推荐了个完全不相干的商品,那就查离线算法。比如召回个数要调整,或如果召回数量过少用默认值去填充一类的需求,就要在在线算法上下功夫(当然默认值的生成可能需要用到离线计算)。在线算法和离线算法是配合使用的,所以可以看到模板里也是配套的。

离线计算

我们从默认detail模板(detail_ofl)去了解离线算法。打开这个算法,可以看到这个算法的流程图是这样:
screenshot
这个图里的每个线表示任务的依赖。这样看起来还不直观,我做了下修改:
screenshot
可以看到detail_ofl模板的离线计算其实是有2条主线,一条是通过crs_04和crs_02各自生成item_item_rec_list,最后通过st_cb_01整理成一张对外输出的结果。另外一条是crs_05和crs_03生成user_item_rec_list,最后通过st_cb_02整理成一张结果表。item_item_rec_list表里记录了根据item来进行推荐的结果,可以理解成这两个商品比较接近,比如啤酒和尿布的例子就是典型的item_item_rec的例子。而user_item_rec_list是针对用户进行推荐的,比如说系统发现我和你都是跑步爱好者。有一天我买了双不错的鞋子,然后可以猜你可能也会喜欢。

在线计算

我们来看下detail_ofl配套的在线算法,流程图是:
screenshot
这个图比较简单,先用mg_usr_itm_reclist把离线算法的item-base和user-base推荐结果。item_item_rec_list的数据被放在前面,因为一般来说,根据item召回的结果数量会比较少但是相对比较准确。鉴于两个union all后可能出现走item-base和user-base都会推荐同一个商品,于是接着做了个uniq_reclist进行去重。最后用一个get_top来设置召回个数(也就是最开始我们提到的问题)。

其他算法

看好了detail模板,我们再来对比一下main模板,会发现更加简单了。首页推荐就是根据人进行推荐,没有item的部分,所以其实就是detail模板的st_cb_02,计算user_item_rec_list线。对应的在线算法里,没有两个表的结果的聚合去重,只有get_usr_based_rec来获得user的召回结果,再过一下topn就好了。

然后我们再看下detail_dft,其实就是在detail_ofl基础上,用simple_default_list计算默认的推荐列表。然后用对应的在线模板里的get_default_rec来补足。

最后我们再来看个算法,就是快速入门里的用电影数据进行电影推荐的例子,例子里针对对电影的评分,来筛选出每个人对电影的喜爱程度,这个数据需要用的是spl_grd_svd。而如果用了detail_ofl来算的话,会在数据离线计算的时候报错。对比一下两个模板,可以发现spl_grd_svd开始用的是grade_based_sm,而detail_ofl用的是ig_sm_02。ig_sm_02用的是'click','search_click','consume','use','read','collect','comment','share','like','view',而grade_based_sm只选择bhv_type='grade'对应的bhv_amt作为评分进行计算。如果针对电影数据使用detail_ofl,发现里面只有grade的操作,没有其他的行为,会因为没有找到用户行为数据而报错。

算法类目

可以看到算法的框架是定的,如果后面需要修改,也不是完全推翻重头做起。可以选一个模板在其基础上做修改。每个算法都有各自的数据输入、输出,有一些算法其实只是算法的内部不一样,输入输出,用在什么上下游一样。所以后面如果要根据自己的实际数据写自定义算法,可以先根据前面提到的,找到其中哪个步骤觉得算法还可优化的,然后针对地写个算法替换。是不是看起来很像是在搭积木,用一个同样形状的积木来代替以前的组件。这样一个个相同的积木,就叫做一个类目。在自定义算法的时候,需要设置算法的类目,也正是这个意思。

经过以上的介绍,大家应该对推荐引擎的计算逻辑有一个大致的理解。不过实践出真知,纸上谈兵不如动手做一个,你说呢~

本文使用的产品涉及大数据计算服务(MaxCompute),地址为https://www.aliyun.com/product/odps
和推荐引擎 https://dtboost.shuju.aliyun.com/re#/myre 完成的。


阅读原文:

http://click.aliyun.com/m/13855/



一、机器学习与推荐系统课程简介伴随着大数据时代的到来,作为发掘数据规律的重要手段,机器学习已经受到了越来越多的关注。而作为机器学习算法大数据上的典型应用,推荐系统已成为各行业互联网公司营销体系中不可或缺的一部分,而且已经带来了真实可见的收益。目前,推荐系统和机器学习已经成为各大公司的发力重点,众多知名公司(如亚马逊、netflix、facebook、阿里巴巴、京东、腾讯、新浪、头条等)都在着眼于将蕴含在庞大数据中的宝藏发掘出来,懂机器学习算法大数据工程师也成为了新时代最紧缺的人才。尚硅谷精心打造出了机器学习与推荐系统课程,将机器学习理论与推荐系统项目实战并重,对机器学习和推荐系统基础知识做了系统的梳理和阐述,并通过电影推荐网站的具体项目进行了实战演练。为有志于增加大数据项目经验、扩展机器学习发展方向的工程师提供最好的学习平台。二、课程内容和目标本课程主要分为两部分,机器学习和推荐系统基础,与电影推荐系统项目实战。第一部分主要是机器学习和推荐系统基础理论的讲解,涉及到各种重要概念和基础算法,并对一些算法用python做了实现;第二部分以电影网站作为业务应用场景,介绍推荐系统的开发实战。其中包括了如统计推荐、基于LFM的离线推荐、基于模型的实时推荐、基于内容的推荐等多个模块的代码实现,并与各种工具进行整合互接,构成完整的项目应用。通过理论和实际的紧密结合,可以使学员对推荐系统这一大数据应用有充分的认识和理解,在项目实战中对大数据的相关工具和知识做系统的回顾,并且可以掌握基本算法,入门机器学习这一前沿领域,为未来发展提供更多的选择,打开通向算法工程师的大门。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值