3901436-9cf86974f1cd3f64

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:石塔西      爱好机器学习算法,以及军事和历史

知乎ID:https://www.zhihu.com/people/si-ta-xi

前言

《Deep Neural Networks for YouTube Recommendations》这篇论文是介绍深度学习在推荐系统领域应用的经典之作。可以想见,Youtube的推荐系统所要面临的问题:

  • 海量用户,海量的视频

  • 如何让模型保证线上服务时的“低延时”要求

  • 如何平衡Explore/Exploit,使模型具备“推新”能力

  • .........

而正如文中所说,Youtube与Google的其他业务线,正在经历一次技术变革,即将深度学习技术作为一种通用解决方案,来解决所有机器学习问题。因此,看Youtube是如何在运用深度学习的过程中,解决以上这些难题,对于搭建我们自己的推荐系统,具有极大的借鉴意义。

我一年前已经读过这篇文章。随着自己在推荐系统领域经验的积累,最近带着自己的感悟、问题再读此文,又有了新的收获,特分享如下:

整体框架

与几乎所有推荐系统一样,Youtube的推荐系统也分为“召回”与“排序”两个子系统。

3901436-e7ebfc6055fc2f85

  • 召回:从百万级别的候选视频中选出几百个用户喜欢的视频。

    • 对召回系统的要求是,“低延时”与“高精度(precision)”,“个性化”方面可以适当放宽以保证性能要求

  • 排序:将召回的视频打分,将用户最有可能点击的视频排在前面。

    • 结果的“个性化”是排序的重要任务

Youtube在这两个子系统中,都使用了深度神经网络,结构上并没有太大的不同,主要是体现在所使用的特征上。

  • “召回”使用的特征,相对较少和简单,以满足性能要求。

  • “排序”使用了更多的特征,以保证精准的个性化。

召回网络

3901436-a2acda755f66f5ac

Youtube将“召回”过程建模成一个拥有海量类别的多分类问题,类别总数就是视频库中的视频总数,数量在百万级别。

3901436-9af27c7430943ba6

上式是一个标准的softmax公式,表示用户U在上下文C的情况下,观看第i个视频的概率

V是视频库中所有视频的集合,数量在百万级别

代表第i个视频的向量,是需要优化的变量,通过训练才得到

u是由“用户特征”与“上下文特征”拼接得到的特征向量,后续会讲到,用户历史上看过的视频的向量也是u的组成部分

接下来,需要解决的问题:

3901436-4d2abccfc914771e

每次计算,上边softmax的分母,都需要遍历V中所有百万级别的所有视频,从而,如何高效训练,成为一个问题

线上召回时,同样需要遍历百万视频才能计算出分母,这样一来,能否满足“低延时”的需求?

如何构建视频向量

3901436-d435a7f25366e4ce

看似简单的问题,一旦牵扯上海量数据,也变得不那么简单。如果视频库中的视频太多,单机内存装不下怎么办?

本文中介绍,Youtube的做法是剔除一些“点击频率太低”的视频,减少候选集合

  • 问题是,新视频的点击频率为0,都被剔除了,这个“召回网络”岂不是失去了“推新”能力?文中没有解释。不过,这个问题也很好解决,Youtube不可能只有“召回网络”这一个召回源,估计Youtube有专门的召回源来发现并召回新视频。

阿里的Deep Interest Network一文中介绍,阿里的XDL深度学习平台,有专门的Distributed Embedding Layer,超大的embedding矩阵可以分散到集群,而DNN的训练可以单机完成。

没有XDL怎么办?最简单的办法使用Hashing Trick,将“所有视频ID”这个集合hash压缩到一个内存可接受的水平


如何构建用户向量

一个用户向量由三部分组成:

用户之前看过的视频。每个视频向量都是通过embedding得到,属于优化变量,训练后获得。

用户之前搜索过的关键词。每个词向量也通过embedding获得,属于优化变量,训练后获得。

用户的基本信息,比如性别、年龄、登录地点、使用设备等。这些信息,在“新用户”冷启动时,是唯一可以利用的信息。


视频向量的共享

在召回过程中,“视频向量”发挥了两方面的作用:

如上所述,用户看过的“视频向量”是“用户向量”u的组成部分。

同时,在softmax公式中,候选视频的向量,也要与用户向量u做点积。

而以上两部分的“视频向量”都来自于同一个embedding矩阵。优化变量的共享,类似于“多任务学习”,既增加了对video embedding的训练机会,也相当于增加了更多的限制,有助于降低过拟合。

用户历史的Pooling

一个用户,历史上看过多个视频,也会输入过多个搜索关键词,要将这多个“视频向量”、“搜索词向量” 合并成一个向量,需要一个池化(pooling)操作。

Youtube的做法比较简单,只是将所有“历史观看视频的向量”简单平均,将所有“历史搜索的关键词向量”简单平均,估计在线效果够用了。

是否可以考虑将历史向量,按照时间衰减,进行加权平均?最近观看的向量,在pooling时权重大一些,较远的历史向量,权重小一些?自然可以这样做,不过,至于效果如何,还需要线上测试后,才知道。可能这种费事的加权平均,还多了一个“衰减因子”这个超参,效果未必就比简单平均,有多少优越性。

不过,阿里的Deep Interest Network却在Pooling这个简单环节上大做文章,提出了pooling的新思路,据说获得了非常好的效果。Deep Interest Network的基本思路是:

当给同一个用户展示不同“候选物料”时,将唤醒用户对不同历史的记忆。比如,用户上周买过一套泳衣和一本书。而当给用户展示泳镜时,显然用户关于他买过的“泳衣”的记忆更易被唤醒,也将在决定是否买泳镜时,发挥更大的作用。

所以,Pooling也要模拟这一过程,同一用户在面对不同候选物料时,他的用户向量也不同,实现“千物千面”。

实现上,要将用户向量表示成“历史行为”向量的加权平均,而每个权重由“候选物料”与某特定“历史行为”共同决定,也就是所谓的Attention机制.

视频年龄

除了以上这些历史向量、人员基本信息的特征以外,Youtube还将视频的年龄作为特征加入训练。视频年龄=(样本提取窗口的最大观测时间)-该视频的上传时间。

其实,加入这一特征的原因和处理手法,和处理推荐系统中常见的position-bias是一模一样

上传越早的视频(即年龄越大),自然有更多时间“发酵”,也就更有机会成为受欢迎视频。我们在收集训练样本时,就已经加入这个bias了。

因此,我们需要在训练时,将这一信息考虑在内。否则,其他特征不得不解释由“上传时间早”而带来的额外的受欢迎性,一个特征承担了本不该其承担的解释任务,容易导致 “过拟合”。

但是,在线上召回时,将所有候选视频的年龄都设置成0,对新老视频“一视同仁”,有利于召回那些“虽然上传时间短,但是视频内容与用户更加匹配”的新视频。对于完成“推新”的要求,这是一个非常好的办法。

离线如何训练

构建好了视频向量(通过embedding定义,作为变量参与优化)、用户特征向量(由用户的观看历史、搜索历史、基本信息拼接而成),接下来,就是如何优化这个巨大的softmax loss了。

问题的难点在于,这个softmax中的类别个数=候选视频总个数,达到百万级别。这样一来,计算每个样本的分母,都涉及做百万次的点积、exp、相加,计算量极其巨大,训练效率将极其低下。

解决这一问题的思路,是借鉴NLP,特别是机器翻译、训练词向量中,常见的Sampled Softmax方法。这个方法由两部分组成

做candidate sampling,即为每个正样本(完成观看),配合几千个负样本,这样一来,分母上的点积、exp只需要做几千次

通过以上方法计算出的概率、loss肯定都与原始公式计算出来的有误差,所以再经过importance weighting的方式进行修正

在线如何召回

以上Sampled Softmax算法仅仅是加快了训练速度,预测时,如果要获得准确的观看概率,仍需要计算那包含几百万项的分母,毕竟预测时,你不能再随机抽样负样本了(否则,预测同一个视频两次,因为随机所抽的负样本不同,观看概率也不相同,这样佛系的算法,就没法要了)。

好在我们召回时,并不需要计算每个视频的观看概率。因为,面对同一个用户u,所有候选视频计算softmax时的分母相同,所以召回时,只需要比较分子的大小。所以召回过程,就简化成一个“给定一个用户向量u,在所有视频向量中,寻找与u点积最大的前N个视频向量”的搜索问题。Youtube将训练得到的视频向量存入数据库,并建立索引,从而能够大大加快这一搜索过程。

疑问

看到这里,Youtube的召回网络就介绍完了。可是,我有一个问题:Youtube为什么要用这个巨大的softmax多分类来建模,而不是用p(w|user,video)的二分类(类似点击率预估)来建模?对这个问题,文中没有给出明确的答案。

Youtube使用的多分类softmax模型

  • 优化这样一个具有海量类别的softmax非常困难,不得不牺牲准确度,而使用Sampled Softmax来近似

  • 如何定义负样本?难道真像文章中所说,为每个完成观看的视频,都简单抽样几千个未观看的视频作为负样本?要知道,大量的未观看的视频,压根就没有曝光过,如此简单抽样,样本带有极大的bias。当然,可以只将曝光却未观看的视频作为负样本,但是曝光过的视频,绝大部分是来自上一个版本的推荐引擎,这样收集到的数据同样带有bias。

二分类的类似“点击率预估”模型:

  • 思路简单,让我来做召回,我的第一个直觉就是采用二分类算法来观测是否完成观看

  • 3901436-e4df61c846de8949

  • 同样受“如何定义负样本”问题的困扰,但是所受影响与softmax多分类完全相同,“多分类建模”在这一点上没有优势。

目前,我能够想到的唯一解释是:softmax loss只和true label=1的类的预测概率有关。为了让softmax loss足够小,不仅“真正完成观看的视频”的概率要大(即分子要大),其他“未完成观看的视频”的概率要小(即分母要小)。这样一来,优化softmax loss类似于在pairwise LTR优化BPR loss,比简单的CTR/CVR预估更加符合推荐系统的实际需求。

排序网络

3901436-3f838dc2b2edb9bf

“排序网络”架构与“召回网络”架构极其类似,只不过,使用的特征更加全面,而且由召回时的多分类问题变成“加权的点击率预估”问题。

(??为什么在召回时用多分类建模,而排序时用二分类建模??难道是性能上的原因?有大侠知道其中原因,还望不吝赐教)

重要特征

最重要的特征是描述用户与该视频或相似视频的交互历史的特征,比如:

  • 用户与该视频所属频道的交互历史,比如,用户在该频道上看了多少视频?

  • 用户与该视频具有相同主题的视频的交互历史,比如,用户多久之前才观看了一个有相同主题的视频

  • 。。。。。。

召回时产生的信息,比如召回源和当时召回源所打的分数

。。。。。。

加权LR预测观看时长

为了防止将一些“标题党”推荐给用户,在排序阶段,Youtube预测的是一个视频的平均观看时长,而不是简单的“点击与否”,并按照预测出的“平均观看时长”对视频排序。

Youtube的做法是通过改变样本权重来预测观看时长,这也是预测“观看/阅读时长”常用的一个方法

正样本(点击样本)的权重是该视频被观看的时长

负样本(未点击样本)的权重就是1

个中原理推导如下:

Logistic Regression中,exp(wx+b)预测的是“胜率”,

3901436-f5967a838d656ab5

3901436-8b7749498a21673e

3901436-c41a38d4f1a1b791

所以在对正样本重新加权后,排序网络预测出的是视频的平均观看时长,并根据它进行排序。

注意,这个思路也可以应用于其他场景中,在推荐商品时,对训练样本中的“点击正样本”加权,权重是该商品的历史成交金额(GMV),这有利于将用户喜欢并且高价值商品排序在前,有助于增加商家的利润。

疑问

训练时按观看时长加权重,线上按照观看时长排序,岂不是对短视频不公平?Youtube是如何处理这一bias的呢?或者是Youtube有意为之,观看长视频能够增加用户黏性,还能多插播多段广告。

总结

我觉得本文的技术亮点有如下几点:

将召回抽象成一个海量类别的多分类问题

  • 训练时,借鉴NLP中的sampled softmax来提高训练效率

  • 线上召回时,将训练时的“召回网络”简化成一个“K近邻”搜索问题,减少计算耗时。

采取与处理“位置偏差”类似的方法来处理“视频上传时间偏差”,有利于推荐新鲜视频,使模型有更好的“探索”能力

通过赋予正负样本不同的权重,变“预测是否点击”成“预测平均观看时长”。同样的思路,可以应用于其他场合,比如预测点击带来的平均收益。

3901436-a54b6b5554d4468e

公众号后台回复关键词学习

回复 免费                获取免费课程

回复 直播                获取系列直播课

回复 Python           1小时破冰入门Python

回复 人工智能         从零入门人工智能

回复 深度学习         手把手教你用Python深度学习

回复 机器学习         小白学数据挖掘与机器学习

回复 贝叶斯算法      贝叶斯与新闻分类实战

回复 数据分析师      数据分析师八大能力培养

回复 自然语言处理  自然语言处理之AI深度学习

3901436-323aec561659c3f1

看Youtube怎么利用深度学习做推荐相关推荐

  1. Python 利用深度学习做文本摘要

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 python免费学习资料 ...

  2. 深度学习在推荐领域的应用:Lookalike 算法

    本文主人公 英特 是一名传统的软件工程师,让我们与英特一起来研究如何实现自己的Lookalike算法,并尝试着在新浪微博上应用这一算法. 当2012 年Facebook 在广告领域开始应用定制化受众( ...

  3. 深度学习在推荐领域的应用

    深度学习在推荐领域的应用 2017-05-31 20:50youtube/微博/社交 作者: 吴岸城,菱歌科技首席算法科学家,致力于深度学习在文本.图像.预测推荐领域的应用.曾在中兴通讯.亚信(中国) ...

  4. 吴恩达 NIPS 2016:利用深度学习开发人工智能应用的基本要点(含唯一的中文版PPT)...

    雷锋网按:为了方便读者学习和收藏,雷锋网(公众号:雷锋网)特地把吴恩达教授在NIPS 2016大会中的PPT做为中文版,由三川和亚峰联合编译并制作. 今日,在第 30 届神经信息处理系统大会(NIPS ...

  5. 机器学习、深度学习资料推荐

    算法的学习,应该做到各个模型之间能够打通,明白其背后数学原理的联系性和统一性.才能真正登堂入室.而不是做一个"调参侠". 不同的学习资料之间,符号的表达可能各异.看多了,自然就通了 ...

  6. AI安全初探——利用深度学习检测DNS隐蔽通道

    AI安全初探--利用深度学习检测DNS隐蔽通道 目录 AI安全初探--利用深度学习检测DNS隐蔽通道 1.DNS 隐蔽通道简介 2. 算法前的准备工作--数据采集 3. 利用深度学习进行DNS隐蔽通道 ...

  7. 如何用深度学习做自然语言处理?这里有份最佳实践清单

    如何用深度学习做自然语言处理?这里有份最佳实践清单 By 机器之心2017年7月26日 14:16 对于如何使用深度学习进行自然语言处理,本文作者 Sebastian Ruder 给出了一份详细的最佳 ...

  8. 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...

    猜你喜欢 0.2021年10月份热门报告免费下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统架构.算法及后台设计4.微博推荐算法实践与机器学习平台演进5.腾讯 ...

  9. 【自动驾驶】如何利用深度学习搭建一个最简单的无人驾驶系统

                                                 新智驾按:本文为新智驾独家专栏,作者系佐思产研研究总监周彦武,新智驾经授权发布. 国内最牛的无人驾驶厂家的运算 ...

最新文章

  1. 【论文阅读----DDI(1)】MUFFIN: multi-scale feature fusion for drug–drug interaction prediction
  2. OpenAirInterface,开源的 4G EPS 实现
  3. Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令
  4. displaynone符合html5标准,javascript – JS HTML5验证“display:none”必需的输入元素
  5. 根据RTL图编写Verilog程序
  6. 2017.9.20 mode 思考记录
  7. AD程序设计c语言,AVR AD转换的C语言编程
  8. 结束SpringMVC
  9. 手把手教你免费申请支持通配符的 SSL 证书
  10. Linux源码安装pgadmin4,pgAdmin4 - 搞定安装部署
  11. C/C++ typedef用法
  12. Python找出数组中重复数字
  13. web前端之Vue——子组件的详解
  14. 新元宇宙每周连载《地球人奇游天球记》第十三回火星烧烤
  15. 基于Android的万豪酒店APP设计与实现
  16. 在Word2019中,如何让回车符消失
  17. mysql 去除全角空格_去掉全角空格
  18. 基于A*搜索算法迷宫游戏开发
  19. 实现表格隔行变色的方法
  20. C# 面向对象-面向对象概述

热门文章

  1. 员工评估系统的流程简单分析
  2. Java设计模式之观察者模式(UML类图分析+代码详解)
  3. 【数理知识】曲面类型及其曲率取值范围,包括主曲率 principal curvature,高斯曲率 Gaussian curvature,平均曲率 mean curvature
  4. Oracle RBO、CBO简介
  5. 算法-详解堆排序算法
  6. 「津津乐道播客」#195. 996笼罩下的互联网“民工”
  7. 黑色笼罩中国联通:半年流失近千万用户 4G发展停滞不前---OFweek
  8. linux服务器如何指定gpu以及用量
  9. excel比较两组或两列数据的相同项和不同项
  10. AMD主板 A85XM刷bios支持NVME启动