这篇论文 是google的YouTube团队在16年9月的RecSys会议发表的,主要介绍推荐系统在DNN方面的尝试。本文所介绍的YouTube的推荐系统主要包括Deep Candidate Generation model和Deep Ranking model两个部分:Deep Candidate Generation model在成千上万的视频集中选出几百个视频作为推荐候选集;Deep Ranking model对这些候选集里所有视频进行打分排序,然后按照排序的结果像用户推荐视频。
YouTube represents one of the largest scale and most sophisticated industrial recommendation systems in existence. In this paper, we describe the system at a high level and focus on the dramatic performance improvements brought by deep learning. The paper is split according to the classic two-stage information retrieval dichotomy: first, we detail a deep candidate generation model and then describe a separate deep ranking model. We also provide practical lessons and insights derived from designing, iterating and maintaining a massive recommendation system with enormous user-facing impact.
文章使用到的推荐模型是经典的二阶段模型:召回和排序模型。召回模型是一个深度候选集生成模型,排序模型是一个深度排序模型,这两个模型是互相独立的。
1.论文提要
1.1解决的问题 or 挑战
- Scale: Many existing recommendation algorithms proven to work well on small problems fail to operate on our scale. Highly specialized distributed learning algorithms and efficient serving systems are essential for handling YouTube’s massive user base and corpus.
- Freshness: YouTube has a very dynamic corpus with many hours of video are uploaded per second. The recommendation system should be responsive enough to model newly uploaded content as well as the latest actions taken by the user. Balancing new content with well-established videos can be understood from an exploration/exploitation perspective.
- Noise: Historical user behavior on YouTube is inherently difficult to predict due to sparsity and a variety of unobservable external factors. We rarely obtain the ground truth of user satisfaction and instead model noisy implicit feedback signals. Furthermore, metadata associated with content is poorly structured without a well defined ontology. Our algorithms need to be robust to these particular characteristics of our training data.
- 海量数据:现有的推荐算法虽然在小数据集有良好的表现,但是在YouTube这样规模的数据集上未必表现良好(训练的模型规模大概是10亿参数),同时面对庞大的训练基数业需要高效的分布式学习算法和服务系统。
- 新鲜度: 推荐系统需要能够快速的对视频及用户行为(YouTube系统每秒钟都有大量新视频上传)作出反馈,同时平衡新发布视频和存量视频的权重进行综合推荐。
- 噪声:主要有两个方面,一是用户的历史行为往往是稀疏且不完整的,二是我们很少能够准确获得用户对视频的真实反馈信息,因此推荐算法必须对数据足够鲁棒。
1.2论文组织架构
第2节是系统概述,简要的介绍了推荐系统。
第3节详细地描述候选集生成模型(召回模型),包括候选模型训练、模型推荐,实验结果将显示该模型如何从隐藏单元的深层和其他异构信号中受益。
第4节详细介绍排序模型,包括改进经典逻辑回归算法 训练模型并预测预期观看时间(而不是点击概率)。 实验结果表明,在这种情况下,隐藏层深度也是有帮助的。
第5节是结论和经验教训。
2.系统概述
系统包含两部分:Candidate generation和Ranking。Candidate Generation是从大型视频库(百万级)中选出几百个视频作为候选推荐集,主要是通过协同过滤提供广泛的个性化,比如利用用户观看的视频ID、搜索查询的token、人员信息等粗略的特征;Ranking对筛选出的数百个视频进行更加精细的个性化推荐,主要体现为使用更加丰富的描述视频和用户的特征集,根据特定的目标函数对视频打分,然后依据得分排序,得分最高的视频向用户展示。
本文广泛使用离线指标precision(精度)、recall(召回率)、ranking loss(排名损失)等作为依据指导系统的迭代改进。最终的效果是依靠实时试验进行A/B测试,关注的指标包括:点击率、观看时间等。
3.候选集生成:Candidate Generation
3.1将推荐视为超大规模的多分类模型
把推荐看成是一个的多分类(超大规模)问题,形式如“超大规模多分类模型”图中的公式。Wt=i可以理解为一个特定的用户U,在时刻t和一个特定的上下文环境C下,用户U从所有的视频V中选中i进行观看;u表示用户U和场景信息C的高维embedding;Vj表示候选视频j的embedding向量。
Embedding(映射函数)可以理解为一个稀疏实体(稀疏高维空间)到RN空间内的密集向量(稠密低维空间)的映射。
DNN的目标就是基于户历史及场景信息,学习用户u的embedding向量,然后通过softmax分类器,有效的从视频语料库中识别视频的类别(也就是推荐的结果)。
- 大量训练集负样本处理
对负样本进行负采样,并用重要性加权(importance weighting)进行校正;(替代方案:分层softmax)- 损失函数
模型使用交叉熵损失(cross-entropy loss)来进行训练,loss使用正类和采样后的负类进行计算;- 推荐时效性
必须在几百毫秒内计算并选择出最可能的N个类别(videos)并呈现给用户,为了降低服务延迟,现在的做法是利用通用库的点积空间中的最近邻居搜索(原来的做法是哈希)。
3.2模型架构
模型架构是包含三个隐层的DNN结构,输入是用户浏览历史(vedio watches)、搜索历史(search tokens)、人口统计学信息(age、gender等)和其余场景(concat)的输入向量;输出分线上(serving)和离线训练(training)两个部分。离线训练阶段输出层为softmax层,输出为3.1公式表达的概率;线上直接利用user向量查询相关视频。
特征的处理
- 搜索历史记录与观看历史记录: 用户的历史观看是一个稀疏的、变长的视频id序列,对每一个视频从固定的词汇表(word2vec)里计算出一个多维词向量,这样用户的观看历史就可以通过加权平均的方式映射为一个稠密的、定长的词向量。搜索历史记录同,主要是token。
- 用户画像特征:地理位置、设备、性别、年龄、登录状态等连续或离散特征,连续值正则化到[0,1],离散值进行编码处理。
- example age:视频被上传之后的时间
Many hours worth of videos are uploaded each second to YouTube. Recommending this recently uploaded (“fresh”) content is extremely important for YouTube as a product. We consistently observe that users prefer fresh content, though not at the expense of relevance. In addition to the first-order
effect of simply recommending new videos that users want to watch, there is a critical secondary phenomenon of bootstrapping and propagating viral content [11].
Machine learning systems often exhibit an implicit bias towards the past because they are trained to predict future behavior from historical examples. The distribution of video popularity is highly non-stationary but the multinomial distribution over the corpus produced by our recommender will
reflect the average watch likelihood in the training window of several weeks. To correct for this, we feed the age of the training example as a feature during training. At serving time, this feature is set to zero (or slightly negative) to reflect that the model is making predictions at the very end of the training window.
每一秒中YouTube都有大量视频被上传,推荐这些最新视频对于YouTube来说是极其重要的。用户更倾向于推荐那些尽管相关度不高但是最新的视频。而推荐系统对于历史行为通常是能够学习到一种隐式的基准的,但对于视频的流行度分布往往是高度不稳定的。(模型往往是利用用户过去的行为来预测未来,对于训练集中新增的数据往往很难准备预测)考虑到example age的现象,推荐策略将example age作为一个特征拼接到DNN的输入向量。训练时,时间窗口越靠后,该值越接近于0或者为一个小负数。(具体试验结果可参考论文图4)
样本和标签选择
- 样本选择:(a)拓宽数据源,训练样本从全部的YouTube观看记录中选择,优势是便于加入对新视频的测试,防止对推荐者的观看记录过度利用,同时用户在其他途径的观看行为也容易被推荐系统采集到。(b)为每个用户生成固定数量训练样本,即对每一个用户所产生的观看记录都生成了固定数量的训练样本,这样每个用户在损失函数中的权重都是相等的,防止一小部分超级活跃用户影响到损失函数的公平性。(c)搜索样本的无序化处理,将用户的搜索序列做无序化处理,推荐系统不再直接获知搜索样本的原始值,效果会更加鲁棒。(比如利用用户的最后一次搜索生成推荐的主页通常效果糟糕)
- 上下文选择:用户观看视频时,遵循的是一种非对称的共同浏览模式,即用户在浏览视频时候,往往都是序列式的,开始看一些比较流行的,逐渐找到细分的视频。本文改进在于从用户的观看历史序列中,只截取held-out watch之前的观看序列。
该过程可以描述如下图,图(a)是hled-out方式,利用上下文信息预估中间的一个视频;图(b)是predicting next watch的方式,则是利用上文信息,预估下一次浏览的视频。图(b)的方式在线上A/B test中表现更佳。而实际上,传统的协同过滤类的算法,都是隐含的采用图(a)的held-out方式,忽略了不对称的浏览模式。
其他(试验)
- 深度:第0层的输入向量全连接到softmax输出层,第0层以及输出层都是采用固定的256维度。中间的深度网络采用的是类似tower的结构。
• Depth 0: A linear layer simply transforms the concatenation layer to match the softmax dimension of 256
• Depth 1: 256 ReLU
• Depth 2: 512 ReLU → 256 ReLU
• Depth 3: 1024 ReLU → 512 ReLU → 256 ReLU
• Depth 4: 2048 ReLU → 1024 ReLU → 512 ReLU →
256 ReLU
- 激活函数:深度层神经节点的激活函数采用的是RELU,该函数相对于sigmoid、tansig最大的好处应当在于能使得节点的激活率处于一个较低的水平。
- 离线训练:softmax层的输出是预测的视频分类结果。
- 在线服务:DNN输出用户向量u,u与视频库中的视频向量做内积并排序,得到TopN。(进行了算法加速)
4.排序模型:Ranking
现在Candidate Generation Model已经给出了候选集;在排序阶段,只需要对候选集中的视频打分即可,针对每一个展示的观看时间来进行学习。排序阶段的模型和候选集生成的模型基本相似,不同的是离线训练的最后一层是一个weighted LR(改进后的加权逻辑回归)层,而serving阶段激励函数用的是ex。
4.1特征:用户与视频的交互
从两个维度对特征进行分析:
- 单一特征(univalent),比如当前待展示待打分的视频ID;
- 多值特征(multivalent),比如用户过去观看的N个视频ID;
特征描述内容分为描述Item(“impression”)还是描述user/context(“query”),query特征每次请求都会被重新计算,因为他一直在变化;Item特征描述其固有属性只需要针对每个Item计算一次就可以了。
- 离散特征Embedding:观看视频ID等离散特征,依旧是embedding的处理方式,对于取值特别多的特征,可以根据出现的频率进行截取,比如只取前N个;对于这N个之外的值的embedding可以全用零填充;
*连续特征Normalizing:对归一化后的特征还取了平方、开方得到两个新特征,也提高了线下性能。
4.2网络架构
- 特征:针对连续特征归一化+增强处理(平方、开方);针对离散特征主要是进行embedding,对于多值边长离散特征,比如观看视频IDs,对embedding的结果取平均;
- 离线模型:三层ReLU,最后采用一种加权逻辑回归基于交叉熵损失进行训练得到预测观看时间的模型。
5.实验(不做赘述)
6.自我思考
关于特征工程部分,特征的联合是直接拓展特征向量维度,后续可以尝试使用tensorflow中的特征联合模块,增加全连接层进行特征联合。