本文へ移動
Xアルゴリズム解体新書
3第二部12

三つの棚

投稿はどこから集められるのか。フォロワー向け・フォロー外向け・類似発掘の3経路。

この章で分かること

  • 投稿が候補に入る3つの経路を区別できる
  • 各経路に入るための具体的な条件が分かる
  • いいね1件・8件・32件の意味が分かる

点数の話の前に、そもそも候補に入らなければ何も始まりません。Xは3か所から投稿を集めます。それぞれ入場条件がまったく違います。

棚A ─ フォロワーに届ける棚(Thunder)

「Thunder」は、投稿をメモリの上に置いておくだけの、驚くほど単純な倉庫です。どれくらい単純かというと、本文もいいね数も言語もNSFW判定も保存していません。持っているのは「誰が」「いつ」「どのID」だけです。

決まり数値意味
保存期間48時間過ぎたらメモリから消える
著者あたり オリジナル投稿50件超えると古いものから落ちる
著者あたり 返信+リポスト30件2つで合計30件の共有枠
著者あたり 動画投稿100件別枠が用意されている
閲覧者のフォロー数上限10,000人超えると後方の著者は丸ごと無視される
1回の返却上限1,200件
[[thunder/config.rs:1-12]] および [[thunder/args.rs:48-49]]

もう1つ、地味に効く事実があります。Thunderが取り込むのは投稿の作成・削除・引用削除の3種類のイベントだけで、「機微な内容に更新」といったイベントは無視されます。投稿後に付いた判定は、この棚には反映されません。

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

ここがバズの本体です。フォローされていない人の画面に出るには、この棚に載る必要があります。そして入口で、こう弾かれます。

if (isCommunityPost)      → 除外
else if (isReply)         → 除外
else if (isRepost)        → 除外
else if (shouldDropPost)  → 除外(可視性フィルタ・アダルト判定)
else                      → インデックスへ
phoenixRankAllCandidateProcessor.strato:441-454

棚に入ったあとは、いいねの数で置かれる場所が増えていきます。

いいね数起きること
1件1fav インデックスに載る
32件32fav インデックスに載る
64・128・256…2の冪を超えるたびにスコアが再計算される
再計算には「投稿から49時間以内」「前回更新から1分以上」などの条件が付きます。

動画には専用のインデックスがあり、10秒超かつ非NSFWであることが条件です。ここでも著者側に nsfwUser nsfwAdmin のフラグが立っていると載りません。

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

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

条件数値
埋め込みが作られる最低いいね数8件
いいねの集計期間3日(動画は7日)
いいねの重みの半減期8時間
投稿の年齢上限48時間
クラスタあたりの上位枠1,600件
探索するクラスタ数50個
[[simclusters/simclusters_v2/summingbird/common/Configs.scala:39-69]]

なお、埋め込みの生成トリガーはいいねイベントだけです。リポストでも返信でもブックマークでもありません。この棚に関しては、いいねが唯一の入場券です。

3つの棚をまとめる

投稿タイプ比較

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

6つの経路のうち6つが開いています。

  • フォロワーに届く

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

    著者あたり50件の枠

    config.rs:5

  • フォロー外へ広がる

    Phoenix Retrieval ─ フォローしていない人に届ける主経路

    インデックスに載る。いいね1件で1fav、32件で32fav

    phoenixRankAllCandidateProcessor.strato:443

  • 類似から発掘される

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

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

    PersistentTweetJob.scala:23

  • 相互フォロー加点

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

    相互フォローなら +15.0(4倍)

    ranking_scorer.rs:180

  • 新人枠に入れる

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

    フォロワー1000以下・表示1000未満が条件

    author_cold_start.rs:138

  • フォロー外割引を免れる

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

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

    ranking_scorer.rs:776