论文笔记-Deep Neural Networks for YouTube Recommendations
从各方资料总结了一下大体思路,论文中很多细节还有待细读。
1.引言
youtube视频推荐的三大挑战:
(1)规模大:数以亿计
(2)新鲜度:每秒就有很多新视频上传,要考虑用户的实时行为和新视频的推荐,平衡好新视频和好视频。(exploration and exploitation)
(3)噪音:用户历史行为很稀疏并且有各种难以观测的隐性因子。而视频本身数据也是非结构化的。推荐算法需要有很好的鲁棒性。
2.系统概览
和我们熟知的召回、排序流程是一样的。这里候选集的生成除了使用dnn生成的之外,还可以引入其他方式得到的候选集,后面都称为召回。
召回和排序两个阶段分别用一个dnn来进行训练。在召回阶段,从数以亿计的视频中选出几百个候选视频,在排序阶段对几百个视频进行打分,排序后展现给用户。
3.召回
在李宏毅的课程中曾介绍过矩阵分解可以一个看做简单的nn,而矩阵分解在推荐上也是很早就有过应用的。这里DNN的使用可以看做是对mf的一种非线性泛化。
对召回过程的建模,文中将其看做是一个超大规模的多分类问题。每一个视频就是一个类别。在给定用户U和上下文C的条件下,预测在时间t下观看的视频类别为 i,视频库记为V
其中对V中的每个视频i,被embedding为一个 vj 的向量,而 user与context的pair被 embedding为向量 u。所以最后就成了多分类的softmax问题。
在这里,embedding是说对离散的变量mapping为一个稠密的向量。
对每个视频的embedding,是将视频的文本放入Embedding工具(例如Word2Vec,但TensorFlow自带)得到。而用户的embedding,则是通过训练而来。
DNN的目标就是学习输入的 embedding 向量u,使得这个u在通过softmax分类器后能够对视频做出准确预测。其中u可以看做是用户的历史行为和上下文的函数。
召回网络结构:
主要特征处理:
(1)用户浏览过的视频,每个做embedding后求平均
(2)用户的搜索query,每个token做embedding后求平均
(3)用户画像特征:如地理位置,设备,性别,年龄,登录状态等连续或离散特征都被归一化为[0,1], 和watch vector以及search vector做拼接(concat)
(4)example age: 视频上传后的时间
样本和上下文的选择:
(1)不仅使用推荐场景的展示、点击日志,也使用其他非推荐场景的数据,快速捕捉用户的兴趣。
(2)对每个用户使用固定的样本数量,这样对每个用户是公平的,防止活跃用户主导了损失函数。
(3)反直觉的,去掉序列信息,只是对每次的token embeding,避免最后一次搜索主导了推荐内容。
(4)不对称的共同浏览问题 asymmetric co-watch probabilities ,指出用户观看视频时,遵循的是一种非对称的共同看过模式,在初始的观看序列中,范围会比较广泛,在后期的观看中,范围会逐渐集中。而大部分协同过滤算法,在推荐时往往利用的是用户的全量观看历史。所以,作者的改进在于从用户的观看历史序列中,只截取held-out watch之前的观看序列
在线请求时,通过上述DNN训练得到用户&上下文embedding的向量u,然后与视频库的所有vj进行内积运算,检索出内积值最大的几百个推荐候选列表。这里需要与所有视频库的视频向量做内积,时间花费太大,文中采用了一种hash的快速算法。
4.排序
排序的DNN框架和召回类似,输入的时候加入了更多的特征。
对类别类特征,做embedding,比如视频Id类特征。在基数很高的情况下,可以只对点击的topN的item做embedding,其余的直接embedding为0。而对于像“过去点击的视频”这种multivalent特征,与召回阶段的处理相同,进行加权平均即可。另外一个值得注意的是,同维度不同feature采用的相同ID的embedding是共享的(比如“过去浏览的视频id” “seed视频id”),这样可以大大加速训练,但显然输入层仍要分别填充。(这句话不太懂)
NN对scale比较敏感,对连续类特征,文中使用了一个积分的归一化方法。一般而言除了树模型外其他方法对scale都是比较敏感的。
不同与通常的CTR预估,这里ranking任务利用用户期望观看时长来进行建模。有点击的为正样本,有PV无点击的为负样本,正样本需要根据观看时长进行加权,负样本权重则为1。训练阶段网络最后一层用的是加权的逻辑回归。训练得到回归的参数后,利用
参考:
https://zhuanlan.zhihu.com/p/25343518
http://www.jianshu.com/p/19ef129fdde2
http://blog.csdn.net/xiongjiezk/article/details/73445835