Youtube DNN

目录

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.mzph.cn/web/967.shtml

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

相关文章

芯片数字后端设计入门书单推荐(可下载)

数字后端设计,作为数字集成电路设计的关键环节,承担着将逻辑设计转化为物理实现的重任。它不仅要求设计师具备深厚的电路理论知识,还需要对EDA工具有深入的理解和熟练的操作技能。尽管数字后端工作不像前端设计那样频繁涉及代码编写&#xff…

【Leetcode】链表专题

leetcode链表专题 主要根据CSview一个校招刷题准备网站 做这个网站的人真的很厉害!进行整理 太困了,一学习就困,来刷刷题 文章目录 leetcode链表专题前言一、leetcode 206.反转链表1.题目描述:2.主要有两种方法,迭代法…

Ugee手写板Ex08 S在不同软件中的设置

手写笔的结构 功能对应于鼠标的作用笔尖鼠标左键上面第一个键鼠标右键(效果有时候也不完全等同)上面第二个键鼠标中键 以下测试的软件版本 软件版本windows10WPS2024春季16729Office2007SimpleTex0.2.5Ex08 S驱动版本4.2.4.231109 WPS-word ①点击审…

《R语言与农业数据统计分析及建模》学习——创建与访问数据框

1、数据框的概念和特点 数据框是二维的表格形式数据结构,是R语言中最常用的数据结构之一。有如下特点: (1)异质性:各列不同的数据类型 (2)命名索引:每列都有一个名称 (3&…

开源Windows12网页版HTML源码

源码介绍 开源Windows12网页版HTML源码,无需安装就能用的Win12网页版来了Windows12概念版(PoweredbyPowerPoint)后深受启发,于是通过使用HTML、CSS、js等技术做了这样一个模拟板的Windows12系统,并已发布至github进行…

蓝桥杯2024年第十五届省赛真题-小球反弹

以下两个解法感觉都靠谱&#xff0c;并且网上的题解每个人答案都不一样&#xff0c;目前无法判断哪个是正确答案。 方法一&#xff1a;模拟 代码参考博客 #include <iostream> #include <cmath> #include <vector>using namespace std;int main() {const i…

(二十)C++自制植物大战僵尸游戏僵尸进攻控制实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 文件位置 实现功能的代码文件位置在Class\Scenes\GameScene文件夹中&#xff0c;具体如下图所示。 ZombiesAppearControl.h /* 僵尸出现波数控制 */ class ZombiesAppearControl { public:/***对于进攻的不同波数…

【吊打面试官系列】Java高并发篇 - 如何停止一个正在运行的线程?

大家好&#xff0c;我是锋哥。今天分享关于 【如何停止一个正在运行的线程&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 如何停止一个正在运行的线程&#xff1f; java如何停止一个正在运行的线程? 在Java中&#xff0c;可以使用Thread.stop()方法来停止一…

Android自带模拟器如何获得ROOT权限

如果在模拟器中不能切换到root权限&#xff0c;很可能是镜像使用的不对。 一.选择镜像标准&#xff1a; 1.运行在PC端选X86_64镜像&#xff0c;才能流畅运行 2.不带google api的镜像 二.步骤 在虚拟机管理器中新建AVD&#xff0c;并下载符合要求的镜像文件 三.验证

【MATLAB】App 设计 (入门)

设计APP 主界面 函数方法 定时器 classdef MemoryMonitorAppExample < matlab.apps.AppBase% Properties that correspond to app componentsproperties (Access public)UIFigure matlab.ui.FigureStopButton matlab.ui.control.ButtonStartButton matlab.ui.cont…

大模型ChatGPT里面的一些技术和发展方向

文章目录 如何炼成ChatGPT如何调教ChatGPT如何武装ChatGPT一些大模型的其他方向 这个是基于视频 https://www.bilibili.com/video/BV17t4218761&#xff0c;可以了解一下大模型里面的一些技术和最近的发展&#xff0c;基本都是2022你那以来的发展&#xff0c;比较新。然后本文…

最新版的GPT-4.5-Turbo有多强

OpenAI再次用实力证明了&#xff0c;GPT依然是AI世界最强的玩家&#xff01;在最新的AI基准测试中&#xff0c;OpenAI几天前刚刚发布的GPT-4-Turbo-2024-04-09版本&#xff0c;大幅超越了Claude3 Opus&#xff0c;重新夺回了全球第一的AI王座&#xff1a; 值得一提的是&#xf…

C++ 模板详解——template<class T>

一. 前言 在我们学习C时&#xff0c;常会用到函数重载。而函数重载&#xff0c;通常会需要我们编写较为重复的代码&#xff0c;这就显得臃肿&#xff0c;且效率低下。重载的函数仅仅只是类型不同&#xff0c;代码的复用率比较低&#xff0c;只要有新类型出现时&#xff0c;就需…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳市场风险的热电联产虚拟电厂低碳调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Java作业6-Java类的基本概念三

编程1 import java.util.*;abstract class Rodent//抽象类 {public abstract String findFood();//抽象方法public abstract String chewFood(); } class Mouse extends Rodent {public String findFood(){ return "大米"; }public String chewFood(){ return "…

IDEA 编码格式设置 UTF-8

IDEA 编码格式设置 UTF-8 1.文件编码设置为UTF-8 Editor > File Encodings 2.编译编码设置为utf-8 Build&#xff0c;Execution&#xff0c;Deployment > Complier > Java Complier 按图中设置&#xff1a;-encoding utf-8

Dynamic Wallpaper for Mac:动态壁纸让桌面更生动

Dynamic Wallpaper for Mac是一款为苹果电脑用户精心设计的动态壁纸软件&#xff0c;它以其丰富的功能和精美的壁纸库&#xff0c;为用户带来了更加生动和个性化的桌面体验。 Dynamic Wallpaper for Mac v17.8中文版下载 这款软件支持多种动态壁纸&#xff0c;用户可以根据自己…

PTA L2-047 锦标赛

题目 解析 把每一场比赛看作满二叉树的一个节点&#xff0c;父节点递归遍历子节点的结果&#xff0c;进行试填。 代码 #include <bits/stdc.h>using i64 long long;struct Node {int win, lose; };void solve() {int k;std::cin >> k;int siz (1 << k);…

【YOLOv8改进[Backbone]】使用MobileNetV3助力YOLOv8网络结构轻量化并助力涨点

目录 一 MobileNetV3 1 面向块搜索的平台感知NAS和NetAdapt 2 反向残差和线性瓶颈 二 使用MobileNetV3助力YOLOv8 1 整体修改 ① 添加MobileNetV3.py文件 ② 修改ultralytics/nn/tasks.py文件 ③ 修改ultralytics/utils/torch_utils.py文件 2 配置文件 3 训练 其他 …

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

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