推荐系统经典模型YouTubeDNN

文章目录

    • YouTubeDNN概念
    • YouTubeDNN模型架构图
    • YouTubeDNN召回阶段
      • YouTubeDNN层级介绍
    • YouTubeDNN排序阶段
    • YoutubeDNN模型中的一些Trick
      • 负采样问题
      • 特征构造
      • 上下文选择
    • 总结

YouTubeDNN概念

  • YouTubeDNN是YouTube用于做视频推荐的落地模型,其大体思路就是召回阶段使用多个简单的模型来进行筛选,这样可以大量地筛除相关度较低的内容,而排序阶段则是使用相对复杂的模型来获得精准的推荐结果。YouTubeDNN模型主要分为两个阶段:召回阶段和排序阶段。
  • YouTubeDNN模型的召回主要是完成候选视频的快速筛选(在论文中被称为 Candidate Generation Model),也就是候选集的生成模型。在这一部分中,模型要做的就是将整个YouTube数据库中的视频数量由百万级别降到数百级别。
  • 为什么要使用YouTubeDNN模型?
    • 答:传统的协同过滤算法处理百万级数据量,很明显是不够的,因为CF算法的本质就是计算两两内容之间的关系矩阵,然后将结果保存在内存当中,当然随着数据量的增大,就会很容易地出现OOM的现象。假设有个无限大的内存的分布式计算系统(Spark等),对于百万级矩阵计算处理时所耗费的时间,也不是我们想看到的结果。而YouTubeDNN则利用了Embedding向量加上对负样本的特殊采样处理,巧妙地解决了这一问题。

YouTubeDNN模型架构图

  • YouTube推荐系统架构图
    在这里插入图片描述
    • 从论文的解释中我们可以得知这个架构就像是一个沙漏(funnel)一样,从最初的百万级→数百级→十级别。

YouTubeDNN召回阶段

  • YouTubeDNN召回模型架构图
    在这里插入图片描述

YouTubeDNN层级介绍

  • 我们可以把召回模型的结构分为三层。
    • 输入层:输入层总共有四种特征。

      • 用户看过视频的 Embedding(embedded video watches)
      • 用户搜索的关键词的 Embedding 向量(embedded search tokens)
      • 用户所在的地理位置的特征(geographic embedding)适用于冷启动
      • 用户基本特征(example age, gender)
      • 在处理观看的视频序列和搜索词时需要格外注意,每一个人所观看的内容的数量、长度一定不同、所搜索的关键词也一定不同,所产生出来的Embedding也会千差万别,所以就需要用多值特征和平均池化进行处理。由于每个人的序列长度不同,我们在进行训练时就需要将多值特征中的每一个视频ID经过Embedding Lookup(通过矩阵相乘类似于一个全连接层)操作后,得到其对应的Embedding向量,然后再经过平均池化处理,最后得到这个多值特征所对应的Embedding特征。
      • 最后将处理完的特征拼接成一个大的Embedding输入给模型。
    • 三层神经网络(训练层):这一层也就是模型训练层,这里采用了三层ReLU结构,实际上在YouTubeDNN中,这三层ReLU的作用就是接收输入层特征的CONCAT,然后使用常见的塔形设计,对自底向上的每一层神经元数目作减半处理,直到得到的输出维度与Softmax所要求的输入维度相同(256维)。也就是1024→512→256。

    • Softmax层(输出层):在经过三层ReLU之后,召回层使用Softmax作为输出层。我们知道,传入Softmax层的参数是用户的Embedding向量,而这里的用户的 Embedding并不是在输入层里面的用户Embedding,而是经过实时计算得到的,也就是最后一层ReLU的输出。

      • Softmax层最终的输出并不是点击率的预估,而是预测用户最终会点击哪个视频。首先看右侧的Softmax部分,这一部分实际上是把上一步ReLU输出的user u接到了Softmax 层,得到其概率分布。
      • YouTubeDNN把每一个视频当做一个类别,这里的Softmax可以理解为每一个视频进行了一个概率上的打分。从论文的角度来说,就是将user u和video v进行内积(这个内积实际上就是求其相似度然后再进行 Softmax),这样就可以得到用户观看每个视频的概率,也就是上面这张图中所展示的class probabilities。Softmax右侧部分也就是一个离线的Training(主要是加快线上预测效率)当得到右侧最终的用户向量之后,为了与离线的训练保持一致,需要对每个video进行内积计算,然后得到概率Top N个结果作为输出。
      • Softmax最左边是一个nearest neighbor index,这个部分就是核心所在。这里YouTubeDNN采用最临近搜索的方法去完成topN的推荐,通过召回模型得到user u和video v做内积,然后再用最临近搜索来得到最后的 topN,这样的效率实际上是最高的。
      • Softmax层概率公式:基于用户U与上下文C,在t时刻,将视频库V中指定的视频wt划分为第i类的概率
        在这里插入图片描述

