Facebook如何向十亿人推荐东西

为了保证用户体验和使用效果,推荐系统中的机器学习算法一般都是针对完整的数据集进行的。然而,随着推荐系统输入数据量的飞速增长,传统的集中式机器学习算法越来越难以满足应用需求。因此,分布式机器学习算法被提出用来大规模数据集的分析。作为全球排名第一的社交网站,Facebook就需要利用分布式推荐系统来帮助用户找到他们可能感兴趣的页面、组、事件或者游戏等。近日,Facebook就在其官网公布了其推荐系统的原理、性能及使用情况。

目前,Facebook中推荐系统所要面对的数据集包含了约1000亿个评分、超过10亿的用户以及数百万的物品。相比于著名的Netflix Prize ,Facebook的数据规模已经超过了它两个数据级。如何在在大数据规模情况下仍然保持良好性能已经成为世界级的难题。为此, Facebook设计了一个全新的推荐系统。幸运的是,Facebook团队之前已经在使用一个分布式迭代和图像处理平台——Apache Giraph。因其能够很好的支持大规模数据,Giraph就成为了Facebook推荐系统的基础平台。

在工作原理方面,Facebook推荐系统采用的是流行的协同过滤(Collaborative filtering,CF)技术。CF技术的基本思路就是根据相同人群所关注事物的评分来预测某个人对该事物的评分或喜爱程度。从数学角度而言,该问题就是根据用户-物品的评分矩阵中已知的值来预测未知的值。其求解过程通常采用矩阵分解(Matrix Factorization, MF)方法。MF方法把用户评分矩阵表达为用户矩阵和物品的乘积,用这些矩阵相乘的结果R’来拟合原来的评分矩阵R,使得二者尽量接近。如果把R和R’之间的距离作为优化目标,那么矩阵分解就变成了求最小值问题。

对大规模数据而言,求解过程将会十分耗时。为了降低时间和空间复杂度,一些从随机特征向量开始的迭代式算法被提出。这些迭代式算法渐渐收敛,可以在合理的时间内找到一个最优解。随机梯度下降(Stochastic Gradient Descent, SGD)算法就是其中之一,其已经成功的用于多个问题的求解。SGD基本思路是以随机方式遍历训练集中的数据,并给出每个已知评分的预测评分值。用户和物品特征向量的调整就沿着评分误差越来越小的方向迭代进行,直到误差到达设计要求。因此,SGD方法可以不需要遍历所有的样本即可完成特征向量的求解。交替最小二乘法(Alternating Least Square, ALS)是另外一个迭代算法。其基本思路为交替固定用户特征向量和物品特征向量的值,不断的寻找局部最优解直到满足求解条件。

为了利用上述算法解决Facebook推荐系统的问题,原本Giraph中的标准方法就需要进行改变。之前,Giraph的标准方法是把用户和物品都当作为图中的顶点、已知的评分当作边。那么,SGD或ALS的迭代过程就是遍历图中所有的边,发送用户和物品的特征向量并进行局部更新。该方法存在若干重大问题。首先,迭代过程会带来巨大的网络通信负载。由于迭代过程需要遍历所有的边,一次迭代所发送的数据量就为边与特征向量个数的乘积。假设评分数为1000亿、特征向量为100对,每次迭代的通信数据量就为80TB。其次,物品流行程度的不同会导致图中节点度的分布不均匀。该问题可能会导致内存不够或者引起处理瓶颈。假设一个物品有1000亿个评分、特征向量同样为100对,该物品对应的一个点在一次迭代中就需要接收80GB的数据。最后,Giraph中并没有完全按照公式中的要求实现SGD算法。真正实现中,每个点都是利用迭代开始时实际收到的特征向量进行工作,而并非全局最新的特征向量。

