深入理解YouTube推荐系统算法!
  kLx3LxWlfsCa 2023年11月02日 43 0

之前天池-安泰杯跨境电商智能算法大赛是我初次接触推荐相关的比赛,通过比赛让我对推荐系统有了较为浅显的认识,赛后也是打算系统的学习这方面的内容,此后我也会将【推荐系统】作为一个系列板块进行更新,主打经典推荐算法的原理,相信每一篇都值得反复研究。

安泰杯(冠军分享)https://zhuanlan.zhihu.com/p/100827940


一、背景介绍

       

深入理解YouTube推荐系统算法!_推荐系统

作为【推荐系统】的开篇,我们将以YouTube在2016年发表的论文《Deep Neural Networks for YouTube Recommendations》为背景、进行YouTube的深度神经网络推荐模型的介绍。在此这之前YouTube还有三篇介绍YouTube视频推荐的论文,如果将这四篇串在一起,也就组成了YouTube推荐系统不断发展改进的一个缩影。

2008年:论文《Video Suggestion and Discovery for YouTube》是由Shumeet Baluja,Shumeet Baluja等人在2008年发表在 the International World Wide Web Conference Committee (IW3C2)上。文章花了大量篇幅讲了吸附算法(ADSORPTION),该算法的目的就是为了解决视频标签的扩散。所以就大胆推测当时YouTube推荐系统应该就是根据用户曾经看过的视频给用户推荐同类视频,也就是拥有相同标签的视频。

2010年:论文《The YouTube Video Recommendation System》是由Davidson J, Liebald B, Liu J等人在2010年发表在第四届ACM RecSys上。当时YouTube推荐系统的核心算法就是基于Item-CF的协同过滤算法,换句话说就是对于一个用户当前场景下和历史兴趣中喜欢的视频,找出它们相关的视频,并从这些视频中过滤掉已经看过的,剩下就是可以用户极有可能喜欢看的视频。这里的视频相关性是用共同点击个数来描述的。

2013年:论文《Label Partitioning For Sublinear Ranking》是由Jason Weston,Jason Weston等人在2013年发表在第三十届国际机器学习大会上。该论文将推荐问题变成了一个多分类的问题,并解决了在神经网络中如何从最后一层输出层中共找到概率最大的输出节点。

到了2016年,YouTube开始迈向了以深度学习算法为主导的推荐系统阶段,虽然看似离2020比较久远,但这篇论文应该作为推荐系统入门必看论文,文中的推荐系统架构设计也是非常的经典,是很多推荐系统架构的基础。

YouTube推荐系统的三大难点

  • 数据规模:YouTube 的用户和视频量级都是十亿级别的,需要分布式学习算法和高效的部署。
  • 新颖性:推荐系统需要及时对新上传的视频和用户的新行为作出响应。
  • 数据噪音:由于稀疏和外部因素影响,用户的历史行为很难预测。大部分 YouTube 视频只有隐式反馈(即用户对视频的观看行为),缺少显式反馈(即用户对视频的评分)。此外,视频的元信息不够有结构性。我们的算法需要对训练数据的这些因素稳健(robust)。


二、系统概览

       

深入理解YouTube推荐系统算法!_DNN_02

Youtube推荐系统整体架构

第一部分 召回网络:此阶段主要目的是从百万级的视频中检索出一小部分的视频用于之后的排序操作,这部分需要处理的数据量非常大,速度要求快,所有使用的模型和特征都不能太复杂。召回网络会根据用户的历史信息(比如用户的历史观看、搜索等)进行召回,这一阶段召回的视频满足用户泛化的兴趣,用户之间的相似度则通过粗略的特征来表示,如用户观看视频的ID,搜索query和用户画像。

第二部分 排序网络:此阶段会使用更加丰富和精细的用户和视频特征,预测用户对召回的视频打分,然后根据分数进行排序,依次展示给用户。这部分最主要是能够精准的将视频推送给用户,所以需要更加复杂的模型和特征来提升推荐效果。