YouTubeDNN排序阶段

  • YouTubeDNN排序模型架构图
    在这里插入图片描述
  • YouTubeDNN排序阶段模型图与召回层模型相似,排序模型面对的只是来自检索的数百候选视频,所以可以使用更多精细的特征,重点是精准预测。论文中已特征工程的角度对各个视视频特征进行了embedding处理,然后再进行ReLU层,最终通过加权LR进行Training,在线上Serving部分使用了e^(wx+b)进行预测。
  • 论文中将特征分成了两类一类是impression一类是query。
    • video embedding包含impression video ID(展示视频)、watched video ID(用户已观看视频后续还需要进行avg-pooling处理)。
    • language embedding包含:user language(用户语言)和video language(视频语言)。
    • time since last watch(自上次观看同channel视频的时间)进行归一化处理,刚看过这个channel的视频,还会继续曝光该channel的其他视频
    • previous impressions(该视频已经被曝光给该用户的次数)进行归一化处理,主要是防止无效曝光。
  • 这里就简单介绍一下排序模型的架构,因为排序模型更改迭代速度实在是太快了。本章主要是还是从召回模型做思考。

YoutubeDNN模型中的一些Trick

负采样问题

  • YouTubeDNN采用了负采样,训练样本来自全部观看记录,观看记录包括用户被推荐的内容,再加上用户自己搜索或者在其他地方点击的内容,这样做的好处是可以使新的视频也能够有比较好的曝光。
  • 把用户看完的内容作为正样本,再从视频库里随机选取一些样本作为负样本。没有曝光过的内容理论上有可能被点击过,但是这里把它们全都变成了负样本,这样就有了一定的随机性
  • 在采样时,训练数据中对每个用户选取相同的样本数。这样做的目的是保证用户在损失函数的权重是相等的,这样可以尽可能地减少高度活跃的用户对整个推荐结果的Loss的影响。
  • 为什么加入负采样的目的是提高训练的速度?
    • 对于每一个样本来说,所有视频来说都有可能是正样本,YouTubeDNN Softmax实际上对每个视频都计算出一个概率,如果不做负采样,则会形成一个数以万计的分类,显然增加了训练难度,所以作者这里正常提取正样本,把负样本从视频库中根据重要性进行抽样,这样可以缓解训练压力,提升整体效率。

特征构造

  • 对于一些简单的特征(用户性别、年龄)没有经过特殊的处理,直接输入,然后做一层归一化后,把最终的结果压缩到[0, 1]范围内。

  • 对于用户观看的视频(video)在模型中并没有取视频的特征,只是简单将视频ID 作为特征传入进来,然后利用DNN来自动学习商品的Embedding特征。

  • 因为用户更偏向于喜欢观看最新的视频,而随着时间的增长喜爱程度会下降,为了修复此问题,引入了召回模型中的example age特征。
    在这里插入图片描述

  • 历史信息是一个边长的视频ID序列,根据ID序列和Embedding视频矩阵来获取用户历史观看的Embedding向量序列,通过weighted、avg、attention等方法,将这个 Embedding序列映射成一个定长的Watch Vector,作为输入层的一部分。

