YouTube视频推荐中的召回模型和排序模型-Deep Neural Networks for YouTube Recommendations

1.YouTube论文概述

YouTube在16年发的这篇经典paper,同时解决了推荐系统的召回问题和排序问题,因此也有两个网络模型:

1.召回模型:作用是从上百万的视频库中选出数百个与用户最相关的视频;
2.排序模型:作用是从上百个与用户相关的召回视频中选出几十个打分最高的视频。

paper中提出了在YouTube推荐系统中三个具有挑战性的难题:

  • Scale:大规模,在其他问题表现比较好的算法模型拿过来都没法用,因为youtube用户基数和语料库特别大,需要分布式算法和高效的线上服务系统来解决;
  • Freshness:新鲜度,youtube语料库中每秒钟都会有较长的视频更新进来,那么推荐系统应该能够基于新上传的视频和用户最新的行为来推荐,因此需要平衡新上传内容和之前已经入库的视频;
  • Noise:数据噪声
    • label难以获取:youtube上的历史用户行为本来就是难以预测的,因为用户行为具有稀疏性和很多观察不到的外部因子,很难得到用户满意度的ground truth,而是只能去建模具有噪音的用户隐式反馈信号。
    • 视频数据结构化程度不好:和视频相关的元数据结构不良,没有明确定义的本体。

YoutuBe视频推荐的的系统架构如下图所示,这也符合业界大多数推荐系统的思路,即先对大规模物料库使用简单算法召回、策略召回、深度模型召回等方式,召回一定量级的候选集,然后排序模型对候选集中每个物料进行打分,并最终返回top N的物料展现给用户。举个例子,在某生活服务电商场景下的猜你喜欢模块,从全部200个物料中,召回60个候选集,排序模型最后输出打分的top20物料展现给用户。
在这里插入图片描述
再来说一下在YoutuBe场景下,video corpus经过candidate model和ranking model的选择,最终选出较少的相关视频呈现给用户;candidate model阶段主要通过协同过滤算法进行个性化,用户之间的相似性是通过IDs of video watches, search query tokens and demographics;ranking model阶段就需要更加细粒度的特征表达以此来区分具有较高召回率的候选视频之间的相对重要性,同时在此阶段可以看到还有other candidate sources的输入,即混合了其他方式得到的候选集(这里引用了youtube之前的一篇paper)。

2.召回模型

2.1.模型细节

召回模型架构如下所示:
在这里插入图片描述
下面paper从五个方面阐述了召回模型的细节之处:

  • 问题转换:paper将预估用户u视频v的点击率问题转化成一个多分类问题,也就是后面会提到的 next video的问题。由于是一个多分类问题,因此相应的概率计算公式为
    P(wi=tU,C)=eviujVeviu P(w_{i}=t|U,C)=\frac{ e^{v_{i}u} }{ \sum_{j \in V} e^{v_{i}u} }

