X重み公開で判明〜滞在時間の評価はゼロだった
3か月前、Xのアルゴリズムについて記事を書いた。滞在時間や保存が重く評価される、という説明を軸にした。
8月13日、その重みの数値が公開された。滞在時間の重みは0だった。
以下、リポジトリの記述はすべて2026年8月15日時点のもの。
重みが出た
2025年12月5日、欧州委員会がXに1億2000万ユーロの制裁金を科した。DSA(デジタルサービス法)に基づく非遵守決定としては初の事例になる。理由は透明性義務違反で、青バッジの欺瞞的な設計、広告リポジトリの不備、研究者へのデータ提供拒否の3点。2026年1月10日、マスクが7日以内のオープンソース化と4週間ごとの更新を投稿した。1月20日、xai-org/x-algorithm が公開された。因果関係は誰も認めていない。
5月15日に大型更新が入り、8月13日にさらに拡大した。追加は36万3246行、エントリー数は5月時点の244から2512へ増えている。今回追加されたのは、予測値をスコアに合成するときの重み、可視性フィルタのルール、Phoenixの学習コードと合成データ生成コード。
これまで公開されていたのは「何を予測しているか」までで、「それをどう使っているか」は伏せられていた。
ただし全部ではない。Xは What's not in this repo? として、Grox のLLMプロンプト(j2ファイル)と一部の botmaker ルールを除外していると明記している。理由はゲーミング防止。投稿がルール違反かをGrokで判定する系統は、丸ごと外れている。
重みは `home-mixer/params/param.rs` に並んでいる。ファイル冒頭にはこう書かれている。
// mirrored from config feature-switch defaults; last sync 2026-08-12T04:09:22Z本番の設定値をcronでリポジトリに同期している、という建て付けになる。
滞在時間はゼロ
該当箇所を引く。
param!(DwellWeight, f64, "rust_home_mixer_dwell_weight", 0.0);滞在系のパラメータは4つある。dwell、click dwell time、active seconds、そして continuous dwell time。このうち生きているのは最後の 0.004 だけで、残る3つはすべて 0.0 だった。
いいねの重みが 0.5。0.004 はその125分の1になる。
ブックマークはもっと単純で、重みのパラメータ自体が存在しない。投稿データの構造体には `bookmark_count` というフィールドがあるが、スコアの合成では呼ばれない。
プロフィールクリックも 0.0。「詳しくはプロフィールへ」という導線は、順位に一切寄与しない。
3年前と比べると変化がはっきりする。旧Scala版の twitter/the-algorithm は2023年3月31日に公開された。当時の重みでは、プロフィールクリックが 12.0、クリックして2分以上滞在または詳細表示が 11.0、クリック後に同じ著者の別投稿を閲覧が 10.0。現行でこれらに対応する位置にあるのは、クリックの 0.4 と、クリック後の滞在時間の 0.0 になる。いいねの 0.5 が3年間動いていないので、これを基準にした相対比較は成立する。
受動的な消費シグナルが、まとめて評価から外された形になる。
予測はしている
ややこしいのは、予測自体は行われている点だ。
READMEのPredictionsセクションには、Attentionという分類で dwell、dwell time、click dwell time、active seconds が並んでいる。Phoenixはこれらを全部予測している。予測した上で、最終スコアに足すときの係数が0になっている。
捨てられている。
3か月前の記事で滞在時間が重いと書いたのは、この予測リストを読んだからだ。当時は重みが非公開だったので、予測項目に入っている以上は評価に使われている、と読むしかなかった。同じ理由で、日本語圏のX運用言説では「長文で滞在時間を伸ばせ」が定説になっている。
予測されていることと、順位に使われていることは別だった。
さらに妙なものが同じファイルに入っている。DwellRegret という別方式の合成が丸ごと実装されていて、そちらでは通報が −60000、ミュートが −15000 と桁が2つ違う。ただし ValueModelMode の既定値は weighted なので、現在この方式は動いていない。実装済みで起動していない仕組みが、公開範囲に含まれている。
当たっていた部分
Author Diversity Scorerについて書いたことは、実値でも成立している。
AuthorDiversityDecay = 0.5
AuthorDiversityFloor = 0.25前回は「2件目は50〜60%に減衰(近似値)」と書いた。式に代入すると62.5%になる。近似としては許容範囲だろう。下限が0.25であることも確認できた。連投すると後続が沈むという体感の根拠は残った。
負のシグナルが独立で予測されている点も正しい。興味なし −43.2、ミュート −58.8、ブロック −31.2、通報 −234.0。ひとまとめではなく、行動ごとに別の係数がついている。
フォロワーが少ないアカウントが優遇される、という話も実在した。ただし理由は「深く読まれるから」ではない。インプレッションが一定数に届いておらず、フォロワー数が上限以下で、投稿から24時間以内という条件を満たした投稿を、フィードの特定のスロット付近まで機械的に引き上げるコールドスタート処理が入っている。内容の質は条件に含まれない。
想定していなかった項目もあった。EnableInferredGenderHydration、EnableIpFeature、EnableUserInstalledAppsHydration が、いずれも true になっている。推定性別、位置情報、端末にインストールされているアプリ。これらがランキングの入力に含まれる。公開から2日経つが、この3行に触れた日本語の記事は見当たらない。
48時間で切れる
前回、遅延バズの窓を「48〜72時間」と書いた。これも外れている。
候補を集める段階に `AgeFilter` があり、48時間より古い投稿はそこで落とされる。落とされた時点で候補集合から消えるため、それ以降に推薦が広がる経路が残らない。
候補の規模も出た。フォロー内は Thunder が最大1200件、フォロー外は Phoenix retrieval が1000件、これに SimClusters が加わる。48時間フィルタはこの集合を作る前段に置かれている。順位の話ではなく、在庫の話になる。
結論だけ残った
前回の最後に、公開でシェアしにくいジャンルは遅延バズと相性がいい、と書いた。RTやいいねはされにくくても保存はされる、という理屈で。
保存の重みは0だったので、この理屈は成り立たない。
ところが結論の方は生き残る。重みの序列で最上位に来るのはリンクのコピー共有で 20.0。同じく 20.0 になるのが相互フォロー相手のオリジナル投稿へのリプライで、基本値 5.0 に 15.0 が加算される。DMでの共有が 5.0。いいねが 0.5、リポストが 1.0。
数字の上ではリンクコピーがいいねの40倍になるが、これは係数の比であって影響の倍率ではない。理由は次の節で書く。
序列として読めば十分だ。公開でシェアしにくいジャンルの読者が取る行動は、まさにリンクのコピーとDM送信になる。人前でリポストはしないが、個別には回す。保存されるから伸びるのではなく、こっそり回されるから伸びていた。
数字の読み違い
公開直後から、通報1件はいいね468件分の減点にあたる、という説明が拡散している。−234.0 を 0.5 で割った数字だ。
これは合成の仕方を取り違えている。
スコアは、予測された各行動の確率に重みを掛けて足し合わせたものになる。掛かる相手は実際の通報数ではなく、そのユーザーがその投稿を通報しそうかというモデルの予測確率だ。誰かが通報ボタンを押しても、その投稿のスコアから234が引かれるわけではない。
param.rs のコメントにも書かれている。これらの重みはランキング上の価値と、Xネットワーク全体でのその行動の発生頻度の組み合わせを反映しており、ネガティブフィードバックは全体として稀である、と。−234という値の大きさ自体が、めったに起きないことへの正規化を含んでいる。
前節の40倍も同じで、係数の比をそのまま影響の比として読んでいることになる。
拡散の規模も書いておく。発端となった英語の連投は124万表示で、コミュニティノートが確定表示されている。ノートの内容は、1月に公開済みで今回は追加更新であること、プロンプトなど一部のファイルは除外されていること、Xアルゴリズムの全体ではないこと。日本語圏で最も引用された解説スレは119万表示。いずれも8月15日時点の数字になる。訂正が付いた状態のまま、数字だけが先に回っている。
見えるものと見えないもの
ランキングとは別に、visibility-filtering という機構がある。判定は ALLOW / INTERSTITIAL / DROP の3値で、ルールは2層に分かれている。
全員に適用されるのが28ルール。凍結、鍵アカ、ブロック、法的削除要請など。フォロー外への推薦時にだけ追加されるのが26ルール。DO_NOT_AMPLIFY、SPAM_HIGH_RECALL、NSFW関連が並ぶ。
テストコードのアサーションに設計意図がそのまま書かれている。SPAM_HIGH_RECALL が付いたアカウントはフォロワーには表示され、フォロー外への推薦時にだけ DROP される。順位が下がるのではなく、フォロー外の候補から消える。フォロワーには届き続けるため、投稿している側からは気づけない。
同時に公開された Under the Hood で、自分のアカウントに付いたラベルを月次で確認できるようになった。開設1年以上、前月10投稿以上、パイロットのランダム選抜という条件がつく。返るのは JSON で、期間、投稿数、投稿レベルのラベル、アカウントレベルのラベル。
ただし返るのは可視性ラベルだけになる。フォロー外への割引係数 0.75 も、Author Diversity の減衰も、Phoenixの予測スコアそのものも含まれない。検索やサジェストに関する制限も別系統で、このレポートの範囲外になる。
ラベルが0件でも、フォロー外に届いている保証はない。
もうひとつ、リポジトリ自体の位置づけにも留保がつく。これは本番設定のスナップショットであって、公開されたコードが実際に動いているものと一致するかどうかの第三者検証はまだ行われていない。マスクは7月15日に、外部のレビュアーを招いて公開コードと稼働コードの一致を確認させると表明した。実施の報告は確認できていない。
読んでいただきありがとうございました。
コメント、記事購入、チップ等いつもありがとうございます。
大変感謝しております。
関連記事もありますので、下記サイトマップを参照していただければ幸いです。
いいなと思ったら応援しよう!
よろしければ応援お願いします!チップはnote更新用のPC購入費用に当てる予定です。よろしく!この記事は noteマネー にピックアップされました