第三部分 线下评估:评估指标有precision、recall、ranking loss等,最终的效果还是需要线上做A/B测试,关注的指标包括:点击率、观看时间等;需要指出的是,线上线下有时候并不能保持一致的结果。

接下来一起看看Matching和Ranking的具体设计思路,同时会给出具体实现代码,帮助加深理解算法原理。在介绍召回模型前,先看看传统的召回思路。


三、Matching


3.1 传统召回思路

先离线计算好商品的Embedding以及用户的Embedding,线上召回的时候,根据用户的Embedding去和所有商品的Embedding内积,找出TopN。这种传统的方式需要解决以下几个问题:

  • 商品的Embedding空间和用户的Embedding空间如何保证在同一个空间。
  • 需要计算与所有商品的内积,存在性能问题。
  • 诸如奇异值分解的方法,输入协同矩阵,特征比较单一。

3.2 问题建模

深入理解YouTube推荐系统算法!_推荐系统_03

3.4 召回模型网络结构

在做NLP任务时,如何将文本或者文本中的一字一句,表示成结构化的,计算机能够理解的形式是第一步。经常采用方法的就是word2vec,就是将所有的word表示成低维稠密的embedding向量,最后将词的embedding向量喂给神经网络进行学习。

深入理解YouTube推荐系统算法!_推荐系统_04

召回模型的网络结构

Youtube的召回模型也受此启发,采用了word embedding的技巧来计算每一个视频的embedding,然后将视频的embedding,用户搜索视频的embedding分别计算average,再加入用户的属性、视频质量等特征,采用两个完全相连的ReLU层和softmax函数来预测用户下一个看的视频是什么。

使用DNN的原因之一,在DNN中连续性变量和类别型变量都很容易输入到模型中,包括一些人口统计特征(Demographic features),对最终的效果起着十分重要的作用。用户的地域,设备等都可以作为embedding向量输入到DNN中去。简单的二值化特征(如性别)和数值型特征(如年龄)可以直接输入到DNN中,数值型需要经过归一化到[0,1]再输入到模型中。

(1)输入层

  1. 用户观看视频序列ID:对视频ID的embedding向量进行mean pooling,得到视频观看向量(watch vector)。
  2. 用户搜索视频序列ID:对视频ID的embedding向量进行mean pooling,得到视频搜索向量(search vector)。
  3. 用户地理特征和用户设备特征:均为一些离散特征,可以采用embedding方法或者直接采用one-hot方法(当离散维度较小时),得到用户的地理向量和设备向量
  4. Example Age:在推荐系统中很重要的一点是视频的新颖性,用户更倾向于观看新视频,但机器学习模型都是基于历史观看视频记录学习,所以在某种程度上,模型和业务是相悖的,所以文中构建了一个特征example age,简单的可以理解为是视频的年龄,初始值设为0,随着时间的增长,记录视频的年龄。加入之后效果十分明显,如图所示

深入理解YouTube推荐系统算法!_推荐系统_05

    5. 人口属性特征:用于提供先验,使其对新用户也能做出合理的推荐。具体来说,对用户            的地理区域和使用的设备进行 Embedding 并将特征进行拼接(concatenation)。

深入理解YouTube推荐系统算法!_推荐系统_06

3.6 样本选择和上下文选择

在有监督学习问题中,最重要的选择是label了,因为label决定了你做什么,决定了你的上限,而feature和model都是在逼近label。我们的几个设计如下:

  • 使用更广的数据源:不仅仅使用推荐场景的数据进行训练,其他场景比如搜索等的数据也要用到,这样也能为推荐场景提供一些explore。
  • 为每个用户生成固定数量训练样本:我们在实际中发现的一个practical lessons,如果为每个用户固定样本数量上限,平等的对待每个用户,避免loss被少数active用户domanate,能明显提升线上效果。
  • 抛弃序列信息:我们在实现时尝试的是去掉序列信息,对过去观看视频/历史搜索query的embedding向量进行加权平均。这点其实违反直觉,可能原因是模型对负反馈没有很好的建模。
  • 不对称的共同浏览(asymmetric co-watch)问题:所谓asymmetric co-watch值的是用户在浏览视频时候,往往都是序列式的,开始看一些比较流行的,逐渐找到细分的视频。下图所示图(a)是hled-out方式,利用上下文信息预估中间的一个视频;图(b)是predicting next watch的方式,则是利用上文信息,预估下一次浏览的视频。我们发现图(b)的方式在线上A/B test中表现更佳。而实际上,传统的协同过滤算法,都是隐含采样图(a)的held-out的方式,忽略了不对称的浏览模式。

