Youtube DNN:Deep Neural Networks for YouTube Recommendations

1.介绍

本文主要解决的三个挑战:

  • 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。
  • 不断更新的新物料。
  • 稀疏的用户行为,包含大量的噪声。

2.推荐系统

文章包含推荐系统的两阶段模型:召回和排序。
召回网络根据用户的历史行为从视频库中检索几百个候选视频,这些视频被认为有很高的准确率与用户相关。候选集的生成是根据粗粒度的个性化—协同过滤生成的。用户之间的相似性是以粗粒度特征表示的,例如视频观看ID,搜索query和统计特征。
在这里插入图片描述

3.召回

在候选生成期间,庞大的YouTube语料库被缩小到可能与用户相关的数百个视频。前身是一种矩阵分解的召回方法。我们早期的神经网络模型通过学习用户历史观看的嵌入,模仿了这种因子分解行为。从这个角度来看,我们的方法可以看作是因子分解技术的非线性推广。

3.1 推荐到分类

我们将推荐视为极端多类分类问题,其中预测问题变为准确地将特定视频分类问题。
基于用户 U 和上下文 C 在时间 t t t,指定视频 w t w_t wt为视频 i i i的概率:
P ( w t = i ∣ U , C ) = e v i u ∑ j ∈ V e v j u P(w_t=i|U,C)=\frac{e^{v_iu}}{\sum_{j\in V}e^{v_ju}} P(wt=iU,C)=jVevjueviu

V V V指语料库,其中 u ∈ R N u∈R^N uRN 表示用户向量,上下文对以及候选视频 v j ∈ R N v_j∈R^N vjRN 的高维向量。
深度神经网络的任务是学习用户嵌入:通过一个将用户历史和上下文映射为用户嵌入的函数和 softmax 分类器。
虽然YouTube上存在显式反馈机制(点赞/取消赞,产品调查),但我们使用观看的隐含反馈来训练模型,其中用户完成视频是一个正样本。这个选择是基于可用的用户历史的数量级更多,这能够产生位于长尾的视频推荐,而显式反馈对长尾视频的数据是极其稀疏的。
为了有效地训练这样一个数百万个类别的模型,我们依赖于一种从背景分布随机负采样的方法,并通过重要性加权对其进行校正。对于每个示例,最小化真实标签和负采样交叉熵损失。
实际上,每次取几千个负例,速度是传统softmax速度的100倍以上。流行的替代方法是层次Softmax,但我们未能实现可比的准确性。在层次Softmax中,遍历树中的每个节点涉及到区分通常无关的分类,从而使分类问题变得更加困难,降低了性能。

在服务时,我们需要计算最可能的N个类(视频),以便选择顶部N个显示给用户。在严格的几十毫秒的服务延迟条件下为数百万项评分,需要近似评分方案,其类的数量呈线性。YouTube先前的系统依赖于哈希,这里的分类器也使用类似的方法。由于不需要在服务时间内使用softmax输出似然,因此评分问题减少到了在点积空间中的最近邻搜索,其中可以使用通用目的库。我们发现在A / B测试结果对最近邻居搜索算法的选择不太敏感。

3.2 模型结构

受连续词袋语言模型的启发,我们为固定词汇中的每个视频学习高维度嵌入,并将这些嵌入馈送到前馈神经网络中。用户的观看历史通过稀疏视频ID的可变长度序列表示,并通过嵌入映射到稠密矢量表示。网络要求固定的密集型输入,只需简单地平均嵌入就表现得最好,这是几种策略(求和、逐元素最大值等)中的一种。重要的是,嵌入是通过正常的梯度下降反向传播更新与其他所有模型参数一起联合学习的。特征连接到宽的第一层,后面跟着几个完全连接的Rectified Linear Unit (ReLU)层。结构如下:
在这里插入图片描述

3.3 特征

