首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深度解析 youtube深度学习推荐算法

做推荐系统也好一段时间了,一直没有系统的整理过相关的内容。本月开始,每周将会阅读并总结一些推荐系统的paper或常用的方法,激励自己,也给需要的朋友。

本周阅读了youtube知名的DNN用于推荐系统的文章《Deep Neural Networks for YouTube Recommendations》。这篇文章将DNN技术与推荐系统相结合,文章中包含很多的具体的实践经验,非常值得仔细读。国内很多知名的推荐系统也进入了深度模型推荐的阶段,并借鉴了youtube的模型,获得了不错的收益。

youtube视频推荐系统,拥有10亿级用户,以及用户不断上传的新内容,在推荐过程中有如下挑战

1. 规模大。 10亿级用户,百亿级视频内容。已经证明在小规模数据有效的算法在youtube大规模数据面前将很难work。高效的分布式学习算法和服务系统是一个主要问题。

2. 时新性强。youtube系统有非常多的动态视频,每秒都会产生大量的视频上传。内容的冷启动也是推荐系统一个经典问题。系统需要能够平衡新内容和老内容的推荐。

3. 噪音多。用户行为数据往往是稀疏且不完整的,而且没有一个明确的用户满意度的评价,在用隐式反馈数据进行训练时通常会夹杂很多噪音数据。因此对算法的鲁棒性提出了很高的要求。

YouTube推荐系统建立在google Brain项目基础上,采用Tensorflow实现。模型有接近10亿级参数,在千亿级样本中进行训练。

1.系统框架

本文为了解决上述提到的挑战,提出了一个两阶段方法:候选生成(Candidate Generation)和候选排序(Ranking)。这将推荐问题拆解为两个经典问题:匹配和排序。

候选生成阶段,这是一个初步筛选的过程,匹配用户(包含上下文信息)与百万级大规模视频候选,得到百级的视频候选。筛选结果与用户兴趣有比较高的相关性。该阶段将用到视频观看历史,search query,和人口统计类特征。

候选排序阶段,是对候选生成阶段百级粗个性化结果进行精准个性化排序的过程。采用了更多的特征。

2.候选生成

2.1 问题建模

本文将候选生成阶段建模为“极多分类”问题,即在时刻t,为用户U(上下文信息C)在视频库V中精准的预测出视频i的类别(每个具体的视频视为一个类别,i即为一个类别)。自然的,极多分类可以转化为极其大的softmax分类,具体实现会进行优化,稍后会讲到。

该问题的目标是利用深度神经网络学习用户embedding表示和用户历史,上下文信息的映射关系。从而可以利用已有的信息表示用户。用公式表达DNN就是在拟合函数u = f(user_info, context_info)

由于数据稀疏性问题,训练数据的正负样本选取采用用户隐式反馈数据。这是大部分推荐系统的通用方法。

高效极多分类

大规模softmax求解,熟悉word2vec的同学一定觉得很熟悉,word2vec实现过程同样遇到相同的问题。参考word2vec实现,有两种方案:

1. negative sampling

2. hierarchical softmax

本文采用了negative sampling的方法求解,效率比传统softmax加速了100倍。对于为什么没有采用 hierarchical softmax,文中给出了解释:“遍历树中节点,需要根据两个类别簇的区别进行路径选择,类别簇内节点内容通常是无关联的。”。这中方法对于我们的视频内容来讲是很难实现的,很多内容之间具有各种相似的关联。

为了实现服务低延迟,服务阶段无需计算softmax获得视频分类,而是将用户Embedding与视频Embedding求dot-product,代表用户对视频感兴趣的分数,并取topk结果作为候选产出。这个过程中会用到一些ANN方法,目前成熟的有很多,计算速度也很快,感兴趣可以了解facebook的Faiss。 此外,文中也有提到,线上AB实验证明效果对于ANN算法不敏感。

2.2 模型架构

模型采用用户观看视频,用户搜索query,和地理人口统计特征作为主要特征经过前馈网络对用户进行编码,得到user Embedding。对于计算候选视频内容的过程,训练阶段和服务阶段略有区别:训练阶段才有上述所讲过的negative sampling的方法替代极多分类的softmax。出于低延迟服务的考虑,服务阶段则直接用user Embedding和视频Embedding计算dot-product表示分数,取topk作为候选结果。

受到word2vec启发,模型训练video的固定维度的Embedding表示,作为模型的预训练结果输入系统。

2.3 主要特征

对于用户表示,文中多采用用户行为类信息,如用户观看历史,用户搜索query历史表示。这两类行为类特征可将video Embedding和Word Embedding表示进行average得到特征表示。此外还用到了人口统计类特征,这能够对一些无行为的冷启动用户有个较好的用户表示。类似基于用户人口统计类特征的协同。

在训练过程中,模型会对用户表示和预训练的video Embedding表示联合训练。采用ReLu作为激活函数。

example age特征

推荐系统中,老内容用户行为多,模型学习充分,因此模型也会更倾向于推荐老内容。为了缓解推荐系统老内容占优的问题,youtube团队设计了一个标志视频‘年龄’的特征,即视频上传时间。这个特征只在训练时生效,在服务阶段都设定为0。从而弱化老内容占优的问题。从下图可以很清楚的看出,加入“example age” feature后和经验分布更为match。

