Youtube DNN

news2024/11/19 13:21:35

目录

1. 挑战

2. 系统整体结构

3.召回

4. 排序

5. 训练和测试样本的处理


1. 挑战

(1)规模。很多现有的推荐算法在小规模上效果好,但Youtobe规模很大。

(2)新颖度。Youtobe语料库是动态的,每秒都会有新视频,推荐系统需要能够模拟新上传的内容以及用户的最新行为。即探索和利用机制。

(3)噪音。Youtobe上的历史用户行为本来就很难预测,很少得到用户满意度的真实值,而是对有噪声的隐式反馈信号进行建模。

2. 系统整体结构

由召回和排序组成。召回对用户Youtobe的活动历史建模,从大型语料库中检索出一小部分视频,用户之间的相似度用粗糙的特征来表示,比如视频id,搜索查询token,人口统计数据;排序使用视频和用户的丰富特征,从召回结果里对视频进行打分。

在开发过程中使用离线指标(precision,recall,ranking loss)指导系统的迭代。但是最终确定算法或模型的有效性,要通过现场实验进行A/B测试。在线上实验时,可以衡量CTR、观看时间和许多其他衡量用户粘性的指标,实时A.B测试的结果过不总是和离线实验相关。

3.召回

(1)召回建模为分类

将召回建模为分类问题。将推荐作为极端多分类问题:基于用户U和上下文信息C,在一个数百万的语料库V中,在t时刻准确的预测视频i(类别)。

深度神经网络的任务时学习用户的embedding(用户历史和上下文的函数)。

虽然Youtobe上存在显示的反馈(点赞、踩),作者采用隐式的观看数据去训练模型,这样选择是基于隐式的用户历史的数量级大,显示反馈很稀疏的也能有推荐的视频。

采用负采样技术,有效的训练具有数百万个类的模型,并使用重要性加权来纠正抽样,对于每个示例,真实标签和采样的负类,交叉熵最小。相比于原来的sotfmax分类,速度更快。

没有负采样前,每次迭代要更新所有参数,负采样后,每次迭代只用更新部分参数。

serving时需要计算最有可能的N个视频(类)呈现给用户,在serving时不需要softmax的校准似然,因此评分问题可以简化为点积空间的最近邻搜索,召回模型得到user和item的embedding后,通过embedding最近邻搜索进行模型服务。

(2)召回结构

  • 输入层:输入的特征有用户的观看历史,用户搜索历史,用户的人口统计特征,以及example age

    用户观看历史中的每个watch都被embedd,然后将用户观看历史行为embedd平均,代表用户的观看历史向量。

    每个搜索query都被token化,每个token都被embedd,将tokens embedd平均代表了一个融合的用户历史搜索。

    用户人口统计特征里的类别特征经过embedding拼接起来

    连续特征归一化

    将所有上述特征拼接起来

  • 中间层,经过三层Relu激活函数的全连接层

  • 输出层:使用softmax作为输出层。线下时是一个多分类(video)问题,并通过负采样技巧,最小化交叉熵损失,提升训练效率,加快训练速度

    serving时使用最近邻搜索快速召回。视频embedding的生成:softamx层的参数本质上是一个m×n维的矩阵,m是指最后一层(Relu层)维度,n指的是分类总数(Youtube所有视频的总数),视频Embedding是m×n维矩阵的各列向量。

    用户embedding:当输入用户u的特征向量时,最后一层ReLU层的输出向量可以当作该用户的Embedding向量,在模型训练完成后,逐个输入所有用户的特征向量,就可以在最后一个ReLU层得到所有用户的Embedding向量。

    在预测某用户的视频候选集时,先得到改用的Embedding向量,再在视频Embedding向量空间中利用局部哈希等方法搜索到用户Embedding向量的Top K近邻,就可以得到k个候选视频集合。

使用深度学习代替矩阵分解的优势:任意的连续和类别特征可以很容易的加到模型中。

1)输入特征——输入层

  • 搜索历史和观看历史

用户观看历史中的每个watch都被embedd,然后将用户观看历史行为embedd平均,代表用户的观看历史向量。

每个搜索query都被token化,每个token都被embedd,将tokens embedd平均代表了一个融合的用户历史搜索。

  • 用户的人口统计特征

用户的人口统计特征可以提供先验信息。

用户的地理区域和设备被embedd并拼接起来,用户的性别、年龄、登录状态直接归一化到[0,1]之间输入到网络

  • example age

把样本年龄作为特征训练模型能够准确的表示数据中观察到的上传时间和随时间变化的流行度。建模出视频热度随时间的变化情况

如果没有特征,模型将在训练窗口上预测大约的平均似然。

训练时,定义为训练样本产生的时刻距离当前时刻的时间。在serving时,该特征被设置为0(或略负),反映模型在训练窗口的最后进行预测。改特征本身不包含任何信息,但当该特征在深度神经网络中与其他特征做交叉时,起到了时间戳的作用,通过这个时间戳和其它特征的交叉,保存了其它特征随时间变化的权重,让最终预测包含时间趋势信息。

