本文へ移動
X解体新書

検証

誤解の訂正

数字そのものは正しく引用されていることが多いのですが、意味の取り違えが広く定着しています。ひとつずつ、コードと突き合わせます。

14件

  1. 01誤り

    リンクコピー1回で+20点入る。

    係数20が掛かるのは「この閲覧者がリンクコピーしそうな確率」で、実際にコピーされた回数ではありません。確率3%なら寄与は0.6です。

    計算の実体は score.unwrap_or(0.0) * weight の1行で、score に入るのはPhoenixが出した予測です。Xもコメントで「係数は生の反応数には掛からない」と明記しています。

    scoring.rs:57-59

  2. 02誤り

    通報1件でいいね468件ぶんが消える。

    どちらも予測確率に掛かるので、割り算で回数に換算することはできません。ちなみにいいねの係数が0.66に変わったので、割り算の値自体も今は約355です。

    X自身がコメントとREADMEでこの読み方を名指しで否定し、通報の基礎確率はいいねの1000分の1より低いので、予測が順位に影響できるよう重くしていると説明しています。

    scoring.rs:35-42

  3. 03条件つき

    大量通報を集めれば、ランキングで潰せる。

    ランキングの予測については、効きにくい仕組みだとXは説明しています。推薦は個人化されているので、主に「通報者に似た人」の推薦に影響する、という説明です。ただし通報は別の仕組みの入力にもなります。

    コメントは「ホームで配信された投稿の行動でなければランキングに影響しない」とも書いています。一方、ラベルの説明文には「ユーザー通報を受けて」付くものもあり、通報に意味がないわけではありません。

    scoring.rs:44-56

  4. 04半分正しい

    ブックマークが最強のシグナルだ。

    26項目に固定の係数はありません。行動の種類としては定義され、ブックマーク数も home-mixer が送るデータにはありますが、公開設定で入力に使う反応数の5項目には入っていません。

    係数の一覧 scoring.rs にブックマークの項はなく、ENGAGEMENT_COUNT_ORDER にも入っていません。間接的な効果の大きさは、公開情報からは分かりません。

    recsys.proto:480

  5. 05条件つき

    新人アカウントは全体的に優遇される。

    優遇は1リクエストにつき1件で、16位相当まで引き上げる席です。今回、対象はフォロワー5万人以下まで広がりましたが、表示200回未満・投稿から2時間以内と狭まった条件もあります。

    実装は effective[best_idx] = effective[best_idx].max(target) で、掛け算のブーストではありません。候補の中からトンプソンサンプリングで選びます。

    author_cold_start.rs:296-333

  6. 06条件つき

    リプライを増やせばフォロー外にも伸びる。

    公開既定のFor Youでは、フォロー外の返信はスコアリング前に落ちます。ただし返信専用の索引と、それを通すフラグが追加されたので、「絶対に届かない」とは言えなくなりました。

    索引は 1fav_reply / 32fav_reply に投入されますが、OONRetweetReplyFilter が EnablePhoenixOonReplies(既定 false)のもとで落とします。実験の割当は公開されていません。

    oon_retweet_reply_filter.rs:17-28

  7. 07条件つき

    シャドウバンでスコアをこっそり下げられている。

    公開されている可視性フィルタのHome向けルールに、点数を下げるものは見当たりません。あるのは面ごとの出し分けです。ただ、これで「シャドウバンは存在しない」とまでは言えません。

    ルールは Allow・Notice・Interstitial・Drop を返します。一方で、負の係数やフォロー外割引など順位を下げる要素は別にありますし、一部のルールやプロンプトは非公開です。

    levels.rs:296-357

  8. 08誤り

    相互フォローなら何を投稿してもブーストされる。

    対象はオリジナル投稿(引用を含む)だけです。相互フォローでも、返信とリポストにはボーナスが付きません。

    条件は、返信でない・リポストでない・相互フォローの著者である、の3つすべてです。滞在ブーストは既定値0.0なので、公開既定では何も起きません。

    inputs.rs:20-22

  9. 09誤り

    フォロワーになってもらえば、投稿は確実に届く。

    For Youでは、48時間の年齢制限、閲覧者のミュート語、ブロック関係、既読判定は、フォロー中の相手にも効きます。Thunderの返信の条件もあります。

    AgeFilter と ViewerMutedKeywordFilter にフォロー免除はありません。なお、Followingタブなど別の面は別の処理です。

    age_filter.rs:16-20

  10. 10誤り

    滞在は見られていない。効くのはいいねや返信だけだ。

    滞在に関する項目は3つとも0以外です。二値の滞在は0.05、滞在時間は1秒あたり0.006、クリック後の滞在時間は1秒あたり0.4です。

    前回は二値0.0・クリック後0.0でしたが、今回どちらも入りました。Xも10月8日の更新で滞在時間の予測の改善を書いています。秒数に掛かる項目は単位が違うので、確率の係数と数字だけで比べないでください。

    param.rs:477-488

  11. 11誤り

    プロフィールクリックを取りにいくと直接効く。

    プロフィールクリックの係数は公開既定で0.0です。共有ライブラリにはプロフィール訪問の秒数の項もありますが、home-mixer は0.0に固定しています。

    ProfileClickWeight の既定値は0.0で、ProfileVisitSecsWeight も vm-ranker の静的既定は0.0です。公開既定で効くのは、投稿経由の著者フォロー(+4.0)のほうです。

    param.rs:425-430

  12. 12誤り

    48時間を過ぎた投稿は、Xのどこからも消える。

    48時間はFor Youのスコア対象候補の上限です。Followingタブ、検索、プロフィール、投稿の直接表示などは別の話です。一方、For Youで新しく推薦され続けることは、公開既定ではありません。

    AgeFilter はFor Youのパイプラインに登録されていて、Followingの時系列パイプラインには登録されていません。動画の索引にはさらに長い窓があります。

    phoenix_candidate_pipeline.rs:427

  13. 13条件つき

    同じタイミングに強い投稿があると、自分の投稿の予測値が下がる。

    ランキングモデルの候補同士は互いを参照できないので、READMEの説明では、予測はバッチの中身に左右されません。ただし順位は比較で決まり、同一作者の減衰や多様化は他の候補の影響を受けます。

    Attentionのマスクで候補は自分自身の位置だけを見ます。候補分離はモデル内の話で、最終的な並びは他の候補と無関係ではありません。

    ranker_attention_utils.py:52-56

  14. 14誤り

    過去に伸びた実績やいいね数は、モデルには一切入らない。

    前回の本書はそう読める説明をしていましたが、今回の公開設定では、投稿のいいね・返信・リポスト・引用・表示数がモデルの入力に使われます。ただし係数が掛かるのは閲覧者ごとの予測です。

    xrecsys.py の enable_engagement_counts=True で、log2をとった値が特徴量になります。アカウントの過去の実績そのものに係数が掛かるわけではなく、どれくらい効くかは公開情報からは分かりません。

    xrecsys.py:316