Logo
Section 1 / 3

问题陈述与指标

了解构建信息流排序系统的问题描述及相关评估指标。

导入

问题陈述与指标

了解构建信息流排序系统的问题描述及相关评估指标。

LinkedIn 动态排序

1. 问题描述

设计一个个性化的 LinkedIn 动态(feed)系统,以最大化用户的长期参与度。衡量参与度的一种方式是用户活跃频率,即每个用户的互动次数,但在实际中很难准确衡量。另一种更可行的方式是衡量点击概率或点击率(CTR)。

在 LinkedIn 的动态流中,主要有五种活动类型:

  • 建立人脉(Connections)
  • 信息分享(Informational)
  • 个人资料更新(Profile)
  • 观点表达(Opinion)
  • 站内特定行为(Site-specific)

直观来看,不同类型的活动具有显著不同的 CTR(点击率)。这一点在我们构建模型和生成训练数据时至关重要。

类别示例
人脉建立用户 A 关注用户 B 或公司,用户加入某个群组
信息分享用户或公司发布文章、图片、消息等
个人资料用户更新头像、职位变动等个人信息
观点表达用户对文章、图片、职位变更等内容点赞或评论
站内特定用户为他人技能点赞推荐等行为

2. 指标设计与需求

指标

离线指标

  • 单条动态的点击率(CTR)定义为该动态获得的点击次数除以展示次数。

CTR=number_of_clicksnumber_of_shown_timesCTR = \frac{number\_of\_clicks}{number\_of\_shown\_times}

  • 最大化#key# CTR:点击率 #key# 可形式化为训练一个有监督的二分类模型。对于离线评估,我们采用归一化交叉熵以及#key# AUC:曲线下面积 #key#作为主要指标。

  • 归一化交叉熵 #key#(NCE):NCE 是预测对数损失除以背景点击率下的交叉熵,#key# 能够降低模型对整体 #key# CTR:点击率 #key# 的敏感性。

NCE=−1N∑i=1n(1+yi2log(pi))+1−yi2log(1−pi))−(p∗log(p)+(1−p)∗log(1−p))NCE = \frac{-\frac{1}{N} \sum_{i=1}^n (\frac{1+y_i}{2} log(p_i)) + \frac{1-y_i}{2}log(1-p_i))} {-(p*log(p) +(1-p)*log(1-p))}

在线指标

  • 对于非平稳数据,离线指标通常不能很好地反映真实性能。在线指标需要体现模型上线后用户的实际参与程度,例如 点击率(点击数与动态展示总数之比)。

需求

训练阶段

  • 训练过程中需处理海量数据,理想情况下应在分布式环境中进行训练。在社交网络场景下,在线数据分布常与离线训练数据存在偏差。解决此问题的一种方法是每天多次增量式地重新训练模型。
  • 个性化支持:由于不同用户浏览动态的偏好和习惯差异较大,系统必须支持高度个性化。
  • 数据时效性:避免在用户首页重复推送相同内容。

推理阶段

  • 可扩展性:用户活动量巨大,LinkedIn 系统需支持约 3 亿用户。
  • 延迟要求:当用户访问 LinkedIn 时,多个流水线和服务会从不同来源拉取数据,并送入排序模型。整个流程需控制在 200ms 内完成,因此动态排序服务的响应时间必须在 50ms 以内。
  • 数据时效性:排序系统必须清楚用户是否已看过某条动态,否则重复展示会影响用户体验。因此数据流水线必须高效快速。

总结

类型目标要求
指标合理的归一化交叉熵
训练高吞吐量,支持每日多次重训
支持高度个性化
推理延迟控制在 100ms 到 200ms 之间
保证数据新鲜度,避免重复展示相同动态

视频推荐

信息流排序模型