Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)

马斯克最近开源了部分 Twitter的代码,主要有两个仓库,

  • main repo(https://github.com/twitter/the-algorithm/)
  • ml repo(https://github.com/twitter/the-algorithm-ml)
  • 官方介绍:https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm

此次发布的大部分代码是推荐算法,包括给用户在时间线上推文的机制等等。并且看起来这个github会持续更新,本篇文章也尝试理一下这部分的推荐机制。

时间线推文(For You timeline)的整体框架如下图所示,
Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)_第1张图片
其主要分为三个模块:

  • DATA。数据部分主要是三大块:用户、推文、社交网络。
  • FEATRUE。特征部分除了计算用户和推文的特征外,社交图中的社区发现特征等十分重要,另外还有一些信用和安全的特征。
  • HOME MIXER。执行推荐的整个服务,基于scala,执行推文召回、粗/精排序、重/混排

最后实现Timeline、Who to follow、Ads的三个任务,即给用户推文、推用户、推广告

下面分别简要介绍一下各个模块。

DATA
在推特这种社交属性明显的场景中,数据几乎就是由用户之间的互动、用户和推文之间的互动所构成的。因此DATA部分分为Follow graph、Tweet engagement、User data。

  • Follow graph。社交图,也是推特场景中十分重要的数据。
  • Tweet engagement。Engagement单词的本意是「约定、婚约」,在行销领域中常被用于表示企业品牌、消费者和企业之间的关系,延伸到社交平台中的含义变为「互动」。如facebook中的互动主要包括:获赞、评论、分享、点击次数等。而在twitter中主要是点击、转发、点赞和关注等。
  • User data。用户画像,包含用户的一些基础数据。

Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)_第2张图片

FEATRUES
FEATRUES指特征工程,包括embedding嵌入、社交图特征如聚类和社区发现、用户信用和违规检测等,这些特征后续可以用于召回、排序、安全等等具体模块(具体可见下一节的HOME MIXER)。

特征主要分为:GraphJet、SimClusters、TwHIN、RealGraph、TweepGred、Trust&Safety。

  • 社交特征。GraphJet是社交图特征。通过分析用户已经关注的人或具有相似兴趣的人,如关注的人所浏览的内容,即社交图中的二跳关系U2U2I。因此为了实现高效动态图构造和游走,Twitter内部自研了GraphJet图引擎(VLDB 2016)。

  • 嵌入特征。目标得到user embedding和item embedding,主要分为稀疏嵌入和稠密嵌入两种,前者通过聚类、后者基于图学习。具体是两种算法:

    • SimClusters(稀疏),做社区检测和稀疏嵌入,如上图所示。其根据流行度和用户行为将推文、用户划分到不同空间(聚类),发表于KDD 2020,共有14.5w个社区、每3周更新一次。
    • TwHIN(稠密),基于图学习做稠密嵌入,如下图所示。该异构图包括四种类型的实体(user、tweet、advertiser、ad),和七种不同的互动关系(follows、authors、favorites、replies、retweets、promotes、clicks),通过该异构图得到的稠密特征可以在具体模块中负责图召回、排序等。
      Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)_第3张图片
  • RealGraph用于偏好预测,主要进行边预测,即用户是否互动。这个特征主要用于粗排模块中,作为LR粗排的一个辅助,具体在粗排模型中进行介绍。

  • TweepGred用于信用预测,基于pagerank评价用户的声誉。

  • Trust&Safety用于检测不可信和不安全等违规内容。

Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)_第4张图片

HOME MIXER
HOME MIXER是推特推荐的核心服务(Scala框架),其分为Candidate Source、Heavy Ranker、Heuristics & Filtering三个大块(分别对应召回、粗/精排、重/混排),其中每一小块内有多种小组件,如上图所示。

Candidate Source(即召回)。目的是从不同的源(量级亿万)召回一些最新、质量高的推文,主要是利用社交图召回,有两个召回路,一路是已经关注的社交圈(in-network),和待探索的社交圈(out-of-network),理论比例是各50%出现在用户的时间流推文中,实际上这个比例会根据用户的兴趣而适配。

召回模块的各小组件主要有如下,其中Search Index和UTEG是社交图内的,CR Mixer和FRS是社交图网络外的内容。

  • Search Index (in-network)。使用Real Graph(用户是否互动),Trust&Safety(是否安全),TweepGred(是否可信)的特征。基于推文搜索系统 (Earlybird) 查找某个用户已经过关注人的所有推文。
  • UTEG (in-network)。UTEG是user-tweet-entity-graph的缩写,使用GraphJet特征(社交图特征)做协同过滤进行推文。
  • CR Mixer (out-of-network)。用于社交网络外的内容召回,使用SimClusters、TwHIN、Trust&Safety和GraphJet特征,可以看到都是社区检测的相关特征。
  • FRS (out-of-network)。也用于社交网络外的内容召回,FRS是follow-recommendation-service的缩写,因此它是一个给用户推荐关注的服务(Who-To-Follow ),使用GraphJet、RealGraph、SimClusters等社区发现的特征。

Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)_第5张图片

Heavy Ranker(即粗/精排)。Candidate Source中的两路召回in-network、out-network得到的推文,会先进粗排再进精排。

