简介
- 论文《Deep Neural Networks for YouTube Recommendations》由2016年提出,模型主要由两部分组成:candidate generation model和ranking model。candidate generation model用于候选集的生成从几百万个视频中选取出与用户相关的几百个商品,ranking model对几百个商品进行打分,最后根据打分对候选视频进行排序。ranking model相比candidate generation model使用了更多的特征,并且使用了不同的训练目标;
- candidate generation model根据用户最近观看的视频,预测用户下一次观看视频,论文中将其当做一个多分类问题,最后一次使用softmax回归。ranking model对候选视频进行打分,使用的是weighted logistic目标函数,将期望用户观看时长最为优化目标,权重即为用户观看当前视频的时长。
- 最终,candidate generation model实时的预测得到user embedding【或者也可离线计算好,只是实时性差了】,并且离线将video embedding存入redis等数据库,通过LSH向量最近邻搜索算法得到用户最相关的视频列表。ranking model在serving阶段通过计算来对候选视频进行排序,通过后续的分析可知:这个值即为期望的用户观看时长,与Youtube推荐系统最终的优化目标一致。
candidate generation模型
- 使用的特征分别为:(1)embedded video watches 用户最近观看视频embedding求平均值;(2)embedded search tokens 用户最近搜索词向量求平均值;(3)geographic embedding 经纬度embedding向量;(4)example age 视频的产生时长;(5)用户性别;
Ranking模型
- 使用特征:(1)impression video ID 当前候选视频embedding;(2)watched video IDS 用户观看过的最后N个视频embedding求平均;(3)用户语言和 当前候选视频语言 embedding ;(4)time since last watch 该用户上次观看同频道视频的时间;(5)该视频已曝光给该用户的次数 #previous impressions
- 对特征做了平方、开方等处理,引入了特征的非线性,提升模型对特征的表达能力;
Youtube推荐系统十大工程问题:
参考:YouTube深度学习推荐系统的十大工程问题 https://zhuanlan.zhihu.com/p/52504407
1. 文中把推荐问题转换成多分类问题,在next watch的场景下,每一个备选video都会是一个分类,因此总共的分类有数百万之巨,这在使用softmax训练时无疑是低效的,这个问题Youtube是如何解决的?
- 参考:On Using Very Large Target Vocabulary for Neural Machine Translation https://arxiv.org/pdf/1412.2007.pdf 【sampled softmax优化softmax计算量】
- On word embeddings - Part 2: Approximating the Softmax https://ruder.io/word-embeddings-softmax/index.html#whichapproachtochoose 【如何优化softmax计算效率?】
- tensorflow给出的说明文档:https://www.tensorflow.org/extras/candidate_sampling.pdf
2. 在candidate generation model的serving过程中,Youtube为什么不直接采用训练时的model进行预测,而是采用了一种最近邻搜索的方法?
- 关于user vector和video vector计算问题:首先,user vector可以利用最后一个隐层的输出结果假设为,其中为用户数,为第三个隐层的输出维度;则用户向量为;
- 对于video vector,假设最后一个隐层与softmax层的权重为,则中的每一列即为每个video对应的向量;
- 线上使用时候,user embedding实时生成,video embedding离线训练好之后推到线上,使用类LSH方法进行匹配(比如使用现成工具faiss)
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向量代替?
- 为了降低计算复杂度,降低线上耗时;也可以使用hashbucket的方式进行代替,根据视频曝光频次对视频ID进行hash编码;
9. 针对某些特征,比如#previous impressions,为什么要进行开方和平方处理后,当作三个特征输入模型?
10. 为什么ranking model不采用经典的logistic regression当作输出层,而是采用了weighted logistic regression?
- 假设odds定义为:,正样本除以负样本概率,表示用户观看某个视频的概率,其出现的概率一般很低;
- 上式中,即为ranking模型serving阶段的计算的值,表示用户观看视频的时长;
参考资料
- Youtube深度学习推荐系统论文:Deep Neural Networks for YouTube Recommendations https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf
- 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文 https://zhuanlan.zhihu.com/p/52169807
- YouTube深度学习推荐系统的十大工程问题 https://zhuanlan.zhihu.com/p/52504407
- 揭开YouTube深度推荐系统模型Serving之谜 https://zhuanlan.zhihu.com/p/61827629
On Using Very Large Target Vocabulary for Neural Machine Translation https://arxiv.org/pdf/1412.2007.pdf 【sampled softmax优化softmax计算量】 - On word embeddings - Part 2: Approximating the Softmax https://ruder.io/word-embeddings-softmax/index.html#whichapproachtochoose 【如何优化softmax计算效率?】
- tensorflow给出的softmax计算优化说明文档:https://www.tensorflow.org/extras/candidate_sampling.pdf
网友评论