热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

4篇论文描述这些年YouTube推荐系统的变化

4篇论文描述这些年YouTube推荐系统的变化

4篇YouTube推荐系统论文, 一起来看看别人家的孩子

最近一直在花时间研究和实现一些推荐算法,并且搭建系统在产品中进行测试。

我读了一些关于Netflix等网站 “如何使用Collaborative Filtering来预测用户对其他影片的打分” 的文章,之前也曾在Pinterest目睹了Related Pin从传统的计算co-occurence,到深度学习以及两次打分系统的设计转变。

但最让我好奇的,还是 以技术著称的Google是怎么做推荐系统的。

经过一番调查,我找到了4篇能够 描述这些年YouTube推荐系统变化 的论文。

在这里同大家分享一下。

描述中难免会有不准确,或者理解错误的地方,希望各位老师和朋友多多交流,共同学习。

Video Suggestion and Discovery for YouTube: Taking Random Walks Through the View Graph

这篇论文发表于2008年,是我发现的相对比较早的一篇有关于YouTube推荐系统的文章。作者里有一位前同事Kevin Jing,是后来Pinterest图像组的奠基人。

这篇文章从最基本的co-view概念入手,先讲了一个直观的概念 — — item-based collaborative filtering system

假设一个用户B看了两个视频,1和4,根据历史,我们知道很多看了视频1的人也看了视频5,9。同时,我们知道很多看了视频4的人也看了别的视频12,13(请读者自行想象)。那我们可以把视频5,9,12,13推荐给用户B。

4篇论文描述这些年YouTube推荐系统的变化

在对推荐结果 排序 的时候,我们可以根据一个视频的流行度,和用户已经观看过得视频的co-view,从前该视频推荐成功的概率等因素给出一个打分函数。

作者在这篇文章里提出一种叫做Adsorption的学习框架,当我们有一个小的labeled数据集和一个很大的unlabeled数据集时,可以通做Adsorption将label从小的数据集推广到大数据集上。

一种Adsorption的方法就是进行Random Walk,将每一个顶点v的label发到相关联的邻居上,在每一次传递结束后,对顶点的label进行归一化。

4篇论文描述这些年YouTube推荐系统的变化

这种Adsorption的方法可以用来做推荐系统。

一种做法是把user观看video的关系当做一张图,把用户喜欢看的视频当做label,然后进行random walk,将label推广到其他的视频上。

这篇文章最后的实验离线测试效果很好,后来Pinterest也采用random walk来生成related pin的候选集,能够很好的提高用户互动情况。如果挑一挑刺的话,这篇文章并没有太多系统方面的介绍,如何对上亿用户,上亿视频生成推荐结果对于小公司来说仍是一个很难的挑战。

The YouTube Video Recommendation System

这是一篇2010年发表在RecSys上的文章,篇幅仅有短短的4页,但是包含了YouTube推荐系统的产品理念,数据处理,系统设计以及实验结果,可谓是麻雀虽小,五脏俱全。

这篇文章主要介绍如何在YouTube主页上给用户提供的个性化推荐内容,其目的是为了提高用户使用网站的互动性以及娱乐性。

文章中所提到的算法会输出用户可能喜欢的视频集合,而不是给出一个具体的用户喜欢某一视频的概率。

4篇论文描述这些年YouTube推荐系统的变化

在主页上推荐视频和推荐一个视频的相关视频在需求上有一定的差异,主页上的推荐对内容的新鲜度,发散性以及用户近期行为的相关性要求比较高。

另外还有一个重要的考虑因素就是需要帮助用户理解 ”为什么我会看到这些推荐内容” ,这样可以帮助用户根据自己的喜好改善推荐引擎。

搭建一个主页的推荐系统,一个基础的组件就是对于任意一个视频u,生成一系列相关的视频v,在文章中作者使用了简单的co-view来计算两个视频的相关度:

4篇论文描述这些年YouTube推荐系统的变化

这里的Cij是视频i和j的co-view数, f (Vi,Vj)则是根据视频Vi和Vj的观看次数给出的一个折扣,这样可以避免总是给用户推荐最流行的视频。

根据相关性 R ,我们可以找到每个视频最相关的N个视频,这里作者还引入了一个minimum score threshold,用来去除那些并不十分确定的相关视频。

所有推荐视频的集合主要是根据用户过去的行为决定,一个用户可能会观看,喜欢多个视频或者给他们进行打分。根据这些视频,我们可以找到所有距离为1的相关视频,然后根据所有距离为1的相关视频找到距离为2的相关视频。

4篇论文描述这些年YouTube推荐系统的变化

日常应用当中,距离为1的相关视频就足够提供很多推荐结果,但是他们可能会十分偏向于用户某一个狭窄的兴趣点,所以我们需要增加距离使推荐结果有更多的新颖性。

当我们得到所有的推荐视频集合后,可以对他们进行一次打分,根据视频的观看总量,用户的打分,评价,喜欢和分享动作来预测哪一个视频会得到用户的青睐。通过对用户的反馈进行分析,我们可以把用户不感兴趣的视频原因从推荐初始集合中删去,或者限制某一个看过的视频生成的推荐视频数量。

