这篇文章主要介绍了 YouTube 深度学习系统论文中的十个工程问题,为了方便进行问题定位,我们还是简单介绍一下背景知识,简单回顾一下 Deep Neural Networks for YouTube Recommendations 中介绍的 YouTube 深度学习推荐系统的框架。

    关注公众号“智能推荐系统”,并回复“1215”,可下载论文全文。

YouTube推荐系统架构

简单讲,YouTube 的同学们构建了两级推荐结构从百万级别的视频候选集中进行视频推荐,第一级 candidate generation model 负责“初筛”,从百万量级的视频库中筛选出几百个候选视频,第二级 ranking model 负责“精排”,引入更多的 feature 对几百个候选视频进行排序。

不管是 candidate generation model 还是 ranking model,在架构上都是 DNN 的基本结构,不同的是输入特征和优化目标不同。但正如我在上一篇文章中讲的,如果你仅读懂了 YouTube 的模型架构,至多获得了 30% 的价值,剩下 70% 的价值就在于下面的十大工程问题。废话不多说,我们进入问题的解答。

1. 文中把推荐问题转换成多分类问题,在预测 next watch 的场景下,每一个备选 video 都会是一个分类,因此总共的分类有数百万之巨,这在使用 softmax 训练时无疑是低效的,这个问题 YouTube 是如何解决的?

这个问题原文的回答是这样的:

We rely on a technique to sample negative classes from the background distribution ("candidate sampling") and then correct for this sampling via importance weighting.