深入理解YouTube推荐系统算法!_搜索_07


四、Ranking

       

召回阶段已经给出了候选集,在排序阶段,其目的是对给定的小规模候选集进行精细化的排序。通常,排序阶段还涉及对多个不同召回源的视频进行有效集成,这给排序阶段增加了难度。

深入理解YouTube推荐系统算法!_推荐系统_08

排序模型的网络结构

4.1 训练阶段

深入理解YouTube推荐系统算法!_DNN_09

4.2 特征表示

我们的特征与分类和连续/序列特征的传统分类方法是不一样的,从两个维度对特征进行分析:

  • 取值数量:分为单值特征,比如当前待展示待打分的视频ID;和多值特征,比如用户过去观看的N个视频ID;
  • 特征描述内容:我们还根据它们描述项目的属性(“印象”)还是用户/上下文(“查询”)的属性来对特征进行分类。每个请求计算一次查询特征,同时为每个已评分项目计算展现特征。

(1) 特征工程

虽然DNN隐含了特征工程,但是作者还是做了很多特征工程(个人认为,这说明网络模型并不是很适合这个数据,或者说这个网络结构不像CNN那样高效)。最重要的三方面特征如下:

  • 用户历史行为:用户之前和那些items有过交互,或者和相似的items的交互;
  • 上此观看时间:自上次观看同channel视频的时间,原理类似“注意力机制;
  • 之前视频已经被曝光给该用户的次数:如果一个视频之前展示过,用户没有观看,那么用户在下次展示的时候依旧不会观看的概率比较大,其原理类似“exploration”。

(2)离散特征Embedding

深入理解YouTube推荐系统算法!_搜索_10

重要的是,离散特征对应的ID一样的时候,他们的底层embedding也是共享的。比如存在一个全局的embedding对应很多不同的特征(曝光的视频ID,用户最后一次浏览的视频ID,推荐系统的种子视频ID等等)。embedding虽然是共享的,但是每个特征在训练的时候是单独输入到网络的,以便上层网络可以学习到每个特征的特殊表示。embedding共享对于提升泛化能力、加速训练、减小内存占用是非常重要的。绝大多数参数模型是在这种高维embedding中的,例如,100万个ID映射成32维的空间,其参数是完全连接的2048个单元宽网络参数的7倍多。

(3)连续特征归一化

深入理解YouTube推荐系统算法!_DNN_11

4.3 隐层实验

深入理解YouTube推荐系统算法!_搜索_12

表中显示了在保留数据集上用不同的隐层配置得到的结果。每个配置得到的值是通过在同一个页面上展示给一个用户的正负样本而来的。我们首先用我们的模型对两种样本进行打分。如果负样本的得分比正样本的得分高,就认为这个正样本的观看时长是错误预测。每个用户的损失值就是所有错误预测的数量。

对网络结构中隐层的宽度和深度方面都做了测试,从下图结果看增加隐层网络宽度和深度都能提升模型效果。而对于1024->512->256这个网络,测试的不包含归一化后根号和方式的版本,loss增加了0.2%。而如果把weighted LR替换成LR,效果下降达到4.1%之多。


参考文献

[Covington et al., 2016] Paul Covington, Jay Adams, Emre Sargin. Deep Neural Networks for YouTube Recommendations. RecSys: 191-198, 2016.

zhuanlan.zhihu.com/p/52

zhuanlan.zhihu.com/p/61

深入理解YouTube推荐系统算法!_搜索_13


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
kLx3LxWlfsCa