Youtube的推荐论文《Deep Neural Networks for YouTube Recommendations》
https://zhuanlan.zhihu.com/p/52169807
第一层是Candidate Generation Model完成候选视频的快速筛选,这一步候选视频集合由百万降低到了百的量级。
最底层的输入是用户观看过的video的embedding向量,以及搜索词的embedding向量。先用word2vec方法对video和search token做了embedding之后再作为输入的,这也是做embedding的“基本操作”,加一个embedding层跟上面的DNN一起训练。。。。。
特征向量里面还包括了用户的地理位置的embedding,年龄,性别等。然后把所有这些特征concatenate起来,喂给上层的ReLU神经网络。
三层神经网络过后,我们看到了softmax函数。这里Youtube的同学们把这个问题看作为用户推荐next watch的问题,所以输出应该是一个在所有candidate video上的概率分布,自然是一个多分类问题。
架构图的左上角,为什么在online serving的时候不直接用这套网络进行预测而要使用nearest neighbor search 的方法?
多分类问题中,Youtube的candidate video有百万之巨,意味着有几百万个分类,这必然会影响训练效果和速度,如何改进?
第二层是用Ranking Model完成几百个候选视频的精排,和上边粗排唯一的区别就是特征工程。
引入另一套DNN作为ranking model的目的就是引入更多描述视频、用户以及二者之间关系的特征,达到对候选视频集合准确排序的目的。
从左至右的5个特征依次是:
(1)impression video ID embedding: 当前要计算的video的embedding
(2)watched video IDs average embedding: 用户观看过的最后N个视频embedding的average pooling
(3)language embedding: 用户语言的embedding和当前视频语言的embedding
(4)time since last watch: 自上次观看同channel视频的时间。反应用户看同类视频的间隔时间。从用户的角度想一想,假如我们刚看过“DOTA经典回顾”这个channel的视频,我们很大概率是会继续看这个channel的视频的,那么该特征就很好的捕捉到了这一用户行为。
(5)#previous impressions: 该视频已经被曝光给该用户的次数。一定程度上引入了exploration的思想,避免同一个视频持续对同一用户进行无效曝光。尽量增加用户没看过的新视频的曝光可能性。
推荐系统中的注意力机制——阿里深度兴趣网络(DIN)https://zhuanlan.zhihu.com/p/51623339,,,读懂了DIN的attention机制,你就抓住了其论文70%的价值,但这篇文章,如果你只读懂了Youtube的推荐系统架构,你只抓住了30%的价值。那么剩下的70%的价值在哪里呢?
下面我列出十个文中解决的非常有价值的问题:
(1)文中把推荐问题转换成多分类问题,在next watch的场景下,每一个备选video都会是一个分类,因此总共的分类有数百万之巨,这在使用softmax训练时无疑是低效的,这个问题Youtube是如何解决的?
(2)在candidate generation model的serving过程中,Youtube为什么不直接采用训练时的model进行预测,而是采用了一种最近邻搜索的方法?
(3)Youtube的用户对新视频有偏好,那么在模型构建的过程中如何引入这个feature?
(4)在对训练集的预处理过程中,Youtube没有采用原始的用户日志,而是对每个用户提取等数量的训练样本,这是为什么?
(5)Youtube为什么不采取类似RNN的Sequence model,而是完全摒弃了用户观看历史的时序特征,把用户最近的浏览历史等同看待,这不会损失有效信息吗?
(6)在处理测试集的时候,Youtube为什么不采用经典的随机留一法(random holdout),而是一定要把用户最近的一次观看行为作为测试集?
(7)在确定优化目标的时候,Youtube为什么不采用经典的CTR,或者播放率(Play Rate),而是采用了每次曝光预期播放时间(expected watch time per impression)作为优化目标?
(8)在进行video embedding的时候,为什么要直接把大量长尾的video直接用0向量代替?
(9)针对某些特征,比如#previous impressions,为什么要进行开方和平方处理后,当作三个特征输入模型?
(10)为什么ranking model不采用经典的logistic regression当作输出层,而是采用了weighted logistic regression?