你登陆社交网站,以为新鲜事中都是自己订阅的内容,但它还包括平台想让你看到的,以及猜测你可能喜爱的内容。平台会猜测用户的心思,用户也往往沦为小白鼠。本文编译自SLATE,揭露了Facebook动态消息的背后的技术原理。为了了解你,科技公司可是很努力的。
每次你打开 Facebook ,这个世界上最具影响力,最有争议也是最被人误解的一套算法机制就开始运行。它会收集关于你的一切状态更新:你朋友每周发过的状态,你关注的每一个人,你加入的每一个群组,以及你赞过的每一条消息。对于 Facebook 用户来说,平均每周有一千五百次状态更新。如果你有数百位好友,那这个数字可能会高达一万以上。通过对这些数据细致入微的观察,工程师们对推荐算法进行不断的优化,Facebook 的动态消息(news feed)才能做到出现你真正感兴趣的内容。因为,大多数人并不会每天都把时间线完整看一遍,只会看最上面几百个。
没有人能够猜透 Facebook 的算法究竟是如何生成的,而内部人员更不可能告诉你这些。这个自动化的算法对于人们的社交有着重大的影响,而且它决定了我们每天会看到什么,要知道世界上有五分之一的人口——近 10 亿的 Facebook 活跃用户每天就在动态消息里面阅读新闻。病毒式扩散的算法机制完全颠覆了传统的媒体,把新兴的创业公司 BuzzFeed 和 Vox 市值推上了高位,而拥有一百年历史的报纸们则被陆续带进了坟墓。社交游戏公司 Zynga 和团购网站 LivingSocial 凭借 Facebook ,在短短一两年的时间内就做到了数十亿美金的估值,投资者们赚得盆满钵满。Facebook 的动态消息甚至能够左右我们的喜怒哀乐,它推送给我们真正优质有趣的消息,并将仅仅是情绪性的表达筛选掉。
然而, 尽管它拥有如此的权力,它的动态消息却一直难以让人满意,推送的内容十分随意,变幻莫测,有时候甚至出奇的不雅。经常会推送一些无关紧要的东西,谣言,琐事,充满戾气的话,或者是无趣的消息。Facebook 的内部人员很清楚这件事。在过去的几个月内,这个社交网络巨头开始将重新设计过的动态消息推送算法在用户内进行小范围的测试,你猜结果如何?
用户们普遍反馈「有时」,新的动态消息会击中他们的兴奋点。Facebook 对此表示欣慰,并强调会进行持续性的改进。
「有时」代表着你离完全的成功还有很长的路要走。
近年来,Facebook 和其他硅谷巨头们越来越习惯于用机器学习软件替我们做出选择。硅谷明星埃隆马斯克和著名科学家霍金都曾经提出警惕人工智能的观点,而「算法」这个词本身,就是为了大幅提高效率而生的。「算法」对于普通人来说,是「不明觉厉」的计算机名词,神秘而充满魔性,而 Facebook 等科技巨头使用的算法更是令人好奇。
最近,我参观了 Facebook 总部,与动态消息的算法团队相处,了解这套机制背后的故事。他们是如何把臭名昭著的动态消息算法扭转口碑的,为什么要这么做,如何做到,及背后的运行机理。此外,我们还能了解到很多关于算法局限性的问题,数据有时候也会撒谎,Facebook 为此专门请了外包团队进行人肉反馈,以达到更准确的效果。
Facebook 的算法,据我所知,有点小瑕疵并非系统的缘故。以现在的科技水平而言,算法想要达到科幻小说一般洞悉人性是不可能的。Facebook 算法的背后还是人。工程师们决定了数据的筛选,加工,及输出。算法出错,背锅的当然是设计算法的工程师。算法的一步步进化,也是无数工程师们看了无数的数据,开了无数会议,反复测试,最终的结果。然而,Facebook 算法的持续进步仍然使人感到好奇,他们是如何做到的?
当我到达 Facebook 总部时,一名 37 岁的大男孩接待了我,他脸上挂着善意微笑,充沛的精力及旺盛的表达欲望是他最明显的特征。他就是 Tom Alison ,「动态消息」算法的工程主管,他管理着设计算法的工程师们。
Alison 带着我穿过迷宫般的 Facebook 办公区,穿过一个小厨房之后,我们进入了一件小型会议室里。Alison 向我承诺会把 Facebook 算法背后的原理讲清楚,即使对于我这种外行来说。 到了以后,我想去一趟洗手间,我问了他应该怎么走。他很抱歉的对我说,「还是我带你去吧」。起初我以为他是怕我迷路,当我从洗手间出来时,发现他就站在门口等着我。我不禁认为,他被上级要求不能让我在办公室里单独走动。
Facebook 总部
同样,Facebook 对于他们的商务信息守口如瓶,Alison 不能告诉我有关「动态消息」 算法的实际代码。然而,他能告诉我大概的原理,以及为什么它一直在改变。工程师们通常喜欢站在白板前讲解,他也不例外。
刚开始学习计算机科学的时候,你第一个接触到的算法必然是关于排序的。他在白板上快速的写下这几个数:4、1、3、2、5。
接着,他随手写下了一个简单的任务:设计一套算法,使数组按从小到大排序。「人类可以很容易的做到,这仅仅是举手之劳而已。」他对我说。
然而,对于计算机,你应该给出具体而明确的方法。这就需要算法的帮忙:算法就是用于计算机解决问题的一系列步骤。Alison 告诉我的算法叫「冒泡排序」 ,它的具体做法如下:
1.对于每一个数组,从第一个数起,与后一个数比较大小,如果后者较大,则不变。
2.如果前者较大,则两者置换位置。
3.重复前两步,直到没有任何一对数字需要比较。
冒泡排序的优点是简单易懂。坏处也显而易见,如果你的数据过大,计算量会很大,速度也随之变慢。对于 Facebook 数十亿用户而言,当然不能用这种算法。Facebook 的算法要求你在打开 App 的瞬间就把所有的动态消息准确归位,对速度的要求极其严苛。但这仅仅是算法里的子算法而已。最重要的是把所有的动态消息按照正确的方式排序,最重要的出现在最顶端。这就是 Facebook news feed 排序团队的工作了,就是把所有用户关注的信息按用户的关联度排序。
这是一项非常艰难的任务。因为你在 Facebook 上的朋友们发的消息,还有你关注的明星们发的消息,哪些「和你有关」,是很难量化的事情。为此,Alison 解释,Facebook 使用了一套与众不同的算法,称为预测式算法。(Facebook 的 news feed 算法,和谷歌的搜索引擎算法,Netflix 的推荐算法都是分布式的复杂算法,包涵很多小的算法)
让我们猜猜下一场篮球赛,公牛对湖人,谁会赢? Alison 说。「公牛」,我不假思索的说出了口。Alison 笑了,但他随后点头表示同意 。如果把我的大脑类比为计算机,我刚刚输入了他提的问题,输出了 公牛这个回答,我大脑里的直觉反应就是算法。(人类心灵的算法远比目前计算机使用的复杂的多,但稳定性也差的多)
「当你不会感到压力时,这种仅凭直觉的猜测往往正确率惊人。」Alison 说。「但如果刚刚的猜测有金钱上的挂钩,数百万每次,每天预测数百次。那我们就需要一个成体系的方法。你可能会看看历史数据,每一个球队的胜负纪录,是否有伤员,谁正手感火热。可能你还会考虑环境因素,谁是主场?客队是背靠背比赛还是经过了一段时间的休息?你的算法可能会把这些因素全部考虑在内。如果你的算法足够完美,你可能不仅仅预测到了胜负情况,你连比分都能猜个大概。」
同理,Facebook 的动态消息算法也是这样的情况。(动态消息是 Faceboook 最大的现金牛,平均日入 2000 万美金)我问 Alison 在 Facebook 算法的机器学习语言中,总共考虑了多少种条件,他回答道「数百种。」
Adam Mosseri (站着)
它不仅仅会根据你以往的点赞习惯预测你会不会点赞。它还会预测你点击展开全文,评论,分享的可能性,甚至标记为垃圾的可能性。从而确定一个关联分,这个分数决定了它是否会出现在你的动态消息列表中,以及所在的位置。所以,每次你打开 Facebook 动态消息上的第一条,是从数百条消息中脱颖而出的,最能刺激你点赞,评论,分享,及改变你情绪的消息。
点赞
然而,无论你怎样精心构建一个算法,总是有很多的数据你是不得而知的:教练的比赛计划,德里克罗斯(公牛队球星)的膝盖伤势,甚至是篮球的气压。从微观层面讲,比赛也不是一个单纯比数值的游戏。这是人参与的游戏,「人」的复杂程度远非算法可以预测。
这套预测算法还面临着其他的挑战,这些挑战是来自认识论的。关联度的分预测公牛队将会赢得比赛。显然这个结果是可量化的:输了或赢了,猜中了或猜不中。Facebook 尝试着使用相似的思路解决问题,记录你与这些动态消息的互动频率。而这些互动也正好成为了 Facebook 收入的来源:点赞,点击,分享,评论,使消息病毒式传播,把每一个单独的用户串起来,精准地投放广告。
但是这些交流对于真正的用户来说,是非常粗糙且不准确的。他们点了赞,并不一定代表他们真的喜欢这条消息,故事看到一半就关闭,也不一定是不喜欢。如何优化这样的情况?
「点赞」
在 2013 年末,Facebook 已经是当时最炙手可热的公司。用户数量超过 10 亿,估值达到 1000 亿美金以上。当时它们已经花了数年的时间不断优化移动端的应用体验,在国际上,受欢迎程度已经超过谷歌搜索和谷歌地图。Facebook 已经不仅仅是一个朋友间社交的工具,事实上,它还是 21 世纪全球化的新闻源:一个针对每一位用户量身定制,瞬时更新的新闻,娱乐资讯,朋友动态聚合网站。
在公司之中,动态消息收入的增长让他们感到震惊。但在用户数量暴涨的同时,Facebook 员工们并不能确定用户的满意度究竟如何。人们在 Facebook 上点赞的数量前所未有的多,但他们讨厌什么?
为了搞清楚这件事,我们必须把镜头拉回到 2006 年。当时的 Facebook 与现在复杂的侧栏及群组相比,还处于原始状态。和竞争对手 Myspace 相似,「动态消息」仅仅是朋友间的状态更新的聚合。
2006 年的 Facebook 主页
甚至,你朋友的更新你不一定能看得到。为了防止信息过多给用户造成太大压力,Facebook 用了一种简单粗暴的算法过滤掉了一部分它认为用户不感兴趣的信息。而当时并没有东西能够能够衡量用户对于信息究竟是否感兴趣——点赞功能距推出还有三年时间。工程师们靠直觉判断消息的呈现与否。一开始的标准是,这条消息发布了多久,以及你的朋友提及这条消息的次数。之后的一段时间里,工程师们决定停止这种简单粗暴的方式,而把用户在消息上停留的时间总数作为消息重要性的依据。但这样的机制难以分辨哪条消息令用户感到愉悦,那条消息冒犯了用户,那些是无聊的,那些是纯碎的谣言。本质上,工程师们还是在碰运气。
「点赞」功能并非一个新鲜的交流方式。而 Facebook 推出点赞功能最初的用意,是想了解用户对消息的偏好。可能用户没有意识到,这是一个非常精妙的设计。如果用户们明确知道「点赞」是为了方便 Facebook 进行偏好纪录,那么这个过程将显得十分单调乏味。Facebook 的「动态」算法是世界上第一个在用户没有感受的情况下,了解用户习惯及偏好的,并且影响了我们所有人。
没有一点点防备,这套算法就在不知不觉中有了辨认实时热点的能力,然后让它们病毒式传播。以前热点是一个人链式的传播,现在一个人点赞以后,他的好友都能看到这一则消息,传播效率堪比滚雪球。这样的效应不仅仅让 Facebook 的员工们看见了,广告商,出版商,造谣者,甚至普通用户都看到了其中巨大的威力——轻点一赞,即可把消息传播给自己所有的好友,关注者甚至陌生人。很多人开始绞尽脑汁思考如何制造「引爆点」。甚至这催生了一项新职业——专门教人发状态的社交网络顾问,他们精于研究文字,发消息的时间,及照片对于传播度的影响。「求点赞」成为常态,甚至他们已经忘记了他们发状态的初衷。许多人的发的状态变得同质化:庸俗,矫情,自怜,只为获得更多的「赞」。「大拇指」成了社交网络的中心。
人肉反馈
就这样,网站的交互度有了长足的提升,但这应该是动态消息所追求的吗?这个问题一直困扰着 Chris Cox ,他是 Facebook 的元老了,也是动态算法的工程师。「观察用户的点赞,点击,分享,评论等行为,是为了更好的弄清楚用户的心理。」Cox 在邮件中这么对我讲。(他是 Facebook 的首席产品官)「但我们很清楚这不是一个完美的解决方案。例如,当你看到一则悲伤的新闻,你肯定不会点赞,但这并不能代表你没有受到触动。几年过去了,我们需要知道比点赞和点击更细节的用户行为。」
一个算法可以尽可能的算出最优解,但是不是最优解,还得由人来评判。Cox 等人为动态消息机制设立的终极目标就是,把所有人们真正关系的消息按重要程度排序,把无关的全部隐去。他们知道,这意味着牺牲一些短期的广告收入及用户体验。Facebook 目前持有着大把现金,而 CEO 扎克伯格有着长远的目标,这给了他们宝贵的试错机会。但如何把握机会,还是要靠他们自己。
长久以来,媒体机构对于判断受众们对什么内容感兴趣都源于主观判断。这样的判断影响编辑们讲故事的方法,价值观的取向,新闻价值的判断及题材的选取。但这样的主观判断是 Cox 和其他 Facebook 同事们极力避免的。他们与 Facebook 想要的效果是:用户在动态里看到的都是他们感兴趣的内容,而不是 Facebook 强推的内容。「最完美的解决方案是给用户选择权,让他们挑出自己爱看的,但这明显不实际。」Cox 对我说。所以次好的解决方案就是用算法猜测用户喜爱什么,然后花钱雇佣一批人看效果如何。事实上这个外包团队已经达到上千人之多,之前他们统一在 Knoxville 的办公室工作,现在他们在自己家里。
Adam Mosseri 是现 32 岁的动态消息产品主管,与 Alison 处于同一层级,但前者更关注战略而后者更关注技术细节。他找到问题,Alison 负责解决问题。他负责从哲学层面思考动态消息问题。
动态消息从人性化方面的改善始于 Mosseri 的前任主管,Will Cathcart。Cathcart 的工作从采集更多细节信息开展,不仅仅是用户点击了什么,还有用户在每一个页面上的停留时间,不仅仅是用户点赞的内容及倾向,还有他是在看前点赞,还是看了之后再点赞。对于看前就点赞的消息,Facebook 倾向于认为你并不是那么喜欢。
自 2013 年主政以后,Mosseri 又有了一个大举动,在 2014 年夏季创立了「动态消息质量评测小组」,该小组包含数百名成员,在诺克斯维尔市的办公室,每天负责不断体验自己的 Facebook 动态消息时间线,并把细节及满意程度反馈给 Facebook 的工程师。(他们其实是 Facebook 一个秘密的外包团队。)Mosseri 和工程师们不止于此,他们还会问体验者为什么点赞,为什么不点赞,他们对自己点赞的标准,还有他们的点赞倾向。「事实上,他们几乎每天都要写调查报告」, Greg Marra 是评测小组的主管,他这么对我讲。
「问题是,我们可能错过了什么?」Mosseri 说,「有哪一方面的事实是我们的盲点?」 例如,他补充道,「我们知道有些消息是你感兴趣的,但你并不会参与讨论交流。如果没有关注到这种情况,算法会误以为你对这些消息并不感兴趣,因为你即没有点赞,也没有评论。所以什么东西能把这些消息和普通消息区分开来?」
Mosseri 任命了产品经理 Max Eulenstein 还有用户体验研究员 Lauren Scissors 管理着评测小组的日常运营,对问题的咨询也是他们负责。例如,Eulenstein 让小组成员们看一篇故事,测试他们在喜欢或不喜欢这条消息时,分别在网页上停留的时间。一般认为,你在网页上停留的时间越长,你对它越感兴趣,即使你并没有为它「点赞」。「但没那么简单,不仅仅是『 5 秒表示喜欢,2 秒表示不喜欢』」,Eulenstein 对我解释,「每一位用户的阅读速度也大有差异,这个时间值应该和用户平均阅读时间结合起来看。」关于这个问题的研究成果在六月的算法改进中得以体现,Facebook 会尽量把用户停留时间长的消息排名靠前。
花费了数月的时间,Mosseri 和他的团队终于建起了一个可以信赖的测评小组,这是一个国际化的团队,根据 Facebook 在全球的用户数量分配团队中成员的国籍,并且允许他们在家办公。在 2015年末,Facebook 遣散了之前在诺克斯维尔市的办公室,并扩张了海外测试团队。Mosseri 的直觉是对的:动态消息算法推荐上存在盲点,但这件事工程师们自己发现不了。这需要另一种数据的支持——人肉反馈。
评测小组对于动态消息算法的成熟起到了至关重要的作用,摆脱了对「大数据」的迷信之后,团队迅速成长。 取而代之的是一个具有完善的反馈及平衡机制的系统,每一次算法的改动都必须经历不同类型,不同国籍的用户的反馈,经过多维度的标准测试正确率。
这一个包含排序工程师,产品经理,数据分析师的小团队最主要的任务就是平衡算法的准确性。Sami Tas 是其中的一位软件工程师,他的工作是把动态消息排序小组写出的目标(即伪代码)翻译成电脑可以理解的语言。这个下午,我盯着他看,他从我旁边经过,被一个看似微不足道的问题困扰了。这真的是一个微不足道的问题啊,然而,Facebook 的员工们却锱铢必较。
5% 的用户
大多数时候,人们看到一则不感兴趣的消息,会直接跳过去。但有些消息使他们感到恼怒,他们会特地点开下拉栏,找到「隐藏」按键。Facebook 算法将「隐藏」视为强烈的不满信号,并尽量减少相似的消息出现。
「隐藏」功能藏在下拉栏的二级菜单里
显然,每个用户的习惯都是不同的,有趣的是,Facebook 的数据分析师们发现,5% 的用户使用「隐藏」功能占了总数的 85 %。他们更深入的了解,这一小部分人几乎把自己看过的所有消息都隐藏了——即使是他们点过赞的或评论过的消息。对于这些「『隐藏』强迫症患者」,显然,「隐藏」不代表他们不喜欢这条消息,他们想要表达的是「已阅」标记,就像Gmail 里的「归档」。
然而他们的行为将使赖以排序的数据造成偏差。对于这么复杂的情况,算法并不能分辨出这样的行为。它只会傻傻地认为点赞即代表满意,隐藏代表强烈的不满意。所以,对于这样的「『隐藏』强迫症患者」,工程师们决定为他们做专门的优化。Tas 为此专门写了代码辨别出这群人,并减低他们「隐藏」的负面权重。
这看似一个小问题呢。但这套算法对于 Facebook 是如此重要,以至于这样小小的改动都应该经过严密的测试才能真正投入使用。首先是离线测试,在 Facebook 内部小组内小范围测试,然后推出到一小部分用户上,最后才是全面使用。每一步,数据分析师们都要收集对于用户的网站交互度,广告投放收入和加载速度影响。如果有哪一项出现大幅度的波动,则会出现警报并自动通知到工程师们。
即便如此,Facebook 也不能确定对于长期来看是否有负面影响。为了防止意外,还留有一部分「保留小组」,即一小部分的用户会在几个月内保持原样。
动态消息排序算法不仅仅有一套,这是广泛的误解。事实上,这不是一套有几百个小算法组成的算法。由于总共有很多个测试小组,「保留小组」,这个世界上同时运行着很多个版本的排序算法。我猜,有一部分「『隐藏』强迫症患者」已经可以愉快地刷动态消息了,但还有一部分的用户仍受到不准确算法的困扰。
质量评测小组的出线另动态消息算法团队的数据更立体,这是大数据不能给予的。至此,Tas 和其余的排序团队成员对于机器算法的盲点有了深刻的认识。但是,Facebook 还有一个小组,对于这套算法的成熟也起到了至关重要的作用,那就是包括你我在内的普通用户。
在过去的六个月中,Facebook 一直在普通用户中做着随机的调查,设置左右两列动态消息,让普通用户选择更感兴趣的那一列,这是全民参与的「动态消息评测小组」。但是,不仅如此,Facebook 在最近两年一直给予用户更多定制自己动态消息的权力。
你不仅可以「取关」某人,还可以把你的好朋友列入优先列表中,把某个类型的消息屏蔽掉。当然,这些功能对于粗心的用户来说很难发现,并不会增加轻度用户的上手成本——它藏在右上角的灰色小箭头里。大部分用户甚至永远都不会发现这些功能。当你打开导航及帮助页面时,Facebook 会对这些功能进行详细的说明。
你了解自己吗?
这些转变有部分原因是为了起到防御作用。近年来,Facebook 在社交网络的统治地位屡遭威胁,正如当年 MySpace 的地位遭到 Facebook 的挑战一样。而新兴的创业公司完全避开了数据驱动的模式,以 Instagram 为例,他们直接把你关注的所有人的状态消息以反时间顺序的时间线列出,Facebook 不得不买下 Instagram 以维持老大哥地位。Sanpchat 则以独特的阅后即焚模式侵蚀着 Facebook 的青少年市场。
Facebook 并不是近年来唯一数据驱动优化推荐算法的公司。Neflix 的最佳影片推荐,同样更具海量的用户数据,给用户分成无数小类,分类推荐。为了平衡亚马逊的自动 A/B 测试,首席执行官贝索斯一直设立一个单独的反馈邮箱供用户提出意见。现在将数据的处理完全交给机器学习还为时尚早,但机器学习的时代正在加速到来。Facebook 主管 Mosseri 在开会时并不喜欢使用时髦的“数据驱动”,他说的是「数据辅助」。
Facebook 动态消息排序小组相信他们的努力终将得到回报。「如果我们继续根据反馈提升动态消息推送,我们呈现的消息就回越来越接近人们心中所想。」负责与动态消息反馈小组对接的用户体验分析师 Scissors 说。
这里有一个潜在的负面影响:给用户控制的权利,可是他们真的知道自己究竟想要什么吗?还是数据驱动的 Facebook 比我们更懂自己?可能做出比用户自己想要的更吸引人的动态消息吗?
Mosseri 告诉我他并不会过度担心这些。他解释道,这些数据目前为止,都暗示应该多做调查,给予用户更多的选择权,这样可以增加用户的参与度及在网站上停留的时间,这两项看似都是短期最主要的目标。
动态消息推送算法的改进是一个非常长期的过程。如果它恰好每次都击中你的痛点,那也仅仅是一个令人愉快的巧合。在长达十年的动态消息运营过程中,数据从来就没有尽善尽美过。而算法的改进就是一个否定之否定的过程,今天辛苦写成的代码也许明天就会被无情删除。日复一日,工程师们在 Facebook 门洛帕克市的总部里的研究体验报告,开会,进行一系列测试,然后一次又一次修正算法。