使用深度神经网络作为矩阵分解的一般化实现方式的一个关键优势是:可以添加任意连续和分类特征到模型中。搜索历史与观看历史类似,每个query都分为单个单词和双字,并且每个标记都被嵌入。通过求平均值,用户的标记化、嵌入的查询就代表了摘要的密集搜索历史。人口统计数据很重要,因为它为新的用户提供先验,使推荐行为合理。用户的地理位置和设备被嵌入并连接起来。简单的二进制和连续特征,如用户的性别、登录状态和年龄,直接作为实值输入到网络中,并归一化到[0, 1]。

特殊特征:样本年龄 Example Age

每秒上传到YouTube的视频很多。对于YouTube作为产品来说,推荐这种最近上传的新鲜内容是非常重要的。我们一致认为,用户喜欢新鲜内容,但并不牺牲相关性为代价。除了仅仅推荐用户想要观看的新视频的第一个效应外,还有一个至关重要的次要现象,即启动和传播病毒内容。
机器学习系统经常对过去表现出内在偏差,因为他们是根据历史序列来预测未来。视频流行度的分布是非稳定的,但是推荐者产生的语料库的多项式分布会反映几周内训练窗口内的平均观看可能性。为了纠正这一点,我们在训练期间将训练例子的年龄作为特征输入。在服务时间,这个特性设置为零(或者稍微负),以反映模型正在训练窗口的尽头进行预测。
图4展示了这种方法在一个随意选择的视频上的有效性。
这里并没有说明“样本年龄”这个特征怎么计算的。
在这里插入图片描述

3.4 label和上下文选择

要强调的是,推荐往往涉及解决一个代理问题并将结果转移到特定上下文中。一个经典的例子假设:预测分数越准确,电影推荐更有效。我们发现,这个代理学习问题的选择对A / B测试中的性能有很大影响,但在离线实验中很难衡量。
训练样例是根据所有的YouTube观看生成的(嵌入其他网站的观看)而不是我们生成的推荐结果。否则,新内容很难出现,并且有些推荐人(更活跃)的数据倾向于过度利用。如果用户通过我们推荐以外的方式发现视频,我们希望通过协同过滤将这一发现快速传播给其他人。
另外一个提高线上指标的关键trick是为每个用户生成固定数量的训练样本,有效地在损失函数中平等对待我们的用户。这防止了一小批高度活跃的用户主导损失。
有点违反直觉的是,必须小心地保留信息,以防止模型利用网站的结构过度拟合代理问题。例如,考虑用户刚刚搜索了"tay-lor-swift",预测用户下一个观看的视频,给定该信息的分类器将预测最有可能观看的视频是,出现在相应的搜索结果页面上的“泰勒·斯威夫特”。无限制地再现用户的上次搜索页面作为主页推荐的表现非常糟糕。
通过丢弃序列信息,并使用无序的搜索query来表示搜索,分类器不再直接知道之前的label。

视频的自然消费模式通常会导致非常不对称的共同观看概率。观看序列包括
通常按顺序观看,用户发现艺术家,开始于最受欢迎的流派,然后专注于较为小众的。两种采样的性能对比:预测用户的下一次观看 VS 预测一个随机抽取的观看。如下图:
在这里插入图片描述
许多协同过滤系统隐式地随机选择item,然后通过用户历史的其他item预测它。这会泄露未来的信息,并且忽略了非对称的消费模式。作为对比,我们回滚用户的消费历史,随机选择item,但只输入用户之前的序列。

3.5 特征和模型深度实验

增加特征和深度显著提高了预测的精度,如图6所示。在这些实验中,使用了100万个视频和100万个搜索令牌的词汇表,每个dnn超参为256,在最大袋大小为50个最近观看和50个最近搜索的情况下。softmax层输出的是一个100万个视频类别的多元分布,其维度为256(可以认为是一个单独的输出视频嵌入)。这些模型一直训练到YouTube的所有用户收敛,对应于对数据进行的几个时期。网络结构遵循一个常见的“塔”模式,其中网络的底部最宽,每一层隐藏层都将单元数量减半(类似于图3)。深度为零的网络实际上是一种线性分解方案,其表现类似于之前的系统。添加宽度(features)和深度(dnn层数)直到边际收益递减以及难以收敛。
在这里插入图片描述