上下文选择

  • 在上下文和标签的选择中,主要利用了序列的方法。用户每次进入YouTube一直到退出都有一定的序列,而这个序列一开始会选择范围比较广的视频进行浏览,然后再慢慢地专注到一个比较小的范围内。类似于冷启动里的EE问题,先探索再开采。这种浏览行为实际上就是一种不对称的浏览行为。因此,作者从观看序列中随机抽取一个视频作为Label,这样就忽略了这种不对称性所产生的影响,如下图所示:
    在这里插入图片描述
  • 上图是一个对比实验,很多算法都是采用左边的方法,利用全局观看的信息作为输入,这样就忽略了观看序列的不对称性。而YouTubeDNN则是使用右边的方法,就是把历史信息当做输入,用历史来预测未来。这样做的优点就是模型的测试集往往也是用户最近一次的观看行为,后面可以把用户最后一次的点击放到测试集中,防止信息穿越的问题,在线上AB测试方面表现更佳。

总结

  • 这些内容对于初学推荐系统的小伙伴还是比较有帮助的,具体一些细节还是得在论文中查看,这里老规矩放上论文链接,关于代码方面,会在后面更新。

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

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

相关文章

33.云原生之Istio管理任何七层流量

云原生专栏大纲 文章目录 Istio存在的问题Aeraki介绍Aeraki 的解决方案支持的协议支持的特性 安装AerakiAeraki教程采用 ServiceEntry 的 Demo 应用使用 Dubbo2Istio 对接 Dubbo 注册表 的 Demo 应用(Interface 级流量治理) Service Mesh 中有大量的七层…

2024年全国乙卷高考文科数学备考:历年选择题真题练一练(2014~2023)

今天距离2024年高考还有三个多月的时间,今天我们来看一下2014~2023年全国乙卷高考文科数学的选择题,从过去十年的真题中随机抽取5道题,并且提供解析。后附六分成长独家制作的在线练习集,科学、高效地反复刷这些真题,吃…

【C语言】linux内核ipoib模块 - ipoib_ib_post_receive

一、中文注释 用于以太网接口(InfiniBand)上的IP over IB(IPoIB)设备的Linux内核函数,负责将接收缓冲区(一个包)提交到网络设备的队列中等待数据到达。下面是中文注释版本的函数代码&#xff1…

国家建筑装配式内装产业基地在沪成立,副主任单位优积科技协同助推绿色低碳循环发展

上海市室内装饰行业协会装配式内装产业专业委员会成立大会暨“国家建筑装配式内装产业基地”项目启动会于3月21日下午1点在上海光大酒店隆重举行。出席此次活动的包括市装协会长徐国俭,市装协党支部书记兼秘书长丛国梁,市装协装配式内装委主任顾泰昌&…

内容安全补充

第十一天 密码学 近现代加密算法 古典加密技术 --- 算法保密原则 近现代加密技术 --- 算法公开,密钥保密 对称加密算法,非对称加密算法 对称加密 --- 加密和解密的过程中使用的是同一把密钥。 所以,对称加密所使用的算法一定是一种双向…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写,使用了vue框架。该系统从三个对象:由管理员和用户、店铺来对系统进行设计构建。主要功能包括:个人信息修改,对用户、店铺、二…

【RN】为项目使用React Navigation中的navigator

简言 移动应用基本不会只由一个页面组成。管理多个页面的呈现、跳转的组件就是我们通常所说的导航器(navigator)。 React Navigation 提供了简单易用的跨平台导航方案,在 iOS 和 Android 上都可以进行翻页式、tab 选项卡式和抽屉式的导航布局…

如何在 Tomcat 中为 Web 应用程序启用和配置缓存?

在Tomcat中为Web应用程序启用和配置缓存通常涉及到对Tomcat的连接器(Connector)进行配置,以及可能的话,配置Web应用程序本身以支持缓存。 1. 配置Tomcat连接器以启用缓存 Tomcat的连接器可以通过其配置来启用各种…

