- 首先你的一个朋友产生了一条新鲜事,比如他发布一条想法、赞了一个主页、给一张照片加了标签。
- 然后经过你这个朋友的介绍,到了你的家门口(你的首页),你一开门(登录或者刷新)就可能看见它。
- 总体来说,新的还是比旧的更能得到你的接见。
- 新鲜事不多时,开门一个一个寒暄可能还行,它们也等得起,内容太多时,就得考虑个先来后到了。
这几个步骤,大致刻画了EdgeRank的思想,简单直接。基于这个假设,EdgeRank排序算法主要考虑了三个因素:
- 亲密度。它对应了第二个步骤背后的思想,那么多人介绍过来,我们当然要优先照顾更“喜欢”的人了,亲密度的量化要考虑平日里你和这个朋友“走动”是否频繁、连接是否紧密。
- 边权重。这也是EdgeRank名字含义所在:不同的动态权重不同,点赞动态和发布照片显然不一样。
- 新鲜度。既然是NewsFeed,那么新一些(New)的动态就更受青睐。
三个分数,最终用相乘的方式共同作用于每一条新鲜事的分数,用于排序和筛选,如图1所示。这个排序方法的确很简单,只是量化了三个主要因素,然后主观地相乘,没有任何目标优化思想在背后。根据Facebook披露的消息,早期的EdgeRank的确没有引入机器学习,所以根本称不上是智能的算法。
图1 EdgeRank排序算法原理
向机器学习要智能
2011年之后,Facebook内部就不再提EdgeRank算法了,NewsFeed进入EdgeRank后时代。此时的Facebook,月活跃用户超过10亿,约2000万的公共主页,移动设备贡献了大多数流量,面对复杂的上下文因素,必须引入机器学习才能Hold整个场面。
引入机器学习的好处显而易见,原来考虑的因素就是机器学习模型的特征,一个线性模型可以处理大规模的稀疏特征,并且会为每一个特征寻找到最优的参数(即权重)。在这样的框架下,产品和工程人员只需要去尽力发现那些影响排序的特征,然后把特征交给机器学习模型,就万事大吉。
NewsFeed团队成员在原来EdgeRank的基础上,更加细致地定义了不同层级的亲密度。用深度神经网络理解图片内容和文字内容,可以知道相片中的物体是不是用户感兴趣的,还可以分析出新鲜事的讨论话题用于排序。随着产品迭代,考虑的排序因素越来越多,诸如阅读时间长短、视频内容、链接内容,或者取关、隐藏一个源等。前前后后一共考虑了10万多的排序因素(模型的特征空间应该会更高),如果还按照原来的方式去调节权重,显然既不科学又很低效。
破解机器学习和数据的局限
除了全面转向机器学习之外,NewsFeed团队也在重新思考人和算法的关系。他们要关心的是到底“如何把用户真正最关心的找出来”,而不仅仅是“如何提高点击率”。Facebook一直是数据驱动的,这也是他们能够在争议中把NewsFeed坚持下来的信念来源,但是不是唯数据马首是瞻,团队内部一直有很多思考。比如:
- 团队发现有85%的隐藏新鲜事操作来自5%的人,经过与这些用户沟通才发现,原来这5%的人把“隐藏”当作邮件里的“标记已读”了,对喜不喜欢的新鲜事只要看过就会点击隐藏。
- 对于悲伤的事情,用户可能关心但不会点赞。
- 对于有些点赞,用户可能并不是真的感兴趣,只是“点赞狂魔”发狂而已。
- 用户阅读一篇长帖子,读到一半不读了,也并不能说明他对这篇帖子不感兴趣。
这些都让他们开始关注到机器学习和数据的局限。于是,在算法团队之外,Facebook搭建了一个遍布全球的人肉评测小组。人肉评测小组的工作不是简单地对算法筛选结果进行喜欢/不喜欢的标注,而是非常深入地阐述为什么喜欢/不喜欢算法筛选结果,而且他们会与工程师详细交流评测结果,因为这种人肉评测方式可以有效地拆穿数据说谎,让产品远离一味追求提高数据指标的怪圈。
此外,NewsFeed还有两个重要的配套设施:社交关系推荐系统和广告系统。
NewsFeed存在是因为用户建立了大量的社交联系,出现信息过载,因此“你可能感兴趣的人”(people you may know)推荐系统是必不可少的,这是NewsFeed“合法”存在的前提。