深度学习推荐系统实战_37_28_业界经典YouTube深度学习推荐系统的经典架构长什么样
你好,我是王哲。
今天我们一起来开启前沿拓展篇的学习。
如果你是跟着课程安排学到了这里,我可以很自信的说,你几乎已经掌握了推荐系统的全部重点知识。
从数据特征的处理模型构建到模型的评估和上线,再到推荐服务器的实现。
你的知识广度已经覆盖了推荐系统领域的全部要点,但要想成为一名合格的推荐工程师,我们还需要做两件事情,一件是追踪前沿,另一件是融会贯通。
因此在这一篇里啊,我会通过详细讲解几个一线大厂的推荐系统解决方案,来帮助你追踪业界的热点创新点。
它们既包括一些推荐模型的业界实现,比如youtube和ptrrest.推荐模型也包括推荐系统的工程落地方案。
比如flink ink的经典应用和美团对于强化学习的落地方案。
最后我还对算法工程师的所需能力做一个全面的总结。
今天我们先来学习youtube的深度学习推荐系统的经典架构。
那youtube的这套深度学习解决方案已经经典到可以成为一个业界标杆了。
这也是我在同国内外的同学、同事们交流讨论时,经常会提到的方案。
好了,话不多说,我们正式开始今天的学习吧。
那提起youtube,我想你肯定不会陌生。
作为全球最大的视频分享网站,youtube平台中几乎所有的视频都来自UGC,也就是用户的原创内容。
这样的内容产生方式有两个特点。
第一个是它的商业模式跟netflix,还有国内的腾讯视频、爱奇艺这样的媒体是不一样的。
那这些流媒体的大部分内容都是来自于采购或者自制的电影剧集这样的头部内容。
而youtube的内容则是由用户自己上传的,自制视频种类和风格都非常多,头部效应就没有那么明显。
第二个特点是由于youtube的视频基数非常大,用户就比较难以发现喜欢的内容。
那这样的内容特点啊,简直就是深度学习推荐系统最适合扎根的土壤了。
所以youtube也是最早落地深度学习的一线公司之一。
那youtube的深度学习推荐系统到底长什么样子呢?我们一起来看一看文稿中给出的推荐系统架构示意图。
这是youtube在二零一六年发布的。
我们可以看到,为了对海量的视频进行快速准确的排序。
Youtube也采用了经典的召回层加排序层的推荐系统架构。
它的推荐过程可以分为两级,那第一级是用候选集生成模型来完成候选视频的快速筛选。
在这一步,候选集视频由百万降低到了几百量级,那这相当于经典推荐架构中的召回层。
第二集是用排序模型完成几百个候选视频的金牌。
这相当于经典架构中的排序层。
无论是候选集生成模型还是排序模型,youtube都采用了深度学习的解决方案。
下面就让我们来详细讲一讲这两个深度学习模型是怎么构建起来的。
首先我们来看用于视频召回的候选机生成模型,它的模型架构我也放在了文稿里,我们一起自下而上的好好看一看这个网络的结构。
最底层是它的输入层输入的特征,包括用户历史观看视频的ebelding向量以及搜索词的embedding向量。
对于这些embedding特征,youtube是利用了用户观看序列和搜索序列,采用了类似于item to wact预训练方式生成的。
当然我们也完全可以采用embedding跟模型在一起n to end训练的方式来训练模型。
那至于预训练,还有end to n这两种方式哪种好,那我们已经讨论过很多次了,你也可以自己再深入思考一下。
那除了视频和搜索词,embedding向量,特征向量中还包括了用户的地理位置。
Embedding年龄、性别等特征。
那这里我们需要注意的是,对于年龄这个特征,youtube不仅使用了原始的特征值,还把经过平方处理的特征值也作为一个新的特征输入模型。
那这个操作其实是为了挖掘特征的非线性的特性。
当然,这种对连续型特征的处理方式不仅限于平方,其他像是开方、lock指数这样的操作都可以用来挖掘特征的非线性特性。
而具体使用哪个需要我们根据实际的效果而定。
呃,确定好的特征跟我们之前实践过的深度学习模型一样。
这些特征会在concat层中连接起来,输入到上层的ratdl神经网络进行训练。
那三层的ratdl神经网络过后,youtube use使用了soft max函数作为输入层。
值得一提的是,这里的输入层不是要预测用户会不会点击这个视频,而是要预测用户会点击哪个视频。
这就跟我们之前实现过的深度推荐模型不一样了。
比如说youtube上有一百万个视频,因为输出层要预测用户会点击哪个视频,所以这里的soft max就有一百万个输出。
因此,这个候选集生成模型的最终输出就是一个在所有候选视频上的概率分布。
为什么要这么做呢?它其实是为了更好更快的进行线上服务。
这一点我们等会儿再讲。
总的来说,youtube推荐系统的候选集生成模型是一个标准的利用了embedding预训练特征的深度推荐模型。
它遵循我们之前实现的embedding MRP模型的架构,只是在最后的输出层有所区别。
好,那现在我们就详细说一说为什么候选集生成模型要使用视频ID这个标签来代替用户,会不会点击视频这个标签作为预测目标。
事实上,这跟候选集生成模型独特的线上服务方式紧密相关。
那细心的同学可能已经留意到,架构图左上角的模型服务方法与模型训练的方法是完全不同的。
在候选集生成模型的线上服务过程中,youtube并没有直接采用训练时的模型进行预测,而是采用了一种最近邻搜索的方法。
我们曾经在第十二讲上详细的讲过,基于embedding的最近邻搜索方法不记得的同学可以先去回顾一下。
那具体来说,在模型服务的过程中,由于网络结构比较复杂,如果我们对每次推荐请求都端到端的运行一遍,模型处理一遍候选集。
由于模型的参数数量巨大,整个推断的过程开销会非常大。
这此在通过候选机生成模型,得到用户和视频的embedding后,我们再通过embedding最近您搜索的方法就可以提高模型服务的效率了。
这样一来,我们甚至不用把模型推断的逻辑搬上服务器,只需要把用户embedding和视频embedding存到特征数据库就可以了。
再加上可以使用局部敏感哈希这类快速embedding查找的方法。
那这对于百万量级规模的候选机生成过程的效率提升将是巨大的那问题又来了,这里的用户embedding和视频embedding到底是从哪儿来的呢?这个问题的答案就是,为什么候选机输出模型要使用视频ID作为多分类输出的答案了。
我们再仔细看一下图二的架构图,那架构图中从soft max向模型服务模块画了一个箭头,用来表示视频embedding像样的生成过程。
由于最后的输入层是soft max,而这个soft max的参数本质上就是一个m乘以n维的矩阵。
其中m指的是最后一层红色的ralel层层的维度。
Mn指的是分类的总数,也就是youtube所有视频的总数。
N因此视频ebebeding就是这个m乘以NN矩阵的各列向量。
那这样embedding生成的方法,其实跟watto back中词向量的生成方法是相同的。
你也可以参考第六节课的内容来理解,它清楚了视频embedding的生成原理,用户embedding的生成就非常好理解了。
因为输入的特征全部是用户相关的特征,一个物品和场景特征都没有。
所以在使用某用户u的特征向量作为模型输入的时候,最后一层radul层的输出向量,就可以当做该用户u的embedding向量。
那在模型训练完成后,逐个输入所有用户的embedding向量。
到模型中,youtube就可以得到所有用户的embedding向量之后,就可以把他们预存到线上的特征数据库中了。
在预测某个用户的视频候选集的时候,我们要先从特征数据库中拿到这个用户的ebedding向量,再在视频embedding向量空间中利用局部敏感哈希等方法来搜索这个用户embedding向量的KK近林。
这样youtube就可以快速得到k个候选视频集合,这就是整个候选机生成模型的训练原理和服务过程。
到这里,我相信你也一定体会到了咱们前沿拓展篇案例分析的作用。
通过一个youtube候选集生成模型的原理分析,我们就已经把第六讲的embedding第十讲的特征、数据库、第十二讲的局部敏感哈希以及第十七讲的ebelling MIP模型都回顾了一遍。
如果你喜欢这种通过学习业界实践方案,把知识串联起来的方式,可以给我留言反馈。
我也会在之后的课程中多采用这样的方式。
好了。
那通过候选机生成模型,youtube已经得到了几百个候选视频的集合了。
下一步就是利用排序模型进行精排序。
我们再接着来看一看youtube深度学习排序模型的架构,我也把它放在了文稿中。
那第一眼看上去,你可能会认为排序模型的网络结构与候选机生成模型好像没有太大区别。
那在模型结构上确实是这样的,他们都遵循了embedding MLP的模型架构。
但是我们来看其中的细节,特别是输入层和输出层的部分,它们跟候选机生成模型还是有很大不同的这就是我们要关注的重点。
我们先看输入层和候选集生成模型,需要对几百万个候选视频进行粗筛。
相比排序模型只需对几百个候选视频进行排序,因此可以引入更多的特征进行金牌。
那具体来说,youtube的输入层从左到右依次引入了五个特征,第一个叫做impression video. Id embedding表示,当前候选视频的embedding.第二个是watch的video. Id average embedding表示,用户观看过的最后n个视频的embedding的平均值。
第三个是language embedding,也就是用户语言的embedding和当前候选视频语言的embedding.第四个是time since lot to watch.那表示用户上次观看同频道视频距今的时间。
最后一个是previous impressions表示,一个视频已经被曝光给这个用户的次数。
那这五个特征里,面前三个embedding特征的含义很好理解,我就不细说了。
第四和第五个特征。
因为很好的引入了youtube工程师对于用户行为的观察,所以我来重点解释一下。
那第四个特征time since last watch说的是用户观看同类视频的间隔时间。
那如果从用户的角度出发,假如某个用户刚看过dota金田比赛,回顾这个频道的视频,那他很大概率会继续看这个频道的其他视频。
这个特征就能够很好的捕捉到这个用户的行为。
那第五个特征,previous impressions说的是这个视频已经曝光给用户的次数。
我们试想,如果一个视频已经曝光给了用户,十次用户都没有点击,那我们就应该清楚用户对这个视频很可能不感兴趣。
所以previous impression这个特征的引入,就很好的捕捉到了用户这样的行为习惯,避免让同一个视频对同一个用户进行持续的无效曝光。
尽量增加用户看到新视频的可能性。
把这五类特征连接起来之后,需要再经过三层real网络进行充分的特征交叉。
然后就到了输出层。
呃,这里我们要重点注意排序模型的输出层与候选机生成模型还有不同不同,主要有两点,一是候选机生成模型选择了soft max作为其输出层,而排序模型选择了weighlolost st regretion作为模型的输出层。
二是候选机生成模型预测的是用户会点击哪个视频排序模型预测的是用户要不要点击当前视频。
那问题又来了,youtube为什么要这么做呢?其实,排序模型采用不同输出层的根本原因,在于youtube想要更精确的预测用户的观看时长。
因为观看时长才是youtube最看重的商业指标,而使用waited LR作为输出层,就可以实现这样的目标,这是怎么做到的呢?那在waited LR的训练中,我们需要为每一个样本设置一个权重,权重的大小,代表了这个样本的重要程度。
而为了能够预估观看时长,youtube把正样本的权重设置为了这个用户观看这个视频的时长,这时候再用waited LR进行训练,就可以让模型学到用户观看时长的信息了。
那这是因为观看时长比较长的样本会更加重要。
严格来说就是观看时长比较长的样本,会被模型预测为正样本的概率更高。
这个概率与观看时长成正比,这就是使用waited LR来学习观看时长信息的基本原理了。
最后我们再来聊一聊排序模型的模型服务方法。
那我们刚才讲过了,候选集成的模型是可以直接利用用户embedding和视频embedding进行快速。
最近您搜索的那排序模型还能这样做吗?这就不可以了。
原因还是有两点,一是因为我们的输入向量中包含了用户和视频的特征,不再只是单纯的用户特征。
这样一来,用户插成视频特征的组合过多,就无法通过预存的方式保存所有的模型结果。
二是因为排序模型的输出层不再是预测视频ID,所以我们也无法拿到视频的embedding.因此,对于排序模型,我们必须使用twencifo serving这样的模型服务平台来进行模型的线上推断。
到这里,我们就讲完了youtube推荐模型的全部细节。
如果你有任何疑惑的地方,可以在留言区提问,同时我也建议你多看几遍这节课的内容。
因为这个解决方案真的是太经典了。
好了,这节课的内容讲完了。
我们再总结一下youtube推荐系统的重点知识。
那youtube推荐系统的架构是一个经典的召回层加排序层的架构。
其中候选机生成模型负责从百万候选集中召回几百个候选视频。
那排序模型负责几百个候选视频的金牌,最终选出几十个推荐给用户候选机生成模型是一个典型的embedding MRP的架构。
我们要注意的是,它的输出层它是一个多分类的。
输出层预测的是用户点击了哪个视频。
那在它的serving过程中,需要从输出层提取出视频embedding,从最后一层radio层得到用户embedding.然后利用最近您搜索快速得到候选集排序模型,同样是一个ebebeding MRP的架构。
不同的是,它的输入层包含了更多用户和视频的特征。
输出层采用了waited LR,那并且使用观看时长作为正样本的权重,让模型能够预测出观看时长,这更接近youtube要达成的商业目标。
好了,这些关键的知识点我也总结在了文稿的表格中,希望它能帮助你加深记忆。
在这节课结束前,关于youtube的推荐模型,我还想多说几句。
事实上,youtube的推荐系统论文中还包含更多的技术细节。
那业界真正好的论文并不多。
Youtube的这篇deep neural networks for youtube regulations绝对是不可多得的一篇。
我甚至推荐大家逐句来读,抓住每一个细节。
当然你也可以在我的书深度学习推荐系统中的相应章节,找到更多的实现细节。
那这些内容让我曾经受益匪浅,相信也会对你有所帮助。
最后我们再来看一道思考题吧。
那youtube的排序模型和候选集生成模型都使用了平均池化的一操作,来把用户的历史观看视频整合起来。
你能想到更好的方法来改进这个操作吗?期待在留言区看到你的思考和总结。
我们下节课见。