Youtube2016的推荐算法_经典

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/smartcat2010/article/details/102615169

重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文

百万候选集==>召回阶段==>几百候选集==>Ranking阶段==>排在最前面的十几个;

召回阶段:

输入:用户行为过的video集合 + 用户行为过的搜索词集合 + 用户属性

输出:百万级的类别(每个video是一类)

输入的video和搜索词的embedding,是用word2vec预训练得到的;(video要不要和最后一层的w[i]进行权值共享更新?)

Ranking阶段:

输入:待评分的video, 用户画像,context;

输出:一个sigmoid后的p, 0~1的概率(分数)

具体输入特征:

  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视频的时间 (刚看过的channel有可能很快就再次看)
  5. #previous impressions: 该视频已经被曝光给该用户的次数 (增加新鲜度,不能老推已经推过的)

YouTube深度学习推荐系统的十大工程问题

1. 召回阶段,训练时,最后面用的是negative sampling来做的;

2. 召回阶段,最后一层的输出u,点乘权重向量w[i],得到z[i],百万个z[i]过softmax得到p[i];预测阶段,就要要找最大的一百个z[i],所以把用户特征Forward得到u向量之后,找能点成后得到最大的z的w们,也就是把w[i]视为了video[i]的embedding! 近似等价于从百万个w[i]中,找到和u最相似的K个, 也就是KNN (借助faiss等最近邻工具)

3. 召回阶段,为了拟合用户对fresh content的bias,模型引入了“Example Age”这个feature

4. 训练集构成:对每个用户提取等数量个样本;目的是减少活跃用户对模型的影响;

5. 没有使用RNN对用户历史观看记录做建模:如果用RNN,需要避免最后一个item影响过大;(youtube已经上线了以RNN为基础的推荐模型,有论文)

6. 测试集,没有采用经典的随机留一法(random holdout),而是一定要把用户最近的一次观看行为作为测试集:只留最后一次观看行为做测试集主要是为了避免引入future information,产生与事实不符的数据穿越。

7. Ranking阶段,用观看时长做权重,进行了带权LR,好处:watch time更能反应用户的真实兴趣,从商业模型角度出发,因为watch time越长,YouTube获得的广告收益越多。而且增加用户的watch time也更符合一个视频网站的长期利益和用户粘性。

8、在进行video embedding的时候,为什么要直接把大量长尾的video直接用0向量代替:节省内存。稀疏video就是加上也不准!word2vec里一般用UNK这一个embedding来统一表示。

9. 针对某些特征,比如#previous impressions,为什么要进行开方和平方处理后,当作三个特征输入模型:引入了特征的非线性;

10. 使用带权LR;

猜你喜欢

转载自blog.csdn.net/smartcat2010/article/details/102615169
今日推荐