4.排序

排序的主要作用是利用印象数据来专门化并校准针对特定用户界面的候选预测。例如,用户可能通常以高概率观看某个视频,但由于缩略图图片的选择,不太可能点击特定的主页印象。在排序过程中,我们可以访问更多描述视频和用户与视频关系的特性,因为只有几百个视频正在评分,而不是在候选生成中得分的数百万个视频。排序对于将分数不能直接比较的不同候选源进行集成也至关重要。我们使用与候选生成类似的架构的深度神经网络,使用逻辑回归(图7)为每个视频印象分配一个独立的分数。然后按此分数对视频列表进行排序,并将其返回给用户。我们的最终排序目标是根据实时A/B测试结果不断调整的,但通常是每个印象预期观看时间的一个简单函数。通过点击率进行排序往往会推广欺骗性的视频,用户没有完成(“点击诱饵”),而观看时间更好地捕捉到了参与度。

4.1 特征表示

我们的特征按照传统的分类学和连续/顺序特征的分类方式进行了分离。我们使用的类别特征在基数上差异很大——有些是二进制的(例如用户是否登录),而另一些则有数百万种可能的值(例如用户的最后一条搜索查询)。特征进一步根据它们仅贡献单个值还是多个值进行分割。单类别特征的一个例子是被评分的印象的视频ID,而相应的多类别特征可能是用户最近观看的N个视频ID的集合。我们还根据特征是描述item的属性还是描述用户/上下文的属性来分类特征。Query特征每请求计算一次,而印象特征为每个被打分的项目计算。

特征工程

我们通常在我们的排序模型中使用数百个特征,均匀地分为类别和连续特征。尽管深度学习承诺通过手工减轻工程特征的负担,但是我们原始数据的本质并不容易直接输入前馈神经网络。我们仍然投入了大量的工程资源,将用户和视频数据转换为有用的特征。主要挑战在于表示用户操作的时间序列以及这些操作如何与正在排序的视频印象相关。
我们发现最重要的信号是那些描述用户之前与项目本身的交互以及其他相似项目的信号,这与其他人在广告排序方面的经验相吻合。例如,考虑用户过去与上传被打分视频的频道的历史-用户观看了这个频道多少视频?用户上次观看该主题的视频是什么时候?这些描述过去用户在相关项目上的连续动作的特征特别强大,因为它们很好地适用于不同的项目。我们还发现,以特征形式表示召回来源向排序传递信息至关重要,例如哪些来源召回了这个视频?分数是多少?
描述过去视频曝光频率的特征对于引入推荐中的“滚动”(连续请求不会返回相同的列表)也至关重要。如果用户最近被推荐了一个视频,但他们没有观看,那么模型自然会在下一页加载时降低这个印象的得分。提供最新的曝光和观看历史是一项工程壮举,超出了本文的范围,但对于产生响应式推荐至关重要。

类别特征embedding

与候选生成类似,我们使用嵌入将稀疏分类特征映射到适合神经网络的密集表示。每个唯一的ID空间(“词汇表”)都有一个单独的学习嵌入,其维数大致随唯一值的数量的对数增加。这些词汇表是在训练前遍历数据一次构建而成的简单的查找表。非常大的基数ID空间(例如视频ID或搜索查询词)只包括根据点击印象中频率最高的前N个。不在词汇表中的值只是映射到零嵌入
重要的是,同一个ID空间中的分类特征共享底层嵌入。例如,存在一个全局的视频ID嵌入,许多不同的特征都在使用(视频印象的视频ID,用户最后观看的视频ID,建议的种子视频ID等)。虽然共享嵌入,每个特征都单独输入网络,以便上层可以为每个特征学习专门化的表示。共享嵌入对于提高泛化能力、加速训练和减少内存需求非常重要。绝大多数模型参数都是在这些高基数的嵌入空间中——例如,一个百万ID嵌入32维空间中的参数比全连接层2048单位宽的参数多7倍(321000000 / (20482048)=7.63)。

