看完Twitter的Blog<Twitter's Recommendation Algorithm>,第一直观的感受是推荐框架确实通用,甚至你会发现有些部分是居然是用的weibo的paper... ,至于代码部分的详细解读,有兴趣的同学可以通过下面的链接直接去看一下。
Repo:
Part REC:https://github.com/twitter/the-algorithm
Part ML:GitHub - twitter/the-algorithm-ml
Twitter的推荐系统是什么样的?
Twitter的推荐系统由三大部分构成:
- Candidate Sources:从不同的推荐源获取最好的推文。
- Rank:使用机器学习模型对每条推文进行排名。
- 后处理逻辑:应用heuristics和filters,例如过滤来自已屏蔽用户的推文、NSFW内容和已看到的推文。
负责构建和提供推荐时间轴的服务被称为“Home Mixer”。
“Home Mixer”建立在“Product Mixer”之上,这是定制的Scala框架,有助于构建内容的动态流。
这项服务作为推荐系统主干,连接不同的候选源、评分函数、heuristics和filters。
Candidate Sources
Twitter使用多个候选源来为用户检索最近的推文或者相关的推文。
对于每个请求,推特尝试通过这些源从数亿条推文池中提取最佳的1500条。
从您关注的人(内部网络)和不关注的人(外部网络)中寻找候选人。
如今,“为您推荐”Home Mixer平均由50%的内部网络推文和50%的外部网络推文组成(尽管这可能因用户而异)。
In-Network Source
内部网络资源是最大的候选来源,旨在提供关注的用户最相关、最新的推文。
它使用逻辑回归模型(你没看错,是LR,-_-)高效地对关注的人的推文进行排名,以其相关性为基础。然后将排名最高的推文发送到下一阶段。
排名内部网络推文最重要的组成部分是Real Graph。
Real Graph是一种模型,用于预测两个用户之间的互动可能性。用户和推文作者之间的Real Graph分数越高,就会包括更多他们的推文。
内部网络来源最近成为Twitter的研究对象。最近Twitter停止使用Fanout服务,这是一个12年前用来从每个用户的推文缓存中提供内部网络推文的服务。
Out-of-Network Sources
在用户网络之外寻找相关的推文是一个棘手的问题。
因为如果你不关注作者,怎么知道某条推文是否与你相关?
为此,Twitter采取了两种方法来解决这个问题。
一个是社交图(Social Graph)。
这个方法是通过分析你关注的人或有相似兴趣的人的活动,来估计你会发现什么是相关的。
主要遍历参与的图,并按照以下步骤回答以下问题:
- 我关注的人最近在Twitter上发了什么消息?
- 谁和我一样喜欢类似的推文,他们最近还喜欢什么?
团队根据这些问题的答案生成候选推文,并使用Logit模型对产生的推文进行排名。
这种类型的图形遍历对于外部网络推荐是必不可少的;团队开发了 GraphJet,一个维护用户和推文之间实时交互图的图形处理引擎,来执行这些遍历。
虽然这种搜索Twitter参与和关注网络的启发式方法已经被证明是有用的,但嵌入式空间方法已经成为外部网络推文的更大来源。
第二个是嵌入空间(Embedding Spaces)。
嵌入式空间方法旨在回答一个关于内容相似性的更普遍的问题——什么推文和用户与我的兴趣相似?
Embeddings通过生成用户兴趣和推文内容的数字表示来工作。然后可以计算这个嵌入空间中任意两个用户之间的相似度,推文或 用户-推文 对。
只要生成准确的embedding,就可以使用这种相似性作为相关性的替代。
Twitter 最有用的嵌入空间之一是 SimClusters。
SimClusters 使用自定义矩阵分解算法发现由一群有影响力的用户锚定的社区(有14.5万个社区,每三周更新一次)。
用户和推文在社区空间中表示,并且可以属于多个社区。社区的规模从个人朋友群的几千名用户到新闻或流行文化的数亿用户不等:
Ranking
大约1500相关候选。评分直接预测每个候选推文的相关性,在这个阶段,所有候选推文权重一致,而不考虑其来源。
排序是通过一个48M参数的神经网络实现的,该网络在推特互动数据上不断训练,以优化积极参与等行为的权重(例如点赞、转发和回复)。考虑了数千个特征,并输出十个标签,为每条推文打分,其中每个标签代表参与的概率,根据这些分数对推特进行排序。
Heuristics, Filters, and Product Features
在排序阶段之后,应用启发式和过滤器来实现各种产品功能。这些功能共同作用,实现推荐内容的平衡和多样化。
- Visibility Filtering: Filter out Tweets based on their content and your preferences. For instance, remove Tweets from accounts you block or mute.
- Author Diversity: Avoid too many consecutive Tweets from a single author.
- Content Balance: Ensure we are delivering a fair balance of In-Network and Out-of-Network Tweets.
- Feedback-based Fatigue: Lower the score of certain Tweets if the viewer has provided negative feedback around it.
- Social Proof: Exclude Out-of-Network Tweets without a second degree connection to the Tweet as a quality safeguard. In other words, ensure someone you follow engaged with the Tweet or follows the Tweet’s author.
- Conversations: Provide more context to a Reply by threading it together with the original Tweet.
- Edited Tweets: Determine if the Tweets currently on a device are stale, and send instructions to replace them with the edited versions.
Mixing and Serving
此时,Home Mixer已经准备好了一组推文,可以发送到用户设备上。作为该过程的最后一步,系统将推文与其他非推文内容混合在一起,如广告、关注建议和登录提示等,这些内容将返回到用户设备中显示。
上述Pipeline每天运行约50亿次,平均在1.5秒内完成。单个Pipeline执行需要220秒的CPU时间。
大规模专有网络图
像 Twitter 这样的社交网络就是超大图的实例,节点是用户和推文的模型,边则是回复、转发和喜欢等互动的模型。
Twitter 的核心商业价值有很大一部分来自于这个庞大的由用户、推文和互动构成的基础数据集。用户登录、查看推文、点击推文、查看用户资料、发布推文、回复推文等,在 Twitter 上的每一次互动都会被记录到内部数据库。
从 Twitter 的公共API 获得的数据只是 Twitter 内部跟踪数据中的一小部分。这一点很重要,因为 Twitter 的内部推荐算法可以获得所有这些丰富的互动数据,而任何开源工作都可能仅能使用一个有限的数据集。
排名信息
2017 年,Twitter 的研究人员曾在一篇名为《在 Twitter 时间线上使用大规模深度学习》的文章中提到,为了预测某条推文是否会吸引用户,Twitter 的模型考虑了以下几个要点:
- 推文本身:它的新近度,存在的媒体卡(图像或视频),总互动数(如转发和喜欢的数量)。
- 推文作者:用户过去与这个作者的互动,用户与他们联系的强度,用户关系的起源。
- 用户:用户在过去觉得有吸引力的推文,用户使用推特的频率和程度。研究人员表示,“我们考虑的特征及其各种互动的清单在不断增加,为我们的模型提供了更多存在细微差别的行为模式。”
这些 2017 年的排名信息描述可能有点过时,但这些核心信息在今天仍然与 Twitter 高度相关。因为这份清单很可能已经推广到几十甚至几百个重点机器学习模型,它们支撑着 Twitter 的算法。
一个深度学习模型的可视化,用于确定一个用户在未来关注另一个用户的可能性。这个模型代表了 Twitter 内部各种推荐系统的一小部分。
Travis Fischer 认为,将 Twitter 推荐算法开源难免会遇到一些重大的工程挑战。
比如,Twitter 的网络图非常庞大,包含数以亿计的节点和数十亿的边。Twitter 的实时性带来了另一个独特的挑战:用户希望 Twitter 尽可能地接近实时,这意味着底层网络图是高度动态的,延迟成为一个真实的用户体验问题。此外,还有可靠性、安全与隐私方面的挑战。
但无论如何,马斯克还是兑现了他的开源承诺,Twitter 推荐算法开源也标志着,这类平台的透明度正在迈出关键一步。
参考资料
Repo:
https://blog.twitter.com/engineering/en_us/topics/open-source
https://www.theverge.com/2023/3/31/