本文档详细介绍了 Twitter 推荐算法中的特征补充系统,该系统负责填充用于用户时间线内容过滤、排序和展示的推文和查询特征。特征补充是候选生成和排序之间的一个关键步骤,它为排序模型提供做出明智决策所需的丰富数据。
有关这些特征如何在排序中使用的信息,请参阅排序系统。
特征补充是从各种来源获取额外数据来丰富候选(如推文)和查询的过程。这些特征成为机器学习模型的输入,用于确定向用户展示哪些内容以及以何种顺序展示。
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala1-326 home-mixer/server/src/main/scala/com/twitter/home_mixer/param/HomeMixerInjectionNames.scala1-47
特征补充系统处理三种主要类型的特征:
这些特征与推文候选相关联,包括推文内容、作者、互动指标和上下文信号的信息。
| 功能类别 | 示例 | 目的 |
|---|---|---|
| 作者相关 | AuthorIdFeature, AuthorIsBlueVerifiedFeature | 识别推文作者及其属性 |
| 内容相关 | TweetTextFeature, HasImageFeature, TweetLanguageFeature | 描述推文内容 |
| 互动相关 | FavoritedByCountFeature, RetweetedByCountFeature | 捕捉用户如何与推文互动 |
| 上下文相关 | SocialContextFeature, TopicIdSocialContextFeature | 提供主题或社交关系等相关性信号 |
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala40-134 home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala135-202
这些特征表示有关用户请求和上下文的信息,包括设备信息、请求类型和用户状态。
| 功能类别 | 示例 | 目的 |
|---|---|---|
| 请求相关 | GetInitialFeature, GetNewerFeature, PollingFeature | 识别时间线请求的类型 |
| 用户相关 | ViewerIdFeature, UserStateFeature, UserFollowingCountFeature | 描述发起请求的用户 |
| 设备/客户端相关 | ClientIdFeature, DeviceLanguageFeature, IsForegroundRequestFeature | 捕获设备和客户端上下文 |
| 时间相关 | TimestampFeature, TimestampGMTHourFeature | 提供基于时间的上下文 |
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala206-298 home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/feature_hydrator/RequestQueryFeatureHydrator.scala36-56
这些特征描述了最终时间线展示的各个方面,如对话模块和社交证明。
| 功能类别 | 示例 | 目的 |
|---|---|---|
| 时间线结构 | ServedSizeFeature, ServedInConversationModuleFeature | 告知时间线构成和布局 |
| 展示上下文 | IsRandomTweetAboveFeature, ConversationModuleHasGapFeature | 提供推文展示的上下文 |
| 社交证明 | SGSValidLikedByUserIdsFeature, PerspectiveFilteredLikedByUserIdsFeature | 用于显示社交上下文的信息 |
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala301-325
特征补充是通过一系列特征补充器实现的,每个补充器负责从各种数据源填充特定的特征集。
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/feature_hydrator/RequestQueryFeatureHydrator.scala1-121 home-mixer/server/src/main/scala/com/twitter/home_mixer/param/HomeMixerInjectionNames.scala1-47
特征补充器实现 QueryFeatureHydrator 或 CandidateFeatureHydrator 接口。它们指定要补充哪些特征,并提供填充这些特征的实现。
RequestQueryFeatureHydrator 负责补充与用户请求相关的特征。
RequestQueryFeatureHydrator 填充请求相关特征,例如:
它从查询对象中提取这些信息,并将其添加到传递给后续管道阶段的 FeatureMap 中。
特征补充过程遵循以下关键步骤:
特征被定义为扩展 Feature trait 或其特定版本(如 DataRecordFeature)的对象。每个特征指定:
TweetCandidate、PipelineQuery)Boolean、Long、Option[String])来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala49-54 home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala201-203
特征补充在为机器学习模型准备数据方面起着关键作用。许多特征都定义为与 DataRecordFeature 兼容,以确保它们可以直接被机器学习模型使用:
BoolDataRecordCompatible、DoubleDataRecordCompatible)SharedFeatures.AUTHOR_ID)这种兼容性确保在补充过程中填充的特征可以无缝地传递给后续管道阶段的排序模型。
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala49-54 home-mixer/server/src/main/scala/com/twitter/home_mixer/model/HomeFeatures.scala90-96
特征补充器从各种存储库和缓存中检索数据,这些数据通过依赖注入方式注入。常见的存储库包括:
| 仓库 | 目的 |
|---|---|
TweetypieContentRepository | 提供推文内容和元数据 |
AuthorFeatureRepository | 提供推文作者信息 |
RealGraphFeatureRepository | 提供社交图谱关系 |
UserEngagementCache | 提供用户互动指标 |
EarlybirdRepository | 提供推文的搜索索引特征 |
这些存储库抽象了底层数据源,并为特征补充器提供了统一的接口以检索所需数据。
来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/param/HomeMixerInjectionNames.scala4-46
特征补充是 Twitter 推荐管道中的关键一步,它提供有效内容过滤和排序所需的丰富上下文数据。该系统旨在实现:
通过用一套全面的特征丰富推文候选和查询,该系统实现了复杂的排序和过滤,从而为用户提供个性化且引人入胜的时间线。