我个人非常喜欢这篇文章,他涵盖了最基本的推荐引擎样例生成以及额外的排序过程,并且从系统上分析了如何通过Bigtable,MapReduce来搭建这一推荐系统,值得深入学习。

Label Partitioning For Sublinear Ranking

在我们聊现在最火的Deep Learning算法前,不妨先看一看YouTube发表于2013年的这一文章,因为它回答了一个Deep Learning中一个很难的问题,如何在包含很多节点的神经网络output layer找到概率最大的输出节点。

这篇文章中谈到的算法可以被应用到很多互联网服务上,比方对很多documents进行排序的时候,可以对每一个document设定一个输出点。在做推荐系统的时候,可以从大规模可选推荐内容中找到最有可能的那些结果。

基本思路如下:

  1. 对于任意一个测试样例x,首先根据训练样例划分找到最有可能的划分集合p=g(x)。
  2. 取到训练样例划分中最有可能的输出集合L。
  3. 对输出集合样例中每一个输出y进行打分,计算 f (x,y),并且根据结果进行排序。

对输入样例的划分可以采用两种方法,一种是 Weighted Hierarchical Partitioner, 类似Weighted K-means,给训练样例xi到中心的距离cj一个根据label预测准确度得出的weight,优化:

4篇论文描述这些年YouTube推荐系统的变化

一种是 Weighted Embedding Partitioner ,通过对训练样例的转化使得label相同的训练样例尽可能被划分到一个集合中去,优化:

4篇论文描述这些年YouTube推荐系统的变化

对于我们常用的SVD,LSI和神经网络相关模型,可以直接使用中间层当做input space。

对于测试输出的label划分,文中也提到两种方法,一种是设计优化函数,计算每一个label被分到一个partition后的loss,然后优化所有label划分的整体loss。

一种是简单的计算每一个partition内的label出现频率,选择出现最频繁的几个。

在实验结果上,采用优化函数的划分的方案可以带来两倍以上的提高。

这篇文章比较理论,所以读起来也很困难。我个人认为这是YouTube开始转向采用embedding来进行视频推荐的基础,非常值得一读。

Deep Neural Networks for YouTube Recommendations

这是2016年发表于RecSys的文章,其中介绍了Google如何通过深度学习来改进YouTube推荐系统,从算法和系统上都做了详细介绍,引来了无数人围观。

首先从整体结构上来看,推荐系统分为两部分。

第一部分是Candidate Generation,用来从上千万上亿个视频中选择少数(几百,几千)个候选视频,然后通过第二部分ranking来对这些候选视频进行详细打分,得分最高的视频作为最终结果呈现给用户。

4篇论文描述这些年YouTube推荐系统的变化

在Candidate Generation的时候,这篇文章采用了word embedding的技巧来计算每一个视频的embedding;然后将视频的embedding,用户搜索问题的embedding分别计算average,再加入用户的性别,国家,年龄,视频质量等特征,采用两个完全相连的ReLU层和softmax函数来预测用户下一个看的视频是什么。

4篇论文描述这些年YouTube推荐系统的变化

推荐时可以采用最近邻搜索的解决方案,在上亿数据中找到用户最有可能观看的下一个视频。在最初读这篇文章的时候我就有一个问题,如何在上亿输出中找到最有可能的一个,在读了上一篇“Label Partitioning for Sublinear Ranking”后我感觉YouTube就是采用把中间层当做input space,进行最近邻搜索,然后衡量下一个可能看的视频的概率。

当我们把推荐量从上亿减少到数百,或数千视频后,就可以采用Ranking函数进行打分了。

尽管深度神经网络可以在很大程度上减少工程师的工作量,但是YouTube还是花了不少人力从视频中抽取更多有效的特征,包括预测视频的特征,预测视频和历史观看记录生成的crossing features,以及用户观看视频的时效特征。

4篇论文描述这些年YouTube推荐系统的变化

Ranking的主要目标是根据用户过去观看记录和推荐视频的特征,采用logistic regression去预测下一个视频的用户观看时间。

因为有明确的优化函数和衡量标准,得出的结果更容易让人理解。

虽然Learning to Rank已经是一个很经典的机器学习问题了,但是这篇文章发现深度学习仍然能比以前线性模型和基于GBDT的树状模型预测的更好。

在最终实现时,YouTube推荐系统面临两大考验,一方面是Freshness,每小时都有很多新的视频上传,但是推荐算法偏向老的内容,这篇文章中提到用age作为一个特征进行训练,在最后推荐时设所有的内容age为0,有效的模拟了老内容引入的bias。

另一方面是训练时的噪音,很多时候用户点击观看一个视频并不代表用户真的喜欢,满意这个内容,所以在最后选择训练样例时,加入了观看时长这一衡量标准。

小结

关于YouTube的推荐系统总结就进行到这里,从4篇论文里我们可以看到YouTube在不同时段,基于不同的资源和技术对系统的进化过程,也能帮助自己更好的在不同情况下选择最合适的解决方案。

欢迎各位老师,朋友多多交流,共同成长。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList优于LinkedList,因为Ar ... [详细]
author-avatar
冷月荐向_878
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有