用于YouTube推荐的深度神经网络YouTube DNN

这篇论文是最近参加组会看的一篇新论文,论文虽然是2016年出的论文,但是它是YouTube发表的,且是应用在YouTube这样超级大的平台上的一篇工业界的推荐系统的论文,我读完之后也觉得论文有一些可取之处的,所以和大家分享一下我的组会ppt汇报。
YouTube是世界上最大的视频创作分享平台,其视频推荐面临的主要问题有:

  • Scale(用户量巨大):现有的推荐算法通常在小数据集有良好的表现,但是在YouTube这样规模的数据集上未必表现良好。
  • Freshness(新鲜度):YouTube系统每秒钟都有大量新视频上传(实时性),推荐系统应该能够快速的对视频及用户行为作出反馈,并平衡新老视频的综合推荐。
  • Noise(噪声): 用户的历史行为往往是稀疏的并且不完整的,同时视频本身很多数据都是非结构化的,这两点对推荐算法的鲁棒性提出了挑战。

image.png
Youtube的用户推荐场景自不必多说,作为全球最大的UGC(用户生成内容)视频网站,需要在百万量级的视频规模下进行个性化推荐。由于候选视频集合过大,考虑online系统延迟问题,不宜用复杂网络直接进行推荐,所以Youtube采取了两层深度网络完成整个推荐过程:

  • Candidate Generation Model 即候选生成模型(也叫召回模型)
  • Ranking Model 排序模型

下图是本文的推荐系统模型架构图,视频池子中包含有亿级别个视频,当经过第一层候选生成层模型时,这层主要是做粗略的筛选,视频被过滤为只有百级别个视频,再次经过第二层模型时,这层会将视频进行打分排序,然后筛选出前几十个视频,输出到用户的视频主页上,供用户观看,如下图所示:
image.png

CANDIDATE GENERATION 候选生成模型

这一层模型用两个字概括就是“粗糙”,将视频池子中的数百亿的视频,经过第一层筛选得到数百个视频,传入到下一层模型进一步训练。
image.png
下图是候选生成模型的的模型架构图,从下往上看,将浏览历史、搜索历史特征嵌入为高层embedded向量,还会加入其他有关用户画像的特征,如地理位置、年龄、性别等特征,将这些人口统计学信息归一化到[0,1]范围中,与前面的特征进行拼接,然后将所有的特征喂给上层的神经网络模型,经过三层神经网络后,我们可以看到softmax函数。这里YouTube把这个问题看作为用户推荐next watch的问题,是一个多分类的问题。
image.png
候选集生成建模为一个“超大规模多分类”问题其分类公式如下图式所示:
在时间t时,用户U在其特定的上下文C,对指定的视频wt准确的划分到第i类中。
image.png
其中u是用户和其上下文的高维embedded嵌入,v是视频的高维embedded嵌入。
针对该架构,有如下几点值得关注:
(1) 主要特征的处理1:watch and search 浏览历史和搜索历史。
视频存在于手机等设备上,是一串稀疏的,变长的视频ID序列,通过固定的词汇表,经过加权平均,可以基于其重要性或时间,得到一串稠密的,定长的观看向量,输入到上层神经网络中,如下图所示:
image.png
主要特征的处理2:example age 视频上传时间
如下图所示,横坐标是视频上传的时间,轴坐标是类别概率,在没有加入到example age特征时,可以注意到这条蓝色的线,一直表现的很平平,加入了此特征,类别的概率更加符合按经验分布,说明这个特征的重要性。
image.png
(2) 上下文选择
用户观看视频时,遵循一种asymmetric co-watch非对称共同观看,用户在浏览视频时,往往都是序列式的,开始看一些比较流行的逐渐找到细分的视频。
如下图所示,(a)图是利用上下文信息预估中间的一个视频,(b)图是利用上下文信息,预估下一次浏览的视频,显然,预测下一次浏览的视频比预测中间的一个视频要简单的多。
image.png
通过实验也可以发现,图(b)的方式在线上A/B test中表现更佳,而实际上,传统的协同过滤类算法,都是隐含采用图(a)方式,忽略了不对称的浏览方式。
(3) 特征集以及深度的实验
如下图所示,神经网络模型采用的是经典的“tower”模式搭建网络,所有的视频和搜索历史都embedded到256维的向量中,开始在input层直接全连接到256维的softmax层,然后依次增加网络深度(+512–>+1024–>+2048–> …)

image.png
image.png
如下图所示,横轴表示深度神经网络的训练深度,纵轴表示平均精度,自变量是特征的数量,随着特征数量的增加,其平均精度呈上涨趋势,当深度神经网络达到第三层时,其平均精度不在出现”大幅度“增加。
当然考虑到CPU计算及用户可等待时长,深度神经网络的层数也不宜过多,基于实验,神经网络取3层就够了,除非以后的计算上来了才无限的增加深度神经网络的训练层数。
image.png

RANKING 排序模型

将上一层得到的几百个模型经过排序模型,评分排序,输出前面的几十个视频到用户的手机上,供用户观看。
image.png
这一层模型架构乍一看和第一层候选生成层模型一样,但是,又有一些区别。增加了很多其他的更多精细的特征,用来进行个性化的筛选。
会有人说,干嘛废那劲啊,直接一个弄一个深度神经网络模型不就行了吗,将所有的视频一起打分排序,然后输出前几十个视频到用户的主页上展示,供用户观看不就行了。
这样确实可以,一个模型解决,多方便呀。但是,你可能没有考虑一个问题,就是现在的CPU有这么高的计算能力供你计算吗?对所有的用户,所有的视频分别进行排序打分,服务器能不能承受的住,CPU计算会不会暴,就算计算能够承受下来,那会消耗多少时间,在线刷视频的用户等不等得起,毫无疑问,用户没有这么多耐心,等这个推荐系统跑完,就会换别的软件了。
而且,实在是没有必要,连第一层粗排都过不了的视频,在打分排序阶段,分数肯定太低,排不到前面去的。
image.png
由上图所示,排序模型架构图也是自下而上的观看,新加入的特征有当前要计算的视频ID,用户光看过的最后N个ID,用户的语言,视频的语言作为语言嵌入,还有自上次观看同频道视频的时间,该视频已经曝光给该用户的次数等特征,将这些特征拼接起来,然后喂给上层的神经网络模型,训练时用加权逻辑回归为每一个视频独立打分,按照得分排序。
针对排序DNN,有如下几点需要关注:
(1) 用户对频道的喜爱程度可以通过用户对该频道的视频的点击次数来度量,用户在该频道的上次观看时间等。
(2) 类别特征embedding:作者为每一个类别特征维度生成一个独立的embedding空间。值得注意的是,对于相同域的特征可以共享embedding,其优势在于加速迭代,降低内存开销。
(3) 连续特征归一化:DNN对于输入的分布及特征的尺度敏感。作者设计一种积分函数将特征映射为一个服从[0,1]分布的变量。该积分函数为:
image.png
(4) 建模预期观看时长:正样本:视频被展示并被点击;按照观看时长进行加权负样本:视频被展示但未被点击;单位权重作者采用一种加权逻辑回归基于交叉熵损失进行训练。逻辑回归几率为:
image.png
那么学习概率是:E[T]*(1+P) ≈ E[T] [预期观看时间,点击率]
(5)第5个特征#previous impressions一定程度上引入了exploration的思想,避免同一个视频持续对同一用户进行无效曝光。一般来说,用户观看完一个视频后,再次观看同视频的概率大大降低,因此并不需要再次推送此视频给用户。

隐藏层实验

下图是作者进行的神经网络模型隐藏层层数的实验,可以看到随着隐藏层的层数和宽度的增加,其对于每个用户的加权损失降低,到实验达到1024–>512–>256这个网络时,其损失不在“大幅度”的减少,故选择这个配置的隐藏层即可,损失为34.6%。
image.png
而对于1024–>512–>256这个网络,测试的不包含归一化后根号和平方的版本,loss增加了0.2%。而如果把weighted LR替换成LR,效果下降达到4.1%。

