架构

虽然我读研的学术方向是数据挖掘,细分到了粗糙集中基于辨析矩阵的属性约简算法,也可以认为是特征降维。但是自己在实习期间的工程实践是个性化推荐,所以自己的毕业开题选定了两者的结合。下图是我准备毕设开题答辩的时候画的推荐系统架构图,忙着写毕业论文,后续虽然加了点内容,但图懒得改了= =

推荐系统架构图.jpg

推荐系统架构在不同的业务情形下的设计也会有所区别,但必备的一些组件还是通用的。总结了自己大半年来在资讯类个性推荐算法岗位的实习经验,按照自己的理解给出了一个资讯类推荐系统架构图。
首先是数据上报模块,这个底层模块用来上报业务数据、日志数据等,比如用户的点击曝光行为记录、分类记录、地区时间记录等,是算法的数据来源。

pipeline特征工程模块,可以说是整个推荐架构的核心基础服务。pipeline最开始是样本设计模块,包括正负样本设计、日志拼接、数据过滤等。其中正负样本设计需要结合具体的业务场景。举例来说,对于新闻类app,正负样本的设计可以设计为用户对点击了看到的新闻A,那么A为正样本;但若A已曝光,也就是用户看到了A但是未点击,那么A则为负样本。而对于短视频类app,因为一些短视频只有点进去了才知道喜欢不喜欢,有些视频用户点进去不到2秒就关了,有的则会认真看完,那么此时正负样本就不能简单的认为是点击行为是正样本了,正负样本的设计必须和用户点击视频后的停留时间相关。除了正负样本设计外,数据过滤也很重要,恶意点击、网络爬虫等造成的“脏”数据不仅会加大数据量浪费计算资源,而且对算法模型来讲也是噪音数据,反而会影响模型效果。接着pipeline对上一层的数据进行如特征组合,生成用户画像(user pofile)、内容画像(item profile)以及各种交叉类特征。还可以对特征进行归一化、离散化,从而满足不同模型对数据类型的要求。

召回层和排序层,这两个模块将给用户提供个性化推荐的结果。首先是召回层,召回层主要用来生成个性化的候选内容,即根据不同用户生成不同的内容序列。比如对于新闻类推荐来说,召回层根据用户画像和内容画像,使用某种算法(协同过滤、热榜推荐、user2vec、item2vec等)从候选池中选出一定数量的新闻内容。喜欢军事、体育的用户A,喜欢动漫、音乐的用户B,显然用户A的召回内容中军事和体育占得比重会比动漫和音乐的比重大,而用户B的召回内容中动漫和音乐的相关内容就会比较多。其次,排序层就是对召回内容再进行一次精排序。排序层主要是训练好一个排序模型,该模型能对候选集中的内容进行点击率(ctr)预测,根据预测结果进行排序,ctr预测值越高意味着模型预测该用户喜欢该内容的几率越高,那么该内容就应该优先推荐。召回层除了召回候选内容,有时也会使用某种算法进行一次粗排序为排序层服务,但排序层产生的结果会更加精确。

应用层最终给用户产生和展示个性化推荐的结果,属于线上(online)模块。当线上用户请求发来后,首先要通过召回层从而根据该用户的特点生成候选内容集,之后使用排序层的排序模型对候选内容集进行精排序,最后将精排后的结果展示给用户完成整个个性化推荐过程。

Comment

This is just a placeholder img.