关于youtube的论文(介绍youtube的文章)
Youtube DNN经典论文
最近在看王喆的知乎专栏,第三、四、十三篇都是Youtube的经典论文DNN:
(使用浏览器扫码进入在线客服窗口)
复制联系方式
跟着大佬又回顾了一下,发现之前真的只能算是一知半解,趁着这次把对这篇论文的新的理解记录一下,可能还会有一些错误。
论文讲解了在召回和精排两个阶段的模型:
召回:
先从特征说起:用户观看过的video的embedding,用户搜索词的embedding,用户的地理位置、年龄等side_infomation,还有exampl_age这个需要解释的特征
然后是模型:三层DNN
最后是training的loss:softmax做分类
serving的方式:nearest neighbor
里面其实有很多疑点:
1.example_age是什么
这个点专栏里说是训练时间 - 得到这条样本的时间(视频点击时间),但是我觉得这样表达不出“新视频”这个概念,也不知道用当前时间去减是啥意思,label是点击那一刻打上去的,又不是训练的时候;
所以我觉得这个example age应该是点击时间-上架时间,表示用户对新上架视频的偏好,用这个特征去捕获这个偏好了,在serve的时候全都置为0就可以消除这个偏好,毕竟这是召回阶段,可以多召回些东西。(这样就是消除用户对新视频的偏好了?)
2.为什么要做多分类,而不是预测分,多分类的话有海量视频,性能怎么保证
为什么要做多分类,而不是把样本的embedding也给到网络里做打分,这一点我是真的没弄明白;
海量视频的多分类性能的提升是用到了sampled softmax,可以参考 总的来说就是通过Q(y|x)采样出一个子集,对子集计算logits,然后用计算结果F(x,y)-log(Q(y|x))可以表示原数据集上的logits
3.serving阶段为什么不做多分类了,而是做nearest neighbor
这里首先要弄明白serving阶段的user embedding和video embedding是什么,user_embedding是最后一层relu之后的结果,比如是一个d维的向量;然后要得到一个几百万维(用d_N表示)的向量,需要过一个d*d_N维的矩阵,这个矩阵的每一列训练完之后就是video embedding;如果是serving的阶段依然是和每一列相乘,再算一个softmax,既然分母是一样的,取指数的操作也是一样的,那么就直接做点积就好了。
排序:
先从特征说起:当前排序的video的embedding,用户观看过的video的embedding,用户和video的语言embedding,time since last watch是自上次观看同channel视频的时间,previous impressions是该视频已经被曝光给该用户的次数(这里已经引入了负反馈的思路)
然后是模型:三层DNN
最后是training的loss:weighted logistic
serving的方式:e^(Wx+b)
这里面也有一些疑点:
1.training时候的weighted logistic是什么,为什么serving的时候用的是e^(Wx+b)
这个点是我重读的时候最没理解的地方,先尝试写一下,这里首先要搞清楚weighted logitstic是什么,那先回顾一下LR的公式的由来是log(odds) = w*x;这里的odds=p/(1-p)表示正样本发生的概率/负样本发生的概率;在weighted LR里面这个odds要变成W*p/(1-p)这里的W就是给正样本加的权重,至于为什么是这样有一种解释是用正负样本比去解释的,我觉得不是很合理 ;但是如果能够接受这个odds的话,那么log(odds) = w*x就可以得到odds = e^(wx),后者就是serving的目标;
再说W*p/(1-p)是什么,这里W权重是这条视频的时长T,那么sum(Ti*pi)就是E(T)即时长的期望,E(T)/(1-p)泰勒展开就是E(T)*(1+p)这里的p很小的话其实就是E(T)也就是说serving的时候其实得到的就是观看时长的期望,这里如果用到电商里用price去加权,得到的应该也是对price的预估。
还是非常建议多去看一下十大工程问题那篇专栏,讲到了更多,比如对每个用户提取等数量的训练样本、把大量长尾video的embedding置0这些方法的出发点。

