推荐系统详解(九)常见框架

本文深入探讨了信息流架构的关键模块,包括整体框架、数据模型、动态发布、信息流排序和数据管道。重点介绍了内容即Activity和关系即Connection的数据模型,以及在线层、离线层和近线层的推荐系统架构。同时,文章比较了推荐系统与搜索、广告的关系,强调了三者的协同作用和架构抽象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

典型的信息流架构是什么样的

从今天起,我们不再单独介绍推荐算法的原理,而是开始进入一个新的模块——工程篇。在工程实践的部分中,我首先介绍的内容是当今最热门的信息流架构。信息流是推荐系统应用中的当红炸子鸡,它表现形式有很多:社交网络的动态信息流、新闻阅读的图文信息流、短视频信息流等等。如果要搭建一个自己的信息流系统,它应该是怎么样的呢?今天,我就来带你一探信息流架构的究竟。

整体框架

信息流,通常也叫作 feed,这个英文词也很有意思,就是“喂”给用户的意思。传统的信息流产品知识简单按照时间排序,而被推荐系统接管后的信息流逐渐成为主流,按照兴趣排序,也叫作“兴趣 feed”。所以我们通常提到信息流,或者兴趣 feed,其实都是在说同一个话题。这里温馨提示一下:如果要搜索 feed 相关的技术文章,你应该用“Activity Stream”作为关键词去搜,而不应该只用“feed”搜索,Activity Stream 之于 feed,就好比多潘立酮之于吗丁啉,前者是行话,后者是通俗说法。要实现一个信息流,整体逻辑上是比较清楚的。可以划分为两个子问题。

1. 如何实现一个按照时间顺序排序的信息流系统?

2. 如何给信息流内容按照兴趣重排序?

我这里先给出一个整体的框架,然后再分别详谈。

这张架构图划分成几个大的模块:日志收集、内容发布、机器学习、信息流服务、监控。这里分别介绍一下:

1. 日志收集,是所有排序训练的数据来源,要收集的最核心数据就是用户在信息流上产生的行为,用于机器学习更新排序模型;

2. 内容发布,就是用推或者拉的模式把信息流的内容从源头发布到受众端;

3. 机器学习,从收集的用户行为日志中训练模型,然后为每一个用户即将收到的信息流内容提供打分服务;

4. 信息流服务,为信息流的展示前端提供 Rest API;

5. 监控,这是系统的运维标配,保证系统的安全和稳定等。

数据模型

信息流的基本数据有三个:用户(User)、内容(Activity)和关系(Connection)。用户不用说,就是区别不同用户的身份 ID,我来说一说其他的两种。

1. 内容即 Activity。

用于表达 Activity 的元素有相应的规范,叫作 Atom,你可以参考它并结合产品需求,定义出自己的信息流数据模型来。根据 Atom 规范的定义,一条 Activity 包含的元素有:Time、Actor、Verb、Object、Target、Title、Summary。下面详细解释一下这些元素。

  1. Time:即“Activity 发生的时间”。
  2. Actor:即“Activity 由谁发出的”。通常 Actor 就是用户 ID,但是我们也可以扩展到其他拟人化物体上,如关注的一个“店铺”,收藏的一部“电影”,或者用户喜欢的一个标签或者分类。也就是和用户建立连接的另一端。
  3. Verb:动词,就是连接的名字,比如“Follow”“Like”等,也可以是隐含的连接,如挖掘出的用户兴趣词和用户之间这种潜规则。
  4. Object:即动作作用到最主要的对象,只能有一个,比如一个人赞过的一张照片,店铺上新的一件商品,一个分类下一篇新的文章。
  5. Target:动作的最终目标,与 verb 有关,可以没有。它对应英语中介词 to 后接的事物,比如“John saved a movie to his wishlist”(John 保存了一部电影到清单里),这里电影就是 Object,而清单就是 Target。
  6. Title:这个是 Activity 的标题,用自然语言描述,用于展示给用户。
  7. Summary:通常是一小段 HTML 代码,是对这个 Activity 的描述,还可能包含类似缩略图这样的可视化元素,可以理解为 Activity 的视图,不是必须的。

举个例子: 2016 年 5 月 6 日 23:51:01(Time)@刑无刀(Actor) 分享了(Verb) 一条微博(Object) 给 @极客时间 (Target)。把前面这句话去掉括号后的内容就是它的 Title,Summary 暂略。除了上面的字段外,还有一个隐藏的 ID,用于唯一标识一个 Activity。社交电商 Etsy 在介绍他们的信息流系统时,还创造性地给 Activity 增加了 Owner 属性,同一个 Activity 可以属于不同的用户,相当于考虑了方向。

2. 关系即连接。

互联网产品里处处皆连接,有强有弱,好友关系、关注关系等社交是较强的连接,还有点赞、收藏、评论、浏览,这些动作都可以认为是用户和另一个对象之间建立了连接。有了连接,就有信息流的传递和发布。定义一个连接的元素有下面几种。

  1. From:连接的发起方。
  2. To:被连接方。
  3. Type/Name:就是 Atom 模型中的 Verb,即连接的类型:关注、加好友、点赞、浏览、评论,等等。
  4. Affinity:连接的强弱。

如果把建立一个连接视为一个 Activity 模型的话,From 就对应 Activity 中的 Actor,To 就对应 Activity 中的 Object。连接的发起从 From 到 To,内容的流动从 To 到 From。Connection 和 Activity 是相互加强的,这是蛋和鸡的关系:有了 Activity,就会产生 Connection,有了 Connection,就可以“喂”(feed)给你更多的 Activity。在数据存储上可以选择的工具有下面的几种:Activity 存储可以采用 MySQL、Redis、Cassandra 等;Connection 存储可以采用 MySQL;User 存储可以采用 MySQL。

动态发布

用户登录或者刷新后,信息流是怎么产生的呢?我们把动态内容出现在受众的信息流中这个过程称为 Fan-out

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值