1、背景
Youtube推荐视频主要面临下面三个挑战:
- (1)Scale: 规模。专业的分布式学习算法,高效的服务系统对于处理YouTube庞大的用户群和语料库是非常重要的;
- (2)Freshness: 新鲜度。Youtube具有一个非常动态的语料库,每秒就会上传几个小时的视频。推荐系统的模型应该能及时响应新上传的内容和用户最近的行为,从探索的角度看,平衡新视频和旧视频的推荐很好理解;
- (3)Noise: 噪音。由于数据稀疏性和很多外部因素的影响,我们只能拿到用户的隐式反馈,而无法获取用户真实的满意度,因此存在了大量的噪声。
2、系统框架
Youtube的整体推荐系统框架如上图,从上图可以看出整个系统包含了2个神经网络,候选生成(召回)网络和排序网络。
召回网络:根据用户的历史行为,在百万级别的视频中挑选出几百个用户感兴趣的视频。
召回网络召回的视频满足用户泛化的兴趣,用户之间的相似度则通过粗略的特征来表示,如用户观看视频的ID,搜索query和用户画像。
排序网络:将召回的视频进行打分,该过程将使用更加丰富和精细的用户和视频特征,从而的到一个相对最好的推荐效果。
3、召回网络
Youtube把推荐问题看成一个超大规模多酚类问题。即表示在 t 时刻,用户 U 和其上下文 C 下,在视频库 V 里观看视频 wt 为第 i 个视频的概率。其数学表达式如下:
其中 u∈R表示(用户,上下文) 的高维embedding,vj∈R表示每个候选视频的embedding向量。
因此深度神经网络的目的就是在给定用户历史行为和上下文的情况下,学习出用户的embedding向量 u,从而用于 softmax 分类器来召回视频。
每次计算,softmax 的分母,都需要遍历视频库 V 中所有的视频,并且用户上下文向量与视频向量之间的点积,exp等操作造成计算量过大,因此如何高效训练成为一个问题。
高效训练模型
为了高效地训练模型,论文中借鉴了机器翻译中的sampled softmax 方法,其主要思想就是利用重要性采样采出部分视频 V',尽可能的取逼近视频库 V。下面是简单介绍,想了解细节的同学可以参考 https://link.zhihu.com/?target=http%3A//www.aclweb.org/anthology/P15-1001
- (1)candidate sampling,在实践中通过重要性采样方法采样几千个负样本;
- (2)经过importance weighting的方式进行修正。
除了上面的 sampled softmax 方法之外,已有的其他解决方法主要有:
- 利用其它方法,去逼近softmax的概率,比如:基于noise-contrastive estimation(NCE)的方法,类似于word2vec中的skipgram的负采样;
- 层次softmax。
线上预测过程
sampled softmax 算法仅仅是加快了训练速度,预测时,还是需要对分母项做全量计算。对同一个用户 U,所有候选视频计算softmax时的分母相同,所以召回时,只需要比较分子的大小,因此大大减少了计算量。召回过程最终被简化为求最近邻的问题,可以通过建立视频向量索引,来加快搜索。
召回网络的整个框架如下图:模型的输入是用户视频历史浏览行为、历史搜索行为、人口统计学信息和其余上下文信息拼接成的向量;输出为上下文已经讲到的线上和离线训练两个部分。
特征工程
- 历史观看video:把历史完成观看视频的embedding向量进行平均;
- 历史搜索query:把历史搜索的query分词后的token的embedding向量进行平均;
- 人口统计学信息:性别、年龄、地域等;
- 其他上下文信息:设备、登录状态等。
Example Age 特征
除了以上的主要特征之外,YouTube还将视频的Example Age作为特征加入训练,因为除了相关性之外,用户更喜欢新视频,当然是用户感兴趣的新视频。视频的Example Age = 视频最大的发布时间-该视频的上传时间。
线上召回时,将Example Age特征的值均设置成0(或是一个小的负数),有利于召回上传时间短,但是视频内容与用户兴趣更相关的新视频。
其实加入这个特征的原因是上传越早的视频,更有机会成为热门视频,与大多数用户相关,因此在训练时加入该特征,有利于该特征的权重较大,而在线上召回时,对该特征的权重进行打压,则有利于其他相关性特征,因此对上传时间较短的新视频召回有一定的帮助。
Label and Context Selection
训练样本生成
首先,不仅仅使用YouTube内推荐给用户的数据,还使用在其他嵌入页面用户观看的数据,如相关性推荐页面。如果用户在其他嵌入页面观看了视频,则可以通过协同过滤的方式推荐给别人。
其次,为每个用户生成固定数量训练样本,可以在损失函数中对用户进行加权,防止部分活跃用户对损失的主导。
抛弃序列信息
对过去观看视频/历史搜索query的embedding向量进行加权平均。
是否可以考虑将历史向量按照时间衰减,进行加权平均?在文中给出的答案是否定的。这点其实违反直觉,可能原因是模型对负反馈没有很好的建模。
不对称的共同浏览(asymmetric co-watch)问题
连续电视剧通常按顺序观看,是序列式的。用户通常都是先对流行的视频感兴趣,其次才会专注于细分的视频。
因此我们预测用户下一次浏览的视频的效果会比预测held-out的方式好。在传统的协同过滤算法或者FM等算法中,都是采用了图(a)的held-out方法,忽略了不对称的浏览方式。
4、排序网络
排序网络架构与召回网络架构基本是相似的,最大的区别在于排序网络的最后一层是weighted LR,而召回网络的最后一层是softmax,其次为排序网络使用的特征更加精细化。排序网络的模型结构如下图:
特征工程
最重要的特征是用户与视频或相似视频的交互历史的特征。
Embedding Categorical Features
神经网络更适合处理连续稠密特征,因此ID类特征都需要embedding到稠密的向量中。
重要的是,在相同ID空间下的embedding向量是可以共享的,比如,video ID的embedding可以供多个不同的特征使用(浏览video ID,上一次浏览的video ID, 作为推荐种子的video ID)。共享embedding对提高模型泛华能力,加快训练速度,减少内存占用都很有帮助。
Normalizing Continuous Features
神经网络对特征值得scaling以及输入的分布很敏感,对连续特征合适的归一化对收敛是非常重要的(除了树模型,大多数方法都需要对特征做归一化)。
预测观看时长
本部分摘自https://juejin.im/post/5bbdde27f265da0aea699a29
我们的目标是给定预训练数据后,不论是正样本还是负样本,预测其期望的观看时长,因此weighted LR作为排序网络的输出层。
文章采用watch_minutes_per_impression作为预测目标,但这个目标很难被直接预测,所以作者对模型做了一些修改:
- 所有正样本的权重等于观看时长;
- 所有负样本的权重等于1;
- 采用加权逻辑回归来处理这个问题。加权逻辑回归的思想可以在weighted logistic Regression model一文查询。这是一种重采样相关的方法。
-
标准的logistic regression中,y的值为[0,1]之间的数,其表达式为:
而其odds表达式为:
其中,正样本出现的概率为:
负样本出现的概率为:
-
在weighted Logistic Regression中,这个式子则被替代为:
即正样本出现的概率和/负样本出现的概率和(其中Ti表示每个正样本的观看时长,N表示样本总数,k表示正样本数量)。
-
而per impression的观看时长的期望为:
即:
其中p即为CTR,由于p的值相对很小,最后的两个约等于才能成立。所以我们最终可以用odds来估计expected watch minutes。
因此在serving的时候,watch_minutes_per_impression的估计值为:
参考资料:
https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf
http://www.aclweb.org/anthology/P15-1001
石塔西:看Youtube怎么利用深度学习做推荐
清凇:用深度学习(DNN)构建推荐系统 - Deep Neural Networks for YouTube Recommendations论文精读