本人微信公众号为“推荐算法学习笔记”,定期推出经典推荐算法文章,欢迎关注。
本文介绍的是YouTube的经典深度推荐算法论文《Deep Neural Networks for YouTube Recommendations》,论文地址https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf
一. Youtube推荐系统架构
youtube推荐系统架构图如下所示
可以看到YouTube的推荐系统分为了两个阶段
阶段1:召回阶段(candidate generation),负责从海量的视频当中挑选出用户可能感兴趣的候选视频,一般几十到几百不等
阶段2:精排阶段(ranking),对阶段1生成的候选视频进行排序,最终返回topK视频给用户
下面分别对召回阶段和精排阶段进行详细介绍
二.召回阶段
召回阶段的模型如下所示
召回阶段的目标是为每个用户生成1个user vector和为每个视频生成1个video vector。然后利用公式
就可以求出用户u对视频v的感兴趣程度。
(1)怎么生成user vector?利用用户的历史数据行为和上下文特征,经过多层神经网络的输出就是user vector
(2)怎么生成video vector?采用的是类似word2vec的方法,如下图所示
输入是user vector, 输出是每一个视频用户会点击的概率,然后使用negative sample的方法进行训练就可以得到每个视频的video vector
(3)我们可以将所有用户的user vector和所有视频的video vector存储起来,这样在serving的时候就可以直接取出来直接计算用户感兴趣的候选视频。由于视频的数量巨大,一般采用局部敏感哈希等方法来加速计算
三.精排阶段
精排阶段的模型如下所示
可以看到模型采用的一个非常简单的DNN。但是值得注意的是它的预测目标是视频的平均观看时长(点击率*观看时长),为了达到这个预测目标,可以看到它采用的是weight logistics regression,serving的时候采用的exp(Wx+b)。那么它们是怎么推出来的呢?推导过程如下图所示
四.Tricks
1.训练的时候,每个用户的训练样本数量是相同的,这样是为了防止少部分高度活跃的用户主导损失函数。
2.在表示search query的时候,故意丢失掉序列信息,直接使用无序的bag of tokens,这样有助于模型的exploitation。
3.把predicting held-out watch改成predicting future watch,可以防止overfit和使训练效果更好。如图所示
4. 同样的分类特征共享同一个embedding空间。例如"用户看过的视频Id"和"用户展示过的视频Id"这两个特征,“用户语言”和“视频语言”这两个特征,它们的embedding都取自同一个embeding空间,如图所示
5.对于连续的特征,使用累计概率密度的方法对其进行转换到[0,1),同时并将开根号,平方后的值也加入到训练,如图所示
6.增加example age特征,即(当前最大训练样本的时间-样本展示的时间)。增加后可以准确预估出用户感兴趣的视频的时间分布,如图所示
五.总结
以上就是YouTube深度推荐模型的一些Tricks,如果有问题和文章有错误,欢迎和我交流。
本人微信公众号为“推荐算法学习笔记”,定期推出经典推荐算法文章,欢迎关注。