Youtube 算法规则
在Google工程师Paul Covington,Jay Adams和Emre Sargin发表的这份 研究论文中 ,他们分解了用于对YouTube推荐视频进行排名的信号:
前三个信号是您可以直接影响的唯一信号。其余部分取决于您频道之外的因素,以便个性化推荐。
这些Google工程师甚至声称,他们的最终排名目标“通常 是预期的每次观看观看时间的简单函数。 按点击率排名通常会宣传用户未完成的欺骗性视频(“点击诱饵”),而观看时间可以更好地吸引用户参与。”
有人可能会认为这意味着优化点击率会让您受到YouTube的惩罚,但这是一个巨大的误解。
YouTube只会惩罚诱饵和切换策略-点击前的承诺过多,而点击后的内容令人失望。点击率仍然像以往一样重要。毕竟,如果不先获得点击,就无法为YouTube带来大量观看时间。
您甚至可以在 YouTube Studios中 看到这些优先级:YouTube的新分析仪表板。
最多可以在5秒内总结出最出色的YouTube频道或系列:
另一方面,许多YouTube频道很难吸引人,因为他们将YouTube频道视为上传所有视频内容的地方,而不是一个连续的视频系列的首页。
保持一致性的YouTube频道能够 持续 增加其订阅者人数和观看人数,因为它使人们更容易决定观看更多内容并订阅其频道。
“我们的盛宴”频道体现了我们正在谈论的那种一致性-名人吃食物-具有多个系列,这些系列本质上是同一前提的变体。
较新的YouTube频道不能依靠推荐引擎来获得所有观看次数。
毕竟,推荐内容主要取决于观看者过去观看和与您的视频互动的方式。YouTube需要数据来作为推荐的依据,没有人观看您的视频就没有数据。因此,请采取所有通常的措施来宣传您的视频,例如:
但最重要的是,着眼于 YouTube SEO 并 吸引更多的订阅者 ,这不仅是为了长期 获取 视频观看次数,而且还因为用户反复在平台上消费以及用户订阅的内容是YouTube算法用于提出个性化建议。
在工程师中,工程师注意到“最重要的信号是那些描述 用户之前与商品本身和其他类似商品互动的信息 ……例如,考虑用户过去的历史以及上传了被评分视频的频道用户从该频道观看了许多视频?用户最后一次观看有关该主题的视频是什么时候?”
如果您可以让新用户点击其中一个视频后继续观看更多内容,则可以增加在下次打开YouTube时向他们推荐视频的机会。
我们已经确定,点击率仍然很重要,YouTube优先考虑观看时间只是针对低质量点击诱饵的一种对策。
环顾YouTube,您会发现视频缩略图上不乏表情丰富的面孔。
Netflix所做的一项 关于平台上艺术品性能的研究表明,“情感是传达复杂细微差别的有效方法。众所周知,人类必须对面孔做出硬性回应-我们已经看到这在所有媒介上都是一致的。但重要的是要注意, 情绪复杂的面孔胜过坚忍或良性的表情。 ”
Netflix也注意到的最早趋势之一,值得发扬到自己的缩略图,它是当图像包含3个以上的人时,它赢得别人的倾向就下降了。
三分法则是实现“ 黄金分割率” 的简化方法,研究表明,这种方法可以 最大程度地减少 大脑处理图像 所需的时间 。
该图像构图准则建议您将兴趣点放置在图像的中心,而不是图像的中心。
根据 Sandvine 的2019年研究,YouTube现在占互联网上所有移动流量的37%。这也意味着相当一部分观众会在移动设备上观看您的视频。
4.鼓励观众点击后留下
让人们观看您的视频是一回事。让他们从头到尾真正观看视频是另一回事。
幸运的是,通过在视频创建过程中建立此目标,可以提高视频的完成率(并获得更多的观看时间):
从头开始,并在视频介绍中加入一个“钩子”
转录您的视频,以便人们可以观看静音
根据您的分析调整视频的长度(观看者在下车之前实际拍到多远?)
请勿过长地使用同一张镜头,否则可能会让观看者感到厌烦(这就是为什么跳跳剪辑在YouTube上很受欢迎的原因)
如果您的视频很长,请在片刻间撒些片刻,以便在观众开始徘徊时重新吸引观众的注意力
5.鼓励您在频道上疯狂观看
您还可以通过采用涉及视频消耗和一致性的策略来优化频道级别的观看时间。
除了为您的YouTube频道提供专门的前提条件(这可能是最重要的因素)之外,您还可以通过以下其他方法使观看者更轻松地观看更多内容:
使用插卡和结束卡手动推荐相关视频
每当您共享时,都链接到播放列表中的视频,以便用户观看的下一个视频始终是您自己的视频
开发从缩略图到视频本身的一致格式-如果观众喜欢您的其中一个视频,那么他们应该能够正确地假设他们会喜欢您的其他视频。
将特定的号召性用语甚至是其他视频中的场景整合到观众中,直接“吸引”观众,以消费更多内容。
随着YouTube算法的变化,一件事保持不变
多年来,YouTube的算法发生了很大变化,每次都使创作者和品牌争先恐后,想知道为什么他们曾经依赖的方法不再有效。
但是,即使YouTube算法不断发展,但请记住,该平台的目标仍然不变:吸引更多的人在YouTube上观看和观看更多视频。那与您的没什么不同。
关于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基于深度学习的推荐系统,先用视频和用户的主要信息通过深度候选生成模型从百万级视频中找出数百个相关的视频,再用视频和用户的其他信息通过深度排序模型从数百个视频中找出几十个最有可能受用户欢迎的视频给用户。这样使得推荐系统对用户喜好的刻画能力大大增强,刻画的范围更加广泛。
本文结构方面,从推荐系统的整体结构讲起,划分为候选集生成和排序两个阶段,然后对每个阶段详细地展开讲解。整体过程条理清晰,逻辑严密,值得我们学习。
推荐系统论文阅读(二十二)-基于多兴趣向量召回的Mind
论文:
论文题目:《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》
论文地址:
前面讲的论文大部分都是关于排序的算法,mind作为天猫商城召回阶段的算法,还是很值得阅读的。
主流的推荐系统一般都分为matching(召回)和rangking(排序)两个阶段,不管在哪个阶段,都要学习和表示用户的兴趣向量。因此,最关键的能力是为任一阶段建模并得到能代表用户兴趣的向量。现有的大多数基于深度学习的模型都将一个用户表示为一个向量,如YoutubeDNN那篇论文,不足以捕获用户兴趣的不断变化的特点。基于以上原因,天猫提出了Mind方法,通过不同的视角来解决这个问题,并且用不同的向量来表示从用户不同方面的兴趣。
天猫商城也是分为了召回和排序两个阶段,召回阶段的主要目标就是从亿级别的商品库中筛选出千级别的候选物品给排序阶段使用。在天猫场景下,用户每天都要与成百上千的商品发生交互,用户的兴趣表现得多种多样。如下图所示,不同的用户之间兴趣不相同,同时同一个用户也会表现出多样的兴趣:
现在主流的召回阶段用到的召回算法要么是基于协同过滤的算法,要么是基于embedding召回的方法,但是这两个方法都有缺陷。协同过滤算法有着稀疏性和计算存储瓶颈方面的缺点,embedding的向量召回方法也有着几个缺点,一个是单一的向量无法准确表达出用户多种多样的兴趣,除非把这个向量长度变得特别大,还有一个就是,只有一个embedding会造成一定的头部效应,召回的结果往往是比较热门领域的商品(头部问题),对于较为小众领域的商品,召回能力不足,也就是更容易造成马太效应。
正如我们在第一段话中阐述的那样,如果单个兴趣向量没法做到将所有的用户兴趣点覆盖,那么就多搞几个向量,几个向量同时来表示用户的兴趣点不就行了吗?事实证明这么做确实是可以的,而且天猫也通过这种方法大大提高了召回的效果。
简单的先来看一下这个模型的架构,还是浓浓的阿里味,不管是item还是user在生成属于自己的向量的时候都会加上side information,这也是跟din,dien中一样传承下来的东西。整个模型关键的部分就在于这个Multi-Interest Extractor Layer层,后面我们就重点来讲一下这个层。
召回阶段的目标是对于每个用户u∈U的请求,从亿级的商品池I中,选择成百上千的符合用户兴趣的商品候选集。每条样本可以表示成三元组(Iu,Pu,Fi),其中Iu是用户u历史交互过的商品集合,Pu是用户画像信息,比如年龄和性别,Fi是目标商品的特征,如商品ID、商品品类ID。
那么MIND的核心任务是将用户相关的特征转换成一系列的用户兴趣向量:
接下来就是item的embedding了:
说白了f函数就是个embedding+pooling层。
我们有了用户的兴趣向量 和物品向量e后,就可以通过如下的score公式计算得到topN的商品候选集:
这个score的计算过程过其实是对这K个向量分别计算出一个分数然后取最大对那个。有了每个用户的兴趣向量后,我们就能对所有对item求一个分数,这样直接取topN就可以得到N个候选物品了。
这一层跟我们之前介绍的论文din,dien中的操作是类似的。在user embedding中,输入部分包括user_id,还包括gender,city等用户画像信息,分别做完embedding后直接concat起来就得到用户的embedding。跟user侧不同的item embedding则是采用pooling操作来得到item embedding,将商品ID、品牌ID、店铺ID分别做embedding后再用avg pooling。
这部分就是整个mind最关键的地方了,下面会进行详细讲解。
我们认为,通过一个表示向量表示用户兴趣可能是捕获用户的多种兴趣的瓶颈,因为我们必须将与用户的多种兴趣相关的所有信息压缩到一个表示向量中。 因此,关于用户的不同兴趣的所有信息混合在一起,从而导致在匹配阶段的项目检索不准确。所以,mind采用了多个兴趣向量来表示用户的不同兴趣。 通过这种方式,可以在召回阶段分别考虑用户的不同兴趣,从而可以针对兴趣的各个方面进行更准确的检索。
Multi-Interest Extractor Layer,借鉴的是Hiton提出的胶囊网络。有关胶囊网络,下面的图可以帮助你快速理解(源于知乎: ):
可以看到,胶囊网络和传统的神经网络较为类似。传统神经网络输入一堆标量,首先对这堆标量进行加权求和,然后通过非线性的激活函数得到一个标量输出。而对胶囊网络来说,这里输入的是一堆向量,这里的计算是一个迭代的过程,每次对输入的向量,先进行仿射变换,然后进行加权求和,最后用非线性的squash操作得到输出向量,可以看到胶囊网络的的输入跟输出还是跟传统DNN不一样的。
但是,针对图像数据提出的原始路由算法不能直接应用于处理用户行为数据。 因此,我们提出了“行为到兴趣(B2I)”动态路由,用于将用户的行为自适应地汇总到兴趣表示向量中,这与原始路由算法在三个方面有所不同。
1.共享双向线性映射矩阵
在胶囊网络中,每一个输入向量和输出向量之间都有一个单独的双向映射矩阵,但是MIND中,仿射矩阵只有一个,所有向量之间共享同一个仿射矩阵。
主要原因:一方面,用户行为的长度是可变的,天猫用户的行为范围是几十到几百,因此固定双线性映射矩阵的使用是可推广的,同时也减少了大量的参数。 另一方面,我们希望兴趣胶囊位于相同的向量空间中,但是不同的双线性映射矩阵会将兴趣胶囊映射到不同的向量空间中。因此,映射的逻辑变成了:
其中ei是用户行为中的item i的embedding,uj是兴趣胶囊j的向量。
2. 随机初始化胶囊网络的权值
在原始的胶囊网络中,映射矩阵是初始化为0的,但是这样会导致几个问题。将路由对数初始化为零将导致相同的初始兴趣胶囊。从而,随后的迭代将陷入一种情况,在这种情况下,不同的关注点胶囊始终保持相同。这跟我们的意图是不一致的,我们希望生成不同的用户兴趣向量。因此,我们在初始化的时候,让胶囊网络中权重的初始化由全部设置为0变为基于正太分布的初始化。
这里随机初始化的是bij而不是S,也就是胶囊映射逻辑矩阵,S是双向映射矩阵,不要搞混了。
3. 动态的用户兴趣数量
由于不同用户拥有的兴趣胶囊数量可能不同,因此我们引入了启发式规则,用于针对不同用户自适应地调整K的值。 具体来说,用户u的K值由下式计算:
动态的调整会让那些兴趣点较少的用户节省一部分计算和存储资源。
整个Multi-Interest Extractor Layer的计算过程如下:
看到这里我有个疑惑,在于算法的第7点,我们的 是用正太分布初始化的矩阵 跟双向仿射变化后的向量相加的结果,这一点我在论文中并没有得到很好的理解,也就是说,本来 是全零的,现在是用标准正态分布初始化后在去跟双向映射完的向量叠加吗?
还有一个疑问就是,针对每一个j,我们利用所有的behavior的i计算得到一个向量uj,其实感觉应该就是在bij的计算上是不同的,只有bij的计算不同才会产生不同的wij,这样的话也就是说每一轮的bij都是有上一轮的结果来生成的意思?
关于这两点我还是没能搞清楚,以我现在已有的知识来看,每次生成uj后都会利用整个uj去生成下一个bij,跟dcn里面的cross network有点类似,但是说不上来是为什么这么做,可能是这样计算保持来序列计算的特性。
从图中我们也可以清楚的看出来,通过Multi-Interest Extractor Layer,我们得到了多个用户向量表示。接下来,每个向量与用户画像embedding进行拼接,经过两层全连接层(激活函数为Relu)得到多个用户兴趣向量表示。每个兴趣向量表征用户某一方面的兴趣。
我们在前面获得了多个用户的兴趣向量,那么该如何知道这些兴趣向量中哪些是重要的,哪些是可以忽视的呢?这时候attention就派上了用场,正如我们在din中对用户历史行为中的每个item计算weight一样,我们在这个地方也构建一个一个attention网络,用来计算不同兴趣点的weight。
看一下上面的attention网络在结合一下整个mind的模型结构不难得出,这个attention网络的q是候选item的embedding,k,v都是用户的兴趣向量。
attention的计算公式为:
其中,除了计算vu跟ei的内积意外,mind还对这个内积进行了指数运算,这个p值起到了一个平滑对作用,到p接近0的时候,所有的weight是相近的,意味着每个兴趣点都会被关注到。到p大于1的时候,有些weight就会变得很大,而有些就会变得很小,相当于加强了跟candidate item强相关的兴趣点的权值,削弱了弱相关兴趣点的权值,此时更类似于一种hard attention,即直接选择attention score最大的那个向量。实验也证明了,hard attention的方法收敛得更快。
通过label attention网络,我们得到了代表用户u的兴趣向量 ,有了这个向量,我们就可以计算用户u点击item i的概率了,计算方式如下:
目标函数为:
这个L不是损失函数,可以理解为极大似然函数,我们的目标就是让这个东西最大。
当然,在一个具有亿级别item的网站中,我们是不会采用原始的softmax操作的,跟在skip gram中的sample softmax类似,mind也采用了sample softmax的做法,大大减少了运算量。
而在serving阶段,只需要计算用户的多个兴趣向量,然后每个兴趣向量通过最近邻方法(如局部敏感哈希LSH)来得到最相似的候选商品集合。我们只需要输入用户的历史序列和画像信息,就可以得到用户的兴趣向量,所以当用户产生了一个新的交互行为,MIND也是可以实时响应得到用户新的兴趣向量。这里相当于把label attention舍弃掉了,直接用剩下的部分来得到用户的兴趣向量。
serving阶段跟training阶段对于用户的兴趣向量的处理是不一样的,在serving阶段,由于我们有多个兴趣向量,所以score的计算方式就变成了取最大的那个:
mind选择了跟他比较相近的YoutubeDNN进行对比,对比结果如下:
此外,论文还提到了DIN,在获得用户的不同兴趣方面,MIND和DIN具有相似的目标。 但是,这两种方法在实现目标的方式和适用性方面有所不同。 为了处理多样化的兴趣,DIN在item级别应用了注意力机制,而MIND使用动态路由生成兴趣,并在兴趣级别考虑了多样性。 此外,DIN着重于排名阶段,因为它处理成千或者万级别的item,但是MIND取消了推断用户表示和衡量user-item兼容性的过程,从而使其在匹配阶段适用于数十亿个项目。
【Paper Reading】VideoBERT: A Joint Model for Videoand Language Representation Learning
数据准备:
New_HOI
New_verb
New_object
Paper reading:
Title: VideoBERT: A Joint Model for Videoand Language Representation Learning
Author: Chen Sun, Austin Myers, CarlVondrick, Kevin Murphy, and Cordelia Schmid
摘要:
Self-supervised learning has becomeincreasingly important to leverage the abundance of unlabeled data available on platforms likeYouTube. Whereas most existing approaches learn low-level representations, wepropose a joint visual-linguistic model to learn high-level features withoutany explicit supervision. In particular, inspired by its recent success inlanguage modeling, we build upon the BERT model to learn bidirectional jointdistributions over sequences of visual and linguistic tokens, derived fromvector quantization of video data and off-the-shelf speech recognition outputs,respectively. We use VideoBERT in numerous tasks, including actionclassification and video captioning. We show that it can be applied directly toopenvocabulary classification, and confirm that large amounts of training dataand cross-modal information are critical to performance. Furthermore, weoutperform the state-of-theart on video captioning, and quantitative resultsverify that the model learns high-level semantic features.
为了利用YouTube等平台上大量未标记的数据,自我监督学习变得越来越重要。现有的方法大多是学习低层表示,而我们提出了一种联合的视觉语言模型来学习高层特征,不需要任何明确的监督。特别是,受其最近在语言建模方面的成功启发,我们在BERT模型的基础上,学习了视觉和语言标记序列上的双向联合分布,它们分别来自视频数据的矢量量化和现成的语音识别输出。我们在许多任务中使用VideoBERT,包括动作分类和视频字幕。我们证明它可以直接应用于开放词汇表分类,并证实大量的训练数据和跨模式信息对性能至关重要。此外,我们在视频字幕方面的表现也超过了现有的技术水平,定量结果验证了该模型能够学习高级语义特征。
要点
摘要:
1. Youtube上存在大量的视频数据,没有标记,给自监督学习提供了大量的数据来源。(视频有语音)
2. 目前存在的方法都是低层次的特征表示。本文提出的视频-语义联合模型在没有显式监督的情况下学习到了高层次的特征信息。
3. 在BERT的基础上,学习视觉-语义的标记序列的双向联合分布,序列分别来自视频数据的向量量化,和现成的语音识别输出。
4. 这个VideoBERT模型用于动作分类和视频字幕。
5. 可以直接用于开放词汇表分类
6. 实验证实了大量的训练数据和多模态对性能至关重要。数据越多效果越好,用了多模态比不是多模态的要好
7. VideoBERT在视频字幕任务上超过了state-of-the-art.
8. 定量结果验证了该模型能够学习高级语义特征。
Introduction:
1. 深度学习可以从标记数据中学习到内容,但标记数据很难大规模获取。
2. 这些方法大多侧重于低层次的特征(如纹理)和短时间尺度(如持续时间不超过一秒的运动模式)。
3. 我们感兴趣的是发现高层次的语义特征,这些特征对应于在更长的时间尺度(如分钟)内展开的动作和事件,因为这样的表示对于各种视频理解任务是有用的。
4. 特别地,我们提出了一种简单的方法来建模视觉域和语言域之间的关系,结合三种现成的方法:自动语音识别系统(ASR)将语音转换成文本;矢量量化(VQ)在低水平时空视觉特征中的应用以及最近提出的用于学习离散标记序列上联合分布的BERT模型。
5. 我们可以执行 文本 - 视频 的预测,它可以用来自动演示一组指令(比如菜谱),如图1和图2的顶部示例所示。
6. 我们还可以执行更传统的 视频 - 文本 的任务,即对[10]进行密集的视频字幕,如图6所示。
7. 我们的视频字幕方法在YouCook II数据集上达到state-of-the-art
8. 该模型可以在比其他深度生成模型更高的抽象级别上生成可信的猜测,它倾向于预测场景低层次方面的细微变化,比如少量对象的位置或姿态。
9. 我们在这篇论文的主要贡献是一个简单的方法来学习 高层次的视频表示 ,捕获语义上有意义和长时间序列结构。
Related Work
1. 有监督学习:有很多视频表征学习的方法利用已有大量的标记数据集训练卷积神经网络达到视频分类的目的。但是这些方法需要大量的数据;数据集涉及动词和名词范围很小;目前的方法被设计出来用于表示短的视频序列,典型的就只有几秒钟。
2. 相比之下,提出的方法可以关注更长的时间序列;同时不需要利用手工标记
3. 无监督学习:RNN,VAE-style loss, GAN-style loss, SV2P, SVGLP, SAVP, MoCoGAN. 基于gan的方法。
4. 我们与无监督学习的不同之处在于,我们使用BERT模型,没有任何显式的随机潜在变量,应用于从视频中导出的视觉标记。
5. 我们的模型不是像素的生成模型,而是像素衍生出来的特征的生成模型
6. 自监督学习: 避免学习的困难联合模型p (x1: T),它已成为流行的学习条件的模型形式p (xt + 1: T jx1: T) 我们的信号分割成两个或多个块,如灰度、颜色、或前一帧和下一个帧
7. 我们的方法是类似的,除了我们使用 量化的视觉文字 而不是像素。
8. 此外,虽然我们学习了一个 集合条件分布 ,我们的模型是一个适当的 联合生成模型
Cross-modal learning.
9. 视频的多模态特性也成为监督学习视频表示的广泛来源,我们的论文就是建立在这个基础上的。
10. 由于大多数视频包含同步的音频和视觉信号,这两种模式可以互相监督,以学习强大的自我监督视频表示。
11. 在这项工作中,我们使用语音(由ASR提供接口把声音转成文字)而不是低层次声音作为跨模态监控的来源。
Natural language models
12. 我们以最近在NLP社区的进展为基础,在那里,大型语言模型如ELMO[22]和BERT[6]已经为各种NLP任务显示了最先进的结果,包括单词级(例如词性标记)和句子级(例如语义分类)。
13. 然后将BERT模型扩展到多语言数据的预训练
14. 我们的论文建立在BERT模型的基础上,以捕获语言和视觉领域的结构。
Image and video captioning.
15. 最近有很多关于图像字幕的工作(例如,[11,8,15]),这是一个形式p(y|x)的模型,其中y是手动提供的字幕,x是图像。
16. 也有一些工作在视频字幕,使用手动提供的时间分割或估计分段
17. 我们用关节p(x|y)建模并将其应用于视频字幕,并达到最先进的结果
Instructional videos.
18. 各种各样的论文(例如,[16,2,10,38,39])都训练了模型来分析教学视频,比如烹饪。
19. 我们不同于这项工作,我们不使用任何手动标记,我们学习了一个大规模生成模型的文字和(离散化)视觉信号。
Model
1. 为了获取语序信息,我们可以给每个单词加上它在句子中的位置。
2. BERT模型学习每个单词标记和这些标记的嵌入,然后对嵌入向量求和,以获得每个标记的连续表示。
3. 在实践中,我们可以通过采样位置和训练语句随机优化logloss(根据f函数预测的softmax计算)
4. 我们通常不仅简单地建模扩展序列,而且对两个句子之间的关系(是连续的,还是随机选择的两个句子)
5. 通过将两个句子连接在一起,BERT可以被扩展成两个句子的模型。
6. 对应的关节模型可表示为p(x;y;c),其中x是第一个句子,y是第二个句子,c = {0,1}是一个标签,指示源文档中的句子是独立的还是连续的。
7. 为了与原文保持一致,我们还在序列的末尾添加了一个[SEP]标记,尽管它并不是严格需要的。
8. 本例中对应的类标签是c = 1,表示x和y是连续的。
The VideoBERT model
1. 为了将BERT扩展到视频,我们仍然可以利用预先训练好的语言模型和可扩展的实现来进行推理和学习,我们决定进行最小的更改,并将原始的可视数据转换为离散的令牌序列。
2. 为此,我们建议使用一个预先训练的模型,对来自视频的特征应用分层向量量化来生成一个“视觉词汇”序列。
3. 除了简单之外,这种方法还鼓励模型在视频中关注高级语义和更长期的时间动态。
4. 这与大多数现有的视频表示学习的自我监督方法形成了对比,后者学习低水平的属性,如局部纹理和动作
5. 我们可以将语言语句(来自ASR视频)与视觉语句结合起来生成数据
6. 虽然这个完形填空任务很自然地扩展到语言和视觉标记序列,但是应用下一个句子预测任务(如BERT所使用的)就不那么直接了。
7. 我们提出了一个语言-视觉对齐任务,其中我们使用[CLS]标记的最终隐藏状态来预测语言句子是否与视觉句子在时间上对齐。
8. 请注意,这是语义关联的一个嘈杂指标,因为即使在教学视频中,说话者可能指的是一些视觉上不存在的东西。
9. 为了解决这个问题,我们首先将相邻的句子随机连接成一个长句子,这样即使两个句子在时间上没有很好的对齐,模型也可以学习语义对应。
10. 其次,因为即使是相同的动作,不同视频之间的状态转换速度也会有很大的差异,所以我们对视频标记随机选取1到5步的次采样率。
11. 这不仅有助于模型对视频速度的变化更加健壮,而且还允许模型捕获更大时间范围内的时间动态,并学习更长期的状态转换。
12. 我们把对视频和文本结合的其他方式的研究留给未来的工作。
13. 总的来说,我们有三种对应于不同输入数据模式的训练机制:纯文本、纯视频和纯视频文本。
14. 对于纯文本和纯视频,标准的掩码完成目标用于训练模型。
15. 对于文本-视频,我们使用前面描述的语言-视觉对齐分类目标。
16. 总体培训目标是个体目标的加权和。
17. 文本目标迫使VideoBERT做好语言建模;视频目标迫使其学习“视频语言模型”,该模型可用于学习动态和预测;而文本-视频的客观要求它学习这两个领域之间的对应关系。
18. 一旦我们训练了这个模型,我们就可以在各种下游任务中使用它,在这项工作中,我们定量地评估两个应用程序。
19. 在第一个应用程序中,我们将其视为概率模型,并要求它预测或输入被掩盖的符号。
20. 我们在4.4节中对此进行了说明,在这里我们执行“零镜头”分类。
21. 在第二个应用程序中,我们提取了[CLS]令牌的预测表示(来自模型的内部激活),并使用该密集向量表示整个输入。
22. 这可以与其他特征相结合,这些特征来自于下游监督学习任务的输入。
Experiments and Analysis
1. 在语言和视觉领域的深度学习模型,在不断增长的大型数据集中,一直显示出显著的性能提升。
2. 例如,“大”BERT模型(我们使用的)是在BooksCorpus(8亿字)和英语维基百科(2500亿字)的连接上预先训练的。
3. wefocus on cooking videos specifically
4. 不幸的是,这样的数据集相对较小,所以 我们转向 YouTube 来收集大规模的视频数据集 进行训练。
5. 我们使用YouTube视频注释系统从YouTube上提取了一组公开的烹饪视频,检索与“烹饪”和“食谱”相关的主题的视频。
6. 收集的视频中,删除了15分钟以上视频。最终得到213K个视频。该数据集的总持续时间为23186小时,大约966天。已有YouCook II 要大两个数量级,YouCook II 是由2K个视频组成,总时长为176个小时
7. 为了从视频中获取文本,我们使用YouTube Data API[1]提供的YouTube自动语音识别(ASR)工具包来检索带有时间戳的语音信息。API返回单词序列和预测的语言类型。在312K的视频中,有180K是可以通过API检索到的ASR,预计有120K是英文的。在我们的实验中,虽然我们将 所有的视频都用于纯 - 视频目的 ,但我们只将来自 英语 ASR 的文本用于 VideoBERT 的纯 - 文本和视频 - 文本目的 。
8. 我们在YouCook II数据集[38]上评估了VideoBERT,它包含了2000个YouTube视频,平均时长5.26分钟,总共176个小时。
9. 我们使用提供的数据集分割,其中1333个视频用于培训,457个用于验证。
Video and Language Preprocessing
1. 对于每个输入的视频,我们以每秒20帧的速度采样,并在视频上创建30帧(1.5秒)不重叠窗口的剪辑。
2. 对于每个30帧的剪辑,我们应用一个预先训练的视频卷积网络来提取其特征。
3. 在这项工作中,我们使用了S3D[34],它将可分离的时域卷积添加到Inception网络[25]骨干网中。
4. 我们在最终的线性分类器之前进行特征激活,然后应用3D平均池得到一个1024维的特征向量。
5. 我们在动力学[9]数据集上对S3D网络进行了预培训,该数据集涵盖了来自YouTube视频的广泛操作,并作为每个单独片段的通用表示。
6. 我们用层次知识表示视觉特征。我们通过可视化地检查集群的一致性和代表性来调整层次级别d的数量和每级别k的集群数量。我们设置d=4, k = 12,得到124 = 20736个簇。图4说明了这个“矢量量化”过程的结果
7. 对于每个ASR单词序列,我们使用一个现成的基于lstm的语言模型添加标点符号,从而将单词流分解为句子。对于每个句子,我们遵循BERT[6]中的标准文本预处理步骤,并将文本标记为单词[33]。我们使用BERT的作者提供的相同词汇表,其中包含30,000个令牌
8. 不像语言可以自然地分解成句子,它不清楚如何将视频分解成语义连贯的片段。我们使用一个简单的启发式方法来解决这个问题:当一个ASR语句可用时,它与开始和结束时间戳相关联,并且我们将属于那个时间段的视频标记作为一个片段。当ASR不可用时,我们简单地将16个令牌视为一个段。
Model Pre-training
1. 我们从文本预先训练的checkpoint 初始化BERT权重。具体来说,我们使用由[6]的作者发布的BERTLARGE模型,使用相同的主干架构:它有24层Transformer块,每个Transformer块有1024个隐藏单元和16个self-attention
head。
2. 我们为每个新的“可视单词”在单词嵌入查找表中添加了20736个条目,从而增加了对视频标记的支持。我们使用S3D特性从相应的簇中心初始化这些条目。输入嵌入在训练前被冻结。
3. 我们的模型训练过程在很大程度上遵循BERT的设置:我们在Pod配置中使用了4个Cloud
TPUs,总批处理大小为128,我们训练了50万个迭代,或大约8个epoch的模型。我们使用Adam优化器,初始学习率为1e-5,线性衰减学习率计划。培训过程大约需要2天。
Zero-shot action classification
1. 一旦pretrained, VideoBERT模型可以用于“zero-shot”分类新数据集,如YouCook
II(通过“zero-shot”我们指的是模型不是对准YouCook II具有相同标签的数据也没有本体用于YouCook II)。更确切地说,我们要计算p (y|x)其中x是视觉符号序列,y是一个序列的单词。由于模型被训练来预测句子,我们将y定义为固定的句子,“现在让我向您展示如何[屏蔽][屏蔽]”,并分别从第一个和第二个屏蔽槽中预测的标记中提取动词和名词标签。
2. 为了进行定量评估,我们使用了YouCook II数据集。在[37]中,作者为YouCook II的验证集收集了63个最常见对象的ground truth边界框。然而,对于行为没有ground truth标签,许多其他常见对象也没有标签。因此,我们收集来自ground truth标题的动作和对象标签来解决这个缺点。我们在ground truth标题上运行一个现成的词性标记来检索100个最常见的名词和45个最常见的动词,并使用它们来派生ground truth标签。虽然VideoBERT的词块词汇表为它提供了有效执行开放词汇表分类的能力,但它因此更有可能做出语义上正确的预测,而这些预测并不完全符合更有限的ground true。因此,我们报告了排名前1和前5的分类准确性指标,后者旨在缓解这个问题,我们将更复杂的评估技术留给未来的工作。最后,如果有一个以上的动词或名词与一个视频片段相关联,我们认为预测是正确的,如果它符合其中任何一个。我们报告了YouCook II验证集的性能
3. 我们也使用来自文本BERT模型的先验语言,这在烹饪视频中没有得到很好的调整。我们可以看到VideoBERT比两个基线都好得多。正如所料,VideoBERT的语言先验适用于烹饪句子,并且优于vanilla BERT模型。
4. 然后,我们与使用YouCook II的训练分割训练的完全监督分类器进行比较。我们使用预先计算好的S3D特性(与VideoBERT的输入相同),随着时间的推移应用平均池,然后使用线性分类器。表1显示了结果。正如我们所看到的,supervised framework在动词准确性方面超过了VideoBERT,这并不奇怪,因为VideoBERT拥有一个非常开放的词汇表。(有关操作标签的模糊性,请参见图5。)然而,排名前5的精度指标显示,VideoBERT在没有使用任何来自YouCook II的监督的情况下,实现了与完全监督的S3D基线相当的性能,这表明该模型能够在这种“0次学习”设置下进行竞争。
Benefits of large training sets
1. 我们还研究了训练前数据集大小的影响。在这个实验中,我们从训练前的视频集中随机选取10K、50K和100K的子集,使用与上面相同的设置,对相同的epoch进行训练前的VideoBERT。表2显示了性能。我们可以看到, 准确性随着数据量的增加而单调增加,没有饱和的迹象 。这表明VideoBERT可能会受益于更大的训练前数据集。
Transfer learning for captioning
1. 我们进一步证明了VideoBERT作为特征提取器的有效性。
2. 我们使用与他们相同的模型,即变压器编码器-解码器,但我们将编码器的输入替换为上面描述的VideoBERT派生的特性。
3. 我们还将视频沙漠功能与平均汇集的S3D功能连接起来;作为基准,我们也考虑只使用S3D功能而不使用VideoBERT。
4. 我们设置transformer层数为2,隐藏单元大小为128,dropout
rate为0.4。我们在训练分割上使用5倍交叉验证来设置超参数,并在验证集上报告性能。我们训练了批大小为128的40K迭代的模型。我们使用相同的亚当优化在VideoBERT前训练,并设置初始学习率为1e-3与线性衰减时间表。
Discussion and conclusion
1. 使用空间细粒度的视觉表示非常重要,而不是只在框架或剪辑级别工作,这样我们就可以区分单个对象及其属性。
2. 我们计划在其他视频理解任务和烹饪之外的其他领域评估我们的方法。
22. 从Youtube的默认推送中思考的一些事情
我个人平时经常看Youtube,一般都是看娱乐,教育类的视频。
如果按照我的浏览履历,一般给我推送的视频,应该都是与此相关。
但是,Youtube不知为何,直到现在还偶尔推送一些关于政治类的视频。
刚刚来日本那会儿,被标题吸引,看过一些辱华视频,但是后来发现这些讽刺视频,大多非常缺乏逻辑,以及真正的对中国的了解。
完全是为了辱骂而辱骂,耍一些文字游戏,拿一些完全站不住脚的论据,在那儿反复讲述。看了后,都觉得自己的智商被侮辱了。
在评论区留言,指出视频的无知,结果反而会被评论区的那些崇洋媚外的人所辱骂,最后反而惹了自己一肚子气。
所以后来,我就删除了旧账号。注册新账号,凡是关于政治类内容,全部屏蔽。
但是Youtube的推送算法,依然偶尔推送给我相关的内容。
我猜测,是不是Youtube可以从我看视频的内容中推测出我是中国人,然后就把那些视频默认的推荐给我。
而Youtube的算法又计算出,在海外的华人中,有一定比例的人是热衷于看此类视频的,所以导致,他就会把这一类相关视频,按照比例不定期的投放给所有华人,这样我就莫名其妙的被推送了这类视频。
现在我一旦发现有此类视频推荐,就会直接点举报,并且选择不关心此类视频。
Youtube因为会更具客户的反馈来优化人工智能算法,所以当自己非常厌恶或者不喜欢相关视频的时候,一定要选择不关心以及举报。
只有越来越多的人进行举报,或者选择不关心,才可以让这一类人无法从Youtube频道赚取到利益,从而断了这些人做此类视频的念头。
就好比,打击猎杀野生动物,获取皮毛的罪犯,只指望警察去抓,是不可能杜绝的。
只有通过让人们不再去购买皮毛,从而让皮毛市场无利可图,这样才可能让那些罪犯放弃去捕杀野生动物。
