咳,仍是要说说这篇文章,虽然讲它的人已经不少了。毕竟做为深度学习模型大规模应用于工业界推荐系统的标志,这篇文章是绕不过去的。原文来自Deep Neural Networks for YouTube Recommendations,是YouTube2016年发表于Recosys的文章。算法
这篇文章的结构依然很经典:由deep candidate generation model(召回阶段)和deep ranking model(排序阶段)组成。网络
YouTube的推荐系统的主要挑战有三:ide
YouTube的模型在Google Brain上训练,它的开源版本即为tensorflow。他们的模型有十亿量级的参数数目,并在千亿级别的数据量上训练。 系统的结构图以下:函数
在召回阶段,YouTube要从海量数据集中选出数百个召回结果。在使用神经网络以前,YouTube使用的是MF算法。在使用深度学习算法时,YouTube把找回阶段建模为一个分类模型,其目标是根据上下文,用户
,从集合
中找到时刻
最可能被观看的视频
:
post
其中表明user和context的embedding,
表明video的embedding。deep learning的任务是从用户观看的历史数据和当前上下文中学习用户的embedding
,并使用softmax选择最有可能被观看的video。模型使用implicit feedback进行训练,用户观看完视频做为正样本。学习
在实际进行服务时,YouTube并不追求完整的softmax过程,而是使用最近邻算法来选择最有可能的N个结果。网站
具体来讲,召回阶段的模型的结构以下:设计
排序模型的结构和召回模型的结构很像,比较特殊的是它采用的目标函数是watch_minutes_per_impression的函数,而不是ctr的函数。这主要是为了不click-bait问题。click-bait在中国的语境中应该是标题党,即刻意用标题吸引人而内容乏味的video吸引用户的注意力,致使用户点击以后很快退出。3d
特征工程的部分我就不在这里讲了,有兴趣的读者能够去看原文,咱们主要说一下loss function的问题。 模型的目标是预测impression致使的观看时长,无论这个impression是正例仍是负例。正例的原始标签为用户观看视频的时长,文章设计了一个加权逻辑回归函数来解决这个问题。本质上,他们仍是以逻辑回归的方法训练模型,可是给全部负样例赋以单位权重,给全部正样例赋以一个观看时间权重。所以,cdn
整个ranking模型的结构以下:
咳,这算是本文中最难理解的一部分了,我说我本身的理解,但不必定对,欢迎批评指正:
文章采用watch_minutes_per_impression做为预测目标,但这个目标很难被直接预测,因此做者对模型作了一些修改: