下面是DNN推荐的描述及我的理解
DNN推荐架构
下图是youtube推荐系统的架构图,和其他推荐系统一样,包括召回和排序这两个阶段,主要使用了深度学习。
召回阶段
召回问题建模
youtube把召回阶段建模成了一个“超多大规模分类”问题。即在时刻t,为用户U(上下文信息C)在视频库V中精准的预测出视频i的
类别(每个具体的视频视为一个类别,i即为一个类别),用数学公式表达如下:
很显然上式为一个softmax多分类器的形式。向量u\in R^N是<user, context>信息的高维“embedding”,而向量v_{j}\in R^N则是
视频 j 的embedding向量。所以DNN的目标就是在用户信息和上下文信息为输入条件下学习用户的embedding向量u和视频的embedding向
量v。用公式表达DNN就是在拟合函数u,v = f_{DNN}(user_info, context_info)。
模型架构
模型是一个三层的网络架构,主要输入是观看、搜索历史,样本时间,用户场景信息以及用户画像信息等。
主要分为离线训练及线上服务两个部分。离线输出为softmax层,计算公式为之前提到的公式。而线上将训练得到的视频embedding向量v
存储起来,实时根据模型计算出用户向量u,然后利用lsh技术找到内积最近的topN。
主要特征
1.观看历史和搜索历史:类似于word2vec每个视频embedding到固定维度的向量中。最终通过加权平均(重要性和时间)得到固定维度的
watch vector作为DNN的输入。
2.人口统计学信息:性别、年龄、地域等
3.上下文信息:设备、登陆状态、位置等
4.Example Age: 样本时间,表示样本产生的时间。因为机器学习系统在训练阶段都是利用过去的行为预估未来,因此通常对过去的行为
有个隐式的bias。视频网站视频的分布是高度非静态(non-stationary)的,但我们的推荐系统产生的视频集合在视频的分布,基本上反
映的是训练所取时间段的平均的观看喜好的视频。因此我们我们把样本的 “age” 作为一个feature加入模型训练中。从下图可以很清楚的
看出,加入“example age” feature后和经验分布更为match。
样本和上下文选择
在有监督学习问题中,最重要的选择是label了,因为label决定了你做什么,决定了你的上限,而feature和model都是在逼近label。我们
做了如下几个设计:
1.使用更广的数据源:不仅仅使用推荐场景的数据,训练样本是从全部youtube观看记录中产生。防止对推荐者的观看记录过度利用,加入
对新视频的测试。
2.为用户生成固定数量的训练样本:每个用户在损失函数中的权重都是相等的,防止一小部分超级活跃用户影响到损失函数的公平性。
3.抛弃数据的序列信息:我们在实现时尝试的是去掉序列信息,对过去观看视频/历史搜索query的embedding向量进行加权平均。这点其实
违反直觉,可能原因是模型对负反馈没有很好的建模。
4.不对称的共同浏览问题:所谓asymmetric co-watch值的是用户在浏览视频时候,往往都是序列式的,开始看一些比较流行的,逐渐找到
细分的视频。下图(a)是hled-out方式,利用上下文信息预估中间的一个视频;图(b)是predicting next watch的方式,则是利用上文信息,
预估下一次浏览的视频。
不同网络深度和特征的实验
基本和前面图中所示的网络架构相同,所有的视频和search token都embedded到256维的向量中,开始input层直接全连接到256维的
softmax层,依次增加网络深度(+512–>+1024–>+2048–> …)。
下图反映了不同网络深度(横坐标)下不同特征组合情况下的holdout-MAP(纵坐标)。可以很明显看出,增加了观看历史之外的特征很
明显的提升了预测得准确率;从网络深度看,随着网络深度加大,预测准确率在提升,但继续增加第四层网络已经收益不大了。
离线训练及在线服务模块
激活函数使用relu,softmax层的输出是预测的视频分类结果,我们通过离线训练得到离线模型。同时得到用户向量u和视频向量v。得到视
频向量后我们可以将其保存起来,用于在线服务。实时计算用户向量u,然后与v做内积,得到topN。这里需要使用hashing算法加速查找
topN。
个人理解
1.特征里面的example age指的是样本时间,而不是网上所说的视频上传时间。论文也详细解释了,他可以很好的表示视频上传时间和时间
段上受欢迎程度。
2.用户向量u指的是输出层的前一层,而视频向量v指的是前一层到输出层的参数。所以训练完模型我们可以得到两个表示u和v,只不过用户
u我们后面实时计算。
3.输出层多分类时,当视频数量较大时,使用了负采样,提高计算效率。
4.实时计算topN时,当数据量比较大时,我们需要近似近邻查找来提升计算效率,但是会有一定精度损失。
排序阶段
排序阶段的最重要任务就是精准的预估用户对视频的喜好程度。不同于召回阶段面临的是百万级候选视频集,排序阶段面对的只是百级别
的商品集,因此可以使用更多更精细的feature来刻画视频。此外,还可以和其他召回方式得来的数据进行ensemble。
模型架构
排序阶段的模型和召回阶段的基本相似,不同的是训练的最后一层是一个weighted LR层,而serving阶段激励函数用的是e^{x}。另外,优
化目标换成了期望的观看时长。
特征处理
1.特征工程:在搜索和推荐场景,我们的很难把原始数据直接作为FNN的输入,特征工程仍然很重要。而特征工程中最难的是如何建模用户
时序行为(temporal sequence of user actions)并且将这些行为和要排序的物品关联起来。youtube发现最重要的信息是描述用户与商
品本身或相似商品之间交互的信息。我们要度量用户对视频的喜欢,可以考虑用户与视频所在频道间的关系:
a.数量特征:浏览该频道的次数?
b.时间特征:比如最近一次浏览该频道距离现在的时间?
这两个连续特征的最大好处是具备非常强的泛化能力。另外除了这两个偏正向的特征,用户对于视频所在频道的一些PV但不点击的行为,
即负反馈信息同样非常重要。此外,还有推荐来源、所在来源分数等。
2.类别特征embedding:NN更适合处理连续特征,因此稀疏的特别是高基数空间的离散特征需要embedding到稠密的向量中。实际并非为
所有的id进行embedding,比如视频id,只需要按照点击排序,选择top N视频进行embedding,其余置为0向量。有些可以复用召回阶
段的embedding。
3.连续特征归一化:NN对输入特征的尺度和分布都是非常敏感的,实际上基本上除了Tree-Based的模型(比如GBDT/RF),机器学习的大
多算法都如此。我们发现归一化方法对收敛很关键,推荐一种排序分位归一到[0,1]区间的方法,即\bar{x}=\int_{-\infty }^{x}df ,
累计分位点。除此之外,我们还把归一化后的\bar{x} 的根号\sqrt{x} 和平方x^{2} 作为网络输入,以期能使网络能够更容易得到特征
的次线性(sub-linear)和(super-linear)超线性函数。
建模期望观看时长
youtube的目标是预测期望观看时长。有点击的为正样本,有PV无点击的为负样本,正样本需要根据观看时长进行加权。因此,我们训练阶
段网络最后一层用的是 weighted logistic regression。
正样本的权重为观看时长 T_{i},负样本权重为1。这样的话,LR学到的odds为:
其中N是总的样本数量,k是正样本数量,T_{i}是第i正样本的观看时长。一般来说,k相对N比较小,因此上式的odds可以转换成
E[T]/(1+P),其中P是点击率,点击率一般很小,这样odds接近于E[T],即期望观看时长。因此在线上serving的inference阶段,我们采用
e^{x}作为激励函数,就是近似的估计期望的观看时长。
不同隐层的实验
隐层数的实验与召回阶段DNN的方法类似。
个人理解
1.不同的优化目标会有不同的优化结果,这里使用了期望观看时长,避免了ctr指标的情况下,标题的欺骗性,实际上没有观看。然而这样
会导致模型偏向于短视频,所以,可以根据自己实际需要选取。
2.特征工程处理的时候,可以采用常用的方案,分类数目多的时候,将排序靠后的数据处理成其他。归一化处理特征,增加非线性特征。
3.预测时使用了带权重的lr,让模型可以拟合期望时长。