菜单

特征提取

相关源文件

目的与范围

本文档详细介绍了 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

特征补充器实现

特征补充器实现 QueryFeatureHydratorCandidateFeatureHydrator 接口。它们指定要补充哪些特征,并提供填充这些特征的实现。

QueryFeatureHydrator 示例

RequestQueryFeatureHydrator 负责补充与用户请求相关的特征。

来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/feature_hydrator/RequestQueryFeatureHydrator.scala32-120

RequestQueryFeatureHydrator 填充请求相关特征,例如:

  • 请求类型(初始、更新、更早)
  • 设备上下文(前台、启动、轮询)
  • 时间戳和时区信息
  • 用户身份识别(查看者 ID,访客 ID)

它从查询对象中提取这些信息,并将其添加到传递给后续管道阶段的 FeatureMap 中。

来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/feature_hydrator/RequestQueryFeatureHydrator.scala74-119

特征数据流

特征补充过程遵循以下关键步骤:

  1. 管道调用特征补充器并传递查询或候选
  2. 补充器识别所需数据并从存储库中请求
  3. 数据存储库返回请求的信息
  4. 补充器构建一个包含已填充特征的特征映射
  5. 特征映射返回给管道,供后续阶段使用

来源:home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/feature_hydrator/RequestQueryFeatureHydrator.scala74-119

特征定义与注册

特征被定义为扩展 Feature trait 或其特定版本(如 DataRecordFeature)的对象。每个特征指定:

  • 它所关联的实体(例如,TweetCandidatePipelineQuery
  • 它包含的数据类型(例如,BooleanLongOption[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 兼容,以确保它们可以直接被机器学习模型使用:

  • 特征以特定数据类型定义(例如,BoolDataRecordCompatibleDoubleDataRecordCompatible
  • 特征名称与机器学习模型所期望的名称一致(例如,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 推荐管道中的关键一步,它提供有效内容过滤和排序所需的丰富上下文数据。该系统旨在实现:

  1. 可扩展:通过创建新的特征定义和补充器来添加新特征
  2. 高性能:补充器可以批量请求并使用缓存来最小化延迟
  3. 与机器学习兼容:特征以与机器学习系统兼容的格式定义
  4. 隐私感知:跟踪个人数据类型以进行适当处理

通过用一套全面的特征丰富推文候选和查询,该系统实现了复杂的排序和过滤,从而为用户提供个性化且引人入胜的时间线。