NewsFeed怎么来的
2004 年,Facebook 问世,两年后的 9 月份,News Feed 问世,同时问世的还有 MiniFeed(个人动态)。今年是 NewsFeed 上线十周年了,这 10 年里,Facebook 是怎么一步一步把 NewsFeed 打造成了日收入几千万美金的现金牛的?不管你对这充满铜臭的问题感不感兴趣,反正我很感兴趣。
今天我们都已经习惯了把照片、文字等内容主动分享给好友,但是当时 Facebook 上线了这个功能时,引起了广泛的争议,焦点就是“隐私”问题,用户认为我发的动态怎么能让别人看见呢[1]?用户一直不停质疑和抗议,又忍不住继续使用,Facebook 就这样在争议声中增加了最初的隐私控制,比如隐藏自己的动态,而 NewsFeed 就这样坚持了下来。看来,小扎真是一个撩妹高手,看穿了用户们“嘴上说不要,身体却诚实”的内在。
随着用户们渐渐地爱上了浏览好友的分(xuan)享(yao)了,2009 年,Facebook 加上了赞(like)功能(FriendFeed 在 2007 年发明了赞按钮,FriendFeed 后来于 2009 年被 Facebook 收购,并将赞这个功能整合进来),开始按照热门程度对 Feed 重排序,不出意外,这又引起了用户们的反抗,因为大家已经习惯按照时间顺序阅读。
伴随这么多争议,为什么 Facebook 一直坚持做兴趣 feed?从数据上看,平均每个用户每天待看的新鲜事有 1500 条之多,但平均每个用户每天只能阅读 300 条;从商业角度,将 Feed 排序交给上帝的做法,非常不利于商业化且有损用户体验,公共主页可以使用很多伎俩吸引用户关注,然后肆无忌惮发广告。
10 年来,NewsFeed 有数不清的改进,甚至每天线上会同时部署很多算法版本进行 AB 测试。但 EdgeRank 是这条优化迭代之路上的一个标志性建筑。我们可以将 NewsFeed 排序策略按照 EdgeRank 分为 PreEdgeRank 时代、InEdgeRank 时代、PostEdgeRank 时代。
EdgeRank 算法
EdgeRank,顾名思义,就是对边(Edge)进行排序(Rank)[2]。
每一个朋友的每一个操作(Action)都可能以新鲜事(News)的方式呈现在用户面前,比如朋友发布了一条新鲜事,朋友赞了朋友的朋友一条新鲜事,朋友评论了朋友的朋友一条新鲜事,朋友给自己的照片加了一个标签,等等。稍微用脚后跟想一想就知道,按照这样罗列的话,每个用户得看多少新鲜事?于是 FB 就想在一条动态呈现给一个用户之前,先预估一下这个用户对这条新鲜事感兴趣程度。在 FB 的定义下,一个 Action 就是一个 Edge,所以这套量化兴趣的算法就叫做 EdgeRank。
别看今天 Facebook 各种高大上,又是深度学习又是人工智能,要知道,在 EdgeRank 提出之前,FB 也是有过刀耕火种时代的,FB 的首席产品官 Chris Cox 谈及早期 NewsFeed 是这样说的[3]:
“In the beginning, News Feed ranking was turning knobs. Turn up photos a little bit, turn down platform stories a little bit.”(最初,NewsFeed 排序就是在主观拍脑袋,给照片加点权重,给平台动态消息降点权重)
“a photo might be worth 5 points, while joining a group was worth 1 point” (把照片权重定为 5,把加群权重定为 1)
国内算法工程师们听到这些,想必都要会心地笑了:原来 FB 也是从这个时代走过来的。但 Facebook 不同的是,这只是暂时的情形,他们已经走到更高级的阶段了。
Serkan Piantino 在 2010 年左右领导并开发了第一版 EdgeRank 算法[4]。下面说说大名鼎鼎的 EdgeRank 是怎么回事。
EdgeRank 主要有三个因素在起作用:
亲密度(Affinity Score)
边的权重(Edge Weight)
新鲜程度(Time Decay)
想象一条内容诞生后,途经什么路径流动到你的面前?
首先经你的一个朋友(或者你的关注源)的之手产生了一条新鲜事(他发布、赞、加标签这些产生了新鲜事);
然后经过你这个朋友(或者你的关注源)的介绍,到了你家门口,你一开门(登录)就可能看见它;
内容不多时,开门一个一个寒暄可能还行,它们也等得起,也无所谓先来后到,内容太多时,就得考虑个先来后到了。
这三个步骤,就大致刻画了 EdgeRank 的思想了,其实还是很简单直接的。
亲密度对应了第二个步骤背后的思想,那么多人介绍过来,我们当然要优先照顾更“喜欢”的人了,亲密度的量化要考虑平常里你和这个朋友“走动”是否频繁,连接是否紧密。主要考虑下面几点:
你们连接的强度,点赞之交,还是评论之交,或是私信之交,连接方式不同,强度就不同;
你们连接的频繁程度,一日百赞,还是百日一赞,差别也很大;
你们有多久没有建立连接了,一年没有了,关系自然就更淡了;
亲密度是单向的,也就是说你对朋友的亲密度,和朋友对你的亲密度可能不一样哦。
你看,看似神秘的 EdgeRank 算法,其实跟大家不太待见的鸡汤居然意思是一样的,是不是觉得它竟然如此平易近人?
边的权重也很直接,其实它反映了产生一条新鲜事的成本,成本越高的,权重越大。点赞、评论、发一条文字、发一张照片、发一个链接,背后用户付出的成本不一样,反应在边的权重上也就不一样。显然,你点个赞的成本,和你发布一条新鲜事的成本差别很多。
最后,新鲜程度,也是一个符合直觉的自然假设:NewsFeed 总是青睐 New 一些的 Feed,新的新鲜事总体上更可能得到用户的临幸。FB 用了一个类似指数衰减的函数来量化动态的新旧程度。
三个分数,最终用相乘的方式共同作用于每一条新鲜事的分数,用于排序和筛选。
这个排序方法的确是很简单,基本上只考虑了社交方面的因素,而没有考虑太多内容本身对用户吸引力。
从公开的资料看 EdgeRank,并不是什么高深的算法,它只是量化了三个主要因素,然后主观地相乘,而没有任何目标优化思想在背后,根据 Facebook 披露的消息看,早期的 EdgeRank 的确没有引入机器学习,所以根本称不上是智能的算法。
为什么 EdgeRank 这么有名?因为它是在 F8 开发者大会上公开介绍过的,经过一知半解的媒体渲染,变成了一个神秘高深的存在。
后EdgeRank时代
2011 年之后,Facebook 内部就不再提 EdgeRank 算法了,因为用户数和广告主的飞增,导致 NewsFeed 的排序算法必须要更上一层楼。如今月活跃超过 10 亿用户,约 2000 万的公共主页,移动设备贡献了大多数流量,复杂的上下文因素,必须引入机器学习才能 Hold 住整个场面。
在原来 EdgeRank 的基础上,更加细致地定义了不同层级的亲密度。用深度神经网络理解图片内容和文字内容[5],从而可以知道相片中的物体是不是用户感兴趣的,可以知道新鲜事的讨论话题。随着产品迭代,也加入了更多产品特征,诸如阅读时间长短、视频内容、链接内容等,取关、隐藏一个源。前前后后一共考虑了 10 万 + 的变量(模型的特征空间应该会更高),如果还按照原来的方式去调节权重,显然既不科学又很低效。
从 Facebook 的机器学习应用博客页面可以看到,2010 年之后就开始逐渐有机器学习方面的文章出现了[5]。
相关资料显示[6],2011 年之后的 NewsFeed 排序算法,全面转向了机器学习,用优化理论来决定每个因素的权重,将人从繁杂的策略量化中解放出来。
在被机器学习接管后的 NewsFeed,很多地方都更加细致。
用机器学习预估新鲜事的质量[7]。通过构造了一份问卷调查,访问了若干用户来收集数据,用收集的数据构建了一个机器学习模型,用于 NewsFeed 排序时预测一条动态的质量,将预测的质量分数作为最终排序的一个特征。用树模型构造离散特征,结合最常见的 LR 模型预估广告点击率[8]。
除了全面转向机器学习之外,NewsFeed 团队也在重新思考人和算法的关系。他们要关心的是到底“如何把用户真正最关心的找出来”,而不仅仅是“提高点击率”。Facebook 一直是数据驱动的,也是他们能够在争议中把 NewsFeed 坚持下来的信念来源,而是不是唯数据马首是瞻,团队内部有很多思考,也有很多变化。
仅举几例:
团队发现有 85%的隐藏新鲜事操作来自 5%的人,经过与这些用户沟通才发现,原来这 5%的人把“隐藏”当作邮件里的“标记已读”了,对喜不喜欢的新鲜事只要看过就会点击隐藏。
对于悲伤的事情,用户可能关心但不会点赞的。
对于有些点赞,用户可能并不是真的感兴趣,只是“点赞狂魔”发狂而已。
用户阅读一篇长帖子,读到一半不读了,也并不能说明他对这篇帖子不感兴趣。
这些 case,都让他们开始关注到机器学习和数据的局限[9]。
于是,在算法团队之外,Facebook 搭建了一个遍布全球的人肉评测小组。人肉评测小组不是简单地对算法筛选结果进行喜欢 / 不喜欢的标注,而是会非常深入地阐述为什么喜欢 / 不喜欢算法筛选结果,而且会与工程师详细交流评测结果,因为这种人肉评测方式可以有效地拆穿数据说谎,让产品远离一味追求提高数据指标的怪圈。
除此之外,产品上还加强了过滤器功能(Filter):你可以选择你的动态给谁看,你可以选择不看谁的动态(Hide),你也可以选择优先看到谁的动态(See first),当然你可以取消关注一些人或者公共主页,将这些控制权交给用户,一方面安抚了用户被算法接管的不安,另一方面也是一项重要的数据来源。事实上,如今的过滤器已经复杂到大多数用户都不会使用这些控制权。
“如何衡量用户真的感兴趣”这个问题也许远远没有最终答案,为什么?因为人的非理性占据了绝大多数时候,而“不一致性”又是非理性的最重要表现,根据心情不同,用户有不同的感兴趣的标准,而且这些标准也许还是相互矛盾的。
NewsFeed的配套设施
NewsFeed 存在的前提是要依赖用户建立大量的社交联系,这样才会出现信息过载,因此 NewsFeed 的一个重要的配套设施就是“你可能感兴趣的人”(People you may like)推荐系统。
这是一个我们在产品形式上比较熟悉的推荐系统,它是一套大规模矩阵分解算法[10],利用已有的协同矩阵为你推荐你可能想建立联系的新 Item,包括用户、app、公共主页等。
NewsFeed 还有另一个配套设施,也是它为什么每天能吸金几千万刀的原因:广告系统。Facebook 的广告形态多样[11]:
Suggested Page (你可能喜欢的公众页)
Page Post (公众号帖子推广)
Suggested App (你可能喜欢的应用)
Video Ads (视频广告)
现在,每一次 NewsFeed 调整算法都会引来广告主们的抗议,他们都是在 FB 上拥有公共主页的商业机构。
在以前,FB 鼓励这些商业机构花钱投广告增加粉丝,彼时的 NewsFeed 算法允许随意发广告(以原生的新鲜事形式)。而现在,FB 严格限制商业广告和普通用户的触达。商业机构感觉自己被耍了,花钱买粉之后却不能发原生广告,无独有偶,根据微博 CEO(@来去之间)在微博上的披露,现在微博企业号也是被限制博文达到粉丝 feed 次数的[12]。
据国外某专门做 NewsFeed 推广的公司追踪,1000 个公共主页的 50000 条内容以原生方式触达用户的比例,从 2012 年 16%降低到了 2014 年的 6.51%,降了一倍还多,这当然也可能因为用户平均关注的公共主页增多了[13]。
世界上最遥远的距离,就是:手握大把粉丝,却不能随心所欲地曝光自己的产品。
当然,所有的公共主页们,不要灰心,并不是没有办法,NewsFeed 的广告系统大门永远向你们敞开。
对NewsFeed的展望
具体 NewsFeed 会怎么发展,无法预测,但是可以肯定的有三点:
NewsFeed 的算法会一直进化下去。
NewsFeed 团队把人和算法的关系处理得更好,从数据驱动(Data-Driven)到数据启示(Data-Informed)。
越来越多的 Feed 型产品会效仿 NewsFeed,加入到兴趣 feed 的潮流中去。
本文参考资料:
[1] https://en.wikipedia.org/wiki/Criticism_of_Facebook#News_Feed_and_Mini-Feed
[2] http://edgerank.net/
[3] http://marketingland.com/edgerank-is-dead-facebooks-news-feed-algorithm-now-has-close-to-100k-weight-factors-55908
[4] https://research.facebook.com/serkan-piantino
[5] https://research.facebook.com/publications/machinelearning
[6] http://www.dailydot.com/technology/facebook-news-feed-algorithm-edgerank/
[7] https://www.facebook.com/business/news/News-Feed-FYI-Showing-More-High-Quality-Content
[8] https://pdfs.semanticscholar.org/daf9/ed5dc6c6bad5367d7fd8561527da30e9b8dd.pdf
[9] http://www.slate.com/articles/technology/cover_story/2016/01/how_facebook_s_news_feed_algorithm_works.html
[10] https://code.facebook.com/posts/861999383875667/recommending-items-to-more-than-a-billion-people/
[11] http://zhihu.com/question/20553088/answer/78721851
[12] http://weibo.com/1111681197/D0qNcDlcc
[13] http://techcrunch.com/2014/04/03/the-filtered-feed-problem/