Twitter近期开源了其推荐系统源码[1,2,3],截止现在已经接近36k star。但网上公开的文章都是blog[1]直译,很拗口,因此特地开个系列系统分享下。系列涵盖:
Twitter整体推荐系统架构:涵盖图数据挖掘、召回、精排、规则多样性重排、混排等。参考材料见[1,2]。
Twitter精排模型(Heavy Ranker):包含模型结构、特征工程、多目标建模、多目标融合等,看了下居然是出自新浪微博DLP-KDD 2021的工作,很强。参考材料见[3]。
Twitter图模型预训练表征(TwHIN embeddings):基于社交异构图对用户、推文做预训练,Twiiter自研TwHIN KDD 2022的工作。参考材料见[3]。
本篇文章主要先分享Twitter整体的推荐系统架构。
引言
Twitter场景下推荐系统问题定义:
输入:Twitter network,由推文、用户、交互行为等构成的超大规模异构图。
输出:预测你和推文或其他用户交互的概率,进行推文或用户的推荐。
整体问题和常见的推荐系统差别不大。特色的地方在于Twitter比较关注social graph的挖掘,包括图特征、图预训练、图召回模型等。
整体架构如下图,包括数据、特征工程和推荐系统服务。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
最终Feed流还会以时间线的形式由早先到最近呈现给用户推文
数据:涵盖了社交图、用户的交互行为、用户画像数据等。数据这块是Twitter 的核心资产,由用户、推文和互动构成的超大规模异构社交图。
特征工程:Twitter主要关注社交图的预训练、聚类、社区发现等,这也是Twitter的特色所在。图预训练得到的向量可以用于向量召回、精排特征等。此外,还包括一小部分安全相关的工作。
推荐系统核心服务:Home Mixer,Twitter定制的Scala框架。可以认为是算法工程。类比国内大厂用的Java、Go、C++等。由三大部分构成:
召回:Candidate Sources,从不同的推荐源获取最好的推文,类似推荐系统的召回阶段。Candidate Retrival。核心召回路是图召回。
"Candidate Sources" 提供了候选项,而 "Candidate Retrieval" 则是从这些候选项中选出最符合需求的候选项的过程。因此,选择适当的 "Candidate Sources" 对于 "Candidate Retrieval" 的效果至关重要,因为这可以影响候选项的质量和准确性。
"Candidate Retrieval" 的意思是候选项检索。这个术语通常用于搜索和推荐系统,指的是从大量数据中检索出符合特定要求的候选项,以供进一步评估和选择。例如,在推荐系统中,候选项检索可以指从用户的浏览历史、兴趣和偏好中选出候选内容,以供推荐。
粗精排:使用机器学习模型对推文进行打分排序,Twitter分为Light Ranker和Heavy Ranker。分别类比推荐系统的粗排和精排阶段。
重排/混排:应用启发式规则,例如过滤自已屏蔽用户的推文、NSFW内容和已看到的推文;保证作者多样性等;以及负责广告、推文和作者混排等。
下面会围绕召回、粗排、精排、混排展开介绍。特征部分不单独设章节,会在召回和粗排中用到的地方介绍。
召回
Twitter有很多召回数据源,为用户召回最新、最感兴趣的相关推文。
输入:推文候选池大小,hundreds of millions 亿万级别。
输出:两类召回通道:你关注的用户圈(in-network)、你未关注的用户圈(out-of-network),整体上,二者比例是55开,即召回一半你关注用户的推文、一半你未关注的用户的推文。当然,不同用户召回的配比会不一样。
In-Network召回
主召回路,也是最大的候选推文来源,目标是从你关注的作者推文中,检索出最新、你最可能感兴趣的推文给你,能贡献 50% 的推文来源。使用自研搜索引擎Earlybird[6],检索你关注的人的推文,本质是个倒排索引。只不过索引里检索到的推文要过一个Light ranker海选粗排模型进行该召回路的截断,放在下文的粗排章节中介绍。
Out-of-Network 召回
在用户关注圈子之外寻找相关的推文推荐给用户。Twitter采取了两类召回方法:
UserTweetEntityGraph (UTEG):协同过滤。通过分析你关注的人或有相似兴趣的人的行为,来预测你感兴趣的相关推文,比如,二跳关系U2U2I,为了实现高效动态图构造和游走,内部自研了GraphJet[5]图引擎,发表在VLDB 2016上。GraphJet能够高效、动态地维护一个实时交互图(real-time interaction graph),结点为用户和推文,边为实时交互行为,并实现高效地图游走。该方法大概能涵盖 15% 的推文来源。该方法得到的召回结果也要过一个Light Ranker进行海选粗排。
"二跳关系U2U2I"是指一种用户-用户-项目(User-User-Item)的关系,用于描述推荐系统中的协同过滤过程。在这个过程中,根据你关注的人或有相似兴趣的人的行为,预测你可能感兴趣的相关推文。二跳关系是指从一个用户(User)通过关注的用户(User)找到相关的推文(Item)。这种关系可以帮助推荐系统发现更加相关和有趣的内容。
例如,假设你是用户A,你关注了用户B,而用户B关注了用户C。用户C发布了一条推文,而根据用户B和C的关系,可以预测这条推文可能对你(用户A)感兴趣。这就是一个典型的用户-用户-项目(U2U2I)的二跳关系。文章来源:https://www.toymoban.com/news/detail-421295.html
Embedding Spaces:嵌入表征学习。建模更加通用的问题:你对哪些推文以及哪些作者感兴趣。表征学习目标是训练得到用户表征向量和推文表征文章来源地址https://www.toymoban.com/news/detail-421295.html
到了这里,关于手撕Twitter推荐算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!