[译]Facebook:News Feed如何预测您想看的内容 | 技术点评

426 阅读8分钟

本文翻译自:tech.fb.com/news-feed-r…

当涉及到News Feed算法时,有很多理论和谬见。大多数人都知道有一种算法在起作用,而且许多人都知道影响该算法的一些因素(比如您喜欢发帖还是参与其中等),但是还是存在很多误解。

我们公开分享News Feed的许多细节和功能。但实际上,News Feed提供动力的机器学习(ML)排序系统非常复杂,包含有很多层。我们正在分享有关我们的排序系统如何工作的新细节和构建一个系统的挑战。该系统将为20多亿人提供个性化的内容,并在他们每次来到Facebook时向他们展示对他们来说相关和有意义的内容。

系统的挑战

首先,数量巨大。全球有超过20亿人使用Facebook。对于每个人,都有1000多个候选posts(或者可能出现在此人Feed中的posts)。现在,我们讨论的是Facebook上所有人发布的数万亿条posts。

现在考虑一下,对于Facebook上的每个人,我们需要评估成千上万个signals,以确定该人可能找到最相关的东西。因此,我们有数万亿的posts和数以千计的signals。我们需要预测每个人想要立即在其Feed中看到的内容。当你打开Facebook时,这个过程在后台发生,只需几秒钟就可以加载你的News Feed。

一旦完成所有这些工作,事情就会改变,我们需要考虑出现的新问题,例如点击诱饵(clickbait)和错误信息的传播。发生这种情况时,我们需要找到新的解决方案。实际上,排序系统不仅是一种算法。我们应用了多层ML模型和排序,以预测与每个用户最相关,最有意义的内容。当我们进入每个阶段时,排序系统会将这数千个候选posts缩小到在任何给定时间出现在某人的News Feed中的几百个。

我们是如何做到的

简而言之,系统会通过预测您最可能感兴趣或参与的内容来确定您的News Feed中将显示哪些posts,以及以什么顺序显示。这些预测基于多种因素,包括你最近追踪了什么,喜欢什么,和谁交往过。要了解它在实际中的工作原理,让我们从一个人登录Facebook的情况开始:我们称他为Juan。

自从Juan昨天登录以来,他的朋友Wei张贴了他的可卡犬的照片。另一个朋友Saanvi发布了她早上跑步的视频。他最喜欢的网页发表了一篇有趣的文章,介绍了晚上观看银河系的最佳方法,而他最喜欢的烹饪小组则发布了四种新的酸面团食谱。

所有这些内容都可能与Juan息息相关,因为他选择了关注共享这些内容的人或页面。为了决定这些内容中哪一个应该出现在Juan的News Feed中,我们需要预测哪些内容对他来说最重要,哪些内容对他来说价值最高。用数学术语来说,我们需要为Juan定义一个目标函数并执行单目标优化。

我们可以使用posts的特征(例如照片中被标记的人以及发布时间)来预测Juan是否会喜欢它。例如,如果Juan倾向于经常与Saanvi的posts互动(例如,分享或评论),并且她正在播放的视频是最近的视频,则很可能Juan会喜欢她的posts。如果Juan在过去接触的视频内容多于照片,那么对Wei的可卡犬照片的类似预测可能相当低。在这种情况下,我们的排序算法将Saanvi的跑步视频排名高于Wei的狗照片,因为它预测Juan喜欢它的概率更高。

但是,喜好并不是人们在Facebook上表达自己偏好的唯一方式。每天,人们分享他们发现有趣的文章,观看他们所关注的人或名人的视频,或者在他们的朋友的posts上留下深思熟虑的评论。从数学上讲,当我们需要针对多个目标进行优化时,事情变得更加复杂,这些目标共同构成了我们的主要目标:通过向人们展示有意义且与他们相关的内容,为他们创造最长期的价值。

多种ML模型会为Juan带来多种预测:他会与Wei的照片,Saanvi的视频,银河系的文章或酸面团进行互动的可能性。每个模型都尝试对Juan的这些内容进行排序。有时他们会冲突——Juan可能更喜欢Saanvi的跑步视频,而不是银河系的文章,但他可能更愿意评论文章而不是视频。因此,我们需要一种方法,将这些不同的预测组合成一个分数,为我们的长期价值的主要目标进行优化。

我们如何衡量某物是否为一个人创造了长期价值?例如,我们调查人们,询问他们发现与朋友的互动有大意义,或者一篇post是否值得他们花时间,这样我们的系统就能反映出人们所说的他们喜欢和觉得有意义的东西。然后,我们可以根据人们告诉我们的(通过调查)更有意义和值得花时间的行动,来考虑Juan的每个预测。

逐层分析

每天对于超过20亿人,要实时为每位用户排序1000多个posts,我们需要提高流程的效率。我们分多个步骤进行管理,并在策略上进行安排以使其快速运行并限制所需的计算资源量。

首先,系统收集我们可能会为Juan排序的所有候选posts(可卡犬照片,正在播放的视频等)。这个符合条件的清单(inventory)包括任何与Juan共享的posts,这些posts是由Juan的朋友、组或他连接到的页面在他上次登录后发布的,并且没有被删除。但是,我们应该如何处理Juan上次登录之前尚未见过的posts?

为了确保重新考虑看不见的posts,我们采用了一种未读的bumping逻辑:在Juan之前的会话中为他排序(但他没有看到)的新posts被添加到这个会话的合格目录中。我们还应用了动作碰撞(action-bumping)逻辑,这样,Juan已经看到的任何posts都会被添加到符合条件的清单中,这些posts会在他的朋友之间引发有趣的对话。

接下来,系统需要根据各种因素对每个post打分,例如posts的类型,与其他项目的相似性,以及post与Juan倾向于互动的内容的匹配程度。为了实时为十亿用户中的每个用户计算1000多个posts,我们在多台机器上并行运行所有候选stories的这些模型,称为预测器。

在将所有这些预测合并为一个分数之前,我们需要应用一些其他规则。我们等到有了这些最初的预测后,才能缩小要排序的posts的范围,然后多次缩小范围以节省计算能力。

首先,某些完整性处理应用于每个post。它们被设计用来确定哪些完整性检测措施(如果有的话)需要应用到为排序选择的stories中。在下一个过程中,轻量级模型将候选人的范围缩小到大约500个与Juan最相关的posts。对较少的stories进行排序,让我们可以在接下来步骤中使用更强大的神经网络模型。

接下来是主要的打分通道,其中大部分个性化操作都在此进行。在这里,每个story的得分是独立计算的,然后按得分对所有500个posts进行排序。对于某些人来说,喜欢的分数可能比评论高,因为有些人喜欢通过喜好表达自己,而不是发表意见。一个人很少参与的任何行动(例如,一个非常接近0的like预测)都会自动在排序中获得最小的作用,因为预测值非常低。

最后,我们运行上下文传递(contextual pass),其中添加了诸如内容类型多样性规则之类的上下文功能,以确保Juan的News Feed具有很好的内容类型组合,并且他不会看到多个视频posts。所有这些排序步骤都发生在Juan打开Facebook应用程序所需的时间内,几秒钟之内,他就有了一个已打分的News Feed,供他浏览和欣赏。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情