新闻动态如何预测你想看到什么?

由Akos Lada,Data Science Manager,Meihong Wang,Engineering Director,Add Tak Yan,产品管理总监

说到新闻推送算法,有很多理论和方法神话。大多数人都知道在工作中存在着一种算法,并且许多人都知道一些影响这种算法的因素(你是否喜欢一份工作或参与其中,等等)。但还是有很多误解。

我们公开分享许多人细节特性新闻提要。但实际上,为新闻推送提供动力的机器学习(ML)排名系统非常复杂,有很多层次。我们将分享关于排名系统如何运作的新细节,以及建立一个面向超过20亿用户的个性化内容系统所面临的挑战,并在他们每次访问Facebook时向他们展示与他们相关和有意义的内容。

这对此有什么困难?

首先,数量是巨大的。全世界有超过20亿人使用Facebook。对于这些人中的每一个人,都有超过1000个“候选”帖子(或可能出现在该人的提要中的帖子)。我们现在谈论的是Facebook上所有人发布的数万亿条帖子。

现在考虑到,对于Facebook上的每个人来说,我们需要评估数千种信号,以确定这个人可能会发现什么是最相关的。因此,我们有上万亿的帖子和成千上万的信号——我们需要预测这些人想在他们的信息流中立即看到什么。当你打开Facebook时,这个过程在后台发生,只需要大约几秒钟就可以加载你的新闻源。

一旦我们让所有这些运作起来,事情就会发生变化,我们需要考虑出现的新问题,比如点击诱饵和错误信息的传播。当这种情况发生时,我们需要找到新的解决方案。事实上,排名系统并不是一个单一的算法;为了预测对每个用户来说最相关和最有意义的内容,我们应用了多层ML模型和排名。随着我们进入每个阶段,排名系统会将数千条候选帖子缩小到几百条在任何给定时间出现在某人的新闻提要中的帖子。

如何生成个性化新闻源的图表

它是如何工作的?

简单地说,该系统通过预测你最有可能感兴趣或参与的内容,来确定哪些帖子会出现在你的信息流中,以及以什么顺序出现。这些预测是基于各种各样的因素,包括你最近关注了什么,喜欢了谁,或者接触了谁。为了理解这在实践中是如何工作的,让我们从一个人登录Facebook时会发生什么开始:我们称他为Juan。

自从胡安昨天登陆后,他的朋友魏就贴出了一张他的可卡犬的照片。另一个朋友萨维(Saanvi)上传了一段晨跑的视频。他最喜欢的页面上发表了一篇有趣的文章,讲述了在夜晚观察银河系的最佳方式,而他最喜欢的烹饪小组则发布了四种新的酸面包食谱。

所有这些内容对Juan来说都可能是相关或有趣的,因为他选择关注分享这些内容的人或页面。为了决定哪些内容应该出现在Juan的新闻推送中,我们需要预测什么对他来说最重要,哪些内容对他来说最有价值。在数学方面,我们需要为Juan定义一个目标函数,并执行一个单目标优化。

我们可以使用帖子的特征,例如谁被标记为照片,并且何时发布,来预测胡安是否会喜欢它例如,如果Juan经常与Saanvi的帖子互动(比如分享或评论),而且她的视频是最近发布的,那么Juan很有可能会喜欢她的帖子。如果胡安在过去接触的视频内容多于照片,那么对韦的可卡犬照片的预测可能会相当低。在这种情况下,我们的排名算法将Saanvi的运行视频排名高于Wei的狗照片,因为它预测了Juan喜欢它的更高概率。

但喜欢不是人们在Facebook上表达他们的偏好的唯一方式。每天,人们分享文章他们发现有趣,观看他们关注的人或名人的视频,或对他们的朋友的帖子留下深思熟虑的评论。在数学上,当我们需要优化所有对我们的主要目标的多个目标优化

多ML模型为Juan产生多种预测:他将与Wei的照片,Saanvi的视频,银河系或酵母食谱进行偶像。每个模型都试图为juan排名这些内容。有时他们不同意 - 胡安希望Saanvi跑步的概率比银河系文章更高,但他可能更有可能对文章发表评论而不是视频。因此,我们需要一种方法来将这些不同的预测结合成一个分数,该分数针对我们的长期价值的主要目标进行了优化。

我们如何衡量某些人为某人创造长期价值吗?我们问他们。例如,我们调查的人询问他们发现与朋友的互动有多有意义,或者一个帖子是否值得他们花时间,以便我们的系统反映了人们说他们喜欢并发现有意义的东西。然后我们可以根据人们告诉我们(通过调查)更有意义和值得的时间,考虑到Juan的每次预测。

剥离层

要为超过20亿人的每名用户每天超过1000篇文章进行实时排名,我们需要让这个过程变得高效。我们通过不同的步骤进行管理,战略性地安排以使其更快,并限制所需的计算资源数量。

首先,系统收集所有我们可以为Juan排名的候选帖子(可卡犬的照片,运行的视频,等等)。这个符合条件的清单包括Juan的朋友、群组或他所连接的页面分享给他的任何帖子,这些帖子是他上次登录后发布的,而且还没有被删除。但是我们应该如何处理在Juan上次登录之前创建的他还没有看到的帖子呢?

为了确保看不见的帖子被重新考虑,我们应用了一个未读的偶发逻辑:在Juan之前的会话中为其排名(但未被他看到)的新帖子被添加到这个会话的合格目录中。我们还应用了行动碰撞逻辑,这样Juan已经看到的任何在他的朋友间引发有趣对话的帖子也会被添加到符合条件的库存中。

接下来,系统需要为各种因素进行评分,例如帖子类型,与其他物品的相似性,以及帖子匹配的帖子往往与之相互作用。为了计算这一点超过1,000个帖子,每个用户都是实时的 - 我们实时运行这些模型,以便在多台机器上并行地运行所有候选故事,称为预测器。

在我们将所有这些预测结合到单一分数之前,我们需要应用一些额外的规则。我们等到我们拥有这些第一个预测之后等待,以便我们可以缩小帖子的排名池 - 并且我们将它们应用于多次通过以节省计算能力。

首先,某些完整性过程适用于每个帖子。这些旨在确定哪些完整性检测措施(如果有的话)需要应用于为排名所选择的故事。在下一篇通行证中,轻量级模型将候选人的池中缩小到Juan最相关帖子的大约500个。排名较少的故事允许我们使用更强大的神经网络模型来实现下一个通行证。

接下来是主要得分传球,大部分个性化都发生了。在这里,每个故事的分数都是独立计算的,然后所有500个帖子按得分按顺序排列。对于一些人来说,比分可能比评论更高,因为有些人喜欢通过喜欢来表达自己而不是评论。一个人很少参与(例如,非常接近零的类似预测)在排名中自动获得最小的角色,因为预测值非常低。

最后,我们运行上下文传递,其中添加了内容类型多样性规则等上下文特性,以确保Juan的新闻提要具有很好的内容类型混合,并且他不会看到一个接一个的多个视频帖子。所有这些排名步骤都是在Juan打开Facebook应用程序的时间内完成的,在几秒钟内,他就有了一个已评分的新闻源供他浏览和享受。



为了帮助个性化内容,定制和衡量广告,并提供更安全的体验,我们使用cookie。通过点击或浏览网站,您同意允许我们通过cookies收集Facebook上和下的信息。了解更多信息,包括可用的控件:饼干的政策