这篇博客参考了2016年Google发表的paper《Deep Neural Networks for YouTube Recommendations》,主要讲述了Youtube如何根据用户历史行为观看记录而在线上使用的给用户推荐视频的系统结构,虽然论文有点老,但是里面很多东西还是很有启发意义的。
下面是整个系统的架构图:
整体来看整个系统像一个漏斗,和其他的推荐系统一样由两个主要部分组成:candidate generation 和 ranking,分别对应了粗排和精排的概念。那么在粗排阶段Youtube使用的模型如下所示:
首先要声明的是整个系统是离线的,其目的是针对每一个video和用户生成一个Embedding,然后在线上进行粗排召回的时候直接使用内积结果进行排序即可。可以看出整个离线模型和其他一般的推荐系统框架并没有什么不同,就是多层神经网络。但是需要注意的是,由于是在召回阶段,入模特征部分只包含了用户侧的特征,目的是生成一个用户的embedding形式,方便和视频库中的视频embedding计算相似度,然后找出TOP N作为粗排的结果。最后一层为了加快模型的训练速度并没有直接使用softmax进行训练而是使用了negative sample进行抽样。在特征工程方面加入了一个小trick:那就是加入age信息,即距离training 窗口最近的时间间隔,那么在预测的时候这个时间间隔就是0或者负值。
接下来就是ranking阶段用到的模型,总的来说和candidate generation架构是相似的,只不过多加入了一些额外的特征毕竟候选集已经被缩的足够小了。如下图所示:
除了candidate generation阶段用到的特征外,其中加入了一些更加精细的特征比方说用户上一次观看该视频的持续时间,同时还包括了当前预测的视频的一些特征,这样就能得到更加精细的结果。
从paper里,我们不难知道Youtube的最终预测目标是用户的观看时长,一般按照我们的直观感觉应该是一个回归问题,损失函数应该使用均方损失。但是我们看模型在serving和training阶段的损失函数和预测函数,不难发现在training 阶段,该模型使用的是被称之为“weighted logistic”即加权的逻辑回归,所加权的权重对于正样本来说就是用户点击观看的时长
T
i
T_i
Ti,对于负样本来说即推荐没有观看的权重就是1;而在预测阶段模型的输出竟然是
e
w
x
+
b
e^{wx+b}
ewx+b,感觉非常的神奇。我一开始也以为是paper写错了,后来在网上查了一些资料,才发现这里面竟然是大有玄机:
由于模型的最后一层可以看成是和逻辑回归相似的函数形式:
p
=
1
1
+
e
−
w
x
p=\frac{1}{1+e^{-wx}}
p=1+e−wx1,通过公式变换我们可以知道:
e
w
x
+
b
=
p
1
−
p
e^{wx+b}=\frac{p}{1-p}
ewx+b=1−pp,也就是说模型的预测输出的其实就是
p
1
−
p
\frac{p}{1-p}
1−pp。由于在训练的时候,对于正样本采用了加权的方式,正样本权重w的加入会让正样本发生的几率变成原来的w倍,即
e
w
x
+
b
=
w
p
1
−
w
p
e^{wx+b}=\frac{wp}{1-wp}
ewx+b=1−wpwp,由于在视频推荐场景中,用户打开一个视频的概率p往往是一个很小的值,因此上式可以继续简化为
e
w
x
+
b
=
w
p
1
−
w
p
≈
w
p
=
T
i
p
=
E
(
T
)
e^{wx+b}=\frac{wp}{1-wp} \approx wp=T_ip=E(T)
ewx+b=1−wpwp≈wp=Tip=E(T),即用户观看时长的期望。所以模型最终的输出值就是用户观看时长的期望,这和Youtube最终的优化目标是一致的。
其实整篇paper从模型结构上来讲感觉新颖性并不大,但是其中有一些工程上的处理细节还是很有借鉴意义的。