Deep Neural Networks for YouTube Recommendations
文中把整个推荐过程分成两个步骤:
•deep candidate generation model. 即召回部分
•deep ranking model. 即精排部分
文中指出YouTube推荐的三个主要挑战:
•Scale. YouTube推荐的数据规模大,一些适合处理小规模数据的推荐算法效果不好。
•Freshness. YouTube的语料库(corpus)是动态的,每一秒都有大量的视频被上传。推荐系统需要能够对新上传的内容作出反应,并且能够对用户最近采取的行动作出反应。能够在新内容与得到确认(well-established)的内容之间达到平衡,即探索与利用。
•Noise. 以用户的历史行为进行预测本身就有一定的困难,包括数据稀疏性以及一些不可观测的外在因素。我们获得的数据并不是关于用户满意度的ground truth, 而是内含了一定噪声的数据。
SYSTEM OVERVIEW
推荐系统的总体结构如上所示。系统有两部分的神经网络组成:candidate generation和ranking.
candidate generation network把用户的历史行为作为输入,并从语料库(corpus)中检索出一个子集(hundreds)。candidate generation network通过协同过滤(CF)进行粗略的筛选。
ranking部分为每个物品分配一个score, 然后根据score进行排序,将高的推送给用户。
在模型的构建过程中,使用一些离线指标(precision, recall, ranking liss, etc.)来引导模型更新的方向。然而,最终衡量算法或模型的效果,需要使用在线A/B测试。
CANDIDATE GENERATION
这一步的目标是把大量的corpus减少到hundreds规模的候选集,也就是召回过程。
模型结构如下。
需要注意的是,embedding的生成和模型参数是共同训练的。通过一个average pooling将一组向量整合成一个向量,输入到之后的模型部分中去。
人口统计学的特征也是非常重要的,能够提供一个先验,从而使得对于新用户的推荐也是合理的。
geographic region以及device之类的特征,也做了embedding,整合到长向量中。简单的binary特征和连续型特征,比如gender, logged-in state, age等可以直接输入到网络中,实数值的特征归一化到[0,1]。
example age是一个很特殊的特征。
在YouTube上每一秒都有很多videos被上传,对于这种最近被上传物品的推荐是很重要的。机器学习系统通常表现出对历史数据隐含的偏好,因为模型是从历史数据中进行学习的。为了解决这一问题,在训练阶段引入example age这一特征,指的是the age of the training example。在预测阶段,这个特征将会被设置为0(或者很小的负数)。文中并没有精确的定义example age,应该是把log日志距离当前的时间作为example age。比如24小时前的日志,example age就是24。
回到模型图,最上面分为training和serving两部分。在training阶段,使用softmax预测用户的next watch,输出在所有候选video上的概率分布。label的选择方式如下。
在serving阶段,使用了nearest neighbor search的方法,这是因为最近邻搜索计算量要小得多。最后一层relu输出的向量即为user vector,而video vector文中并没有具体描述,根据模型图推断,应该是最后一个relu和softmax层之间的权重矩阵output embedding matrix来获得的(通常在word2vec中用input embedding matrix)。
RANKING
在ranking阶段,对hundreds规模的候选集进行精排,确定要推荐给用户的物品。文中使用一个deep neural network使用logistic regression来为每个video的曝光分配一个值(其实就是做CTR)。然后对物品按score进行排序,并返回给用户。文中提到YouTube最终的ranking objective会基于线上A/B测试结果做一些调整,但总体上是一个关于每次曝光的期望观看时长的简单函数。并且指出如果完全根据CTR排序,会促进视频欺诈,也就是用户不会播放完整(原文用了clickbait一词,类似于标题党)。使用观看时长,可以更好的捕获用户的参与度。
对连续型特征做归一化,对离散型特征做embedding(如果不存在,文中提出用0向量代替)。
这里引入一个新的网络来做ranking是为了引入更多的特征,因为现在候选集的规模相对比较小了。
图中画出了一些具体特征:
•impression video ID:当前考虑的video的ID,之后接一个embedding。
•watched video IDs:用户观看过的video的ID,因为是一组ID,做完embedding后还要做average pooling。
•user language:用户的语言。
•video language:video的语言。
•time since last watch:距离上次观看的时间。
•# previous impressions:该视频已经曝光给该用户的次数。
一个特征输入x, x ^ 2, 根号x是为了给模型提供更多的表达力。
模型的目标是给定训练集(包括positive样本和negative样本,即video曝光后是否被点击)来预测期望的观看时间。正例表示用户观看该video的时间。这里使用了weighted logistic regression,损失函数用交叉熵。对于正例,会通过观看时间来进行加权;对于负例,使用单位权重。
在serving阶段,使用指数函数作为激活函数来预测期望的观看时间。
网友评论