Youtube的推荐系统是如何炼成的

2016年,Google在论文《Deep Neural Networks for YouTube Recommendations》中开源了Youtube的推荐系统架构,堪称经典推荐系统工业落地典范。

总体介绍

模型架构采用候选生成+排序(也即粗召回+精排)

评价指标方面,离线模型指标采用Metrics(precision/recall/ranking loss…)。最终模型/算法策略有效性指标采用A/B Testing。A/B Testing能够观察到更细致的指标,例如观看时长等,更重要的一个原因是离线指标并不总是和最终产品效果保持一致性。

Stage 1: 粗召回

1. 问题建模

超大规模多分类,根据user_context_embedding和video_embedding进行softmax计算

2. 模型结构

三个全链接DNN模块(使用ReLU激活函数),输入是用户浏览历史、搜索历史、人口统计学信息、其余上下文信息concat得到的向量;离线输出时,直接利用softmax计算进行分类获得结果,线上输出时,为了保证性能减少计算,对输出向量采用局部敏感哈希的方式得到TopN结果。

引入深度网络结构的一个好处是能够将任意连续/离散特征添加进模型中,而传统的基于矩阵分解的推荐系统则不能将更多其他特征添加进去参与用户向量的训练。

3. 输入特征

  • 用户浏览历史:将历史观看序列视频进行编码,加权平均
  • 用户历史搜索query:将token转embedding,加权平均
  • 人口统计学信息:性别、地域、年龄等
  • 其他上下文信息:登陆设备、登陆状态等
  • Example Age:视频上传时间,基于数据insight提出来的一个特征,加入模型后能够更好地拟合数据分布

4. 样本label选择策略

  • 数据来源不仅包括推荐侧,还包括搜索侧
  • 每个用户生成固定数量的训练样本:防止loss被少数用户主导
  • 抛弃序列信息:去掉用户搜索历史和浏览历史的序列信息,让分类器不能显式找到label来源
  • 不对称的共同浏览:用户浏览视频通常存在是序列化现象,一开始看的广泛,然后慢慢往细化领域看,传统的协同过滤类算法,都是通过上下文信息来预测中间节点用户观看的视频,而在A/B Testing中,只利用上文信息,来预测下一次观看视频的方式,表现更好

5. 网络深度和特征数量实验

特征数量越多,网络越深(三层基本已经达到峰值),效果指标越好

Stage 2: 精排

1. 问题建模

面对的数据数量级为百,所以能够利用更精细更多的特征来学习用户和视频之间的关系。单纯使用CTR指标并不是最好,靠关键词吸引高点击的视频未必会被播放,因此目标设定为与观看时长相关

2. 模型结构

和粗召回阶段模型结构基本类似,也是三层全链接DNN模块;离线输出使用weighted逻辑回归,线上输出直接使用指数函数

3. 特征表达

  • 特征工程:搜索推荐场景下仍不可避免地需要进行重要的特征工程,其中最难的是如何建模用户时序行为。用户和视频所在频道之间的数量特征和时间特征非常重要;将粗召回阶段的信息传播到排序层能起到一定的优化效果
  • 类别特征embedding:类似于Bert的token embedding
  • 归一化连续特征:归一化使网络训练更加高效,同时加入平方根项和二次项,增强网络表达能力

4. 目标建模

视频观看时长。正样本权重为观看时长,负样本权重为1,最后一层采用weighted逻辑回归

5. 网络宽度和深度实验

三层模型效果性价比高

总结

2016年Google的这篇论文属于工业界少见的集大成者式,包含了很多工业处理上的具体处理方案,清晰的展现了如何发现问题到解决问题的思路脉络,非常精彩,值得精读。但是奈何原论文有些地方读起来有些晦涩,不知道是否是推荐系统领域的论文风格就是这样子的,所以晦涩的部分参考了知乎上的二次解读。

读这篇论文的动机,是最近在工作中很多项目大多属于一次性、临时性的,希望能够开展一些长期性、基础性的项目建设,并能因此有所积累,产生复利效应。从论文中借鉴学习推荐系统领域是如何发现、建模、处理一些重要问题的经验,希望能够迁移学习到新的领域(金融NLP)工作中,带来新的想法和思路。

主要创新点:

  • 输入特征的新发现和组合
  • 离线/线上不同场景根据性能要求做出不同处理
  • 指标确定方面并没有单纯仅利用传统通用指标,而是结合使用更加接地气更加实际的A/B Testing