课程地址:https://developer.aliyun.com/course/2052
一、在线推理服务-架构说明
在如何构建企业级推荐系统系列课程中,前两节课我们分别介绍了召回算法及架构、排序算法及架构。本节课我们会介绍一下如何对排序和召回算法的结果做一个服务编排,以及最终我们的模型跟现场业务是如何对接的。首先,我们介绍一下整个的框架,用户的业务场景,特别是互联网的推荐业务,它的高峰基本上会集中在中午和晚上。这个时候如何减少咱们的资源消耗。比如说,你的高峰需要消耗10台机器,低谷可能用1台机器。如果你没有弹性的机制,在线下买,一定要买10台机器才能满足服务高峰的一个需求。但是,如果你使用了云上的服务,就可以把这一套东西做到弹性。相比于你一直拥有10台机器,会节约很多成本,这是一个推荐业务需要考虑的场景。所以在服务编排阶段通常会采用云上的这套架构去做,来应对它的业务的一个潮汐效应。
另外一个要解决的问题就是,召回和排序这样的一个流程究竟该怎么创建起来。我们的方案是,基于高扩展弹性业务场景,采用阿里云ACK构建整体推理架构。调用流程分为3步。第一步,多路召回:物品协同过滤,语义召回,热门及运营策略召回取回上千条候选集。第二步,曝光去重:基于该用户阅读历史,去掉已经曝光内容,去掉基于运营策略不能推荐的内容。第三步,排序:推理模块调用排序过程时根据用户ID及物料ID,获取用户特征及物料特征后,分批调用PAI-EAS服务返回排序结果。右面这张图其实讲的是排序PAI-EAS在线推理服务的一个在线监控的能力。就是你要观察排序模型的一个水位,进行动态的扩容、缩容,防止你的RT过高,或者QPS达不到业务的需求。这是整个的在线服务编排的框架。
二、线上多目标问题
最终模型上线的时候,我们还会面临一个问题。我们设计整个架构,有的时候并不是单一目标,而是多目标的。就拿文章或视频推荐为例,很多的客户都希望说,不光是我推荐的视频被用户点击了,用户还需要多看一会儿,这样的话就会规避一些标题党。比如说有些视频把标题起得很吸引人,但其实内容很浮躁。用户点进去看一眼觉得没意思就走了,这样的话他整个的使用体验也不好。所以它可能是多目标的,既要他点击,也要他多看一会。针对这样的一个多目标情况,我们该怎么设计整套的方案,怎么去编排整套的推荐召回应用逻辑,有两种方案。一种是说多模型解决多目标问题。假设就是点击和时长这两个目标,你可以有一套推荐召回模块专门针对点击。
另一块专门针对使用时长去做训练。这两个结果你把它融合一下,得到最终的推荐结果。但代价就会比较大,你要同时维护两个系统,而且二者的比例也不好去量化。方案二是合并多目标成单模型,是目前采用得比较多的一个方案,也是效果相对来讲会比较好的一个方案。你把目标一和目标二这两个目标先融合成一个目标。比如说你把是否点击和观看时长按照一个比例去压缩下,把它都放到0~1之间。不点击就0,点击就是1。然后你把观看时长去做一个归一化,把整个时间都缩小到0~1的区间去。这样,你整个的区间就变成了0~2,变成一个单目标的数值。这样的话你就可以针对这一个目标去训练你的召回、排序模型,从而拿到最终的结果。这样做的好处是你只需要维护一套推荐业务的建模流程,会比较方便维护,最后的效果也通常是方案二好一些。
三、参考资料
最后,介绍一下我们给大家准备的一些资料。这第一个link它对应的是PAI团队结合自身过去几年在推荐领域的一些探索,总结了140页的推荐业务的动手实践文档。没有机器学习背景的人基于我们这些文档,也可以在一周之内搭建一套企业级的推荐系统,大家如果感兴趣可以去用一下。另外这一个是PAI的产品地址。