实时个性化推荐系统简述
传统的个性化推荐系统,都是定期对数据进行分析,然后对模型进行更新,进而利用新的模型进行个性化推荐。由于是定期更新模型的,推荐模型无法保持实时性,推荐的结果可能不会非常精准。
例如网易云音乐的用户,假如用户这会儿无意中听到了一种曲风,觉得这种曲风很好听,连续听了好几首这样子的歌曲。如果我们的推荐系统没有做到实时性,那么给用户推荐的依然是他过去爱听的,无法立即推荐给用户他刚刚听的那些歌的曲风,这就没有很好的符合用户的需求。
再举个例子,比如用户新访问一个网站,如果网站能够做到实时性,就可能根据用户访问网站的这一小段时间内的行为给用户推荐到用户需要的信息。
实时性很大的好处在于,一方面更准确的为用户进行推荐,另一方面是用户可以根据实时性的推荐结果更快进行反馈,进而可以对推荐模型进行尽快更新,使得推荐模型更加精确。
实时个性化推荐系统,与传统个性化推荐系统,不仅在算法上有部分差别,更主要是系统架构上有很大差别。
首先在算法上。由于实时性的要求,使得算法本身在实时计算的部分不能太复杂,否则无法快速得到结果。在算法设计上,可以将推荐算法拆分成两部分——实时部分和离线计算部分。可以利用离线部分将算法中可以离线计算的部分尽可能多的预先计算好,一般是数据量大并且是复杂的全局计算模型。然后将少量的增量更新计算留给实时计算部分,一般是轻量级的指定用户模型训练或者更新逻辑。
对监督式学习,传统的分类方法不太合适,Matrix Factorization的方法是一个较好的方法,因为它的部分因子可以预先离线计算,其他部分可以实时增量更新来获取最新的结果。
对无监督式学习,一般指聚类,也是可以提前离线计算出聚类的中心的,然后供实时计算使用。
然后讲一下架构。下图是NetFlix的实时推荐系统系统架构图。
![实时个性化推荐系统简述 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客](http://img2.ph.126.net/EMNODRv1LC9j7K55wH1XJA==/906912375061976471.jpg)
系统被分为3部分, online,nearLine和离线部分(offLine)。Online和nearLine部分一起认为是实时部分。
离线部分就是传统的个性化推荐系统的主体,定期将大量存储的数据拿出来进行批处理运算,然后对模型进行建立与更新,这里就不详细介绍了。
nearLine部分,是将用户产生的事件,利用流式计算得到一些中间结果,这些中间结果一方面发送给online部分用于实时更新推荐模型,另一方面将中间结果存储起来,例如存储在MemCached、Cassandra、MySql等可以快速查询的存储中作为备份。在NetFlix的系统中,他们的流式计算是通过一个叫做NetFlix.Manhattan来实现的,它是一个类似于Storm的实时流式计算框架,只是针对他们自己的应用有一定的特异性,不是通用的实时计算框架。
然后是online部分。这一部分利用离线部分的主体模型并考虑nearLine部分的实时数据对模型进行增量更新,然后可以得到一个实时的推荐模型,进而根据用户的行为来对用户进行实时推荐。
个性化推荐系统架构的关键问题,就是如何以无缝方式实现在线和离线计算过程,说到底,也是算法的设计,如何将算法的计算步骤合理分配到各个部分,使得得到的模型既可以非常准确,又可以快速计算出来以满足实时性的要求。
转载地址:http://backend.blog.163.com/blog/static/20229412620136553130281/