其中u表示一个N维的<user,context>的embedding向量表示,v_{i}表示每一个候选视频的N维的embedding向量表示,因此我们上面的深度神经网络架构是用来学习<user,context>的N维向量表示的(视频id的N维向量表示是事先已经学习好的了)。
由于多分类的类别特别多,youtube的视频数量能达到百万量级,paper中对于多分类的效率问题是通过参考word2vec中的负样本下采样技术来解决的,只不过此处每个正样本都是采样上千个负样本,然后对于每一个正样本,都会在它以及对应的上千个采样后的负样本上计算一个交叉熵loss,这里带来的直接受益就是在速度上相比于传统的softmax有超过100倍的提升(这里paper没有说清楚是哪个过程的速度,但是从理解上来看应该是训练过程的速度)。

  • 模型架构:paper是通过预训练得到video ID的embedding向量的,由于用户的观看id的数量是变长的,而网络输入是需要定长的输入的,paper试验了avging pooling、sum pooling、component-wise max pooling三种转换方式,结果avging pooling的效果是最好的,这里的video ID的embedding表示是和其他模型参数一起学习出来的,这从图3中也能看到所有除了观看过的video ID特征的embedding之外,还有其他的特征,所有特征拼接成一个wide first layer,输入一个MLP with ReLU进行学习。

  • 异构信号:paper主要使用的特征包括:

    • 用户观看video ID的embedding表示,上面已经说过;
    • 用户搜索特征的处理方式类似于观看历史特征处理,每个搜索query都会被标记成unigram
      和bigram,并所做embedding转换,由于需要定长的embdding输入,因此也对搜索query的标记embdding进行avg pooling处理;
    • 人口统计学特征:这对于新用户的个性化推荐很有好处;
    • 用户的地理区域特征和设备特征,两者都要表示成embedding并连接起来使用;
    • 有一些简单的二进制类别特征如性别、登录状态等、简单的连续特征如年龄等,则直接归一化到[0,1]之间后直接输入到神经网络中去。
    • example age :paper中特别提到了一个比较有意思的特征,就是youtube视频从上传至今的时间,也就是视频的age,作者发现用户对于新上传的、热度比较高的视频更感兴趣,因此除了给用户推荐用户喜欢的视频之外,还要给用户推荐一些新上传的、热度比较高的视频。
  • Label和上下文选择 : 标签和内容选择,paper在这里是想强调,在推荐问题中,一般会包含代理问题、以及将结果转换到其它特定内容上。一个经典的案例就是:在电影推荐问题中,通过精确的预估电影的排序来给出电影的推荐结果,这种通过代理学习解决问题的方式,对于线上的A/B测试有很强的重要性,但是在离线评估上比较困难。模型的训练样本并不仅仅是从我们推荐的视频中选出的,而是从全网所有youtube的视频中选出来的,否则,新的视频内容将很难存活下来,tuijian 的内容将偏向于过度利用,如果用户通过我们推荐的内容之外发现其它的视频,那么我们希望通过协同过滤的方法将新内容快速推荐给其他用户;另一个用来提升评估指标的关键点在于,需要给每个用户生成固定长度的训练样本,这样在计算loss函数时,能够给所有用户高效地赋予权重,这样能够避免一小撮活跃的用户来主导loss大小的计算;用户正常情况下消费视频时,通常会先观看一些流行的视频,然后才是观看一些小众领域的视频内容,因此预测用户的下一个将要观看的视频的方法的效果,要好于预测一个随机选择的视频的方法,具体结构见下图。一些协同过滤的方法,采取了随机选择一个视频作为label来预测,这种方法,会泄漏未来的数据信息,并且忽略了用户观看视频的非对成性的特点,而相反的是,我们会随机选择一个观看的视频,并基于此观看视频回滚用户历史观看的视频,我们所取得的用户历史行为都是这个作为label的视频(held-out label watch)之前的。
    在这里插入图片描述

  • 特征和深度层面的实验:试验中使用了一个包含5baiwan视频id的视频语料库、以及搜索词的标记库,而且使用的是最近50次观看的视频ID和搜索标记ID,在特征方面的对比、在模型深度网的对比见下图
    在这里插入图片描述

2.2.召回模型的工程经验

  1. 每个训练用户都生成同样多的训练样本,这样在计算loss函数的时候可以对每个用户做到相同权重的加权,这有利于提升线上指标;
  2. YouTube召回上,使用的用户历史观看视频id为最近50个,历史搜索词token为最近50个;
  3. 召回模型选取训练样本时,使用了用户的隐氏反馈(而不是使用调查问卷、用户赞成反对等显式的样本),因为这样样本的量级就特别大,可以更好的学习并推荐出来长尾商品,而如果只用显式反馈的话,这些长尾商品将会非常稀疏,难以学习出来。

3.排序模型

排序模型跟召回模型结构非常相似,如下图所示。排序阶段做了更多的特征工程方面的工作。作者也提到了一些经验性的东西,例如作者认为给予ctr的排序结构往往对标题党更加有利,但是YoutuBe的业务属性更倾向于完成视频挂看的用户,因为观看时长才能让用户更多地参与进来。
在这里插入图片描述

3.1.特征表达

对于排序阶段的主要工作,首先是特征的呈现方式:

1.按照传统的分成连续值特征和稀疏值特征,而稀疏值特征本身的基数(可取的离散值的多少)差异比较大,有的二类取值的稀疏特征而有的是可取多种稀疏值的离散特征;
2.另外特征还可以是否可取多个值来划分,例如用户预估的该物料的ID就是单取值特征,而用户历史观看视频ID就是多取值特征;
3.而在推荐领域还经常将特征分成<u,c>特征和物料类 v 特征,即<用户上下文特征>或者说是请求类特征、<视频ID特征>。

3.1.1.特征工程

