低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

推特的个性化推送算法

2017 年 7 月 02 日

来自推特的软件工程师 Gary Lam 在 2017 London QCon 上谈论了个性化推送功能。他总体概览了推特的个性化及推荐算法,并解释了这些算法是如何在推特的大数据量及二元特征下进行大规模运行的。

个性化分列(personalized fanout)是指只将推送发给感兴趣的用户。Lam 给出的例子是埃隆马斯克所发表的关于电动汽车的推文。不是他所有的粉丝都收到了该推送通知,而只有那些对电动汽车感兴趣的粉丝才会收到。

Lam 解释到,个性化分列算法是通过跟踪两个指标来实现的:

1. 最近参与的对象:这是指用户对特定对象,如话题或用户,进行的点赞、回复及其他用户交互操作。Lam 强调这些数据需要保证实时性,因为用户往往只会对他们最近互动过的内容感兴趣。

2. 首要关注:虽然一个用户可能关注数百名其他用户,但其中只有某几个是其首要关注的,这些用户发送的内容才是其最感兴趣的。

当使用这个算法时,首先要做的是从推文中提炼出各个对象。然后,对每位关注者,查看最近是否有与该对象产生过互动,再检查该推文是否来自于其首要关注的对象。如果同时满足这两个条件,该用户就会收到这条通知,因为从中可以推测该用户对这条推文感兴趣。

Lam 解释到,该个性化分列算法的主要问题是其不对称性。如果一个用户被数以百万用户所关注,那么每当他们发布一条推文,这个算法就必须对每个关注者进行计算。而另一方面,有的用户却可能只有几位关注者。

Lam 解释了他们是如何利用数据协同定位来解决这个问题的。用户群首先被进行了分片处理,他们最近的互动以及首要关注会被和分片保存在一起。这就意味着在算法运行时,不会有网络访问发生,这大大减少了延迟。

Lam 指出,鉴于最近互动的数据本身是有时效性的,计算出的数据并不需要保存很久,所以可以将它们保存在内存中。

在数据分片时,数据的重建被尽早地大幅优化,以确保用户可以收到他们的通知。这是通过在队列中重放前一天所有的推文来进行的,然后将消息打包并删除冗余数据,再将它们传入到分片中。这个过程被称为“涓涓细流(slim firehose)”。

同时通过用户之间的历史交互,利用离线机器学习算法计算出首要的关注目标。由于这些是预先计算好的,它们可以在启动时被复制到分片所在的硬盘上,并在需要的时候进行延迟加载。

Lam 也谈到了推荐算法。这与个性化分列算法略有不同。在这种情况下,用户不需要是数据来源的关注者,只要他们对内容存在潜在的兴趣。

在这种情况下,每个用户都会被循环到,而不只是事件数据中的部分用户。Lam 解释说,这样可以更方便地利用资源,因为可以方便地预测用户的数量,从而执行加载操作。此过程会触发以下几个步骤:

1. 过滤:如果用户对该通知不感兴趣或没有与通知进行过交互,就不会再向该用户进行推送。
2. 候选来源:潜在用户账号被传送以便进行通知。其中使用到两个技术, GraphJet ,推特的实时图处理库,和 Scalding ,推特的离线 map-reduce 算法。
3. 排名:利用机器学习来为用户挑选最佳通知。
4. 推送:将通知推送到用户的设备上。

演讲的详细资料可以在线获得。其中还包含了Saurabh Pathak 关于实时发送通知的演讲,这在另一篇文章中做了总结。

查看英文原文 Personalized Notifications at Twitter

2017 年 7 月 02 日 19:002749
用户头像

发布了 41 篇内容, 共 10.7 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

Java程序员面试15家公司收到15份offer,月薪35K全靠这Java面试小抄(2021版)开源分享

云流

Java 程序员 面试

小争哥的算法打卡1群-算法题打卡

黄敏

算法

Redis核心技术与实战 学习笔记 02

escray

redis 极客时间 28天写作 3月日更 Redis 核心技术与实战

忙碌的背后-思维习惯

小诚信驿站

自我思考 刘晓成 小诚信驿站 28天写作

最新阿里Java岗位四面面经分享:并发+JVM+事务+集群+秒杀架构+数据库等

Java成神之路

Java 程序员 架构 面试 编程语言

五个问题,三大策略,手把手教你定制App性能监控方案

友盟全域数据

监控 应用性能 监控工具 告警设置 质量监控

校招开始,你做好【终身成长】的准备了吗?

闲鱼技术

mysql5.7安装教程

xiezhr

MySQL 安装 MySQL 运维

第七.产品规划与功能规划

让我思考一会儿

ICASSP2021 M2VoC挑战赛报告会:高分队伍及评审分享回顾(附PPT)

爱奇艺技术产品团队

如何跨单元格绘制斜线

IT蜗壳-Tango

3月日更 IT蜗壳教学

防火墙双机热备

思维转换 - 更好的认识世界

石云升

程序员成长 思维模型 28天写作 3月日更

人脸识别无间道

脑极体

2021金三银四必备的1000道Java面试题以及答案整理【最新版】

云流

Java 编程 程序员 面试

篮下有球-用例2

z

React在函数组件中使用Ant-Design的Form(form组件和按钮属于不同的组件)

依旧廖凯

28天挑战 3月日更

JSON类型使用示例

在即

28天写作 28天挑战 3月日更

快手、饿了么、小红书等14家互联网企业面经分享,感谢60多位面试官让我更加认清我自己

Java成神之路

Java 程序员 架构 面试 编程语言

Nginx 一个高性能的HTTP和反向代理服务器

赖猫

nginx 后端 后端开发 Linux服务器

腾讯极客技术挑战赛-writeup

5G与房地产

ES_her0

28天写作 3月日更

PHP-Trait解析与使用

一个大红包

3月日更

产品经理面试常见问题总结1

lenka

3月日更

Timewait是什么

我是程序员小贱

3月日更

(28DW-S8-Day26) 研发流程重整

mtfelix

28天写作

翻译:《实用的Python编程》06_03_Producers_consumers

codists

Python

PC五年,华为如水

脑极体

再迎巅峰!阿里内部Java编程思想全栈技术实录Github上线7天已经星标89K!

程序员小毕

Java 编程 程序员 架构 面试

吉他扒谱该怎么做?分享一款超好用的扒谱工具!

奈奈的杂社

论如何快速吃透算法?186道高阶算法题+学习资料程序员面试必备

比伯

Java 编程 架构 面试 程序人生

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

推特的个性化推送算法-InfoQ