2.4 label and context selection

在训练过程中,label的选择非常重要。以下是文中提到一些经验。

1. 收集一些非推荐的视频观看。训练数据中收集所有的youtube观看视频(或者一些站外观看)而不是仅仅是推荐的结果是非常重要的。这样不但可以防止用户兴趣学习有偏(推荐系统给什么,看什么),而且可以试探到很多用户的兴趣。

2. 固定每个用户训练样本量。这样做的好处是平等对待每个用户的损失影响,避免损失来自小部分活跃用户。

3. 不对称的共同浏览(asymmetric co-watch)问题。用户在浏览视频往往是序列式的,具有先后关系。下图所示图(a)是hled-out方式,利用上下文信息预估中间的一个视频;相当于对用户未来看到的内容进行了信息泄漏。图(b)是predicting next watch的方式,是利用上文信息,预估下一次浏览的视频。这和我们实际阅读顺序是一致的。文中也提到图(b)的方式在线上A/B test中表现更佳。而实际上,传统的协同过滤类的算法,都是隐含的采用图(a)的held-out方式,忽略了不对称的浏览模式。

3.候选排序(Ranking)

由于经过候选生成阶段的筛选,视频候选只有几百量级,所以候选排序阶段可以引入更多特征进行精细的打分排序。

排序阶段采用和候选生成阶段类似的网络结构,用logistics regresion对视频进行打分。不同的是,排序阶段采用观看时长作为学习目标而非点击率,因为点击率会有很多诱导点击的标题党内容,用户点击后很快会停止观看,所以观看时长是一个更合适表示用户是否感兴趣的指标。

3.1 模型架构

Ranking阶段的模型和候选生成阶段基本相似,不同的是Ranking阶段training最后一层是一个weighted LR层,serving阶段激励函数用的是e^x 。

3.2特征表示

特征工程

尽管深度模型可以方便的融合连续特征和类别特征,但是仍有很多问题需要人工设计特征才可能更好表达。

比如我们要根据用户行为度量用户对视频的喜欢程度,可以考虑用户与视频所在频道间的关系:

1. 数量特征:浏览该频道的次数?

2. 时间特征:比如最近一次浏览该频道距离现在的时间

另外除了这两个偏正向的特征,用户对于一些曝光未点击的行为也可以作为负反馈的特征。

类别特征Embedding

1. 存储类别特征到稠密Embedding映射。

预训练好类别特征,存储在map中。每次进行Embedding look-up操作即可。ID类特征空间大,取topk最活跃特征即可。对于未见过特征直接赋予0向量特征。多值组成的特征则采用average的方法对各个Embedding求平均来表示。

2. 同空间特征共享Embedding表示。

改善特征特征表示,学习特征间关联关系。

加速训练过程,减少训练参数。

减少内存大小需求。

连续特征正则化

众所周知,神经网络模型对输入规模和分布非常敏感。我们发现归一化方法对收敛很关键,文中采用累计积分在[0,1]区间的方法(类似累计概率分布),将连续特征归一化到0到1之间。此外除线性表示外,加入sqrt(x)和平方x^2 作为网络输入可以增强网络的表征能力。

3.3 时长模型

前文已经讲到,排序模型的目标采用阅读时长,阅读时长不是只有0,1两种标签,所以文中采用了weighted logistic regression来模拟这个输出。

正样本的输出值即阅读时长值,负样本的输出值则统一采用1。这样的话,LR学到的odds为:其中N是总的样本数量,k是正样本数量,Ti是第i正样本的观看时长。一般来说,k相对N比较小,因此上式的odds可以转换成E[T]/(1+P),其中P是点击率,点击率一般很小,这样odds接近于E[T],即期望观看时长。因此在线上serving的inference阶段,我们采用e^x作为激励函数,就是近似的估计期望的观看时长。

4 实验

4.1 候选生成阶段实验

文中对别不同特征和不同网络深度的实验结果,如下图所示:

可以很明显看出,增加了观看历史之外的特征很明显的提升了预测得准确率;从网络深度看,随着网络深度加大,预测准确率在提升,但继续增加网络深度已经收益不大了。

4.2 候选排序阶段实验

文中引入了weighted per-user loss作为评价指标。weighted per-user loss对正例和负例都进行统计,如果预测结果样本的正确标签(点击和未点击)的分数小于另外一种标签的分数,则认为是一种错误预测,对每个用户的错误预测loss求和即可获得该用户的loss。

对网络的hidden layers进行实验,结果如下:

可以看出随着hidden layer宽度或深度的增加,结果都有所提升。为了平衡效率,满足服务的延时,1024 ReLU->512 ReLU->256 ReLU 是youtube最终的选择。

对于上述hidden layer,文中还做了另外两个实验。实验发现

1. 归一化连续特征去掉根号和平方版本,loss 增加0.2%

2. 训练数据正负例采用相同的weight,loss损失增加了4.1%。 可见weighted观看时长作为预测输出效果显著。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190111G1IP9H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券