YouTube深度学习视频推荐系统

YouTube推荐系统架构

YouTube深度学习视频推荐系统_第1张图片
YouTube推荐系统架构是经典的两级模型——召回、精排模型。
第一级用候选集生成模型完成候选视频的快速筛选,在这一步,候选视频集合由百万量级降至几百量级。这相当于经典推荐系统架构中的召回层。
第二级用排序模型(Ranking Model)完成几百个候选视频的精排。这相当于经典推荐系统架构中的排序层。

候选集生成模型

YouTube深度学习视频推荐系统_第2张图片
三层神经网络过后,使用softmax函数作为输出层。读者看到softmax函数就应知道该模型是一个多分类模型。YouTube是把选择候选视频集这个问题看作 用户推荐next watch (下一次观看视频)的问题,模型的最终输出是一个在所有候选视频上的概率分布,显然这是一个多分类问题,所以这里用softmax作为最终的输出层。 总的来讲,Y o u T u b e 推荐系统的候选集生成模型是一个标准的利用 Embedding预训练特征的深度神经网络模型。

候选集生成模型独特的线上服务方式

细心的读者可能已经发现,架构图左上角的模型服务方法与模型训练方法完全不同。在候选集生成网络的线上服务过程中,YouTube并没有直接采用训练时的模型进行预测,而是采用了一种最近邻搜索的方法,这是一个经典的工程和理论做权衡的结果。
具体来讲,在模型服务过程中,如果对每次推荐请求都端到端地运行一遍候选集生成网络的推断过程,那么由于网络结构比较复杂,参数数量特别是输出层 的参数数量非常巨大,整个推断过程的开销会很大。因此,在通过“候选集生成模型”得到用户和视频的Embedding后,通过Embedding最近邻搜索的方法进行模型服务的效率会高很多。这样甚至不用把模型推断的逻辑搬上服务器,只需将用户Embedding和视频Embedding存到Redis等内存数据库或者服务器内存中就好。
那么这里的视频Embedding和用户Embedding是如何生成的呢?
因为模型的输入的特征向量全部都是用户相关的特征,所以最后一层 ReLU层的输出向量可以当作用户的Embedding向量。此外,由于最后的输出层是softmax,该softmax层的参数本质上是一个mxn维的矩阵,其中m指的是最后一层(ReLU层)的维度,n指的是分类的总数,也就是YouTube所有视频的总数为n。那么视频Embedding就是这个m x n 维矩阵的各列向量。这样的Embedding生成方法其实和Word2vec中词向量的生成方法相同。

在模型训练完成后,逐 个输人所有用户的特征向量到模型中,就可以得到所有用户的Embedding向量, 之后导人线上Embedding数据库。在预测某用户的视频候选集时,先得到该用户 的Embedding向量,再在视频Embedding向量空间中利用局部敏感哈希等方法搜 索该用户Embedding向量的Top尺近邻,就可以快速得到A个候选视频集合。

排序模型

YouTube深度学习视频推荐系统_第3张图片
第一眼看上去,你可能会认为排序模型的网络结构与候选集生成模型没有太大区别,在模型结构上确实是这样的,它们都遵循 Embedding MLP 的模型架构。但是我们来看其中的细节,特别是输入层和输出层的部分,它们跟候选集生成模型还是有很大不同的,这就是我们要重点关注的。
我们先看输入层,相比于候选集生成模型需要对几百万候选集进行粗筛,排序模型只需对几百个候选视频进行排序,因此可以引入更多特征进行精排。具体来说,YouTube 的输入层从左至右引入的特征依次是:
impression video ID embedding:当前候选视频的 Embedding;
watched video IDs average embedding:用户观看过的最后 N 个视频 Embedding 的平均值;
language embedding:用户语言的 Embedding 和当前候选视频语言的 Embedding;
time since last watch:表示用户上次观看同频道视频距今的时间;
previous impressions:该视频已经被曝光给该用户的次数;
其中,第 4 个特征 time since last watch 说的是用户观看同类视频的间隔时间。如果从用户的角度出发,假如某用户刚看过“DOTA 比赛经典回顾”这个频道的视频,那他很大概率会继续看这个频道的其他视频,该特征就可以很好地捕捉到这一用户行为。第 5 个特征 previous impressions 说的是这个视频已经曝光给用户的次数。我们试想如果一个视频已经曝光给了用户 10 次,用户都没有点击,那我们就应该清楚,用户对这个视频很可能不感兴趣。所以 previous impressions 这个特征的引入就可以很好地捕捉到用户这样的行为习惯,避免让同一个视频对同一用户进行持续的无效曝光,尽量增加用户看到新视频的可能性。
把这 5 类特征连接起来之后,需要再经过三层 ReLU 网络进行充分的特征交叉,然后就到了输出层。这里我们要重点注意,排序模型的输出层与候选集生成模型又有所不同。不同主要有两点:
一是候选集生成模型选择了 softmax 作为其输出层,而排序模型选择了 weighted logistic regression(加权逻辑回归)作为模型输出层;
二是候选集生成模型预测的是用户会点击“哪个视频”,排序模型预测的是用户“要不要点击当前视频”。

那么问题来了,YouTube 为什么要这么做呢?其实,排序模型采用不同输出层的根本原因就在于,YouTube 想要更精确地预测用户的观看时长,因为观看时长才是 YouTube 最看中的商业指标,而使用 Weighted LR 作为输出层,就可以实现这样的目标。这是怎么做到的呢?在 Weighted LR 的训练中,我们需要为每个样本设置一个权重,权重的大小,代表了这个样本的重要程度。为了能够预估观看时长,YouTube 将正样本的权重设置为用户观看这个视频的时长,然后再用 Weighted LR 进行训练,就可以让模型学到用户观看时长的信息。这是因为观看时长长的样本更加重要,严格一点来说,就是观看时长长的样本被模型预测的为正样本的概率更高,这个概率与观看时长成正比,这就是使用 Weighted LR 来学习观看时长信息的基本原理。最后,我们再聊一聊排序模型的模型服务方法。
我们现在回顾一下,候选集生成模型是可以直接利用用户 Embedding 和视频 Embedding 进行快速最近邻搜索的。那排序模型还能这样做吗?
答案是不可以了,原因有两点:
一是因为我们的输入向量中同时包含了用户和视频的特征,不再只是单纯的用户特征。这样一来,用户 x 物品特征的组合过多,就无法通过预存的方式保存所有模型结果;
二是因为排序模型的输出层不再是预测视频 ID,所以我们也无法拿到视频 Embedding。因此对于排序模型,我们必须使用 TensorFlow Serving 等模型服务平台,来进行模型的线上推断。

你可能感兴趣的:(深度学习推荐系统,深度学习,人工智能)