CONCLUSIONS 总结

本文最突出的贡献在于如何结合业务实际和用户场景,选择等价问题,实现推荐系统。
首先,深度协同过滤模型能够有效地吸收更多特征,并对它们与深度层的相互作用进行建模,优于以前在YouTube上使用的矩阵分解方法。
其次,作者对特征的处理策略充满智慧。比如,对**example age**特征的加入,消除了对过去的固有偏见,并允许模型表示流行视频的时间依赖行为。
最后,排序阶段,对评估指标的选择能够结合业务,取期望观看时间进行训练。

个人的一些想法

这篇论文是2016年,YouTube发表的推荐系统的会议文章。
YouTube的推荐系统仅仅使用了两个模型,使用深度学习神经网络的方法进行的推荐,整体来说模型的稍微有点简单了,但是胜在快。自己使用了一下YouTube这个软件,发现其推荐算法确实有点缺点,你刷什么视频,就一直给你推荐相关视频,过于单一了,就单从推荐算法来说,还是国内的某些软件上推荐的好。可是毕竟是16年的推荐算法了,且是首次使用深度学习神经网络应用在推荐系统上,而且是已经在工业上实施的论文,可以公开让我们读到,还是很让我增长见识的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Chrome实用命令笔记】

文章目录 Chrome实用命令笔记1、chrome基本介绍2. 打开开发者工具(DevTools)方法一:快捷键方法二:右键菜单方法三:浏览器设置 2. 开发者工具面板Elements面板Console面板Sources面板Network面板Performance面板Memory面…

数据结构:图

数据结构:图 前言 在自动化程序分析中,图和树的一些算法起到了至关重要的作用,所以在开始自动化程序分析的研究前,我用了两天复习了一遍数据结构中的图。本章主要内容有图的基本概念,图的存储和图相关的经典算法&…

十二届蓝桥杯Python组1月中/高级试题 第五题

** 十二届蓝桥杯Python组1月中/高级试题 第五题 ** 第五题(难度系数 5,35 个计分点) 提示信息: 平均数:是指在一组数据中所有数据之和再除以这组数据的个数。 如:“1,2,3&#xf…

品鉴中的文化碰撞:如何理解和欣赏不同文化背景下的红酒

红酒作为世界各地广泛生产的产品,具有丰富的文化内涵。不同国家、地区和民族的红酒文化各具特色,反映了当地的历史、传统、习俗和生活方式。在品鉴云仓酒庄雷盛红酒时,理解和欣赏不同文化背景下的红酒是提升品鉴体验的重要一环。 首先&#x…

目前市面上堡垒机厂家有哪些?会帮忙部署吗?

随着大家对于网络安全的重视,越来越多的企业准备采购堡垒机了。不少企业在问,目前市面上堡垒机厂家有哪些?会帮忙部署吗?这里我们小编就来简单为大家回答一下,仅供参考哈! 目前市面上堡垒机厂家有哪些&…

idea开发工具 项目使用Spring框架开发解决yml配置文件不识别问题,解决方案教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 问题点,配置文件不识别 解决流程 添加出来的yml配置文件,点击🆗 问题已解决 如果问题没有解决的话,第二种方法 这是识别成功的 技术细节 项目重构Maven环境…

libmodbus使用

安装可以看这个博客&#xff1a; https://blog.csdn.net/hanhui22/article/details/105786762 它的安装可以&#xff0c;但是编译测试看不太懂&#xff0c;我没跟着它的编译&#xff0c;完了后把/lib下的 放到开发板的/usr/lib下 编写代码: #include <stdio.h> #inclu…

VS 编译动态链接库dll及其动态链接库的调用方式

VS 编译动态链接库及其动态链接库的调用方式 1编译动态链接库 (1)Step01: 打开VS (2)Step02: 新建项目 (3)Step03: 选择动态链接库&#xff08;搜索DLL&#xff09; (4)Step04: 新建头文件&#xff08;如MyDLL.h) 该文件编写对外暴露的接口函数&#xff0c;即在该函数内声…

deepspeed入门

