《Deep Neural Networks for YouTube Recommendations》论文阅读

背景

google 在这篇论文中介绍了在 YouTube 中使用两阶段推荐系统(召回和排序)

召回:和协同过滤原理相似,根据不同用户的历史行为召回用户可能感兴趣的视频

排序:根据用户对视频可能的观看时间对候选视频进行排序,最大化YouTube的商业化价值

和其它论文不同,这篇论文不是在介绍某个技术点上的创新,而是在分享搭建一个工业级推荐系统的经验

YouTube 推荐系统中主要面临的 3 个挑战:

1. 规模问题,YouTube 的用户规模和视频规模是非常庞大的,如何在大规模场景下搭建一个低延迟的推荐系统是非常有挑战性的

2. 新鲜度问题,YouTube 每秒都有新视频被上传到网站中,推荐系统要能对性视频的交互足够敏感,要能平衡 exploration/exploitation 

3. 噪音问题,用户有过交互的视频是非常稀疏的,而且还存在一些我们无法观察到的数据,我们很难获得用户真实的喜好

我们后面在逐条看一下这篇论文是如何解决这个问题的

YouTube 推荐系统由召回和推荐两个网络构成,完整的推荐架构如下图所示:

召回网络

召回网路的结构如下图所示:

在这里,YouTube把召回建模成一个极端多分类问题(视频库中的每个视频都看成一类),具体的来说,就是在当前时刻,给定用户信息和用户历史行为信息,预测接下来用户会看哪一个视频的概率,很自然的我们会想到用softmax函数来建模:

这里有两个地方容易让人迷惑:

1. 公式中的用户向量 u 和 每个视频对应的视频向量 vi 是怎么得到的?

其实 u 就是 nn+softmax 层的前一层的输出结果,假设该层的维度为 n,视频数目为 m,那么这两个层之间的权重维度就是 n * m,第 i 个视频的 embedding 其实就是这个权重矩阵第 i 列向量

2. 在softmax其实只在training的时候用到,在serving的时候为什么要用最近邻检索?

用一些最近邻或近似检索算法可以加快检索效率

3. softmax 分类数目固定的,但是Youtube视频数目是不断变化的,这个怎么解决的?

直接训练所有视频类别的softmax是非常低效的,论文中采用负例采样的方法去训练该模型:

 这个和 word2vec 中的 negative classes 采样原理类似,待整理后补充

在这里仔细分析一些召回网络输入的特征:

1. embedding video watches

embedding video watches 是用户历史观看的视频对应的 embedding,最后会把这些embedding求average输入到图中。

那么如何得到这些视频对应的embedding?

最直接的方法就是不加任何先验,在召回网络中直接训练这些embedding

论文中提到了他们采用了类似word2vec方法训练得到这些视频对应的embedding,并且这些embedding也是会在召回网络上得到更新的

2. embedding search tokens

用户的检索历史处理方法和视频观看历史处理方法相似

3. geographic embedding

这个特征就给用户的设备、地理位置等信息,还有用户其它的如年龄、性别、登录状态等信息也被输入到网络中

 4. example age

这个特征就是每条样本的生成时间(在训练的时候这个值应该是样本生成时间和训练时刻的时间差?),在serveing的时候,这个特征被设为0

因为推荐系统其实是对未来的一个预测,所以需要感知样本分布随时间的变化

作者在论文在还分析了这个特征的影响:

样本和label的构造

为了防止模型被少数活跃用户主导,所以对每个用户构造了相同的样本,具体怎么实现的呢?

论文还提到了 surrogate problem

排序网络

 排序网络预测的是用户对候选视频的光看时常,用了weighted LR来计算,具体细节可以看https://www.cnblogs.com/xumaomao/p/15207305.html

参考资料

https://zhuanlan.zhihu.com/p/52169807

https://zhuanlan.zhihu.com/p/52504407

原文地址:https://www.cnblogs.com/xumaomao/p/15224338.html