导入
问题陈述与指标
了解构建信息流排序系统的问题描述及相关评估指标。
LinkedIn 动态排序
1. 问题描述
设计一个个性化的 LinkedIn 动态(feed)系统,以最大化用户的长期参与度。衡量参与度的一种方式是用户活跃频率,即每个用户的互动次数,但在实际中很难准确衡量。另一种更可行的方式是衡量点击概率或点击率(CTR)。
在 LinkedIn 的动态流中,主要有五种活动类型:
- 建立人脉(Connections)
- 信息分享(Informational)
- 个人资料更新(Profile)
- 观点表达(Opinion)
- 站内特定行为(Site-specific)
直观来看,不同类型的活动具有显著不同的 CTR(点击率)。这一点在我们构建模型和生成训练数据时至关重要。
| 类别 | 示例 |
|---|---|
| 人脉建立 | 用户 A 关注用户 B 或公司,用户加入某个群组 |
| 信息分享 | 用户或公司发布文章、图片、消息等 |
| 个人资料 | 用户更新头像、职位变动等个人信息 |
| 观点表达 | 用户对文章、图片、职位变更等内容点赞或评论 |
| 站内特定 | 用户为他人技能点赞推荐等行为 |
2. 指标设计与需求
指标
离线指标
- 单条动态的点击率(CTR)定义为该动态获得的点击次数除以展示次数。
-
最大化#key# CTR:点击率 #key# 可形式化为训练一个有监督的二分类模型。对于离线评估,我们采用归一化交叉熵以及#key# AUC:曲线下面积 #key#作为主要指标。
-
归一化交叉熵 #key#(NCE):NCE 是预测对数损失除以背景点击率下的交叉熵,#key# 能够降低模型对整体 #key# CTR:点击率 #key# 的敏感性。
在线指标
- 对于非平稳数据,离线指标通常不能很好地反映真实性能。在线指标需要体现模型上线后用户的实际参与程度,例如 点击率(点击数与动态展示总数之比)。
需求
训练阶段
- 训练过程中需处理海量数据,理想情况下应在分布式环境中进行训练。在社交网络场景下,在线数据分布常与离线训练数据存在偏差。解决此问题的一种方法是每天多次增量式地重新训练模型。
- 个性化支持:由于不同用户浏览动态的偏好和习惯差异较大,系统必须支持高度个性化。
- 数据时效性:避免在用户首页重复推送相同内容。
推理阶段
- 可扩展性:用户活动量巨大,LinkedIn 系统需支持约 3 亿用户。
- 延迟要求:当用户访问 LinkedIn 时,多个流水线和服务会从不同来源拉取数据,并送入排序模型。整个流程需控制在 200ms 内完成,因此动态排序服务的响应时间必须在 50ms 以内。
- 数据时效性:排序系统必须清楚用户是否已看过某条动态,否则重复展示会影响用户体验。因此数据流水线必须高效快速。
总结
| 类型 | 目标要求 |
|---|---|
| 指标 | 合理的归一化交叉熵 |
| 训练 | 高吞吐量,支持每日多次重训 |
| 支持高度个性化 | |
| 推理 | 延迟控制在 100ms 到 200ms 之间 |
| 保证数据新鲜度,避免重复展示相同动态 |