下面来看下短视频社区平台的推荐系统架构是如何划分的,由底层往上分别是日志信息层、模型策略层、数据计算层、数据结果层与用户交互层,如图-所示。
. 日志信息层
该层主要分为两部分,一部分是静态数据,例如用户数据与内容数据,用户的年龄、性别、地区,稿件内容的标题、时长、作者,在很长一段时间内都是固定数据,系统每天取其增量存入日志信息层;另一部分是行为数据,例如推荐请求日志,记录哪些内容曝光给了哪些用户;推荐点击日志,哪些用户点击了哪些内容;用户浏览时长日志信息、用户LBS地点信息等等。
. 模型策略层
该层主要是决定采取何种模型、策略来分析与解读日志信息层的静态数据和行为数据,例如在召回阶段是更多地进行热门内容召回,还是根据用户行为进行协同过滤的召回;在排序阶段采用何种机器学习模型来进行精排等策略。
. 数据计算层
该层是基于模型策略层定下召回排序策略和模型后,采取离线大规模计算与在线实时计算两种方式,计算出模型训练的结果。离线计算是由于机器数量与性能的限制,大量数据需要采取离线方式计算出结果,在线计算是针对线上用户的实时反馈行为,系统快速做出回应,改善用户体验。
. 数据结果层
该层作用是在不同数据应用系统中存储数据计算层得出的相应计算结果,例如用户画像与内容特征可以存储在ElasticSearch(搜索数据库)中,因为这些数据只需要批量查询读取;而用户行为数据则需要存储在Redis(内存应用)中,方便快速响应前端界面的用户反馈。
. 用户交互层
该层的交互逻辑分为两部分,第一部分是展现由各层最终计算出的推荐结果给用户,第二部分是记录用户对于推荐结果的反馈行为,例如浏览行为(时长/路径)、点击行为(点击哪些内容/完播率等)、负反馈行为(不感兴趣/投诉等不同程度的负反馈)。
基于以上描述,我们了解了推荐系统技术架构的整体框架,但还是给人感觉太复杂、太技术范儿了。归根结底来说,推荐系统要做的不就是从海量内容库里选出几十个用户可能感兴趣的优质视频吗?我们将推荐系统抽象成一个信息过滤系统,分为审核、召回、排序、规则四个模块,层层递进地过滤内容,如图-所示。
审核模块将符合短视频社区规则与价值观的视频过滤出来,输出量级大致在百万左右;
召回模块将根据用户行为与热门等规则,快速找到一小部分优质内容,输出量级大致在十万左右;
排序模块分为粗排与精排,采用比较复杂的模型,融入较多特征,输出量级在百个视频数量左右;
规则模块,也叫ReRanker(重排序)模块,会在排序模块结果的基础上附加人工干预、规则限制等,最终将结果呈现给用户,输出结果在几十个左右。