美文网首页
2019-03-03

2019-03-03

作者: jessica涯 | 来源:发表于2019-03-03 21:10 被阅读0次

    DNN for YouTube recommendation读书笔记

    这篇文章关注的是深度学习在YouTube视频推荐上的应用。YouTube视频推荐主要面临三个方面的挑战:

    规模大:用户和视频的规模都很大;

    实时性:平衡新上传的视频内容和已有的视频间的关系,追踪用户的实时行为,提供实时新鲜视频;

    噪声:由于稀疏性且观测不到的外部因素影响,用户的历史行为是很难预测的。只有一些噪音隐式反馈信号,而且与内容相关的元数据是非结构化的,因此需要更鲁棒的算法来训练数据。

    1.系统介绍

    YouTube推荐系统框架

    推荐系统的整体框架如上图所示,系统由两个神经网络组成:candidate generation(候选生成)+ranking(排序)。candidate网络从百万条历史数据中精选出数百条可能与用户相关的候选视频,ranking网络结合其他特征信息,对这些候选视频进行打分,得出推荐给用户的十余条视频列表。candidate网络在保证一定的准确率的同时更强调时效性,而ranking网络更强调准确率。最终通过A/B test评估整个模型的效果。

    2.candidate网络

    YouTube将推荐转化为一个多分类问题,每个视频看成一个类别

                                   P(w_t=i|U,C)=\frac{e^{v_iu}}{\sum\nolimits_{j\in V} e^{v_ju} }

    上式是一个标准的softmax公式,表示用户U在背景C下于t时刻在视频集合V中观看的视频为i的概率。其中u\in R^N是由用户特征和上下文特征拼接得到的特征向量,v_j\in R^N是每个候选视频向量,V是所有视频的集合,由positive sample和negative sample构成,positive sample指的是用户点击完成观看的视频,negative sample指的是用户未点击的视频。

    candidate网络结构

    结构解读

    先用wordvec方法对video和search token做embedding之后经过average操作再作为输入,然后结合用户地理位置embedding,年龄、性别等信息,将其concatenate起来得到的特征向量作为模型输入,并传递给RELU神经网络。


    理解:1)embedding即高维的向量嵌入到一个低维空间,且映射之后的向量不会丢失之前高维向量所含的信息。2)视频观看和搜索向量的处理:用户的观看历史是一个变长的、稀疏的IDs序列,对每一个视频从固定词汇表里计算出一个高维词向量,然后通过加权平均的方式映射为一个定长的、稠密的watch vector。search token也是对其embedding向量加权平均,反映了用户整体搜索历史状态。3)用户画像特征的处理:如地理位置、设备、性别、年龄、登录状态等连续或离散化特征都被归一化为[0,1],和watch vector和search vector做拼接得到输入,避免冷启动影响。4)引入DNN的好处是任意的连续特征和离散特征可以很容易的添加到模型当中。


    接下来是三层全连接层(激活函数是RELU),训练阶段使用交叉熵作为优化损失函数。用于training的经过softmax函数,输出一个再所有candidate video上的概率分布,可以看成是用户推荐next watch的多分类问题。用于在线训练serving的采用近似最近邻,找出相似度最高的topN,即ranking阶段的输入。


    该candidate网络效率极高。首先大部分用户向量和视频向量的计算都是离线完成,其次在相似向量查询上采用近似最近邻的方式加快索引。最简单的近似最近邻就是kd树,先把向量空间划分为多个区间。确定user向量在哪个区间后,然后把这个区间里的所有视频向量和它比较,找出相似度最高的top N,这样就大大缩短了比较时间。



    example age特征

    视频年龄=当前推荐(训练开始)的时间-上传时间


    上传越早的视频(即年龄越大),更有机会成为受欢迎视频。因此,需要在训练时将这一信息考虑在内。但是,在线上召回时,将所有候选视频的年龄都设置成0,对新老视频“一视同仁”,有利于召回那些“虽然上传时间短,但是视频内容与用户更加匹配”的新视频


    因为机器学习系统都是对历史数据训练来预测未来行为,因此通常对过去的行为有个隐式的bias。视频网站视频的分布是高度非平稳的,但推荐系统产生的视频集合在视频的分布,基本上反映的是训练所取时间段的平均的观看喜好的视频。因此把样本的 “age” 作为一个feature加入模型训练中。从下图可以很清楚的看出,加入“example age” feature后和经验分布更为匹配。

    标签和上下文的选择

    需要强调的是推荐通常包含解决一个代理问题(surrogate problem)和把结果转化到一个特定的语境中。 在机器学习问题中,不直接对目标建模,而是对目标相关的指标建模,反而可能达到更好的效果。例如:电影推荐可以通过预估打分来完成 ;在这个应用中,可以用观看时长来预估点击;再例如,点击率预估可以通过对停留时间建模实现。

    样本选择:训练样本由所有的YouTube观看记录(包括从其他网址观看记录)生成。便于加入对新视频的测试,防止对推荐者的观看记录过度利用。若用户通过其他途径观看,行为也容易被推荐系统采集到。另外,对每个用户的观看记录生成固定数量的训练样本,在损失函数中每个用户的权重相等,避免少部分活跃用户数据在损失函数中占主导。

    丢弃序列化信息,对搜索序列进行无序化处理。比如利用用户的最后一次搜索生成主页推荐通常效果糟糕。将用户的搜索序列做无序化处理,推荐系统不再直接获知搜索样本的原始值,效果会更加鲁棒。

    非对称共看模式的上下文选择:用户观看视频时,遵循的是一种非对称的共同看过模式,用户初始的观看序列范围较广,后期观看中,范围会逐渐集中。大多数CF算法隐式的通过留出任意一个item,并从用户历史中其它item来预测它,利用的是用户的全量观看历史,这往往会泄露未来信息。文中的改进在于从用户的观看历史中,仅截取held-out watch之前的观看序列。

    上图中,实心黑点表示输入,空心黑点表示标签,在进行A/B test时,发现(b)这种选择标签和输入的方法更好。

    特征及深度实验

    增加特征和DNN深度能显著提升预测效果。第0层的输入向量全连接到softmax输出层,第0层以及输出层都是采用固定的256维度。中间的深度网络采用的是类似tower的结构,即网络底层最宽,之后的每个隐层维数都是前一个的一半。深度增加到第四层时,模型召回的准确率已没有显著的提升了。


    深度层神经节点的激活函数采用的是RELU。该函数相对于sigmoid,tansig, 最大的好处应当在于能使得节点的激活率处于一个较低的水平。


    3.ranking网络

    ranking的主要作用是为特定用户精挑候选视频进行推荐。在排序阶段,仅有数百条待评分的视频,因此能有更多的特征来描述视频以及用户和视频之间的关系。对于排序无法直接比较的候选数据,ranking能对它们进行有效的集成(ensemble)。最终的排序目标是基于实时A/B testing结果不断被调整的,它是视频期望观看时间的函数。因为通过点击率进行排序通常会推荐用户根本未完成观看的诈骗性视频,而观看时长更好的捕捉到用户参与观看的特征。

    ranking结构

    特征表示

    原始数据并不能直接输入到前馈神经网中,需要将用户和视频数据转化为有用的特征。对类别特征(包括单值的(eg已评分的印象视频ID)和多值的(eg用户看过的前N个视频ID))进行embedding,多值类别特征的embedding在传入网络中前要先平均。对连续特征进行normalizing,有助于收敛。训练阶段的最后一层是加权的逻辑斯蒂回归,对每个视频进行独立打分,预测阶段直接根据学到的w得到输出结果。

    观看时间建模

    目标是给定训练样本预测期望观看时间。所有正样本(被点击的视频impression)的权重等于观看时长,所有负样本(未被点击的impression)的权重等于单位权重。模型用加权逻辑斯蒂进行训练,采用交叉熵损失。


    标准的logistic regression中,y的值为[0,1]之间的数,其表示式为

                                             y=\frac{1}{1+e^{-w^Tx+b}}

    它的odds为 :           odds=e^{w^Tx+b}=\frac{p(y=1|x)}{p(y=0|x)}

    正负样本出现的概率分别为:

                     p=\frac{odds}{odds+1} =\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} ,1-p=\frac{1}{1+e^{w^Tx+b}}


    在weighted logistic regression中,odds=\frac{\sum\nolimits T_i }{N-k} ,即正样本出现的概率和/负样本出现的概率和。其中Ti代表每个正样本的观看时长,N表示样本总数,k表示正样本的数量。而impression的观看时长的期望为:

                                          E(T)=\frac{\sum\nolimits T_i }{N} =\frac{odds}{\frac{N}{N-k} }

    odds=E(T)*\frac{N}{N-k} =E(T)*\frac{1}{1-p} \approx E(T)(1-p)\approx E(T)

    其中p为点击通过率(CTR)=实际点击次数/展示量。由于p很小,因而能得到上面的后两个不等式,因此最终能用odds来估计期望观看时间。在serving时,e^{w^Tx+b}即为每个impression观看时长的估计值。

    隐层实验

    实验结果

    其中weighted per-user loss=mispredicted watch time/total watch time,若正样本的分数比负样本低,则这个正样本的观看时间叫做mispredicted watch time。

    从实验结果分析,增加网络的宽度和深度都会提高效果,若正负样本使用相同权重,loss会增加4.1%,说明用观看时间对正样本加权可有效提高模型准确率。

    4.总结

    使用candidate generation和ranking两个神经网络,在candidate generation阶段,将推荐转化为多分类问题,从百万条数据筛选数百条候选数据,通过近似近邻检索提升模型效率;在ranking阶段,对视频观看时长建模,提升模型准确率。

    提出了很多特征处理方法,例如将视频的example age作为输入特征,消除了对过去时间段的全局偏差;将变长稀疏的视频ID嵌入为定长紧凑的向量并平均化;对每个用户的观看记录生成固定数量的训练样本,避免少部分活跃用户数据在损失函数中占主导;在ranking阶段,连续特征归一化之后,还将归一化后的平方项和开方项作为特征,增加模型的表达能力。

    https://zhuanlan.zhihu.com/p/52504407

    https://zhuanlan.zhihu.com/p/25343518

    https://zhuanlan.zhihu.com/p/46247835

    https://blog.csdn.net/xiongjiezk/article/details/73445835

    https://www.itread01.com/content/1541386408.html

    相关文章

      网友评论

          本文标题:2019-03-03

          本文链接:https://www.haomeiwen.com/subject/oziyuqtx.html