标准化连续特征

神经网络对输入的比例和分布极为敏感,而决策树等替代方法则不受单个特征比例的影响。在收敛过程中适当归一化连续特征是至关重要的。具有分布f的连续特征 x x x被转化为 x ~ \tilde{x} x~,通过缩放值,使得该特征在[0,1)范围内均匀分布, x ~ = ∫ − ∞ x d f \tilde{x} =\int_{-\infty}^x df x~=xdf。这个积分在训练开始前通过一次遍历数据计算特征值的四分位数来进行线性插值。
除了原始归一化的特征 x ~ \tilde{x} x~外,我们还输入 x ~ 2 \tilde{x}^2 x~2 x ~ \sqrt{\tilde{x}} x~ ,使网络能够轻松形成超线性和次线性函数,从而增强表达能力。输入连续特征的幂被发现可以提高离线精度。

4.2 建模预测观看时长

我们的目标是根据训练示例预测期望观看时间,这些示例点击与未点击。正样本用用户观看视频的时间进行标注。为了预测期望观看时间,采用了加权逻辑回归技术。
模型使用逻辑回归进行训练,并且损失函数为交叉熵(图7)。然而,正(点击)样本由观察到的观看时间进行加权。负(未点击)样本采用单位权重。这样,逻辑回归学习到的概率是 T i N − k \frac{T_i}{N-k} NkTi
其中 N N N是训练样本的数量, k k k是正样本的数量, T i T_i Ti是第 i i i个印象的观看时间。假设正样本的比例很小(在我们的情况下这是真的),那么学到的概率近似为 E [ T ] ( 1 + P ) E[T](1+P) E[T](1+P),其中 P P P是点击概率, E [ T ] E[T] E[T]是印象的期望观看时间。由于 P P P很小,这个乘积接近 E [ T ] E[T] E[T]。在推理时,我们使用指数函数 e x e^x ex作为最终激活函数来生成紧密估计期望观看时间。

4.3 隐藏层实验

表1显示了隐藏层实验中在第二天数据上使用不同隐藏层配置获得的结果。对于每个配置(“加权,单用户损失”)得到的值是由考虑单个页面上展示给用户的正(点击)和负(未点击)印象。
首先用我们的模型对这两个印象预测分值。如果负曝光获得的分数高于正曝光,则我们认为正曝光的观看时间被错误预测。单用户的损失就是这样一个比例:抽出对中的总的错误预测观看时间/总观看时间。
结论
结果显示,增加隐藏层的宽度可以改善结果,增加其深度也是如此。然而,权衡是推理所需的服务器CPU时间。1024宽ReLU后跟512宽ReLU后跟256宽ReLU的配置为我们提供了最好的结果,同时使我们能够保持在服务CPU预算内。
对于1024→512→256模型,我们尝试只输入不带幂的规范化连续特征,这会增加0.2%的损失。
在相同隐藏层配置下,我们也训练了一个正负样本权重相同的模型。观看时间加权损失增加了4.1%。
在这里插入图片描述

5. 总结

我们已经描述了用于推荐YouTube视频的深度神经网络架构,分为两个不同的问题:召回和排序。我们的深度协同过滤模型能够有效地吸收多种信号,并通过捕获非对称的协同观看行为和防止未来信息泄漏,在现场指标上表现良好,超越了YouTube以前使用的矩阵分解方法。从分类器中保留区分性信号也是取得良好结果的关键,否则模型会过度拟合代理问题,并且无法很好地转移到首页。
我们证明了将训练样本的年龄作为输入特征可以消除对过去的内在偏见,并允许模型代表流行视频的时间依赖性。这提高了离线保留精度结果,并在A/B测试中大大增加了最近上传视频的观看时间。
排序是一个更经典的机器学习问题,但我们的深度学习方法在观看时间预测方面超过了之前的线性和基于树的方法。特别是推荐系统受益于描述过去用户与项目行为的专业功能。我们分别用嵌入和四分位数标准化来转化分类和连续特征。深度层有效地模拟了数百个特征之间的非线性交互。
通过用观看时间为正样本加权,用负样本单位加权修改逻辑回归,从而使我们能够学习紧密模拟期望观看时间的可能性。这种方法在预测点击率直接相比,更能适应加权观看时间的排名评估指标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174313.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链游风暴再起?MBOX即将再度起飞