简单说就是进行了负采样(negative sampling)并用 importance weighting 的方法对采样进行 calibration。文中同样介绍了一种替代方法,hierarchical softmax,但并没有取得更好的效果。当然关于采样的具体技术细节以及优劣可能再开一篇文章都讲不完,感兴趣的同学可以参考 TensorFlow 中的介绍(https://www.tensorflow.org/extras/candidate_sampling.pdf)以及NLP领域的经典论文 http://www.aclweb.org/anthology/P15-1001

也欢迎有相关经验的同学在评论中给出简明的回答。

2. 在 candidate generation model 的 serving 过程中,YouTube 为什么不直接采用训练时的 model 进行预测,而是采用了一种最近邻搜索的方法?

这个问题的答案是一个经典的工程和学术做 trade-off 的结果,在 model serving 过程中对几百万个候选集逐一跑一遍模型的时间开销显然太大了,因此在通过 candidate generation model 得到 user 和 video 的 embedding 之后,通过最近邻搜索的方法的效率高很多。我们甚至不用把任何 model inference 的过程搬上服务器,只需要把 user embedding 和 video embedding 存到 redis 或者内存中就好了。

但这里我估计又要求助场外观众了,在原文中并没有介绍得到 user embedding 和 video embedding 的具体过程,只是在架构图中从 softmax 朝 model serving module 那画了个箭头(如下图红圈内的部分),到底这个 user vector 和 video vector 是怎么生成的?有经验的同学可以在评论中介绍一下。

Candidate Generation Model, video vector是如何生成的?

3. Youtube 的用户对新视频有偏好,那么在模型构建的过程中如何引入这个 feature?

为了拟合用户对 fresh content 的 bias,模型引入了“Example Age”这个 feature,文中其实并没有精确的定义什么是 example age。按照文章的说法猜测的话,会直接把 sample log 距离当前的时间作为 example age。比如 24 小时前的日志,这个 example age 就是 24。在做模型 serving 的时候,不管使用哪个 video,会直接把这个 feature 设成 0。大家可以仔细想一下这个做法的细节和动机,非常有意思。

当然我最初的理解是训练中会把 Days since Upload 作为 example age,比如虽然是 24 小时前的 log,但是这个 video 已经上传了 90 小时了,那这个 feature value 就是 90。那么在做 inference 的时候,这个 feature 就不会是 0,而是当前时间每个 video 的上传时间了。

我不能 100% 确定文章中描述的是哪种做法,大概率是第一种。还请大家踊跃讨论。

文章也验证了,example age 这个 feature 能够很好的把视频的 freshness 的程度对 popularity 的影响引入模型中。

从上图中我们也可以看到,在引入“Example Age”这个 feature 后,模型的预测效力更接近经验分布;而不引入 Example Age 的蓝线,模型在所有时间节点上的预测趋近于平均,这显然是不符合客观实际的。

4. 在对训练集的预处理过程中,YouTube 没有采用原始的用户日志,而是对每个用户提取等数量的训练样本,这是为什么?

原文的解答是这样的:

Another key insight that improved live metrics was to generate a xed number of training examples per user, e ectively weighting our users equally in the loss function. This prevented a small cohort of highly active users from dominating the loss.

理由很简单,这是为了减少高度活跃用户对于 loss 的过度影响。

5. YouTube 为什么不采取类似 RNN 的 Sequence model,而是完全摒弃了用户观看历史的时序特征,把用户最近的浏览历史等同看待,这不会损失有效信息吗?

这个原因应该是 YouTube 工程师的“经验之谈”,如果过多考虑时序的影响,用户的推荐结果将过多受最近观看或搜索的一个视频的影响。YouTube 给出一个例子,如果用户刚搜索过“tayer swift”,你就把用户主页的推荐结果大部分变成 tayer swift 有关的视频,这其实是非常差的体验。为了综合考虑之前多次搜索和观看的信息,YouTube 丢掉了时序信息,将用户近期的历史纪录等同看待。

但 RNN 到底适不适合 next watch 这一场景,其实还有待商榷,@严林 大神在上篇文章的评论中已经提到,YouTube 已经上线了以 RNN 为基础的推荐模型, 参考论文如下:https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46488.pdf

看来时隔两年,YouTube 对于时序信息以及 RNN 模型有了更多的掌握和利用。

6. 在处理测试集的时候,YouTube 为什么不采用经典的随机留一法(random holdout),而是一定要把用户最近的一次观看行为作为测试集?

这个问题比较好回答,只留最后一次观看行为做测试集主要是为了避免引入 future information,产生与事实不符的数据穿越。

7. 在确定优化目标的时候,YouTube 为什么不采用经典的 CTR,或者播放率(Play Rate),而是采用了每次曝光预期播放时间(expected watch time per impression)作为优化目标?

这个问题从模型角度出发,是因为 watch time 更能反映用户的真实兴趣,从商业模型角度出发,因为 watch time 越长,YouTube 获得的广告收益越多。而且增加用户的 watch time 也更符合一个视频网站的长期利益和用户粘性。

这个问题看似很小,实则非常重要,Objective 的设定应该是一个算法模型的根本性问题,而且是算法模型部门跟其他部门接口性的工作,从这个角度说,YouTube 的推荐模型符合其根本的商业模型,这是非常好的经验。

我之前在领导一个算法小组的时候,要花大量时间与 Business 部门沟通 Objective 的设定问题,这是路线方针的问题,方向错了是要让组员们很多努力打水漂的,一定要慎之又慎。

8. 在进行 video embedding 的时候,为什么要直接把大量长尾的 video 直接用 0 向量代替?

这又是一次工程和算法的 trade-off,把大量长尾的 video 截断掉,主要还是为了节省 online serving 中宝贵的内存资源。当然从模型角度讲,低频 video 的 embedding 的准确性不佳是另一个“截断掉也不那么可惜”的理由。

当然,之前很多同学在评论中也提到简单用 0 向量代替并不是一个非常好的选择,那么有什么其他方法,大家可以思考一下。

9. 针对某些特征,比如 #previous impressions,为什么要进行开方和平方处理后,当作三个特征输入模型?

这是很简单有效的工程经验,引入了特征的非线性。从 YouTube 这篇文章的效果反馈来看,提升了其模型的离线准确度。

10. 为什么 ranking model 不采用经典的 logistic regression 当作输出层,而是采用了 weighted logistic regression?

因为在第 7 问中,我们已经知道模型采用了 expected watch time per impression 作为优化目标,所以如果简单使用 LR 就无法引入正样本的 watch time 信息。因此采用 weighted LR,将 watch time 作为正样本的 weight,在线上 serving 中使用 e(Wx+b) 做预测可以直接得到 expected watch time 的近似,完美。

十个问题全部答完,希望对大家有帮助。

「 更多干货,更多收获 」

【教程】推荐系统系列教程之十四:经典模型融合方法

推荐算法不够精准?让知识图谱来帮忙

【干货】史上最全个性化推荐技术资料包(附下载链接)

【电子书分享】推荐系统实践-项亮.pdf

每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?

今日头条推荐系统原理

关注我们

智能推荐

个性化推荐技术与产品社区

长按并识别关注

一个「在看」,一段时光????

【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)相关推荐

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

    文 | 王喆 源 | https://zhuanlan.zhihu.com/p/52504407 这篇文章主要介绍了YouTube深度学习系统论文中的十个工程问题,为了方便进行问题定位,我们还是简单介 ...

  2. Youtube深度学习推荐系统

    这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度讲解一些计算广告.推荐系统相关的文章.选择文章必须满足一下三个条件: 一是工程导向的: 二是阿里.facebook.google等一线互联 ...

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

    作者简介,王喆,硅谷高级机器学习工程师. 本文转载自知乎专栏 https://zhuanlan.zhihu.com/p/52169807 这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度 ...

  4. 带你重读Youtube深度学习推荐系统论文,惊为神文

    来源:知乎专栏 作者:王喆 本文约5400字,建议阅读10+分钟. 本以为毫不起眼的地方,也藏着Youtube工程师宝贵的工程经验. 这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度讲解 ...

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

    雷锋网 AI 科技评论按,本文作者王喆,本文首发于知乎专栏王喆的机器学习笔记,雷锋网 AI 科技评论获得作者授权转载. 这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度讲解一些计算广告. ...

  6. AI专家Marcus质疑深度学习:面临十大挑战(含参考文献)

    夏乙 若朴 安妮 编译整理 量子位 出品 | 公众号 QbitAI 多年坚持为深度学习泼冷水的纽约大学心理学教授马库斯老师(Gary Marcus),今天终于写了一篇长长的文章,将自己的对深度学习的看 ...

  7. 【华为推荐论文】如何学习未知样本?基于反事实学习的推荐系统技术研究(附论文下载链接)...

    华为诺亚方舟实验室发布了最新研究成果<Improving Ad Click Prediction by Considering Non-displayed Events>,提出了一种基于反 ...

  8. 盘点2016年人工智能与深度学习领域的十大收购

    自从谷歌2014年花费4亿英镑收购了当时默默无闻的剑桥大学初创团队Deep Mind后,科技公司就一直热衷于收购AI科技公司. 企业软件制造商希望通过收购AI科技公司来获得什么呢?他们无非是想使其产品 ...

  9. 深度学习推荐系统之“输入”特征工程

    1. 前言 从计算机视觉转换赛道到推荐系统,最令我迷惑的不是具体的网络模型,而是大多数论文中往往一笔带过的"输入层".就像一个厨师,知道菜谱,但是不会处理食材.最近一段时间通过查阅 ...