负责粗排有两个模型,第一个是LR模型,预测用户和推文有互动的概率,如上图所示,具体特征有

  • search context features。搜索上下文时间,包括用户语言,时间等等。
  • tweet data。推文的特征,包括推文所用语言,用户id等。
  • static features。评价推文的静态文本质量,如是否有url等等。
  • realtime features。实时推文被转发、回复、关注等等。
  • user table features。用户的信誉、粉丝数目等等。

不同特征会有不同的权重,如点击的权重为1,点赞的权重为2等,如下表所示。

INDEX_BY_LABEL = {
  "is_clicked": 1,
  "is_favorited": 2,
  "is_open_linked": 3,
  "is_photo_expanded": 4,
  "is_profile_clicked": 5,
  "is_replied": 6,
  "is_retweeted": 7,
  "is_video_playback_50": 8
}

第二个粗排模型是基于RealGraph: User Interaction Prediction at Twitter,如上图所示,本质是个链接预测任务,去预测用户和用户交互的概率。包括图构成、模型训练和应用。

  • Graph Generation。RealGraph是一个有向带权同构图,节点是用户、边是用户与用户的交互关系(follow graph、addressbook、interaction data)。
  • Model Learning。基于边特征,仍然使用使用逻辑回归模型来训练。
  • Application。预测用户之间的交互概率,交互概率越高,就会推该用户更多的推文。

过粗排模型后,两路召回会各自排出750条推文,然后将共1500的数量进精排。

Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)_第6张图片
精排模型来自新浪KDD 2021,MaskNet: Introducing Feature-Wise Multiplication to CTR Ranking Models by Instance-Guided Mask,如上图所示。主要提出了一种instance-guided mask方法将全局上下文信息进行动态融入。首先,所有输入的特征会被concat在一起, V e m b = c o n c a t ( e 1 , e 2 , … , e i , … , e f ) V_{emb}=concat(e_1,e_2,…,e_i,…,e_f) Vemb=concat(e1,e2,,ei,,ef)为了充分利用全局上下文,Instance-Guided Mask使用两层FC来投影,
V m a s k = W d 2 ( W d 1 V e m b + β d 1 ) + β d 2 V_{mask}=W_{d2}(W_{d1}V_{emb}+\beta_{d1})+\beta_{d2} Vmask=Wd2(Wd1Vemb+βd1)+βd2再利用element-wise product来融合全局上下文信息, V m a s k e d E M B = V m a s k ⊙ V e m b V_{maskedEMB}=V_{mask}\odot V_{emb} VmaskedEMB=VmaskVemb V m a s k e d H I D = V m a s k ⊙ V h i d d e n V_{maskedHID}=V_{mask}\odot V_{hidden} VmaskedHID=VmaskVhidden所以其实instance-guided mask可以被看作为一种gate,用于可以加强某些特征,减弱某些噪声对模型的影响。最后以多个这种MaskBlock作为基本单元,串行MaskBlock或者并行MaskBlock得到MaskNet。

而Twitter所用的MaskNet网络参数48M,特征6k,一个多目标模型,目标数量涵盖包括互动、时长和画风等10个方面,如下:

  • “recap.engagement.is_favorited”:是否喜欢推文
  • “recap.engagement.is_good_clicked_convo_desc_favorited_or_replied”:是否点击进推文并回复或点赞
  • “recap.engagement.is_good_clicked_convo_desc_v2”:是否点击进推文并停留至少 2 分钟
  • “recap.engagement.is_negative_feedback_v2”:是否做出负面反馈(屏蔽或静音推文)
  • “recap.engagement.is_profile_clicked_and_profile_engaged”:是否打开作者的资料
  • “recap.engagement.is_replied”:是否回复
  • “recap.engagement.is_replied_reply_engaged_by_author”:回复的推文被原文作者回复
  • “recap.engagement.is_report_tweet_clicked”:是否举报推文
  • “recap.engagement.is_retweeted”:是否转发
  • “recap.engagement.is_shared”:是否分享
  • “recap.engagement.is_tweet_detail_dwelled_15_sec”:是否停留超过15s
  • “recap.engagement.is_video_playback_50”:是否观看至少一半视频

Heuristics & Filtering(即重/混排)。这一部分主要设计一些启发式的过滤策略(重排),和混排推文、推人、推广告等下端应用。

  • Visibility Filtering: 可见性过滤,即屏蔽一些推文或者讨厌用户的推文。
  • Author Diversity: 作者多样性,避免来自同一作者的太多连续推文。
  • Content Balance: 内容平衡,上文中在社交圈和不在社交圈中的推文占比。
  • Feedback-based Fatigue: 针对用户提供的负面反馈,制定对应策略降低某些推文的分数。
  • Social Proof: 排除与推文没有二级关联的社交圈外的推文,即确保推文来自关注的人与推文互动、或关注推文的作者们。
  • Conversations: 通过将回复与原始推文串连在一起,为回复提供更多上下文展示。
  • Edited Tweets: 更新检测,确定当前设备上的推文是否过时,并发送指令以将其替换为编辑后的版本。

混排是最后一步,系统会将推文与其他非推文内容(如推广告、推关注人)混合在一起,然后再这些内容将返回到设备上进行显示。 上面的流程每天运行大约 50 亿次,平均完成时间不到 1.5 秒。单个管道执行需要 220 秒的 CPU 时间,几乎是在应用程序上看到的延迟的 150 倍。

你可能感兴趣的:(推荐系统,深度学习,twitter,开源,推荐系统,召回,排序)