2)label and context selection

  • 在解决推荐问题时,常用代理问题,将对应的结果转移到特定的场景,例如假设预测用户评分可以带来更好的推荐结果,代理问题选择对线上A/B测试重要,难以离线评估。
  • 模型训练阶段,训练样本来自Youtube整个产品,而不仅仅是所有观看行为。否则的话推荐系统很难推荐出新的内容,系统会更多地偏向于利用。
  • 给用户生成固定长度的训练样本,通过针对每个用户采用固定的长度的训练样本, 能够使得每个用户在损失函数中具有相同的权重, 这种方式防止活跃度高的用户对模型的损失影响较高。
  • 丢弃搜索token的顺序信息。需要丢弃查询结果的序列信息, 通过无序的查询token集合来表示用户的查询历史, 使得分类器没有办法直接知道标签的来源。否则主页推荐结果可能全是用户刚刚查询的结果。
  • 随机选择一个用户观看,并把观看之前的用户行为作为输入。许多协同过滤方法通过随机地保留一个项目, 然后从其他观影历史预测这个留出项来选择标签和上下文。 这种方法泄露了未来信息。

4. 排序

排序模型的结构和和召回模型很相似,但是输入和输出之间有些区别。相比于生成模型需要对几百万候选集进行粗筛,排序模型只需要对几百个候选视频进行排序,可以以内更多特征。

1)输入层特征

  • 当前候选视频Embedding
  • 用户观看过的最后N个视频Embedding的平均值
  • 用户语言的Embedding和当前后续那视频语言的Embedding
  • 该用户自上次观看同频道视频的时间

刚看过某个频道的视频,用户大概率会继续看

  • 该候选视频已经曝光给用户的次数

避免同一视频对用户的持续无效曝光,尽量增加新用户看到新视频的可能性。

除了归一化的连续特征本身,还有这些连续特征的非线性变换,例如x^2,\sqrt{x},引入特征的非线性,给网络更强的表达能力。

2)中间层

三层Relu网络

3)输出层

排序模型选择加权逻辑回归作为其输出层,模型服务阶段选择$e^{Wx+b}$函数。

从Youtube商业模式出发,增加用户观看时长才是其推荐系统最主要的优化目标,因此在训练排序模型时,每次曝光期望观看时长应该作为更合理的优化目标。为了可以直接预估观看时长,Youtube将正样本的观看时长作为其样本权重,负样本权重未单位权重,用加权逻辑回归进行训练,就可以让模型学到用户观看时长信息。

5. 训练和测试样本的处理

(1)召回模型把推荐问题转换为多分类问题。

在预测下一次观看时,整个视频物料都是候选类别。采用负采样训练方式减少了每次预测的分类数量,从而加快了整个模型的收敛速度,

(2)在对训练集的预处理过程重,没有采用原始用户日志,而是对每个用户提取等数量的训练样本。

减少高度活跃用户对模型损失的过度影响,使模型偏向活跃用户的行为模式,忽略更广大的长尾用户的体验。

(3)在处理测试集时,没有采用经典的留一法,而是以用户最近一次观看作为测试集。

避免引入未来信息,产生数据数据穿越问题。

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

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

相关文章

Java中的栈和队列

1.前言 在计算机科学中,数据结构是用来组织和存储数据的方式,以便可以高效地访问和修改。栈和队列是两种最基本的数据结构,它们在各种计算过程中都有广泛的应用。本文将介绍栈和队列的概念、特性以及它们的一些常见应用。 2.栈 2.1概念 栈…

姑苏寻韵~庆开放原子开源大赛 OpenTiny 前端 Web 应用开发挑战赛路演圆满落幕。

春日已至,姑苏古城迎来了一场编程的盛宴——开放原子开源大赛OpenTiny前端Web应用开发挑战赛。历时三个月的激烈角逐,OpenTiny与众多开发者携手共赴这场智慧的较量。决赛路演于4月14日在苏州(太湖)产业软件园圆满落下帷幕~ 开放原…

编译一个基于debian/ubuntu,centos,arhlinux第三方系统

目录 前言 准备工作 下载linux源码进行编译 linux源码下载 网站 问题 解决办法 编译 可能会遇到的问题 chroot下载debian环境 进入虚拟环境 把chroot的根目录文件打包为.gz文件 编译init文件(用于系统启动时的一系列引导) 给予文件夹权限 …

Zabbix 监控软件(一)

通常我们服务搭建成功 但不清楚服务器的运行状况,这时候就需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监控软件,我们可以: ●通过一个友好的界…

基于java+springboot+vue实现的物业管理系统(文末源码+Lw+ppt)23-23

摘 要 快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,通过线上物业管理系统也就相继涌现。与此同时,人们开始接受方…

Leetcode算法训练日记 | day31

专题九 贪心算法 一、分发饼干 1.题目 Leetcode:第 455 题 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的…

