一文读懂推特开源推荐算法

For You Timeline推荐算法

image.png

如何选择Tweets

三个主要阶段:

  • 在一个叫做candidate sourcing的过程中,从不同的推荐源中获取最佳Tweets
  • 使用机器学习方法Rank每一个Tweet
  • 使用启发式算法以及过滤器(例如过滤用户不想看到的、NSFW内容、以及已经看过的)。

Home Mixer服务负责构建和服务For You timeline。
Home Mixer构建与Product Mixer,Home Mixer是一个定制的Scala框架便于构建内容提要。
Home Mixer承担软件主干功能。其连接了不同的candidate sourcing,scoring functions,启发式算法以及过滤器。
下图阐释了主要的各个模块是如何构建timeline的:

在这里插入图片描述

接下来,一步一步地拆解整个系统,从一开始检索候选集的Candidate Sources介绍。

Candidate Sources

推特对于一个用户使用了多个Candidate Source来检索最近和相关的Tweets。
对于每个请求,会抽取最佳的1500条Tweets。我们根据你关注的人(In-Network)以及你没有关注的人(Out-of-Network)中寻找候选集。现在来说,For You Timeline平均来说有50% In-Network Tweets以及50%的Out-of-Network Tweets。

In-Network Source

In-Network Source是最大的候选集源,并且旨在从你关注的用户中找到最相关的、最近的Tweets。
基于逻辑回归模型计算的相关性高效地ranks 你关注人的Tweets。
rank In-Network Tweets最重要的模块是 Real Graph。Real Graph是一种预测两个用户之间互动可能性的模型。如果计算出的可能性越高,那么这个Tweets排序就会越高。
In-Network Source是最近推特工作主题。推特停掉了使用了12年之久的Fanout Service,这个服务之前是用于提供In-Network Tweets的。推特也在推进重新设计逻辑回归Ranking模型,该模型上一次更新已经是在几年前。

Out-Network Sources

寻找相关的且不在用户社交网络中的Tweets是个很棘手的问题:我们如何表述是否某用户未关注人的Tweet会与该用户相关?推特采用了两种方法解决:

Social Graph

第一种方法是:通过分析你关注的人以及那些与你有相同兴趣的人,以估计你觉得会相关的程度。
推特遍历由互动以及你关注的用户构成的图,以回答以下问题:

  • 某用户关注的人最近都参与了哪些Tweets?
  • 谁喜欢和我相似的推文,他们最近还点了什么赞?

我们生成基于逻辑回归模型排序上述问题来选择candidate Tweets。这种类型的图遍历对于Out-Network推荐建议是必不可少的。推特开发了GraphJet用来执行遍历,GraphJet一种包含了users与Tweets的实时交互图的图处理引擎。尽管某些启发式算法来搜索Twitter engagement and follow网络证明有效(当前15%的Home Timeline Tweets),但embedding space方法是得到Out-of-Network Tweets最主要的来源。

Embedding Spaces

该方法旨在解释更一般的关于内容相似度的问题:哪些Tweets以及用户和你的兴趣是相似的?
Embeddings是通过生成用户兴趣与Tweets内容的数字表示工作的。因此,可以在embedding space计算出任意两个用户的相似度,任意两个Tweets,或用户与Tweet之间的相似度。如果能够生成准确的embeddings,可以使用该相似度作为相关性的替代品。
推特用户最大的embedding spaces之一是SimClusters。SimClusters使用定制的矩阵分解算法,以发现一群有影响力用户锚定的社区(例如News,NBA,POP等)。现有14.5万个社区,每三周更新一次。用户和Tweets都会在社区空间中表示,并且可以属于多个社区。社区的规模从个人朋友群的几千用户到新闻或流行文化的数亿用户不等。
我们可以通过查看Tweet在每个社区中的当前流行程度来将Tweet embedding到这些社区中。一个社区的用户越喜欢一条Tweet,该Tweet就会与该社区联系得越紧密。

Ranking

一次请求的处理过程走到这里,大约过滤出1500条获选集。Scoring直接预测每个候选Tweet的相关性,主要用于Timeline上对推文进行排序。在这个阶段,所有候选对象都被平等对待,而不考虑它来自哪个候选对象。
Ranking是通过一个约4800万参数的 神经网络得到的,这个网络通过正向互动(点赞转发回复)进行优化。该Ranking机制考虑了数千个特征,并输出10个标签,以给出每个Tweet的得分,每一个标签代表和一种互动的可能性。通过这些得到排序Tweets。

启发式算法、过滤器以及Product特征

在Ranking阶段后,应用启发式算法、过滤器来实现各种

  • 可见性过滤:基于内容与偏好过滤推文。删除mute及block的推文。
  • 作者复杂度:避免多个来自相同作者的推文。
  • 内容平衡度:确保提供相对平衡的In-Network以及Out-of-Netwokr推文。
  • 基于反馈的疲劳:降低有过负反馈推文的Score。
  • 社交证明:确保Out-of-Network推文是你关注用户互动过或者关注的作者。
  • 会话:通过将回复与原始推文绑定在一起,以提供更多上下文。
  • 编辑过的推文:确定当前设备上的tweet是否过时,并发送指令将其替换为编辑过的版本。

Mixing and Serving

到这一步,就有推文了。作为最后一步,系统需要将其他非推文的内容(例如广告,关注推荐,以及新用户提示)与推文内容混合在一起,返回到用户设备展示。
上述流程每天运行50亿次,平均1.5秒以下。单个流程执行需要220秒的CPU时间,几乎是你在应用程序上感知到的延迟的150倍。

参考文献

https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm
https://github.com/twitter/the-algorithm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值