深度学习并不是万能的,包括在原始特征的处理方面,无法直接将原始特征喂给前向输入网络,会有很多特征工程方面的关键性工作,而这其中最关键的就是如何表达用户的西瓜味序列特征以及如何将这些特征和将要预测的视频物料关联起来。主要的特征工程如下:

1.用户在频道上历史观看的视频数量;
2.用户上次观看相同话题视频的距今时间;
3.历史上视频展示的频率特征会使得,两次请求不会再展示完全相同的推荐结果;
4.历史上展现但用户没有观看的视频,该视频在下次加载时就会被降级;

3.1.2.离散特征embedding化

sparse 特征:

1.用户历史展现的视频IDs;
2.用户展现的视频ID;
3.用户语言;
4.视频语言。

排序模型中的输入sparse特征也是需要从高维离散空间映射到低维连续空间,并且作者给出了一些实际工程中的做法:
1.如何确定低维embedding向量的维度的经验值,即embedding维度大约跟离散特征数量的对数值呈线性关系;
2.根据物料被点击的频率,将除了topN外的物料ID截断去除,以节省时间空间复杂度;
3.物料ID库之外的视频物料的embedding结果为全0;
4.与候选集生成模型一样的是,对于multi ont-hot特征,需要先做avgpooling后再输入到网络中去;
5.同样ID空间中的离散特征都共享基本的embedding向量表达的(视频ID的embedding,可以用在展示的ID特征embedding、历史观看的ID特征embedding),尽管有共享表示,但是每个特征都要被单独的喂入网络,共享embedding的好处是提升泛化、加速训练、节省存储;
6.embedding表示的缺点是参数量巨大,是模型中中其他模块参数量的7倍多。

3.1.3.连续特征归一化

阐述了一个事实:神经网络模型对输入值的缩放以及分布是非常敏感的,不像基于树模型的集成模型对输入值缩放和分布不敏感。作者在这里主要介绍了凉张佳那个连续特征的处理方式:

1.累积分布函数的归一化;
2.对原始特征进行超线性和亚线性操作,为网络模型提供更强大的特征表达能力。

3.2.建模观看时间

Youtube的目标是提升用户观看时长,只有正样本用户才被标记了观看时长,paper在训练模型的是欧使用了 加权逻辑斯蒂回归,正样本权重为观看时间,负样本权重为1。在正常的逻辑回归中,机率计算如下,表示样本为正例概率与负例概率的比例。
odds=ewTx+b=p1p odds = e^{w^{T}x + b} = \frac{p}{1-p}

而当在逻辑回归中,引入观看时间时,odds计算公式如下,表示正例出现概率的和与负样本概率的和的比例。
odds=TiNk odds = \frac{\sum T_{i}}{N-k}
而每个展示impression的观看时长的期望为
E[T]=TiN E[T] = \frac{\sum T_{i}}{N}
odds=E[T]NNk=E[T]11pE[T](1+p)E[T] odds = E[T]*\frac{N}{N-k} = E[T]*\frac{1}{1-p} \simeq E[T]*(1+p)\simeq E[T]
其中,p为ctr,由于p的值很小,两个约等于式才能成立,所以最终我们能用odds来估计用户期望观看时间,因此可以用
ewTx+b e^{w^Tx+b}
作为每个impression的估计值。

3.3.Hidden layers的实验

单个页面上,对展示给用户的正例和负例的这两个impression进行打分,如果对负例打分高于正例打分的话,那么我们认为对于正例预测的观看时间属于错误预测的观看时间,基于此,作者首先定义了模型评估指标:
weighted,per-user loss:即是指错误预测的观看时间占比总的观看时间的比例。

有了模型的评估指标,作者实验了多个不同深度和宽度的隐藏层的组合,结果显示:

1.单独的加宽隐藏层或者单纯的加深隐藏层可以提升模型的效果,具体见图中所示;
2.作者还试验了不加入归一化的连续特征的超线性变换和亚线性变换的特征,试验结果要差于加上这两类特征的模型效果;
3.作者同时尝试了不对正样本加入观看时间的权重,即正样本和负样本权重均为1,效果直接降低了4.1%,这说明了给正例加入观看时间权重的模型效果还是很明显的。

在这里插入图片描述

 

4.参考资料

1.paper:Deep Neural Networks for YouTube Recommendations
2.https://blog.csdn.net/friyal/article/details/83656746

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章