近期链游再次进入了我们的视野,Play To Earn在21年大放异彩之后经过了2年沉寂近期终于有了再度爆发的征兆,不管是前段时间爆拉7倍的YGG,还是近期一路高歌猛进的MC都已经吹响了链游板块即将冲锋的信号,那么近期还有哪些值得关注的链…

开源利器:it-tools 项目介绍

作为一名开发人员,我们在日常工作和学习中常常需要使用一系列小工具,如JSON格式化、JSON转表格、当前时间戳、XML格式化、SQL格式化、密码生成以及UUID生成等。通常情况下,我们会在网上搜索各种在线工具来满足这些需求。然而,这些…

Spring两大核心之一:AOP(面向切面编程)含设计模式讲解,通知类型切点;附有案例,实现spring事务管理

模拟转账业务 pom.xml <dependencies><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29</version></dependency><!--lombok-->…

Ajax学习笔记第4天

做决定之前仔细考虑&#xff0c;一旦作了决定就要勇往直前、坚持到底&#xff01; 【1 模仿百度招聘】 整个流程展示&#xff1a; 1.文件目录 2.页面效果展示及代码 data中的page1数据展示 2.1 主页 index.html:index里面代码部分解释 underscore.js :模板页面的相关代码 &…

【Linux】深入理解系统文件操作(1w字超详解)

1.系统下的文件操作&#xff1a; ❓是不是只有C\C有文件操作呢&#xff1f;&#x1f4a1;Python、Java、PHP、go也有&#xff0c;他们的文件操作的方法是不一样的啊 1.1对于文件操作的思考&#xff1a; 我们之前就说过了&#xff1a;文件内容属性 针对文件的操作就变成了对…

[SpringCloud] Eureka 与 Ribbon 简介

目录 一、服务拆分 1、案例一&#xff1a;多端口微服务 2、案例二&#xff1a;服务远程调用 二、Eureka 1、Eureka 原理分析 2、Eureka 服务搭建&#xff08;注册 eureka 服务&#xff09; 3、Eureka 服务注册&#xff08;注册其他服务&#xff09; 4、Eureka 服务发现…

基于Electron27+React18+ArcoDesign客户端后台管理EXE

基于electron27.xreact18搭建电脑端exe后台管理系统模板 electron-react-admin 基于electron27整合vite.jsreact18搭建桌面端后台管理程序解决方案。 前几天有分享electron27react18创建跨平台应用实践&#xff0c;大家感兴趣可以去看看。 https://blog.csdn.net/yanxinyun1990…

OpenAI 组建安全 AGI 新团队!应对AI“潘多拉魔盒”

夕小瑶科技说 原创 作者 | 小戏 一旦谈及未来 AI&#xff0c;除了天马行空的科幻畅想&#xff0c;不可避免的也有未来 AI 时代的末日预言。从 AI 武器化到 AI 欺骗&#xff0c;从邪恶 AI 到 AI 掌权&#xff0c;人工智能&#xff0c;尤其是通用人工智能的风险始终都清清楚楚的…

【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码

目录 1. 分类数据的可视化 1.1 类别散点图&#xff08;Categorical Scatter Plot&#xff09; 1.2 类别分布图&#xff08;Categorical Distribution Plot&#xff09; 1.3 类别估计图&#xff08;Categorical Estimate Plot&#xff09; 1.4 类别单变量图&#xff08;Cat…

3 tensorflow构建的模型详解

上一篇&#xff1a;2 用TensorFlow构建一个简单的神经网络-CSDN博客 1、神经网络概念 接上一篇&#xff0c;用tensorflow写了一个猜测西瓜价格的简单模型&#xff0c;理解代码前先了解下什么是神经网络。 下面是百度AI对神经网络的解释&#xff1a; 这里不赘述太多概念相关的…

