01.04 推荐系统之YouTube深度学习经典论文解读

推荐系统之YouTube深度学习经典论文解读

今天给大家带来的是2016年YouTube发表的基于Deep learning做视频推荐的论文,站在今天来看,这篇paper在算法架构上并没有什么特别的地方,但是从工程和视频场景理解上的的确确是一篇经典之作,下面一起重温经典。


这篇论文提出的背景主要有三点,也就是当时YouTube视频推荐面临的问题:

  1. Scale: 用户基数多、数据量庞大;导致很多在小数据上表现好的算法在YouTube推荐场景下失效。
  2. Freshness:YouTube视频更新快,系统需要平衡新老内容,解决冷启动的问题。
  3. noise: 用户行为数据稀疏且只有隐反馈,有很多噪音数据。

系统架构

推荐系统之YouTube深度学习经典论文解读

推荐系统的架构基本都是大同小异,无非是召回和排序两大部分,YouTube也不例外。第一层Candidate Generation就是召回模块,完成候选视频快速筛选,候选视频的量级从百万到百。第二层Ranking指完成召回后的几百量级候选视频的精排序。召回模型相对简单,特征较少,主要保证时效性,对个性化的要求较低,排序则是使用更多特征,模型较为复杂,对个性化要求高。

召回模型

模型架构

推荐系统之YouTube深度学习经典论文解读

特征集

召回部分的特征集主要由三部分组成:

  1. 用户观看的视频embedding
  2. 用户搜索的关键词embedding
  3. 用户基本信息,比如年龄、性别、地理位置等
  4. example age

watch embedding

熟悉word2vec,这一块应该很容易理解,就是对用户观看过的视频做embedding,最后做一个average得到视频embedding。

search embedding

用户历史搜索的关键词embedding最后average得到token embedding。

上面其实和文本分类中由word embedding到doc embedding是一样的,直接将历史观看视频的embedding做加法平均还是比较暴力的,对比阿里DIN论文,这一块其实是可以优化的。目前的推荐架构中一般是直接onehot输入经过一个embedding layer,直接参与网络训练的,我估计YouTube应该是考虑召回的效率没有采用这种方式(有不同意见的,欢迎评论区留言。)

用户画像特征

如地理位置,设备,性别,年龄,登录状态等连续或离散特征都被归一化为[0,1], 和watch vector以及search vector做concat

视频年龄

除了以上这些历史向量、人员基本信息的特征以外,Youtube还将视频年龄作为特征加入训练。

视频年龄=(训练窗口内的最近观看时间)-该视频的上传时间

  1. 加入这一特征的原因和处理手法,和推荐系统中常见的position-bias思路是一样的。上传越早的视频,更有机会成为受欢迎视频。我们在收集训练样本时,就已经加入这个bias了。在训练时,将这一信息考虑在内,否则由于时间偏移容易导致 “过拟合”。
  2. 在线上召回时,将所有候选视频的年龄都设置成0,对新老视频一视同仁,有利于召回那些虽然上传时间短,但是视频内容与用户更加匹配的新视频。对于完成推新
    的要求,这是一个非常好的办法。

该特征表示视频被上传之后的时间。我们知道,每一秒中,YouTube都有大量视频被上传,推荐这些最新视频对于YouTube来说是极其重要的。作者持续的观察到,用户更倾向于推荐那些尽管相关度不高但是是最新(fresh)的视频。推荐系统往往是利用用户过去的行为来预测未来,那么对于历史行为,推荐系统通常是能够学习到一种隐式的基准的。但是对于视频的流行度分布,往往是高度不稳定的。作者写道,在之前的处理上,训练所选择的时间窗口,是采用最近几周的用户平均观看似然率来进行推荐的。那么考虑到example age的现象,我们的推荐策略将example age作为一个特征拼接到DNN的输入向量。训练时,时间窗口越靠后,该值越接近于0或者为一个小负数。加入了example age特征后,模型效果和观测到的实际数据更加逼近,参见下图:

推荐系统之YouTube深度学习经典论文解读

样本和上下文选择

1、收集一些非推荐的视频观看。训练数据中收集所有的youtube观看视频(或者一些站外观看)而不是仅仅是推荐的结果是非常重要的。这样不但可以防止用户兴趣学习有偏(推荐系统给什么,看什么),而且可以试探到很多用户的兴趣。

2、固定每个用户训练样本量。这样做的好处是平等对待每个用户的损失影响,避免损失来自小部分活跃用户。

3、不对称的共同浏览(asymmetric co-watch)问题。用户在浏览视频往往是序列式的,具有先后关系。下图所示图(a)是hled-out方式,利用上下文信息预估中间的一个视频;相当于对用户未来看到的内容进行了信息泄漏。图(b)是predicting next watch的方式,是利用上文信息,预估下一次浏览的视频。这和我们实际阅读顺序是一致的。文中也提到图(b)的方式在线上A/B test中表现更佳。而实际上,传统的协同过滤类的算法,都是隐含的采用图(a)的held-out方式,忽略了不对称的浏览模式。