一、目录 deepspeed 简介库安装配置deepspeed 实现demo如何配置deepspeed参数案例分析 二、实现 deepspeed 简介 Deepspeed是微软的大规模分布式训练工具。专门用于训练超大模型。主要目标是降低训练期间的内存占用、通信开销和计算负载&#xff0c;从而使用户能够训练更大的…

上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝

本文目录 前言1、视频编程实战1.1、熟悉代码库中的代码1.2、参考现有代码编写新代码 2、下载使用教程3、使用体验3.1、AutoWork 产品测评3.2、解决有关ajax请求后重定向问题3.3、询问编程相关知识3.3.1、cookie和session的区别与联系3.3.2、数据库中主键外键的相关知识 4、问题…

ARTS Week 26

Algorithm 本周的算法题为 35. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1:输入: nums [1,…

基于MSOGI的交叉对消谐波信号提取网络MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 此模型利用二阶广义积分器&#xff08;SOGI&#xff09;对基波电流和相应次的谐波电流进行取 &#xff0c;具体是通过多个基于二阶广义积分器的正交信号发生器 &#xff08; S&#xf…

python魔法方法是什么

魔法方法是python内置方法&#xff0c;不需要主动调用&#xff0c;存在的目的是为了给python的解释器进行调用&#xff0c;几乎每个魔法方法都有一个对应的内置函数&#xff0c;或者运算符&#xff0c;当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法&…

可视化-实验四- seaborn工具包绘图基础及关系

一、任务一 1.1 开发环境 多种选择方案&#xff08;大家根据自己的编程习惯&#xff0c;选择适合自己的工具&#xff09;&#xff0c;老师授课如下&#xff1a;Anaconda3Jupter 1.2 特殊包 导入工具包设置中文显示&#xff1a; import matplotlib.pyplot as plt import p…

在做ESP32-S3模组物联网项目时无法烧录下载怎么排查原因?分享经验

ESP32-S3模组在物联网中非常好用&#xff0c;可以做带屏小音箱、温控器、智能86盒、泳池清洁机器人等等&#xff0c;在烧录的时候经常会遇到一些问题&#xff0c;这里分享一些烧录失败的原因或者烧录遇到的问题&#xff0c;教大家怎么排查原因&#xff0c;希望能帮到大家&#…

参数化建模系列-cityengine篇之:如何基于GIS数据快速构建道路三维建模模型

结合上期介绍的基于GIS数据自动化构建城市三维建筑模型&#xff0c;本期在上期的知识点上继续介绍道路模型的自动化构建方法。 数据获取 本期道路自动化建模从获取道路数据开始。 首先打开“QuickOSM”插件&#xff0c;在“Key”中选择“highway”&#xff1b;其次选择数据范…

Python程序设计 函数(三)

练习十一 函数 第1关&#xff1a; 一元二次方程的根 定义一个函数qg&#xff0c;输入一元二次方程的系数a,b,c 当判别式大于0&#xff0c;返回1和两个根 当判别式等于0&#xff0c;返回0和两个根 当判别式小于0&#xff0c;访问-1和两个根 在主程序中&#xff0c;根据函数返回…

数据结构(四)—— 堆和二叉树(上)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、树的概念及结构二、二叉树的概念及结构总结 前言 这篇博客我们将进行更加复杂的一种数据结构的学习——树形结构。 一、树的概念及结构 树是一种非线性的数据结构&#xff0c;它是…

如何把多个文件(夹)平均复制到多个文件夹中

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 假定的情况是&#xff0c;共有20个兔兔的图片&#xff0c;想要平均的复制4个文件夹里&#xff0c;那么每个文件夹里面就有5个图片 &#xff08;如果是5个&a…

一般产品:功能、质量、结构

**一般产品&#xff1a;**功能、质量、结构 通用工程&#xff1a; 收益-风险&#xff1b;过程-结果&#xff1b;少数-多数 风险 vs 收益 过程 vs 结果 少数 vs 多数 工程师的特点&#xff1a; 人道无害雇主实事求是&#xff0c;恪守公心&#xff0c;严守纪律&#xff0c;…
最新文章