- Xの「For You」フィードのパーソナライズされたコンテンツ推薦品質を高めるために開発された機械学習ベースの推薦システム
- フォロー中アカウント(Thunder) と 非フォローコンテンツ(Phoenix Retrieval) の2つのソースを組み合わせてフィードを構成
- すべての候補投稿を GrokベースのTransformerモデル Phoenix で評価し、最終順位を算出
- システムでは手作業で設計されたすべての特徴量と、ほとんどのヒューリスティックアルゴリズムを削除
- ユーザーの活動履歴(いいね、返信、共有)を分析して関連性のあるコンテンツを把握
システムアーキテクチャ
- Home Mixer は全体のパイプラインを調整するオーケストレーション層
- ユーザー行動履歴とフォロー情報を収集する Query Hydration 段階を含む
- 候補収集、データ補完、フィルタリング、スコアリング、最終選択まで一連の段階を管理
- gRPCベースの ScoredPostsService によりユーザーごとに並べ替えられた投稿を返す
- Thunder はインメモリストアで、Kafkaイベントストリーム を通じてリアルタイムで投稿を収集
- 元投稿、返信/再投稿、動画投稿に対するユーザー別ストアを管理
- リクエストしたユーザーがフォローしているアカウントから「In-network」の投稿候補を提供
- フォロー中アカウントの最新投稿を超低遅延で提供
- 外部データベースアクセスなしで サブミリ秒レベルの検索性能 を確保
- Phoenix は推薦の中核となるMLコンポーネントで、Retrieval と Ranking の2段階で構成
- 検索: Two-Towerモデル を使い、ユーザー特徴/エンゲージメント履歴の埋め込みと投稿埋め込みの類似度を計算してTop-K投稿を取得
- ランキング: Transformer with Candidate Isolation 構造で各候補が独立して評価されるよう設計
- ユーザーコンテキスト(エンゲージメント履歴)とCandidate投稿を入力として受け取り
- 各投稿について いいね、返信、リポスト、クリックなど複数行動の確率 を予測
- Candidate Pipeline は再利用可能な推薦パイプラインフレームワーク
Source, Hydrator, Filter, Scorer, Selector などのTraitを定義
- 並列実行とエラー処理、ロギング機能を内蔵し、拡張性と安定性を確保
動作方式
-
パイプライン段階
- 1. クエリデータの取得 : ユーザーの最近の活動履歴およびメタデータ(例: フォロー一覧)を取得
- 2. 候補発掘 : 次のソースから候補投稿(candidate post)を検索
- Thunder : フォロー中アカウント(ネットワーク内)の最近の投稿
- Phoenix Retrieval : グローバルコーパスから機械学習で発見された投稿(ネットワーク外)
- 3. 次の情報を活用して 候補抽出(Hydration) :
- 主要な投稿データ(テキスト、メディアなど)
- 投稿者情報(ユーザー名、認証状態)
- 動画の長さ(動画投稿の場合)
- サブスクリプション状態
- 4. 事前スコアフィルタ : 次の条件を満たす投稿を除外
- 重複
- 古すぎるもの
- 閲覧者本人のもの
- ブロック/ミュートされたアカウントのもの
- ミュートされたキーワードを含むもの
- 以前に見たもの、または最近配信されたもの
- 購読できないコンテンツ
- 5. スコアリング方式 : 複数のスコアラーを順次適用
- Phoenix Scorer : Phoenix Transformerモデルによる機械学習予測結果を取得
- 加重スコア計算器 : 予測結果を総合して最終的な関連性スコアを算出
- 著者多様性スコア計算器 : 多様性のため重複した著者スコアの影響を低減
- OONスコアラー : ネットワーク外コンテンツのスコアを調整
- 6. 選択 : スコア順に並べ、上位K件の候補を選択
- 7. 選択後の手順 : 候補投稿に対する最終検証
-
スコアリングとランキング
- Phoenixモデルの予測値を 加重和方式 で結合
- ポジティブな行動(いいね、共有など)は重みを高くし、ネガティブな行動(ブロック、報告など)は減点処理
-
2段階フィルタリング
- スコア計算前フィルタ: 重複、基準より古い投稿、自分の投稿、閲覧できない有料コンテンツ、すでに見たまたは配信済みの投稿、ブロックされたアカウント、ミュートされたキーワードなどを除外
- 選択後フィルタ: 削除された投稿、スパム投稿、暴力的コンテンツ、残虐な投稿、および同一会話スレッド内の複数分岐の重複を除外
中核設計原則
- 手作業による特徴量エンジニアリングを除去 し、Transformerがユーザー行動シーケンスから直接学習
- 候補の独立評価(Candidate Isolation) により一貫したスコア算出とキャッシュを容易化
- ハッシュベース埋め込み により、検索とランキングの両方で埋め込み参照に複数のハッシュ関数を使用
- 複数行動予測(Multi-Action Prediction) により、単一の「関連性」スコアではなく複数行動を予測
- モジュール型パイプラインアーキテクチャ
- パイプライン実行と監視をビジネスロジックから分離
- 独立した段階の並列実行とエラーに対する適切な処理
- 新しいソース、Hydration、フィルタ、スコアラーを容易に追加可能
ライセンス
2件のコメント
"Rust 62.9%"
트위터의 추천알고리즘을 오픈소스로 공개
これとはまた別物なんでしょうか? 週末に時間を作って読んでみようと思います...