特征集以及深度的实验

添加特征以及DNN深度可以显著提升预测效果,但并非一直如此。第0层的输入向量全连接到softmax输出层,第0层以及输出层都是采用固定的256维度。中间的深度网络采用的是类似tower的结构。深度增加时,预测效果如下图:

推荐系统之YouTube深度学习经典论文解读

由上图可以看到,DNN深度到三层预测效果基本就稳定了。

离线训练模块

得到特征集之后直接concatenate喂给三层DNN(激活函数为relu),最后通过softmax输出概率, 这一阶段的目标是从资源库中找出几百个最相关的资源,推荐系统以往的做法是采用矩阵分解技术计算相关度,作者提到他们早期也使用过浅层神经网络对用户历史浏览的embedded进行训练,该算法可以视作是非线性的矩阵分解技术。作者将推荐任务转化为一个超级多分类问题,也即在时刻t,用户U在场景C的观看Wt为从视频库V预测为视频i的类别,其中每一个视频i可以视作为一个类别,其分类模型如下式所示:

推荐系统之YouTube深度学习经典论文解读

其中u是用户和场景信息的高维embedding, vj表示候选视频的embedding。Embedding可以简单的理解为将一个稀疏实体(user,vedio)到RN空间内的密集向量的映射。DNN的任务是基于用户的历史及场景,学习一个用户向量u的映射函数(embedding),通过一个softmax分类器,u能够有效的从视频语料库中识别视频的类别(也就是推荐的结果)。softmax层的输出是预测的视频分类结果。也就是上面公式用户观看视频j的概率。要注意,视频向量的embedding是通过类似word2vec的方式生成的,我们能拿到视频j的id,就能得到vj的向量。

在线serving模块

在线服务有严格的性能要求,必须在几十毫秒内返回结果。DNN输出用户向量u,u与视频库中的视频向量做内积并排序,得到TopN。该过程耗费时间巨大,作者采用了一种hashing算法进行加速。

排序模型

排序阶段视频候选只有几百量级,因此排序模型会引入更多特征进行精细的打分排序。排序阶段采用和召回阶段类似的网络结构,用logistics regresion对视频进行打分。不同的是,排序阶段采用观看时长作为学习目标而非点击率(想一想这是为什么?)

模型架构

推荐系统之YouTube深度学习经典论文解读

特征集

从模型架构来说,Ranking和召回类似,具体的特征如下:

(1) impression video ID embedding: 当前要计算的视频embedding

(2) watched video IDs average embedding: 用户观看过的最后N个视频embedding的average pooling

(3) language embedding: 用户搜索关键词的embedding和当前视频语言的embedding

(4) time since last watch: 自上次观看同channel视频的时间

(5) #previous impressions: 该视频已经被曝光给该用户的次数

特征中需要注意的点是:

1、同空间特征共享Embedding(video embedding、language embdding)

这么做主要还是减少内存占用,减少网络参数,加速训练。在vido embedding中直接截断低频video,目的应该还是节约内存,另外低频偶然性比较大,截断可以减低noise数据干扰。

2、连续特征归一化

神经网络模型对输入规模和分布非常敏感。文中采用累计积分的方式,将连续特征归一化到0到1之间,并且添加sqrt(x)等引入非线性。

3、历史交互的特征

上面特征集中的(4)、(5)都是表示用户与视频之间的历史交互,引入用户行为提高推荐准确性。

目标函数

以点击率作为目标,受标题,视频封面图等影响比较大,不能够完全表达用户喜好,而观看时长能够真实地捕获用户的兴趣,更重要的是观看时长更符合商业价值,因此youtube的预测期目标是观看时长。具体如何操作?训练集中包含正样本和负样本,正样本是用户点击并且观看的视频,负样本是曝光之后没有点击的视频。训练时采用Weighted logistics,并且对正负样本设置不同的权重,负样本设置单位权重,正样本用观看时长作为权重,在serving时,用指数函数作为激活函数计算期望观看时长。

为什么在train时使用Weighted logistics,在serving时使用指数损失衡量呢?在逻辑回归中odds是一个非常重要的概念:

推荐系统之YouTube深度学习经典论文解读

推荐系统之YouTube深度学习经典论文解读

推荐系统之YouTube深度学习经典论文解读

对于Weighted logistics,相当于对正样本进行过采样,odds就是下面形式:

推荐系统之YouTube深度学习经典论文解读

在视频场景中p一般很小,所以上面结果刚好是视频播放时长的期望。

推荐系统之YouTube深度学习经典论文解读

这样预测的正是视频的期望观看时长,预测的目标跟建模的期望保持一致,这是这篇paper型很巧妙的地方。

写在最后

这篇paper开启了工业界利用DNN做推荐系统上的先河。如何结合业务实际和用户场景,选择等价问题上为很多公司提供指导。工程性极强,几乎是近几年最经典的paper了,


分享到:


相關文章: