Contents

Twitter's Recommendation Algorithm

Elon Musk 兑现了 Twitter 算法开源的承诺,并开源了 2 个项目:

  1. 推荐系统服务https://github.com/twitter/the-algorithm
  2. Embedding和排序算法https://github.com/twitter/the-algorithm-ml

可以说是推荐系统非常好的学习资料。本篇文章主要是翻译 Twitter 关于推荐系统的介绍,水平有限,难免有误。原文链接:https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm这篇文章只是对 Twitter 博客的直译,笔者使用了 ChatGPT 辅助,真香!后续我们还会对两个项目里的技术细节和相关算法进行分析和拆解,敬请期待。

Overview

Twitter 旨在向您呈现当前世界上最有价值的内容。这需要一个推荐算法将每天发布的约5亿条推文筛选出少数最优秀的推文,最终呈现在您的设备的“为您推荐(For You)”时间线上。本博客将介绍算法如何选择您的时间线上的推文。

我们的推荐系统由许多相互连接的服务和作业组成,本文将详细介绍。虽然应用程序中有许多推荐推文的领域,比如搜索、探索、广告,但本文将重点介绍主页时间线中的“为您推荐”功能。

How do we choose Tweets?

Twitter推荐的基础是一组核心模型和功能,它们从推文、用户和互动数据中提取潜在信息。这些模型旨在回答Twitter网络中的重要问题,例如,“您在将来与另一个用户互动的概率是多少?”或者,“Twitter上有哪些社区,这些社区中有哪些热门推文?”准确回答这些问题可以使Twitter提供更相关的推荐。

推荐流程由三个主要阶段组成:

  1. 在称为候选推荐源的过程中从不同的推荐来源获取最佳推文,这个过程称为 Candaidate Sourcing
  2. 使用机器学习模型对每个推文进行排名,这个过程称为 Rank
  3. 应用启发式算法和过滤器,例如过滤您已屏蔽的用户的推文、NSFW内容以及您已经看过的推文,这个过程称为 Heuristics and Fitlers

负责构建和提供“为您推荐”时间线的服务称为 Home MixerHome Mixer 是基于 Product Mixer 构建的,后者是我们自定义的 Scala 框架,用于构建内容流。该服务充当软件骨干,连接不同的候选推荐源、评分函数、启发式算法和过滤器。

以下图表说明了用于构建时间线的主要组件:./images/image_pipeline.png让我们大致了解一下这个系统的关键部分,按照单个时间线请求期间它们被调用的顺序来探究,从从候选推荐源中检索候选推文,即 Candidate Sourcing 开始。

Candidate Sources

Twitter有几个候选推荐源,用于为用户检索最近和相关的推文。对于每个请求,我们通过这些源尝试从数亿条推文中提取最佳的1500条。我们从您关注的人(In-Network)和您不关注的人(Out-of-Network)中寻找候选推文。如今,“为您推荐(For You)”时间线平均由 50% 的 In-Network 推文和 50% 的 Out-of-Network 推文组成,尽管这可能因用户而异。

In-Network Source

In-Network 来源是最大的候选推荐源,旨在提供您关注的用户最相关、最近的推文。它使用逻辑回归模型高效地对您关注的用户的推文进行排序,以其相关性为依据。排名靠前的推文将被发送到下一个阶段。

在对 In-Network 推文进行排名时,最重要的组件是 Real GraphReal Graph 是一个模型,用于预测两个用户之间的互动可能性。您和推文作者之间的 Real Graph 得分越高,我们将会包含更多他们的推文。

In-Network 来源是近期 Twitter 的研究重点。我们最近停止使用 Fanout Service,这是一个 12 年前使用的服务,以为每个用户提供推文缓存的方式来提供 In-Network 推文。我们还在重新设计逻辑回归排名模型,该模型上次更新和训练是在几年前!

Out-of-Network Sources

寻找用户网络之外相关的推文是一个更加棘手的问题:如果您不关注作者,我们如何确定某条推文对您有用呢?Twitter采取了两种方法来解决这个问题。

Social Graph

我们的第一个方法是通过分析您关注的人或具有类似兴趣的人的互动来估计您会发现哪些推文相关。我们遍历互动和关注的图表,以回答以下问题:

  1. 我关注的人最近参与了哪些推文?(笔者按:u2follow2i)
  2. 谁喜欢和我类似的推文,他们最近还喜欢了什么?(笔者按:u2u2i)

我们根据这些问题的答案生成候选推文,并使用逻辑回归模型对产生的推文进行排名。这种类型的图遍历对我们的Out-of-Network 推荐至关重要;我们开发了** GraphJet**,一个图处理引擎,用于维护用户和推文之间实时互动图,并在图上进行遍历。虽然在Twitter 互动和社交关系网络上,这种启发式算法已被证明是有用的(目前它们约占主页时间线推文的15%),但嵌入空间(Embedding Spaces)方法已成为 Out-of-Network 推文更大的来源。

Embedding Spces

嵌入空间方法旨在回答有关内容相似性的更一般性问题:哪些推文和用户与我的兴趣相似?

嵌入空间方法通过生成用户兴趣和推文内容的数值表示来工作。然后,我们可以在此嵌入空间中计算任何两个用户、推文或用户-推文对之间的相似度。只要我们生成准确的嵌入,我们就可以将此相似度用作相关性的替代品。

Twitter最有用的嵌入空间之一是 SimClusters。SimClusters 使用自定义矩阵分解算法发现以一群具有影响力的用户为锚点的社区。有 145,000 个社区,每三周更新一次。用户和推文在社区空间中表示,并可以属于多个社区。社区的规模从几千个用户的个人好友组到数亿个用户的新闻或流行文化不等。以下是一些最大的社区:./images/image_community.png

我们可以通过查看推文在每个社区中的当前流行度,将其嵌入这些社区。社区中的用户对推文的喜爱程度越高,该推文就会与该社区联系得越紧密。

Ranking

为您推荐”时间线的目标是为您提供相关的推文。在此阶段,我们有大约1500个可能相关的候选推文。评分直接预测每个候选推文的相关性,是在您的时间线上排名推文的主要信号。在这个阶段,所有的候选推文都被平等对待,不考虑它们来自哪个候选源。

排名是通过一个大约有 4800 万个参数的神经网络实现的,该网络不断地根据推文互动进行训练,以优化积极的互动(例如喜欢、转发和回复)。这个排名机制考虑了数千个特征,并输出十个标签,为每个推文赋予一个分数,其中每个标签表示互动的概率。我们根据这些分数对推文进行排名。

Heuristics, Filters, and Product Features

在排名阶段之后,我们应用启发式算法和过滤器来实现各种产品功能。这些功能共同作用,创建一个平衡和多样化的信息流。一些例子包括:

  1. 可见性过滤(Visibility Filtering):根据内容和您的偏好过滤推文。例如,删除您屏蔽或静音的帐户的推文。
  2. 作者多样性(Author Diversity):避免连续多条来自同一作者的推文。
  3. 内容平衡Content Balance):确保我们提供公平的 In-Network 和 Out-of-Network 推文。
  4. 基于反馈的疲劳度(Feedback-based Fatigue):如果观看者提供了负面反馈,降低某些推文的分数。
  5. 社交证明(Social Proof):将没有与推文有二度联系的 Out-of-Network 推文排除在外,作为质量保障。换句话说,确保您关注的人参与了推文或关注了推文的作者。
  6. 对话:通过将回复与原始推文放在一起,为回复提供更多上下文。
  7. 编辑过的推文:确定设备上的推文是否过时,并发送指令以用编辑后的版本替换它们。

Mixing and Serving

此时,Home Mixer 已经准备好将一组推文发送到您的设备。作为处理过程的最后一步,系统将推文与其他非推文内容(如广告、关注建议和入门提示)混合在一起,返回到您的设备以显示。

上述流程每天运行约 50 亿次,平均完成时间不到 1.5 秒。单个流水线执行需要 220 秒的 CPU 时间,几乎是您在应用程序上感知的延迟的 150 倍。

./images/image_twitter_demo.png

我们开源的目的是向我们的用户提供完全透明的方式,让他们了解我们的系统如何工作。我们已经发布了支持我们推荐功能的代码,您可以在这里(和这里)查看更多细节,我们还在努力实现一些功能,以在我们的应用程序中提供更多的透明度。我们计划实现的一些新功能包括:

  1. 为创作者提供更多有关推广和互动的信息的更好的 Twitter 分析平台
  2. 更透明地展示您的推文或帐户被应用任何安全标签的原因
  3. 更清晰地展示为什么推文出现在您的时间线上

What’s Next?

Twitter 是世界各地对话的中心。每天,我们向人们的设备提供超过 1500 亿条推文。确保我们向用户提供尽可能好的内容既是一个具有挑战性又是一个令人兴奋的问题。我们正在研究新的机会来扩展我们的推荐系统-新的实时功能、嵌入式和用户表示,我们拥有世界上最有趣的数据集和用户群体来实现这一目标。我们正在建造未来的城市广场。如果您对此感兴趣,请考虑加入我们