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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 这篇帖子,就以推荐引擎产品上的离线算法和在线算法给大家说明下,并且方便后续如果在产品使用中如果发现通用的计算规则不符合自己的场景的时候,需要做一些优化的时候,也能更好地指导怎么调。

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

系统架构

推荐引擎是怎么工作的,为什么只需要提供一些用户、商品、行为数据,就知道谁谁喜欢什么呢?我们可以一起来看下文档里的一个图,推荐引擎的框架大概是这样:
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 完成的。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈
【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈
254 6
|
2月前
|
算法 测试技术 C#
C++二分查找、离线算法:最近的房间
C++二分查找、离线算法:最近的房间
|
2月前
|
算法 测试技术 C++
C++二分查找、离线算法:最近的房间
C++二分查找、离线算法:最近的房间
|
11月前
|
人工智能 算法
莫队离线算法
莫队离线算法
44 0
|
机器学习/深度学习 算法 自动驾驶
NeurIPS 2022 Oral | 离线强化学习新范式!京东科技&清华提出解耦式学习算法
NeurIPS 2022 Oral | 离线强化学习新范式!京东科技&清华提出解耦式学习算法
151 0
|
9天前
|
传感器 算法
基于无线传感器网络的MCKP-MMF算法matlab仿真
MCKP-MMF算法是一种启发式流量估计方法,用于寻找无线传感器网络的局部最优解。它从最小配置开始,逐步优化部分解,调整访问点的状态。算法处理访问点的动态影响半径,根据带宽需求调整,以避免拥塞。在MATLAB 2022a中进行了仿真,显示了访问点半径请求变化和代价函数随时间的演变。算法分两阶段:慢启动阶段识别瓶颈并重设半径,随后进入周期性调整阶段,追求最大最小公平性。
基于无线传感器网络的MCKP-MMF算法matlab仿真
|
1天前
|
算法 网络性能优化 调度
基于De-Jitter Buffer算法的无线网络业务调度matlab仿真,对比RR调度算法
1. **功能描述**: 提出了一个去抖动缓冲区感知调度器,结合用户终端的缓冲状态减少服务中断。该算法通过动态调整数据包发送速率以优化网络延迟和吞吐量。 2. **测试结果**: 使用MATLAB 2022a进行了仿真测试,结果显示De-Jitter Buffer算法在网络拥塞时比RR调度算法更能有效利用资源,减少延迟,并能根据网络状态动态调整发送速率。 3. **核心程序**: MATLAB代码实现了调度逻辑,包括排序、流量更新、超时和中断处理等功能。 仿真结果和算法原理验证了De-Jitter Buffer算法在无线网络调度中的优势。
|
5天前
|
传感器 机器学习/深度学习 算法
基于GA遗传算法的WSN网络节点覆盖优化matlab仿真
本研究应用遗传优化算法于无线传感器网络(WSN),优化节点布局与数量,以最小化节点使用而最大化网络覆盖率。MATLAB2022a环境下,算法通过选择、交叉与变异操作,逐步改进节点配置,最终输出收敛曲线展现覆盖率、节点数及适应度值变化。无线传感器网络覆盖优化问题通过数学建模,结合遗传算法,实现目标区域有效覆盖与网络寿命延长。算法设计中,采用二进制编码表示节点状态,适应度函数考量覆盖率与连通性,通过选择、交叉和变异策略迭代优化,直至满足终止条件。
|
3天前
|
算法
基于COPE协议的网络RLNCBR算法matlab性能仿真
摘要: 本研究聚焦于COPE协议与RLNCBR算法(MATLAB仿真),整合随机线性网络编码与背压路由,优化网络编码技术以增强吞吐量与鲁棒性。实验在MATLAB2022a下执行,展示了平均传输次数随接收节点数(N:2-10)变化趋势(P1=...=Pn=0.08,重传间隔100Δt)。COPE协议利用编码机会提高效率,而RLNCBR算法动态调整路径,减少拥塞,提升成功率。数学模型与仿真实验证实算法有效提升网络性能,降低时延与丢包率。[总计239字符]
|
11天前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。

热门文章

最新文章