本文へ移動
X解体新書
第3章第二部13分

四つの棚

投稿はどこから集められるのか。フォロー中・フォロー外・類似発掘、そして新しく入った人気投稿の4経路。

この章で分かること

  • 投稿が候補に入る4つの経路を区別できる
  • 各経路に入るための条件が分かる
  • いいね1件・8件・32件の意味を正しく読める

点数の話の前に、そもそも候補に入らなければ何も始まりません。公開既定のFor Youでは、4か所から投稿を集めます。それぞれ入る条件が違います。

棚A ─ フォロー中の投稿の棚(Thunder)

「Thunder」は、最近の投稿をメモリの上に置いておくシンプルな倉庫です。保存しているのは投稿ID・著者・作成時刻・返信や引用元のIDなどで、本文やいいね数は持っていません。post_store.rs:36-48

決まり数値意味
保存期間48時間既定の post_retention_seconds
著者あたり オリジナル投稿50件1回の取得で返す上限
著者あたり 返信+リポスト30件2つで合計30件の共有枠
著者あたり 動画投稿100件動画専用リクエストの枠
閲覧者のフォロー数上限10,000人超えた分は入力から外れる
1回の返却上限1,200件—
config.rs:1-7 および args.rs:48-49

棚B ─ フォロー外へ届ける棚(Phoenix Retrieval)

フォローされていない人の画面に出る、中心的な経路です。投稿の種類ごとに、入る索引が分かれています。今回の更新で、ここに大事な変更がありました。

if (isCommunityPost)  → 通常の索引に入れない
else if (isReply)     → 通常の索引に入れない
                        いいねが付いたら、自分宛てでも
                        ドロップ対象でもなければ返信専用索引へ
                        (1fav_reply / 32fav_reply)
else if (isRepost)    → 入れない
else if (要ドロップ)   → 入れない(成人向け動画は専用索引へ)
else                  → 通常の索引へ(1fav / 32fav / post_creation ほか)
phoenixRankAllCandidateProcessor.strato:470-530

通常の索引では、いいねのイベントで置かれる場所が増えていきます。

条件起きること
投稿の作成時post_creation 索引に入る(24時間窓)
いいねのイベント1fav 索引に入る
32件32fav 索引に入る
64・128・256…2の冪を超えるたびに次の閾値が更新される
再計算には「投稿から49時間以内」「前回更新から1分以上」などの条件が付きます。eventProcessing.strato:28-36

動画には専用の索引があります。10秒超の条件が必要なのは 1fav_video などの一部で、窓の長さもいろいろです。これは索引の話で、For Youのスコアに進むかどうかは次の章の期限にも左右されます。eventProcessing.strato:403-418

棚C ─ 類似から発掘する棚(SimClusters)

「この投稿にいいねした人は、あの投稿にもいいねしている」という関係で、投稿同士を近さで結んだ地図です。閲覧者が過去に反応した投稿を出発点に、その近所を探しにいきます。

条件数値
埋め込みが作られる最低いいね数8件
いいねの集計期間3日(動画は7日)
いいねの重みの半減期8時間
候補の年齢上限(既定)48時間
クラスタあたりの上位枠1,600件
探索するクラスタ数50個
1リクエストの上限800件
Configs.scala:39-73 と simclusters_source.rs:25-36

棚D ─ 人気投稿リスト(新設)

今回追加された棚です。READMEは「共有の人気投稿リストで、まずはフォロワーの多いアクティブなアカウントから」と説明しています。リストは全員に共通ですが、点数は他の候補と同じように閲覧者ごとに計算されます。ここに入れば必ず表示される、というものではありません。README.md:279

条件数値
取得の上限(既定)500件
著者あたりの上限5件
対象とする投稿の年齢24時間以内
順位づけ表示数を、半減期8時間で時間補正した値
popular_posts.rs:36-53 と param.rs:1093-1104

棚をまとめて比べる

投稿タイプ比較

同じ内容でも、投稿の形が違うだけで開く経路が変わります。

公開既定で、6つの経路のうち6つが開いています。

  • ○

    フォロワーに届く

    Thunder ─ フォロー中アカウントの最近の投稿を保持する棚

    著者あたり50件の枠

    config.rs:5

  • ○

    フォロー外へ広がる

    Phoenix Retrieval ─ フォローしていない人に届ける中心的な経路(公開既定のFor You)

    通常の索引に載る。作成時の post_creation、いいねで 1fav、32件で 32fav

    phoenixRankAllCandidateProcessor.strato:470-530

  • ○

    類似から発掘される

    SimClusters ─ 似た投稿をたどって見つけてもらう経路

    いいね8件で埋め込みが作られる

    PersistentTweetJob.scala:23

  • ○

    相互フォロー加点

    返信ウェイトが 5.0 → 20.0 になる条件付きブースト

    相互フォローなら +15.0(返信係数が20.0に)

    inputs.rs:20-22

  • ○

    新人枠に入れる

    1リクエストにつき1件だけ、16位相当まで引き上げられる席

    フォロワー5万以下・表示200未満・投稿2時間以内が条件

    author_cold_start.rs:188-193

  • ○

    フォロー外割引を免れる

    スコアに ×0.75 が掛かるかどうか

    フォロー中の相手になら割引なし

    scoring.rs:206-215