Twitter 旨在为您提供当今世界上发生的最好的事情。这需要一种推荐算法,将每天发布的大约 5 亿条推文提炼成少数几条热门推文,最终显示在您设备的For You时间轴上。该博客介绍了该算法如何为您的时间线选择推文。
我们的推荐系统由许多相互关联的服务和工作组成,我们将在本文中详细介绍。虽然应用程序的许多区域都推荐推文——搜索、探索、广告——但这篇文章将重点关注主页时间线的“为你推荐”提要。
我们如何选择推文?
Twitter 推荐的基础是一组核心模型和功能,它们从推文、用户和参与数据中提取潜在信息。这些模型旨在回答有关 Twitter 网络的重要问题,例如“您将来与其他用户互动的可能性有多大?” 或者,“Twitter 上有哪些社区,其中有哪些热门推文?” 准确回答这些问题使 Twitter 能够提供更相关的推荐。
推荐管道由使用这些功能的三个主要阶段组成:
- 在称为候选采购的过程中从不同的推荐来源获取最佳推文。
- 使用机器学习模型对每条推文进行排名。
- 应用启发式和过滤器,例如过滤掉来自您已阻止的用户的推文、NSFW 内容和您已经看过的推文。
负责构建和提供 For You 时间线的服务称为 Home Mixer。Home Mixer 建立在 Product Mixer 之上,Product Mixer 是我们的自定义 Scala 框架,有助于构建内容提要。该服务充当连接不同候选源、评分函数、启发式方法和过滤器的软件主干。
下图说明了用于构建时间线的主要组件:
让我们探索这个系统的关键部分,大致按照它们在单个时间线请求期间被调用的顺序,从从Candidate Sources检索候选人开始。
候选来源
Twitter 有几个候选源,我们用它们来为用户检索最近和相关的推文。对于每个请求,我们尝试通过这些来源从数亿推文中提取最佳的 1500 条推文。我们从您关注的人(网络内)和您不关注的人(网络外)中寻找候选人。如今,For You 时间轴平均包含 50% 的网络内推文和 50% 的网络外推文,尽管这可能因用户而异。
网内资源
网络内来源是最大的候选来源,旨在提供您关注的用户的最相关、最新的推文。它使用逻辑回归模型根据推文的相关性对您关注的推文进行有效排名。然后将热门推文发送到下一阶段。
对网络内推文进行排名的最重要组成部分是Real Graph。Real Graph 是一种预测两个用户之间参与可能性的模型。您和推文作者之间的 Real Graph 得分越高,我们将包括的他们的推文就越多。
网络内源一直是 Twitter 最近工作的主题。我们最近停止使用 Fanout Service,这是一项已有 12 年历史的服务,以前用于从每个用户的推文缓存中提供网络内推文。我们还在重新设计几年前最后一次更新和训练的逻辑回归排名模型!
网络外资源
在用户网络之外查找相关推文是一个更棘手的问题:如果您不关注作者,我们如何判断某个推文是否与您相关?Twitter 采用两种方法来解决这个问题。
社交图谱
我们的第一种方法是通过分析您关注的人或具有相似兴趣的人的参与度来估计您会发现什么是相关的。
我们遍历参与图并回答以下问题:
- 我关注的人最近与哪些推文进行了互动?
- 谁喜欢和我相似的推文,他们最近还喜欢什么?
我们根据这些问题的答案生成候选推文,并使用逻辑回归模型对生成的推文进行排名。这种类型的图遍历对于我们的网络外推荐至关重要;我们开发了GraphJet,一种图形处理引擎,维护用户和推文之间的实时交互图,以执行这些遍历。虽然这种用于搜索 Twitter 参与度和关注网络的启发式方法已被证明是有用的(这些目前服务于大约 15% 的家庭时间线推文),但嵌入空间方法已成为网络外推文的更大来源。
嵌入空间
嵌入空间方法旨在回答一个关于内容相似性的更普遍的问题:哪些推文和用户与我的兴趣相似?
嵌入通过生成用户兴趣和推文内容的数字表示来工作。然后,我们可以计算该嵌入空间中任意两个用户、推文或用户-推文对之间的相似度。如果我们生成准确的嵌入,我们可以使用这种相似性作为相关性的替代。
Twitter 最有用的嵌入空间之一是SimClusters。SimClusters 使用自定义矩阵分解算法发现由一群有影响力的用户锚定的社区。有 145,000 个社区,每三周更新一次。用户和推文在社区空间中表示,并且可以属于多个社区。社区的规模从个别朋友组的几千用户到新闻或流行文化的数亿用户不等。这些是一些最大的社区:
我们可以通过查看推文在每个社区中的当前流行度来将推文嵌入到这些社区中。喜欢推文的社区用户越多,推文与该社区的关联度就越高。
排行
For You 时间线的目标是为您提供相关的推文。在这一点上,我们有大约 1500 名可能相关的候选人。评分直接预测每个候选推文的相关性,并且是在你的时间线上对推文进行排名的主要信号。在此阶段,所有候选人都受到平等对待,而不管其来自哪个候选人来源。
排名是通过一个约 48M 参数的神经网络实现的,该神经网络在推文交互上持续训练以优化积极参与(例如喜欢、转推和回复)。这种排名机制考虑了数千个特征并输出十个标签来为每条推文打分,其中每个标签代表参与的概率。我们根据这些分数对推文进行排名。
启发式、过滤器和产品功能
在排名阶段之后,我们应用启发式和过滤器来实现各种产品功能。这些功能协同工作以创建平衡且多样化的提要。一些例子包括:
- 可见性过滤:根据内容和您的偏好过滤掉推文。例如,从您屏蔽或静音的帐户中删除推文。
- 作者多样性:避免来自同一作者的太多连续推文。
- 内容平衡:确保我们提供网络内和网络外推文的公平平衡。
- 基于反馈的疲劳:如果观众提供了负面反馈,则降低某些推文的分数。
- 社会证明:排除与推文没有二级关联的网络外推文作为质量保障。换句话说,确保你关注的人与推文互动或关注推文的作者。
- 对话:通过将回复与原始推文串连在一起,为回复提供更多上下文。
- 已编辑的推文:确定设备上当前的推文是否过时,并发送指令以将其替换为已编辑的版本。
混合和服务
此时,Home Mixer 已准备好发送到您的设备的一组推文。作为流程的最后一步,系统将推文与其他非推文内容(如广告、关注推荐和入职提示)混合在一起,这些内容将返回到您的设备上进行显示。
上面的管道每天运行大约 50 亿次,平均完成时间不到 1.5 秒。单个管道执行需要 220 秒的 CPU 时间,几乎是您在应用程序上看到的延迟的 150 倍。
我们开源努力的目标是向您(我们的用户)提供有关我们系统工作方式的完全透明信息。我们已经发布了为我们的建议提供支持的代码,您可以在此处 (和此处)查看这些代码以更详细地了解我们的算法,并且我们还在开发多项功能,以便在我们的应用程序中为您提供更大的透明度。我们计划的一些新开发项目包括:
- 为创作者提供更好的 Twitter 分析平台,提供更多关于影响力和参与度的信息
- 提高应用到你的推文或帐户的任何安全标签的透明度
- 更好地了解推文出现在你的时间线上的原因
下一步是什么?
Twitter 是全世界对话的中心。每天,我们向人们的设备发送超过 1500 亿条推文。确保我们向用户提供尽可能最好的内容既是一个具有挑战性又令人兴奋的问题。我们正在寻找新的机会来扩展我们的推荐系统——新的实时特征、嵌入和用户表示——我们拥有世界上最有趣的数据集和用户群之一。我们正在建设未来的城市广场。如果您对此感兴趣,请考虑加入我们。