【下】YouTube 深度学习推荐系统的十大工程问题
由于这篇文章主要引见了 YouTube 深度学习系统论文中的十个工程问题,为了便当停止问题定位,我们还是简单引见一下背景学问,简单回忆一下 Deep Neural Networks for YouTube Recommendations 中引见的 YouTube 深度学习引荐系统的框架。
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 的近似,圆满。
十个问题全部答完,希望对大家有协助。其真实上一篇文章抛出这十个问题的时分,曾经有诸位大神做出了很好的答复,感激。最后增加一个考虑环节,大家能够讨论一下下面的问题:
- 本论文中,用于 candidate generation 网络 serving 局部的 user embedding vector 和 video embedding vector 是怎样生成的?
- Example age 这个 feature 的定义到底是什么?
- 除了用 0 向量 embedding 替代长尾内容,有没有其他好的办法?
由于这篇文章主要引见了 YouTube 深度学习系统论文中的十个工程问题,为了便当停止问题定位,我们还是简单引见一下背景学问,简单回忆一下 Deep Neural Networks for YouTube Recommendations 中引见的 YouTube 深度学习引荐系统的框架。
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 的近似,圆满。
十个问题全部答完,希望对大家有协助。其真实上一篇文章抛出这十个问题的时分,曾经有诸位大神做出了很好的答复,感激。最后增加一个考虑环节,大家能够讨论一下下面的问题:
- 本论文中,用于 candidate generation 网络 serving 局部的 user embedding vector 和 video embedding vector 是怎样生成的?
- Example age 这个 feature 的定义到底是什么?
- 除了用 0 向量 embedding 替代长尾内容,有没有其他好的办法?
时间:2018-12-28 22:53 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
- [机器学习]堪比当年的LSTM,Transformer引燃机器学习圈:它是
- [机器学习]论机器学习领域的内卷:不读PhD,我配不配找工
- [机器学习]Attention!当推荐系统遇见注意力机制
- [机器学习]机器学习基础图表:概念、原理、历史、趋势和算法
- [机器学习]分析了 600 多种烘焙配方,机器学习开发出新品
- [机器学习]2021年的机器学习生命周期
- [机器学习]物联网和机器学习促进企业业务发展的5种方式
- [机器学习]机器学习中分类任务的常用评估指标和Python代码实现
- [机器学习]机器学习和深度学习的区别是什么?
- [机器学习]堪比当年的LSTM,Transformer引燃机器学习圈:它是
相关推荐:
网友评论: