推荐youtube(推荐又甜又上头的电视剧)
「干货」YouTube 基于深度神经网络推荐系统剖析
YouTube推荐系统的三大难点:
(使用浏览器扫码进入在线客服窗口)
复制联系方式
· 一是规模太大,简单的推荐算法在如此大规模数据量上可能是失效的;
· 二是实效性,即新数据不断产生,需要将其良好的呈现给用户,以平衡旧有的好内容以及新内容;
· 三是噪音问题,用户行为与视频描述均有噪音,并且只能获得充满噪音的用户隐含反馈,而不能直接获取用户满意度。
图1.YouTube基于深度学习推荐系统架构图
本文呈现的推荐系统解决方案分为两个部分:
· 一个是备选生成(Candidate Generation),其目标是初选结果,从海量数据中选择出符合其个人需求偏好的百级别数据;
· 一个则是排序(Ranking),通过更加丰富的用户,视频乃至场景信息,对结果进行精细化排序,得到呈现给用户的备选。
备选生成阶段,将推荐系统定义为一个多分类器,其职责是确定某个用户,在某个场景与时间下,将从系统的视频中选择消费哪一个视频。具体的方法是,将用户与视频全部转化为Embedding描述,即一个向量,最终用户消费某个视频的概率通过如下方式计算得到:
而构建用户与视频的Embedding,则是通过训练而来。将用户观看视频/搜索记录/其它信息如年龄性别等作为输入特征,部分稀疏特征首先进行Embedding化,中间为数层ReLU,最终一层用SoftMax进行分类。 换句话讲,是将用户与场景信息作为输入,预估用户下一个要看的视频,也就是将用户分到具体某一个视频作为其类别。 用户与视频的Eembedding,则是神经网络最后一层的对应矩阵。这种方法除了能利用用户行为信息外,其它信息例如设备,地理位置,性别等也可以作为输入,这是神经网络相对于普通MF类算法的优势之一。
图2.YouTube推荐备选生成阶段架构
备选生成的下一个阶段是排序。其网络结构跟备选生成阶段类似,将所有排序模型中的信息输入后,进入多层ReLU,最终进行优化的是一个加权逻辑回归损失函数,观看时间作为阳性样本权重。在这一层,也可以看到其推荐“代理问题”的转化:由点击行为预估转为了以观看时长为权重的点击行为预估,这样更佳贴近Youtube的产品优化方向。与备选生成阶段另一个不同在于,排序模块需要考量的特征要多得多:
· “场景”类特征,例如用户可能在某个地方某个时间愿意观看某一条视频,但是在别的地方别的时间则不会;
· 曝光信息:用户观看了某界面,但是并未在其上进行操作,那么随之应进行已呈现内容降级;
· 备选生成层输出:排序需要将各种备选结果联合起来;
· 更丰富的用户信息:例如用户最近的一次搜索词,用户最近观看的同一个主题下的视频数量,用户上一次观看同主题视频的时间,用户所使用的语言等;
图3.YouTube推荐排序阶段架构
除了整体设计与系统架构以外,本篇论文中陈述了很多“选择”,这些选择更多的是“艺术”而不完全属于技术范畴。这些选择往往是很多技术人员关注不多的点,但在笔者看来,这些都蕴含着YouTube技术与产品人员深入的思考与判断。
“Example Age” 特征
对于YouTube产品层来讲,鼓励内容产生毫无疑问是至关重要的,所以推荐系统也希望对用户上传的新内容的有所偏好。然而幸运的是,即使损失一部分相关性,视频的消费者也偏好新内容。也就是说,新内容的价值可以良好的通过其带来的吸引力呈现出来,并不需要平台刻意而为之。
由于系统使用一个时间窗口的训练样本进行训练,如果没有视频的上传时间信息,那么模型会认为这个时间窗口内用户对视频的偏好是稳定的,然而事实远非如此。将视频的上传时间加入到特征集合后,预估更加准确,尤其是视频刚上传阶段的强烈便好被成功捕捉到。
图4.无时间特征预估/有时间特征预估/真实情况 三者对比
优化目标选择
图5.优化对象的选择
算法系统的设计首先要明确优化对象,这不仅仅涉及到损失函数的形式,同样也是评判系统成功与否的标准。YouTube是视频平台,更是富含“价值”的长视频平台,其观看行为比点击行为意义更大。(当然,笔者认为没有任何一个简单指标可以完全代表一个产品)
“正样本”定义
图6.何为正样本的设计选择
训练数据来源
图7.关于训练数据来源的设计抉择
训练数据应该只来源于推荐界面的曝光吗?YouTube认为不然。如果只考虑推荐界面曝光,则无法对用户便好进行 探索 ,更加无法捕捉用户偏好的变化,因为用户偏好的变化往往首先会对应着搜索与浏览行为。所以YouTube将各个界面例如搜索,导航等用户行为全部纳入其中。
训练数据窗口
图8. 训练数据收集方式的设计选择
Youtube将所有用户等而视之,每个用户收集一定量的样本。而不是惯常可见的直接收集一个时间窗口内的所有用户行为,作为训练样本。这样的好处是避免系统收到少数行为过多用户的影响,使得系统更多的为大众设计。这样的设计理念与近期阿里Gai Kun的论文中评测方法(用户AUC)设计有异曲同工之妙。
用户行为序列处理
图9.用户行为序列信息处理的设计选择
在系统中,用户往往会顺着一个检索结果页或者用户发布者浏览页进行顺序观看,如果系统捕捉到了用户看了检索界面的前三个结果,那么预估用户将看第四个结果就会很容易。但是这样真的好吗?将检索结果页面或者用户发布视频界面直接作为推荐结果呈现给用户是并不友好的--抢了别的界面应该干的活嘛。所以此处YouTube对用户行为序列做了处理,在模型输入中选择放弃用户行为的序列信息,将其打散成词袋Embedding,即使这样的信息有利于模型的离线训练效果。
预估对象的选择
图10.关于预估对象的设计选择
用户的行为往往是有顺序的,用户在系统中“热身”后,在一个频道下面,往往先看大众喜欢的热门,然后逐步找到自己的兴趣点,聚焦看一块内容。那么,训练数据则应该收集用户前段时间行为,预估此后的行为。而不是收集时间前后段的行为,预估中间时间段的用户行为。这样模型更加接近用户习惯。
除此之外,Youtube根据系统设计了对应的实验,结果非常简单:深度网络层数越高,效果越好。
YouTube的推荐系统,已经为其贡献了70%的用户播放时长,搜索与导航在PC时代的主导地位在移动时代已经完全被颠覆掉。希望大家在其中学到一些东西。笔者水平所限,若有错误不当之处,敬请指正。
另外,个人用TensorFlow模拟Youtube的推荐系统,做了一个简单实现。其实就是一个多分类器外加一个单分类器,远谈不上成熟,可以供大家参考。
——END——

不去健身房不跑步在家能做什么运动——YouTube健身博主推荐
没想到立志成为小说家的我在的第一篇内容会献给健身。
首先说明一下,本文可能更适用于 小基数妹子 ,推荐的一些视频都是我做过一段时间感觉不错的,配合饮食可以减一些体重。不过我意不在减肥只是喜欢运动减压,更注重塑形,并且平时还是会跑步的,跑步机或者室外跑看心情。
关于我的运动情况,小时候练过7年民族舞和1年拉丁,纯粹是爸妈为了锻炼我的体质而送去学的,升上初中之后因为学业原因舞蹈就完全放下了。高中的时候因为小时候的舞蹈底子被选进了学校的健美操队,然而练了半年之后因为班主任觉得我学习不错应该不需要健美操加分保送之类的,并且校队每天放学后训练起码两三个小时我觉得太累所以退队了,退队之后进了学校瑜伽社社团活动的时候稍微练一练。大学有一个暑假我妈请了ptr网球教练教我网球,之后在学校自娱自乐打过一年网球,课余报班学了一点普拉提。以上是我所有和运动有关的经历,可以算作三天打鱼两天晒网,没一样学精了。自己开始健身的契机是大四一年学业和课外生活都比较忙碌,为了减压开始跑步,但是总跑步嫌枯燥,又因为死宅性格偏爱独处,所以从网上搜罗了一些比较火的室内运动自己做一做。
瑜伽
谈到瑜伽,首先推荐YouTube频道 Yoga with Adriene 。其实瑜伽如果动作做不到位对身体是有伤害的,初学者可以跟着Adriene的 Foundations of Yoga 这个播放列表来学习基本动作,她的讲解包括如何伸展、如何呼吸,非常详细,每个基本动作录了一个5、6分钟左右的视频。基本动作学完后,可以开始做她的其他视频,有针对初学者的视频列表、20分钟左右的列表、40分钟左右的列表,视频内容很丰富,可以根据自己的情况选择。Adriene很亲和,声音温柔,讲解细致,做完一套之后心情也会变好。
其次推荐的是YouTube频道 BOHO Beautiful 。这个频道是一对情侣Juliana和Mark一起做的,当然视频主角是Juliana,Mark来拍摄、编辑视频,有时候片头能看到他们秀恩爱,挺甜的。BOHO的视频大部分是瑜伽,也有普拉提和有氧训练。一般每个视频都不太长,10分钟左右的居多,我自己做过最长的是17分钟。同样也有一个列表Yoga for Beginners适合初学者,另外还有一些他们编排过的合集,把几个视频组合起来就能够专注腹部或者臀部的训练。不过我个人关注BOHO最主要还是他们的Challenge,视频详情下面会有很详细的计划,每个Challenge只有两三周时间,按照计划练完会很有成就感。
芭蕾
谈到芭蕾,推荐的当然是 Ballet Beautiful 。美女教练Mary Helen身材修长气质绝佳,尤其是她一些视频录制的时候是产后或怀孕状态,我看视频的时候根本没看出来。网上很火的天鹅臂我练过一个月,后期因为兴趣和版权原因改练其他视频去了,不过天鹅臂对于肩颈的塑形确实有效,我推荐给一个肉肉的朋友之后她练了三个星期锁骨明显多了。同系列的臀腿练习,Mary Helen做起来云淡风轻,笑容和恤,动作轻盈,我做起来就没有那么轻松了,经常属于咬牙坚持的状态。至于版权问题,最开始我知道Ballet Beautiful是因为豆瓣,b站上也有视频就去做了,后来在知乎上被科普了,国内某翻译圈大大从官网盗视频然后翻译做字幕之后无授权情况下去淘宝贩卖,之后我再做天鹅臂就是直接看YouTube上帮Mary Helen出DVD的BeFit公司放出的视频了。另外要提一句,目前网上的视频,Body Blast系列、Classic系列都只是BeFit公司放出来的节选,并不是完整版,想要看完整版还是买DVD吧。本来怀着对Mary Helen的崇拜我想去官网订阅她的课程,不过每个月39.99刀的费用还是让我望而却步,转投接下来要讲的Rebecca Louise怀抱。
力量训练
最后要推荐的就是我最爱的YouTube健身博主Rebecca Louise了。她在国内也蛮有名,从 XHIT 时期我就很喜欢她(Kelsey Lee也很不错,不过个人更喜欢话痨Rebecca),XHIT的维秘系列、XFIT Daily系列都很不错,跟着练效果很棒,我的马甲线就是跟着Rebecca在XHIT频道的视频练出来的,耗时一个半月。不过XHIT频道大概一年多没更新了,Rebecca Louise现在有个人的健康网站和YouTube频道,官网百度一下就能找到,频道就叫 Rebecca Louise 。我在她的官网上订阅了Fitness Calendar,每个月只要3.99刀,费用是Ballet Beautiful课程的十分之一。Fitness Calendar是官网推出的训练月计划,每天帮你安排30分钟的视频训练,每天不重样,即使是训练同一个部位也有不同的视频组合,另外每周会有一个很诱人的健康食谱。每个订阅者会通过邮件收到独一无二的密码来查看每个月的计划,然后点击月计划上的某天就能够看到当天的训练安排。Rebecca的Calendar适合我这种囊中羞涩又懒得动脑的人。如果不订阅当然也没关系,只要进入她的YouTube频道就能看到所有的免费训练视频,自己补充一下健身知识,根据自己的情况来安排练习当然也很赞。Rebecca的视频,无论是XHIT时期还是现在,主要是力量训练,还有一些很不错的心肺练习、HIIT练习,另外还有少量的瑜伽、普拉提和芭蕾练习。Rebecca之所以能成为我最喜欢的健身博主,就是因为她特别话痨,一直在解说或者鼓励,本来训练就很累了,如果教练太安静我可能会偷个懒,但是她一直说话打鸡血就会让我充满动力。
讲了这么多,最后多说一句,任何健身都要让自己觉得舒服。我从来不觉得刻意考验自己是多么了不起的一件事。意志力本就宝贵,生活中有如此多的挑战、如此多的有趣有意义的事情,每天和想吃想玩的意念抗争对我而言太痛苦,我宁愿好好吃好好玩,运动对我而言就是为了放松、为了减压、为了让自己有更好的身体。
YouTube有什么好看的节目和栏目?大家有什么推荐?
我比较推荐Vsauce,它是一个由迈克尔·史蒂文斯创建的YouTube科普频道。主要拍摄关于游戏、科技、文化以及人们普遍关心的议题的视讯,博主选择的都是很有趣的topic
关于YouTube推荐系统的论文学习
本文是2010年发表在RecSys上的文章。本文主要介绍的是YouTube的个性化推荐的相关内容。
用户使用YouTube一般有三个原因:
--看他们在其他地方找到的单一视频(直接导航);
--围绕某个主题(搜索和目标导向浏览)查看特定视频;
--受他们感兴趣内容的吸引。
推荐系统主要是针对第三点,目的是帮助用户发现他们感兴趣的高质量视频,并且推荐结果应该随时间和用户最近的行为更新。
在YouTube的推荐应用中,面临以下挑战:
--用户上传的视频的元信息非常少;
--视频时长比较短(一般小于10分钟);
--用户行为短暂、多变而且噪声很多;
--视频生命周期短。
这是YouTube的推荐和普通视频网站推荐不同的地方,这些挑战也是现在很多短视频公司关注的问题。
推荐系统算法应该保持时效性和新鲜性,另外,用户必须了解为什么向他们推荐视频,这样可以帮助用户根据自己的喜好改善推荐引擎。推荐的视频是通过用户的行为来生成的,用户的行为包括观看、收藏、喜欢等来作为种子视频,然后使用各种相关性和多样性的 signals 对视频集进行排序。推荐系统的工程设计方面,保持各个模块的独立性,并且还需要对故障具有恢复能力,并在出现部分故障时适度降级。
这里有2种数据可以考虑:
1)是内容数据视频流、视频元信息(标题,标签等);
2)用户行为数据,包括显性和隐性数据。前者是指用户评分、明确表示喜欢、不喜欢等行为,后者是浏览、观看等行为。
原始数据中还含有非常多的噪声,很多不可控因素会影响原始数据的质量。
作者将相关视频定义为用户在观看给定的种子视频 v 之后可能会观看的视频,使用关联规则挖掘技术来确定视频间的相关性。视频i和j的相关性定义为:
将用户观看过的视频、喜欢过的视频、收藏过的视频等等作为种子集合,对它们进行N级的级联扩展,也就是YouTube选择召回的不是1步相关视频,而是n-步相关视频,即种子视频迭代n次后得到的相关视频集合,产生广阔和多样的候选结果。
在生成一组候选视频后,需要对这些相关视频进行排序。
用于排序的数据主要包括:
--视频质量:包括观看次数、视频评分、评论、收视和上传时间等;
--用户特征:考虑用户观看历史记录中种子视频的属性,例如观看次数和观看时间等;
--多样性:要在被推荐的视频集合的类别中做一个平衡,以保持结果的多样性。
这些数据最终被线性组合起来,得到ranking的评分。
本文虽然是2010年发表的,近年来有很多内容升级复杂化了,但是作为初学者,本文的知识点和整体思路是非常值得学习的。当时的YouTube推荐系统的核心算法就是基于Item的协同过滤算法,也就是对于一个用户当前场景下和历史兴趣中喜欢的视频,找出它们相关的视频,并从这些视频中过滤掉已经看过的,剩下就是可以用户极有可能喜欢看的视频。
本文是Google的YouTube团队在推荐系统上DNN方面的尝试,发表在16年9月的RecSys会议。本文第1节介绍了YouTube推荐系统主要面临的挑战。第2节介绍了一个简要的系统概述。第3节更详细地描述了候选集生成模型,包括如何对其进行训练并用于提供推荐服务;实验结果显示模型添加特征和DNN深度后可以显著提升预测效果。第4节详细说明了排序模型,包括使用加权逻辑回归技术以训练预测预期观察时间的模型;实验结果表明,增加隐层网络宽度和深度都能提升模型效果。 最后,第5节做了总结。
-规模大:用户和视频的数量都很大,传统适合小规模的算法无法满足;
-新鲜度:要求对新视频作出及时和合适的反馈;
-噪音:YouTube上的历史用户行为由于稀疏性和各种不可观察的外部因素而不可预测。 我们很少能获得基本真实的用户满意度,更多的是隐式反馈噪声信号。
推荐系统的整体结构如图所示:
该系统由两个神经网络组成:一个用于候选集的生成,一个用于排序。候选集生成网络将用户的Youtube活动历史记录作为输入,然后从海量视频集中筛选出一小部分(数百个)以高精度与用户相关的视频。排序网络负责基于更加精细的特征对候选集进行排序,最后将最高得分的视频呈现给用户(按它们的得分排名)。
该模型把这个推荐问题转化成极端多分类问题:对于用户U和上下文C,把语料库V中的数百万个视频(分类)i,在时间t处做准确的分类,如下所示:
其中u为用户U的embedding表示,vi 代表各个候选视频的embedding。embedding是指稀疏实体(单个视频,用户等)到实数密集向量的映射;DNN的目标就是在用户信息和上下文信息为输入条件下学习用户的embedding向量u,这对于用softmax分类器来区分视频是有用的。
整个模型架构是包含三层全连接层,使用relu激活函数。把用户观看历史数据、搜索数据做一个embedding,加上age、gender等特征作为DNN的输入;输出分线上和离线训练两个部分。训练阶段使用softmax输出概率,在服务期间则直接使用接近最近邻搜索来进行生产候选的N个视频。
1)把用户观看过的视频id列表做embedding,并对所有历史观看视频ID的embedding做平均,得到观看embedding向量。
2)同时把用户搜索过的视频id列表也做如上的embedding,得到搜索embedding向量。
3)用户的人口统计学属性做embedding得到特征向量。
4)简单的二值和连续特征,例如用户的性别,登录状态和年龄作为归一化为[0,1]的实数值直接输入到网络中。
5)example age:机器学习系统总是利用历史的例子去预测未来,所以对过去总会有一个隐含的偏差。为了矫正偏差,YouTube把训练样本的年龄当作一个特征。
1.训练样本要用youtube上的所有视频观看记录,而不只是我们的推荐的视频的观看记录。
2.为每个用户生产固定数量的训练样本。
3.丢弃搜索信息的顺序,用无序的词袋表示搜索查询。
4.如下图,图(a)从历史观看记录中随机拿出来一个作为正样本来预测它,其余的历史观看记录作为上下文;这样其实泄露了未来的信息,并且忽略了任何非对称的消费模式。相反,图(b)是从用户的历史视频观看记录中随机拿出来一个作为正样本,然后只用这个视频之前的历史观看记录作为输入;这样的预测效果好得多。
– 深度为0:这时网络就是一个把连接起来的输入层转换一下,和softmax的256维输出对应起来
– 深度为1:第一层 256个节点,激活函数 是ReLU (rectified linear units 修正线性单元)
– 深度为2:第一层512个节点,第二层256个节点,激活函数都是ReLU
– 深度为3:第一层1024个节点,第二层512个节点,第三层256个节点,激活函数都是ReLU
– 深度为4:第一层2048个节点,第二层1024个节点,第三层512个节点,第四层256个节点,激活函数都是ReLU
实验结果如下图所示:
可以看出,特征选取较多时,并且模型深度在四层时,可以得到较好的结果。
排序阶段最重要的任务就是精准的预估用户对视频的喜好程度。在排序阶段面对的数据集比较小,因此会采用更多的特征来计算。
作者在排序阶段所设计的DNN和上文的DNN的结构是类似的,但在训练阶段对视频的打分函数不再是softmax,而是采用的逻辑回归。如下图所示:
1)特征工程
尽管神经网络能够减轻人工特征工程的负担,但是我们依然需要花费精力将用户及视频数据转化为有效的特征。其主要的挑战在于如何表示用户动作的时间序列以及这些动作如何与正被评分的视频展现相关。但是通过对用户和物品之间的交互行为,我们能提取出一些有用信息,比如: 用户从这个频道里看过多少视频,用户上次观看这个主题的视频是什么时候等。
2)embedding 离散特征
每个维度都有独立的embedding空间,实际并非为所有的id进行embedding,比如视频id,只需要按照点击排序,选择top N视频进行embedding,其余置为0向量;而当多值离散特征映射成embedding之后,像在候选集生成阶段一样,在输入网络之前需要做一下加权平均。另外一个值得注意的是,离散特征对应的ID一样的时候,他们的底层embedding也是共享的,其优势在于提升泛化能力、加速训练、减小内存占用等。
3)连续特征归一化
对连续值类的特征进行归一化,作者设计一种积分函数将特征映射为一个服从[0,1]分布的变量;还可以对某些特征进行取根号、取对数和取平方的相关操作,使得网络有更强的表达能力。
给定正负样本,正样本为有点击视频,负样本为无点击视频;用观看时长对正样本做了加权,负样本都用单位权重(即不加权);采用的是基于交叉熵损失函数的逻辑回归模型训练的。
上表显示了在保留数据集上用不同的隐层配置得到的结果,这些结果表明增加隐层的宽度提升了效果,增加深度也是一样。
本文内容方面,介绍了YouTube基于深度学习的推荐系统,先用视频和用户的主要信息通过深度候选生成模型从百万级视频中找出数百个相关的视频,再用视频和用户的其他信息通过深度排序模型从数百个视频中找出几十个最有可能受用户欢迎的视频给用户。这样使得推荐系统对用户喜好的刻画能力大大增强,刻画的范围更加广泛。
本文结构方面,从推荐系统的整体结构讲起,划分为候选集生成和排序两个阶段,然后对每个阶段详细地展开讲解。整体过程条理清晰,逻辑严密,值得我们学习。
