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

文 | 王喆

源 | https://zhuanlan.zhihu.com/p/52504407


这篇文章主要介绍了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的近似,完美。

十个问题全部答完,希望对大家有帮助。其实在上一篇文章抛出这十个问题的时候,已经有诸位大神做出了很好的回答,感谢 @做最闲的咸鱼 @严林 @吴海波 。最后增加一个思考环节,大家可以讨论一下下面的问题:

  1. 本论文中,用于 candidate generation网络serving部分的user embedding vector和video embedding vector是怎么生成的?

  2. Example age这个feature的定义到底是什么?

  3. 除了用0向量embedding替代长尾内容,有没有其他好的方法?

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

有顶会审稿人、大厂研究员、知乎大V和妹纸

等你来撩哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPC框架的实现原理,及RPC架构组件详解

RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一个应…

论文浅尝 | 时序与因果关系联合推理

论文笔记整理:李昊轩,南京大学硕士,研究方向为知识图谱、自然语言处理。来源:ACL2018链接:https://www.aclweb.org/anthology/P18-1212动机理解事件之间的时间和因果关系是一项基本的自然语言理解任务。由于原因一定先…

LeetCode 64. 最小路径和(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例:输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释…

加快读博失败的10种方法

文 | 德先生源 | 知乎博士难毕,全球皆如此。差不多每个学校都有1/3到一半的博士研究生拿不到学位。读博失败不仅本人难受,导师也不好过。为了帮助自己的博士生们顺利毕业,犹他大学的Matt Might教授(计算机科学家,生物学…

要成为一个 Java 架构师得学习哪些知识以及方法?

“ 最近在架构师线下实战中,被问到最多的一个问题,就是要成为一个 Java 架构师得学习哪些知识,以及怎样才能做到架构师这个级别? 今天主要澄清几个关于架构师的几大误区。 架构师并不是人人都能做到的,如果你能走到…

论文浅尝 | 一种可解释的语义匹配复值网络

笔记整理:耿玉霞,浙江大学直博生。研究方向:知识图谱,零样本学习,自然语言处理等。论文链接:https://arxiv.org/pdf/1904.05298.pdf本文是发表在 NAACL 2019 上的最佳可解释性论文。受量子力学中数学模型的…

指针都没搞懂,还能算得上 C++ 老司机?

在工业界,有这样一个规律:“ 但凡能用其他语言的都不会用C,只能用C的必然用C。”但是,C的学习和项目开发都比较困难。一个有经验的老手也经常搞出野指针,内存泄露等bug,包括我自己在学C的时候也非常痛苦。所…

DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用+距离运算

在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的语义相似度、feeds场景下Doc和Doc的语义相似度、机器翻译场景下A句子和B句子的语义相似度等等。本文通过介绍DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用&#xff…

如何才能真正的提高自己,真正成为一名出色的架构师?

“ 有读者朋友给我留言,如何才能真正的提高自己,成为一名架构师,有学习各种语言的小伙伴。 这里我结合我的学习方法论,再结合我自己的经验,分享部分心得,希望对你有所帮助。 欢迎小伙伴留言给到你现在遇…

论文浅尝 | 从知识图谱流中学习时序规则

论文笔记整理:汪寒,浙江大学硕士,研究方向为知识图谱、自然语言处理。链接:http://ceur-ws.org/Vol-2350/paper15.pdf动机知识图谱是现在十分流行的数据管理方式,在最近几年应用广泛。但目前的基于KG的规则挖掘主要都是…

如何选择数据结构和算法(转)

文章目录1. 时间、空间复杂度 ! 性能2. 抛开数据规模谈数据结构和算法都是“耍流氓”3. 结合数据特征和访问方式来选择数据结构4. 区别对待IO密集、内存密集和计算密集5. 善用语言提供的类,避免重复造轮子6. 千万不要漫无目的地过度优化熟知每种数据结构和算法的功能…

Linux服务器安装cuda,cudnn,显卡驱动和pytorch超详细流程

原文链接:https://blog.csdn.net/kingfoulin/article/details/98872965 基本的环境 首先了解自己服务器的操作系统内核版本等信息: 查看自己操作系统的版本信息:cat /etc/issue或者是 cat /etc/lsb-release等命令 查看服务器显卡信息&…

自训练:超越预训练,展现强大互补特性的上分新范式!

文 | 香侬科技编 | 兔子酱背景预训练(Pre-training)模型自BERT问世以来就一发不可收拾,目前已经在自然语言理解和生成两个方面取得了突破性成就。但是,作为它的一个“兄弟”,自训练(Self-training&#xff…

论文浅尝 | 通过文本到文本神经问题生成的机器理解

论文笔记整理:程茜雅,东南大学硕士,研究方向:自然语言处理,知识图谱。Citation: Yuan X, WangT, Gulcehre C, et al. Machine comprehension by text-to-text neural question generation[J]. arXiv preprint arXiv:17…

安装paddlepaddle-GPU 报libcudnn.so和libcublas.so找不到的解决方案

第一步,查找两个的文件位置 第二步: 由于cudcun实在cuda10.0的基础上安装的,解压cudcnn的tar包之后会出现一个cuda-10.0文件夹,而不是cuda. 第三步: 在一步出现的位置找到了和libcublas.so.10对其进行了重命名就好了…

LeetCode 221. 最大正方形(DP)

文章目录1. 题目信息2. 解题1. 题目信息 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximal-squ…

anaconda配置虚拟环境

一般是在服务器上,创建一个自己的虚拟环境,自己来用,不影响别人的环境,也不用被别人安装环境影响。 打开终端 1.查看当前存在哪些虚拟环境 conda env list 或 conda info -e 2.创建名字为 lly_env 的虚拟环境(名字自己取一个&am…

论文浅尝 | 知识图谱推理中表示学习和规则挖掘的迭代学习方法

作者:张文,浙江大学在读博士,研究方向为知识图谱的表示学习,推理和可解释。本文是我们与苏黎世大学以及阿里巴巴合作的工作,发表于WWW2019,这篇工作将知识图谱推理的两种典型方法,即表示学习和规…

21个深度学习调参的实用技巧

文 | AI_study源 | AI算法与图像处理导读在学习人工智能的时候,不管是机器学习还是深度学习都需要经历一个调参的过程,参数的好坏直接影响着模型效果的好坏。本文总结了在深度学习中21个实用的调参的技巧,快来学习吧!这篇文章在国…

从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!

如何从程序员进阶到架构师?今天完整的把我积累的经验和技能分享给大家! 作者:陈睿|优知学院创始人 数据结构算法程序 数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及其之间的关系有…