YoutobeDNN

目录

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/news/825938.shtml

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

相关文章

javaagent使用

Java Agent是什么? Java Agent是Java平台提供的一个强大工具,它可以在运行时修改或增强Java应用程序的行为。是在JDK1.5以后引入的,它能够在不影响正常编译的情况下修改字节码,相当于是在main方法执行之前的拦截器,也叫…

【面试经典 150 | 二分查找】在排序数组中查找元素的第一个和最后一个位置

文章目录 写在前面Tag题目来源题目解读方法一:二分查找方法二:使用库函数 知识回顾二分查找的三种写法与三个问题常用的二分库函数 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

二叉树的层次遍历(配图详解)

二叉树的层次遍历 层序遍历顾名思义就是一层一层的遍历的树中的所有结点。 typedef char EmpeType 在本篇文章中,将char类型使用EmpeType; typedef char EmpeType;创建一个结构体 typedef struct BiTNode {EmpeType data; //数据域struct BiTNode* …

使用docker配置CCM-SLAM

一.Docker环境配置 1.拉取Docker镜像 sudo docker pull ubuntu:18.04拉取的为ununtu18版本镜像&#xff0c;环境十分干净&#xff0c;可以通过以下命令查看容器列表 sudo docker images 如果想删除多余的docker image&#xff0c;可以使用指令 sudo docker rmi -f <id&g…

“开关是灯的日出日落,日出日落是灯的开关”

C语言刷题 day01 本篇是C语言刷题大杂烩&#xff0c;收集了笔者遇到的认为有价值的题目&#xff0c;本篇会持续更新~~ day01 至少是其他数字两倍的最大数 题目原文&#xff1a; 题意解析&#xff1a; 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 …

符文协议的演变历程:从挑战到创新

在比特币网络长期面临的挑战中&#xff0c;与主流去中心化金融功能的兼容性一直是一大难题。相比之下&#xff0c;以太坊通过ERC-721和ERC-1155代币标准&#xff0c;为NFT和去中心化金融应用提供了支持&#xff0c;而比特币的应用范围却相对有限。然而&#xff0c;近年来&#…

蓝桥杯2024年第十五届省赛真题-爬山

贪心优先队列的题&#xff0c;贪心会漏一个情况&#xff0c;不知道怎么处理&#xff0c;这里直接打表了 2 1 1 48 49 答案是30&#xff0c;贪心是31 专有名词&#xff1a;hack-有新的测试点过不了 #include<bits/stdc.h> using namespace std; #define endl \n #define …

取模学习之Image2Lcd

使用软件Image2Lcd V0.4 1.&#xff1a;打开图片&#xff0c;图片格式可选如下图&#xff0c;本文使用的.jpg格式 转换后数组例子&#xff08;数组头数据占前8字节&#xff09;&#xff1a; 2.&#xff1a;扫描模式 由第1个字节低四位配置 &#xff08;1&#xff09;水平扫描 …

动手学深度学习11 权重衰退

动手学深度学习11 权重衰退 1. 权重衰退2. 代码实现3. QA 视频&#xff1a; https://www.bilibili.com/video/BV1UK4y1o7dy/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 电子书&#xff1a; ttps://zh-v2.d2l.ai/chapter_multilayer-perceptrons/wei…

【MySQL 数据宝典】【内存结构】- 004 自适应哈希索引

自适应哈希索引 https://developer.aliyun.com/article/1230086 什么是自适应哈希索引&#xff1f; 自适应哈希索引是MySQL InnoDB存储引擎中的一种索引结构&#xff0c;用于加速查询。它根据查询模式和数据分布动态地调整自身的大小&#xff0c;以提高性能。 上图就是通过…

Redis中的订阅发布和事务(一)

订阅发布 PUBSUB NUMSUB PUBSUB NUMSUB [channel-1 channel-2… channel-n]子命令接受任意多个频道作为输入参数&#xff0c;并返回这些频道的订阅者数量。 这个子命令是通过pubsub_channels字典中找到频道对应的订阅者链表&#xff0c;然后返回订阅者链表的长度来实现的(订阅…

Nuclei 减少漏报的使用小技巧

在最近工作的渗透测试项目中发现Nuclei存在一个问题&#xff0c;就是相同的网站连续扫描多次会出现漏报的情况&#xff0c;此前没有注意过这个情况&#xff0c;所以写篇文章记录一下。 在此之前我的常用命令都是一把梭&#xff0c;有就有没有就继续其他测试 $ nuclei -u htt…

患者关系管理系统功能详解

脉购健康管理系统&#xff08;软件&#xff09;包含&#xff1a;客户开卡、健康档案、问卷调查、问诊表、自动设置标签、自动随访、健康干预、健康调养、历年指标趋势分析、疾病风险评估、饮食/运动/心理健康建议、同步检查报告数据、随访记录、随访电话录音、健康阶段总结、打…

Java - 阿里巴巴命名规范

文章目录 前言一、编程规约(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 日期时间(六) 集合处理(七) 并发处理(八) 控制语句(九) 注释规约(十) 前后端规约(十一) 其他 二、异常日志(一) 错误码(二) 异常处理(三) 日志规约 三、单元测试四、安全规约五、MySQL 数据…

2024面试软件测试,常见的面试题(上)

一、综合素质 1、自我介绍 面试官您好&#xff0c;我叫XXX&#xff0c;一直从事车载软件测试&#xff0c;负责最多的是中控方面。 以下是我的一些优势&#xff1a; 车载的测试流程我是熟练掌握的&#xff0c;且能够独立编写测试用例。 平时BUG提交会使用到Jira&#xff0c;类似…

电缆检测仪的正确使用方法有哪些步骤?

电缆检测仪的正确使用方法是&#xff1a;首先&#xff0c;确保检测仪电源充足&#xff0c;设备完好无损&#xff1b;其次&#xff0c;根据电缆类型和故障类型选择合适的测试模式和参数&#xff1b;接着&#xff0c;将检测仪与电缆正确连接&#xff0c;确保接触良好&#xff1b;…

深入挖掘C语言 ----动态内存分配

开篇备忘录: "自给自足的光, 永远都不会暗" 目录 1. malloc和free1.1 malloc1.2 free 2. calloc和realloc2.1 calloc2.2 realloc 3. 总结C/C中程序内存区域划分 正文开始 1. malloc和free 1.1 malloc C语言提供了一个动态开辟内存的函数; void* malloc (size_t s…

python处理IP对应城市省份

python处理IP对应城市省份 IP地理地址库geoip2用法 数据包下载 数据包下载地址&#xff08;需要注册&#xff09; https://www.maxmind.com/en/accounts/258630/geoip/downloads 考虑到注册麻烦&#xff0c;可以到下面这个github的链接去直接下载 https://github.com/Hackl0…

2024-9.python文件操作

文件操作 引言 到目前为止&#xff0c;我们做的一切操作&#xff0c;都是在内存里进行的&#xff0c;这样会有什么问题吗&#xff1f;如果一旦断电或发生意外关机了&#xff0c;那么你辛勤的工作成果将瞬间消失。是不是感觉事还挺大的呢&#xff1f;现在你是否感觉你的编程技…

【Java EE】依赖注入DI详解

文章目录 &#x1f334;什么是依赖注入&#x1f340;依赖注入的三种方法&#x1f338;属性注入(Field Injection)&#x1f338;构造方法注入&#x1f338;Setter注入&#x1f338;三种注入优缺点分析 &#x1f333;Autowired存在的问题&#x1f332;解决Autowired对应多个对象问…