综合以上可以看出,Giraph中最大的问题就在于每次迭代中都需要把更新信息发送到每一个顶点。为了解决这个问题,Facebook发明了一种利用work-to-work信息传递的高效、便捷方法。该方法把原有的图划分为了由若干work构成的一个圆。每个worker都包含了一个物品集合和若干用户。在每一步,相邻的worker沿顺时针方法把包含物品更新的信息发送到下游的worker。这样,每一步都只处理了各个worker内部的评分,而经过与worker个数相同的步骤后,所有的评分也全部都被处理。该方法实现了通信量与评分数无关,可以明显减少图中数据的通信量。而且,标准方法中节点度分布不均匀的问题也因为物品不再用顶点来表示而不复存在。为了进一步提高算法性能,Facebook把SGD和ALS两个算法进行了揉合,提出了旋转混合式求解方法。

接下来,Facebook在运行实际的A/B测试之间对推荐系统的性能进行了测量。首先,通过输入一直的训练集,推荐系统对算法的参数进行微调来提高预测精度。然后,系统针对测试集给出评分并与已知的结果进行比较。Facebook团队从物品平均评分、前1/10/100物品的评分精度、所有测试物品的平均精度等来评估推荐系统。此外,均方根误差(Root Mean Squared Error, RMSE)也被用来记录单个误差所带来的影响。

此外,即使是采用了分布式计算方法,Facebook仍然不可能检查每一个用户/物品对的评分。团队需要寻找更快的方法来获得每个用户排名前K的推荐物品,然后再利用推荐系统计算用户对其的评分。其中一种可能的解决方案是采用ball tree数据结构来存储物品向量。all tree结构可以实现搜索过程10-100倍的加速,使得物品推荐工作能够在合理时间内完成。另外一个能够近似解决问题的方法是根据物品特征向量对物品进行分类。这样,寻找推荐评分就划分为寻找最推荐的物品群和在物品群中再提取评分最高的物品两个过程。该方法在一定程度上会降低推荐系统的可信度,却能够加速计算过程。

最后,Facebook给出了一些实验的结果。在2014年7月,Databricks公布了在Spark上实现ALS的性能结果。Facebook针对Amazon的数据集,基于Spark MLlib进行标准实验,与自己的旋转混合式方法的结果进行了比较。实验结果表明,Facebook的系统比标准系统要快10倍左右。而且,前者可以轻松处理超过1000亿个评分。

目前,该方法已经用了Facebook的多个应用中,包括页面或者组的推荐等。为了能够减小系统负担,Facebook只是把度超过100的页面和组考虑为候选对象。而且,在初始迭代中,Facebook推荐系统把用户喜欢的页面/加入的组以及用户不喜欢或者拒绝加入的组都作为输入。此外,Facebook还利用基于ALS的算法,从用户获得间接的反馈。未来,Facebook会继续对推荐系统进行改进,包括利用社交图和用户连接改善推荐集合、自动化参数调整以及尝试比较好的划分机器等。

时间: 2024-08-25 15:48:50

Facebook如何向十亿人推荐东西的相关文章

腾讯数十亿广告的秘密武器:利用大数据实时精准推荐

在过去几年,你在腾讯做了什么来推动大数据的应用? 过去三年,我一直在坚持一件事:推动大数据的实时应用.现在从国外数据中心的数据,一秒钟可以达到深圳数据中心,这就是腾讯具备的数据能力.有了这个能力,就可以做很多商业化行为的模式. 目前腾讯收集的数据已经超过了1万亿条, 计算机规模已经超过了8千8百台.这么庞大的数据如果能实时处理,就能发挥出巨大的商业价值.这个商业价值就是精准推荐. 每年腾讯几十亿的广告,其基础来自于数据的精准推荐.实时数据推荐还可以用于视频的推荐,腾讯音乐推荐,新闻客户端的推荐,

[转帖]十四亿人的口腹之欲,是如何被满足的?

十四亿人的口腹之欲,是如何被满足的? https://www.weibo.com/ttarticle/p/show?id=2309404370494647344427&sudaref=dig.chouti.com&display=0&retcode=6102 ??转自公众号“观方翻译” 今天分享一个我逛Quora看到的帖子.有人问了个问题:中国是怎么生产这么多粮食,足够养活十多亿人的?是靠进口还是自给自足? 剑桥大学博士Janus Dongye的回答(和他以前许多回答一样)让人拍案