【Apache Flink】基于时间和窗口的算子-配置时间特性

文章目录 前言配置时间特性将时间特性设置为事件时间时间戳分配器周期性水位线分配器创建一个实现AssignerWithPeriodicWatermarks接口的类&#xff0c;目的是为了周期性生成watermark 定点水位线分配器示例 参考文档 前言 Apache Flink 它提供了多种类型的时间和窗口概念&…

NSS刷题 js前端修改 os.path.join漏洞

打算刷一遍nssweb题&#xff08;任重道远&#xff09; 前面很简单 都是签到题 这里主要记录一下没想到的题目 [GDOUCTF 2023]hate eat snake js前端修改 这里 是对js的处理 有弹窗 说明可能存在 alert 我们去看看js 这里进行了判断 如果 getScore>-0x1e9* 我们结合上面…

【MATLAB源码-第61期】基于蜣螂优化算法(DBO)的无人机栅格地图路径规划,输出最短路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蜣螂优化算法&#xff08;Dung Beetle Optimization, DBO&#xff09;是一种模拟蜣螂在寻找食物和进行导航的过程的优化算法。蜣螂是一种能够将粪球滚到合适地点的昆虫&#xff0c;它们利用天空中的光线和自身的感知能力来确…

Go 开发IDE全览:GoLand VS VSCode全面解析

一、引言 在软件开发的世界里&#xff0c;开发环境的选择与配置是成功项目的基础之一。特别是在Go&#xff08;又名Golang&#xff09;这样一个逐渐获得主流认同、在微服务和云计算领域有着广泛应用的编程语言中&#xff0c;选择合适的开发工具就显得尤为重要。虽然Go语言自身…

【MySQL】 复合查询 | 内外连接

文章目录 1. 复合查询多表笛卡尔积自连接在where子句使用子查询单行子查询多行子查询in关键字all关键字any关键字 多列子查询 在from子句中使用子查询合并查询unionunion all 2. 内连接3. 外连接左外连接右外连接 1. 复合查询 多表笛卡尔积 显示雇员名、雇员工资以及所在部门…

LeetCode2741.特别的排列 状压

暴力枚举的话是n&#xff01; 考虑状压DP&#xff0c;其实就是用二进制表示状态 再进行暴力 同时加一个记忆化就好了 这里有常用技巧&#xff1a; 全集&#xff08;1<<n&#xff09;-1 增加某个元素 x | (1<<i) 删除某个元素 x & ~(1<<i) const i…

Java进阶(Set)——面试时Set常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合&#xff0c;需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中Set集合的面试问题&#xff0c;结合源码分析题目背后的知识点。 关于List的博客文章如下&#xff1a; Java进阶&#xff08;List&#xff09;——面试时L…

最短路径:迪杰斯特拉算法

简介 英文名Dijkstra 作用&#xff1a;找到路中指定起点到指定终点的带权最短路径 核心步骤 1&#xff09;确定起点&#xff0c;终点 2&#xff09;从未走过的点中选取从起点到权值最小点作为中心点 3&#xff09;如果满足 起点到中心点权值 中心点到指定其他点的权值 < 起…

Java学习_day05_数组

文章目录 一维数组概念初始化默认值动态赋值 二维数组概念初始化遍历数组 一维数组 数组是目前学习Java中&#xff0c;遇到的第一个引用对象。即在变量的存储空间中&#xff0c;存储的不再是数值&#xff0c;而是内存地址。这个内存地址指向实际对象的存储空间地址。 概念 …

Cocos Creator 中使用装饰器进行自动绑定

推荐一个偷懒的方式&#xff0c;使用装饰器自动绑定节点到脚本的属性 背景 用 Cocos Creator 写脚本组件的时候&#xff0c;有时需要场景中一个节点作为这个脚本的属性值。 按照官方文档推荐的方法&#xff0c;需要以下两步 添加一个 property 属性&#xff0c;在场景中拖入这个…