最新文章

  1. Web技术栈中不可或缺的Linux技术
  2. 代码荣辱观-以运用风格为荣,以随意编码为耻
  3. 页面加载完毕相关信息淡入效果
  4. Asp.net2.0页面的生命周期(续)
  5. 虚拟机找不到共享文件夹
  6. impacket安装 python_Impacket网络协议工具包介绍
  7. zabbix proxy mysql_zabbix proxy 配置
  8. linux命令wget下载jdk(完整解决诸多异常)
  9. Python怎么去写单元测试用例去测试hello world呢
  10. 服务器 'server_1' 上的 MSDTC 不可用
  11. 如何在 Mac 中对文档进行签名?
  12. Multilingual预训练的那些套路
  13. php trait 冲突的解决 insteadof
  14. 谈谈如何解决win7/win10/win11右键转圈卡顿问题
  15. 【EDM邮件营销】独立站卖家如何通过用户标签提高EDM邮件打开率
  16. iSpiik产品说:谈谈小程序直播-数据背后几个思考
  17. 一个关于意念(脑电波)的想法
  18. latex 各级标题公式
  19. Python绘制地理图--Cartopy基础
  20. 企业邮箱登录入口有哪些?公司邮箱账号怎么登陆更方便

热门文章

  1. 路印zkRollup AMM将在月底启动流动性挖矿
  2. SAP License:SAP中的日期
  3. SAP License:CO-第四夜-产品成本核算
  4. 赛锐信息:SAP订单统一管理系统
  5. 数字城市杭州执法管理平台测试计划【软件测试与工程】
  6. 连接SQL Server数据库
  7. fiddler 针对单个接口打断点
  8. Web前端开发必备工具推荐
  9. 布同:pdf自定义分割(断章)
  10. .net常用面试核心技术点(持续更新中)