软考-中级-系统集成2023年综合知识(三)

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 软考中级专栏回顾 专栏…

C#学习总结

1、访问权限 方法默认访问修饰符:private 类默认访问修饰符:internal 类的成员默认访问修饰符:private 2、UserControl的使用 首先添加用户控件 使用时一种是通过代码添加,一种是通过拖动组件到xaml中

Stable Diffusion 绘画入门教程(webui)-ControlNet(IP2P)

上篇文章介绍了深度Depth,这篇文章介绍下IP2P(InstructP2P), 通俗理解就是图生图,给原有图加一些效果,比如下图,左边为原图,右边为增加了效果的图: 文章目录 一、选大模型二、写提示词三、基础参…

RabbitMQ的死信队列和延迟队列

文章目录 死信队列如何配置死信队列死信队列的应用场景Spring Boot实现RabbitMQ的死信队列 延迟队列方案优劣:延迟队列的实现有两种方式: 死信队列 1)“死信”是RabbitMQ中的一种消息机制。 2)消息变成死信,可能是由于…

绿盾限制终端网络访问权限会恢复后,别的网站访问正常就是无法访问钉钉网站和下载东西

环境: Win10 专业版 钉钉7.5.5 绿盾7.0 问题描述: 绿盾限制终端网络访问权限会恢复后,别的网站访问正常就是无法访问钉钉网站和下载东西 解决方案: 排查方法 1.重置浏览器或者更换浏览器测试(未解决&#xff09…

【Java】输入输出流(实验八)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、掌握java I/O的基本原理。 2、掌握标准输入输出流和Scanner类的基本使用方法。 3、掌握FileInputStream、FileOutStream、FileReader、FileWriter、BufferedReader 、BufferedWriter类的常用方法。 二、实验…

VR系统的开发流程

虚拟现实(Virtual Reality,VR)系统是一种通过计算机技术模拟出的具有三维视角和交互性的虚拟环境,使用户能够沉浸在其中并与虚拟环境进行交互。这种技术通常利用头戴式显示器和手柄等设备,使用户能够感觉到仿佛身临其境…

【kubernetes】kubeadm部署k8s集群(3主3从+keepalived/nginx负载均衡高可用)

目录 一、完成系统初始化 步骤一:常规环境初始化 步骤二:内核版本升级以及内核限制文件参数修改 步骤三:提前准备好负载均衡器和keepalived(接着之前的二进制部署修改的) 二、所有节点部署docker,以及指定版本的kubeadm 步骤…

Mysql系列之命令行登录、连接工具登录、数据库表常用命令

登录与常用命令 连接工具登录命令行登录数据库1、查看数据库2、指定数据库3、查看当前数据库4、建库语句 数据表1、查看数据表2、查看表结构信息3、查看建表语句4、建表语句 连接工具登录 首先下载mysql连接工具,解压后直接打开软件,按以下步骤操作&…

CSS实现半边边框(只有边框的部分可见)

CSS实现半边边框&#xff08;只有边框的部分可见&#xff09; <div class"part box"><h1>内容</h1><!-- 绘出下面两个对角边框--><div class"part-footer"></div> </div>主要代码 .box {width: 100px;height:…

RabbitMq:什么是RabbitMq? ①

一、RabbitMq定位 RabbitMq是一个基于消息订阅发布的一款消息中间件。 二、技术原理 核心概念 server&#xff1a;又称broker&#xff0c;接受客户端连接&#xff0c;实现AMQP实体服务。缓存代理&#xff0c;Kafka集群中的一台或多台服务器统称broker.connection&#xff1a;…

工作中常见问题总结

工作中常见错误清单 1、springboot实现无数据库启动 问题 springboot往往是作为b/s系统的server端的架子来使用&#xff0c;但是有些时候&#xff0c;是作为静默的server&#xff0c;并没有界面和数据库&#xff0c;但是springboot默认是链接数据库的&#xff0c;如何解决这个…