我们在一个13亿人的国家,我觉得美国市场不大

当选福布斯亚洲2014年度商业人物的雷军先生,带领小米颠覆了全球手机市场.在小米的北京总部,福布斯杂志资深编辑范鲁贤(Russell Flannery)与雷军先生,就小米未来在国内外市场的增长展开深度对话. 雷军称,四年前自己只说错了一句话:我们zero的时候,我跟他说,I have a dream:$10 billion: 可是我是错的,是$100 billion.第一个指出这个错误的是Yuri Milner,DST的创始人. 四年后的今天,雷军喊出了All In的口号,他要抓住自己看到的三大

十亿级视频播放技术优化揭密

本文为转载文章,文章来自:王辉|十亿级视频播放技术优化揭密 QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦.北京.东京.纽约.圣保罗.上海.旧金山召开.自 2007年 3月份首次举办以来,已经有超万名高级技术人员参加过QCon大会.QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向 5年以上工作经验的技术团队负责人.架构师.工程总监.高级开发人员分享技术创新和最佳实践. 4月18日性能优化面面观专题会议上,腾讯研发总监王辉以“十亿级视频播放技术优化揭秘”为主题,用QQ空间的日均

谷歌为什么把上十亿行代码都放在一个仓库里

相对于一般公司,Google 使用了单一代码仓库,很多人不理解为什么这么做.本文作者是谷歌基础设施小组的工程师,他对这个问题进行了详细解读. 早期 Google 员工决定使用集中式源代码管理系统来管理代码库.这种方法已经在 Google 运行了 16 年以上,而今天绝大多数的 Google 软件仍然存储在一个共享的代码库中. 随着 Google 开发软件数量稳步增加,Google 代码库的规模也呈指数增长. 因此,用于管理代码库的技术也发生了显著变化. 本文概述了该代码库的规模,并详细介绍了 G

es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

面试题es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的.很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了.第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒.你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对

大数据计算:如何仅用1.5KB内存为十亿对象计数

在Clearspring,我们从事统计数据.统计一组不同元素且数量很大的数据集时,是一个挑战. 为了更好地理解已经明确基数的大数据集的挑战,我们假设你的日志文件包含16个字符的ID,并且你想统计不同ID的数量.例如: 4f67bfc603106cb2 这16个字符需要用128位来表示.6万5千个ID将需要1MB的空间.我们每天收到30多亿条事件记录,每条记录都有一个ID.这些ID需要3840亿位或45GB的存储.而这仅仅是ID字段需要的空间.我们采取一种简单的方法获取日常事件记录中以ID为基数的

张书乐:“五六亿人每天游戏数小时”是真的?

日前,在网络上有一篇标题为<五六亿人每天玩数小时, 别让本该拼搏的时间被网游抢走>的文章,很火,也很励志. 然而,当笔者打开这篇评论之时,却发现从一开始就立论错了.该文引述媒体报道称:"由中国音数协游戏工委.伽马数据等多家发布的<2016年中国游戏产业报告>显示,去年网游用户数量达到5.66亿人,同比增长5.9%.记者调查发现,从几岁的中小学生到40多岁的中青年都有沉溺于网游的玩家.这些最需要学习.向上的人群,本该用于奋斗拼搏创新的时间却被网游抢走了." 这个内

中国女人为何喜欢找黑人:内幕惊呆十亿中国人

中国女人为何喜欢找黑人:内幕惊呆十亿中国人 有网友认为是黑人的性能力令中国女人神往,这应该是一个原因. 男人和女人一样,对性对象的选择也有猎奇心理,而且,她们对性过程的要求可能要比男人还要高.若论好逸恶劳,她们比难以一点也不差.曾经有国内学者对国内的暗娼做过调查,发现她们和解放前的娼妓有很大不同.解放前的娼妓,很多的确是为生活所迫:而现在的很多娼妓,则是纯粹的好逸恶劳. 尽管学术界坚持认为人种之间的性能力没有太大的差别,但是,普通人从直觉上还是认为黑人.白人比黄种人性能力强,这对于女人的来说是有