就在今天,正如马斯克一再承诺的那样,Twitter 已将其部分源代码正式开源,其中包括在用户时间线中推荐推文的算法。截止发文时,该项目在 GitHub 已收获 24k+ 个 Star,4.2k的frok。

0cda53f9f1426d27813c1a41117fb384.png

GitHub 地址:https://github.com/twitter/the-algorithm

9edc6e4b4034bc6076dc681b8c98ac75.png

903dcc3d11fed835c023ef853c4856f5.png

前言

cc3c61cc200957f0c08addd8273ed623.png

马斯克在近日通过Twitter宣布,Twitter将于2023年3月31日开源其核心推荐算法。这一算法是决定用户时间线上推文出现顺序的重要因素。这项举措的目的是增强平台的透明度和开放性,使用户更好地了解Twitter算法的运作方式,同时也为研究人员和开发人员提供了机会,他们可以利用这些代码来开发新工具和新功能,以提升Twitter的用户体验。

a9f41a10751afd34b03685a0a8452b3a.png

关于开源的Twitter的推荐算法

222fdf9cdcfb738d05cccfe05b62c1a5.png

Twitter Recommendation Algorithm是一组服务和任务,负责构建和提供主页时间线。有关算法工作原理的介绍,请参阅我们的技术博客。

技术博客:
https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm

下图描绘了主要服务和工作之间的相互连接。

8dc20caa55fa4132f89d609e63be6dcf.png

这些是此存储库中包含的推荐算法的主要组件:

类型组件说明
功能SimClusters社区检测和稀疏嵌入到这些社区中。

TwHIN用户和推文的密集知识图谱嵌入。

trust-and-safety-models用于检测 NSFW 或滥用内容的模型。

real-graph用于预测 Twitter 用户与其他用户互动的可能性的模型。

tweepcred用于计算Twitter用户声誉的页面排名算法。

recos-injector流事件处理器,用于为基于 GraphJet 的服务构建输入流。

graph-feature-service为一对定向用户提供图形功能(例如,有多少用户 A 关注了来自用户 B 的推文)。
数据来源search-index查找网络内推文并对其进行排名。~50% 的推文来自此候选来源。

cr-mixer协调层,用于从基础计算服务中提取网络外推文候选项。

user-tweet-entity-graph维护内存中的用户到推文交互图,并根据此图的遍历查找候选项。这是建立在GraphJet 框架之上的。

follow-recommendation-service为用户提供要关注的账号建议,以及来自这些账号的推文。
排名light-ranker搜索索引用于对推文进行排名的轻度排名模型。

heavy-ranker用于对候选人推文进行排名的神经网络。用于选择时间线的主要信号之一 推文发布候选人来源。
推文混合和过滤home-mixer用于构建和服务主页时间线的主要服务。

visibility-filters负责过滤 Twitter 内容以支持法律合规性、提高产品质量、增加用户信任度、通过使用硬过滤、可见产品处理和粗粒度降级来保护收入。

timelineranker传统服务,提供来自早鸟搜索索引和 UTEG 服务的相关性评分推文。
软件框架navi高性能,机器学习模型服务,用 Rust 编写。

product-mixer用于构建内容源的软件框架。

twml基于 TensorFlow v1 构建的传统机器学习框架。

让我们探索这个系统的关键部分,大致按照它们在单个时间线请求期间被调用的顺序,从从Candidate Sources候选来源开始。

候选来源

Twitter 有几个候选源,我们用它们来为用户检索最近和相关的推文。对于每个请求,我们尝试通过这些来源从数亿推文中提取最佳的 1500 条推文。我们从您关注的人(网络内)和您不关注的人(网络外)中寻找候选人。如今,For You 时间轴平均包含 50% 的网络内推文和 50% 的网络外推文,尽管这可能因用户而异。

网内资源

网络内来源是最大的候选来源,旨在提供您关注的用户的最相关、最新的推文。它使用逻辑回归模型根据推文的相关性对您关注的推文进行有效排名。然后将热门推文发送到下一阶段。

对网络内推文进行排名的最重要组成部分是Real Graph。Real Graph 是一种预测两个用户之间参与可能性的模型。您和推文作者之间的 Real Graph 得分越高,我们将包括的他们的推文就越多。

网络内源一直是 Twitter 最近工作的主题。我们最近停止使用 Fanout Service,这是一项已有 12 年历史的服务,以前用于从每个用户的推文缓存中提供网络内推文。我们还在重新设计几年前最后一次更新和训练的逻辑回归排名模型!

网络外资源

在用户网络之外查找相关推文是一个更棘手的问题:如果您不关注作者,我们如何判断某个推文是否与您相关?Twitter 采用两种方法来解决这个问题。

社交图谱

我们的第一种方法是通过分析您关注的人或具有相似兴趣的人的参与度来估计您会发现什么是相关的。

我们遍历参与图并回答以下问题:

  • 我关注的人最近与哪些推文进行了互动?

  • 谁喜欢和我相似的推文,他们最近还喜欢什么?

我们根据这些问题的答案生成候选推文,并使用逻辑回归模型对生成的推文进行排名。这种类型的图遍历对于我们的网络外推荐至关重要;我们开发了GraphJet,这是一种图形处理引擎,可维护用户和推文之间的实时交互图,以执行这些遍历。虽然这种用于搜索 Twitter 参与度和关注网络的启发式方法已被证明是有用的(这些目前服务于大约 15% 的家庭时间线推文),但嵌入空间方法已成为网络外推文的更大来源。

嵌入空间

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

嵌入通过生成用户兴趣和推文内容的数字表示来工作。然后,我们可以计算该嵌入空间中任意两个用户、推文或用户-推文对之间的相似度。如果我们生成准确的嵌入,我们可以使用这种相似性作为相关性的替代。

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

bff7505414975760a3873e4497ec0367.png

我们可以通过查看推文在每个社区中的当前流行度来将推文嵌入到这些社区中。喜欢推文的社区用户越多,推文与该社区的关联度就越高。

caf207763bc9d0ddc455f44e6073aa3f.png

相关链接

fda2aba29fe732d65f8d7be5a9817b68.png

  • 算法主库:https://github.com/twitter/the-algorithm/

  • ML 模型库:https://github.com/twitter/the-algorithm-ml

  • 技术博客:https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm

如喜欢本文,请点击右上角,把文章分享到朋友圈
如有想了解学习的技术点,请留言给若飞安排分享

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

·END·

相关阅读:

来源:网络

版权申明:内容来源网络,仅供学习研究,版权归原创者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

END

架构师交流群

 「架构君」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。

bbf49526aa745debeaf18e67b7cf2018.jpeg

扫描添加好友邀你进架构师群,加我时注明姓名+公司+职位】

强势开源一款小程序!
2021-11-07
强力推荐一个完善的物流(WMS)管理项目(附代码)
2021-10-23
推荐一个 Spring Boot + MyBatis + Vue 音乐网站
2021-10-19
分享一套家庭理财系统(附源码)
2021-09-20
推荐一个互联网企业级别的开源支付系统
2021-09-04
推荐一套开源通用后台管理系统(附源码)
2021-08-21
一款神仙接私活儿软件,吊到不行!
2021-07-31
基于 SpringBoot 的仿豆瓣平台【源码分享】
2021-07-18
干掉 Wordpress!这个开源建站神器有点吊!
2021-06-18
从朋友那里搞了 20 个实战项目,速领!
2021-06-12

1425b59e4131a7dfb6bb4cef68dac95d.png

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