如何查看项目中使用的Qt版本

如何查看项目中使用的Qt版本 1.点击左下角电脑按钮查看Qt版本。 2.点击左侧栏项目按钮查看Qt版本。

Android开发——Fragment

Demo fragment_blank.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

Windows系统远程桌面服务(RDP)的安全层和加密级别

1.【win10企业版/server2012】 1.服务器运行gpedit.msc&#xff0c;打开本地组策略&#xff0c;进入列表目录【计算机配置】-【管理模板】-【windows组件】-【远程桌面服务】-【远程桌面会话主机】-【安全】 2.双击“远程(RDP)连接要求使用指定的安全层”选项&#xff0c;配置…

Redis入门到通关之数据结构解析-RedisObject

文章目录 ☃️概述☃️源码 ☃️概述 RedisObject 是 Redis 中表示数据对象的结构体&#xff0c;它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中&#xff0c;所有的数据都被存储为 RedisObject 类型的对象。 RedisObject 结构体定义如下&#xff08;简化版本&#xf…

linux负载均衡 和 系统负载分析笔记

1 负载均衡 1.1 计算负载 1.1.1 PELT算法简介 从Linux3.8内核以后进程的负载计算不仅考虑权重&#xff0c;⽽且跟踪每个调度实体的历史负载情况&#xff0c;该算法称为PELT(Per-entity Load Tracking) 《奔跑吧Linux内核》卷1&#xff1a;基础架构&#xff1b;P505 相关资料…

LeetCode216:组合总和Ⅲ

题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 解题思想 使用回溯算法 代码 class So…

Cubemx+RTL8201驱动

Cubemx 生产的驱动只能选择LAN8742&#xff0c;无法适配RTL8201&#xff0c;这篇文字就分享一下如何逐步修改lan8742的代码去适配。 一、地址问题 入口函数&#xff1a;int32_t LAN8742_Init(lan8742_Object_t *pObj) 主要是做PHY 地址检测&#xff0c;但是我们查阅RTL8201手…

2024中国国际中医药健康服务博览会(7月深圳中医药展)

聚焦中医国粹&#xff0c;助力健康中国 2024第五届中国国际中医药健康服务&#xff08;深圳&#xff09;博览会 暨粤港澳大湾区中医药高质量发展大会 邀请函 时间&#xff1a;2024年7月31日-8月2日 地址:深圳会展中心&#xff08;福田&#xff09; 支持单位&#xff…

WIFISKY 7层流控路由器 confirm.php RCE漏洞复现

0x01 产品简介 WIFISKY-7层流控路由器是一款可用于家庭或办公环境的无线路由器,具备流控功能以优化网络流量和提供更稳定的网络连接。该路由器采用了7层流控技术,能够依据网络数据包的内容进行智能管理,从而实现对网络流量的精细化控制和优化。这种技术可以提升网络的整体性…

MySQL-数据库基础

一、背景与基本使用 首先是登录方式&#xff0c;一般用 mysql -h 127.0.0.1 -P 3306 -u root -p mysql也是一种网络服务。 当然我们在本地登录时可以省去主机ip和端口号。 -h表示我们要登录mysql在哪个ip的主机上&#xff0c; -P表示端口号。 -u表示以谁的身份去登录。…

DDR的概念解读-提升速度的四把板斧

计算机以及手机系统性能的改善&#xff0c;不仅仅取决于cpu处理器主频的提升&#xff0c;还与cpu和内存之间的访问速度密切相关。 SDRAM: Synchronous Dynamic Random Access Memory,同步动态随机存取存储器&#xff0c;同步是指Memory工作需要同步时钟&#xff0c;内部命令的发…

最新热点:博弈+低碳!基于多主体主从博弈的区域综合能源系统低碳经济优化调度程序代码!

前言 随着能源需求上升及环境污染日益严重&#xff0c;安全高效、低碳清洁已成为能源发展的主流方向。在此背景下&#xff0c;统筹多能耦合、协同调度的区域综合能源系统已成为高效利用能源的重要形式。实现多能供应的安全性、经济性和灵活性的有效手段是优化RIES运行。因此&a…

vbox两步解决VirtualBox共享文件夹在Windows下的符号链接创建问题

默认情况下&#xff0c;VirtualBox 的共享文件夹特性在 Windows 下工作是有问题的&#xff0c;如果你运行一些需要符号连接&#xff08;Symlink&#xff09;的程序&#xff0c;比如默认设置的 yarn 或者 npm&#xff0c;由于 npm 包在安装之后会在 ./node_modules/.bin 创建在 …

B008-方法参数传递可变参数工具类

目录 方法参数传递可变参数冒泡排序Arrays工具类Arrays工具类常用方法 方法参数传递 /*** java中只有值传递* 基本数据类型 传递的是具体的值* 引用数据类型 传递的是地址值*/ public class _01_ParamPass {public static void main(String[] args) {// 调用方法 getSumge…