X が For You アルゴリズムをオープンソース化:いいね値 0.5 点、リンクコピー共有値 20 点
- このアルゴリズムにおける「いいね」の重みは 0.5。「リンクをコピーして共有」は 20。設定ファイルに明文で書かれており、推測ではありません。
- レート制限(シャドーバン)の実態が明確になりました。フォロワーにはこれまで通り表示されますが、フォローしていない人のタイムラインには一切表示されません。
- 文末の対応表では、3 つの関門を具体的な行動に落とし込み、各項目に根拠となる数値を明記しました。
公開された重みは、本番で使われている数値そのもの
X は For You タイムラインのアルゴリズムのソースコードをオープンソース化し、同時に自分がレート制限(シャドーバン)されているか確認できるページを公開しました。X でフォロワーを増やしたり、誘導したり、案件を受けている人にとって、これは正真正銘の料金表です。1 回のいいねと 1 回の「リンクコピー共有」がプラットフォーム内でそれぞれ何点なのかが、設定ファイルに具体的な数値として書かれており、もう推測する必要はありません。
以前のオープンソース版は構造のみを公開していました。スコアリングの工程があることはわかるものの、各アクションの価値は不明。モデル部分も Grok-1 を流用したサンプルコードのみでした。今回は 3 つの点が追加されました。
これらの数値を信頼してよい理由を X は次のように説明します。cron スクリプトを実行し、本番環境の主要な値を定期的にリポジトリのデフォルト値へ同期しています。README には、重みファイルがこの方法で管理されていると明記されています。さらに、2 つの取り組みがあります。10% 以上のトラフィックが流れる実験は、リポジトリで確認できるようにすること。コード公開前には、第三者である推薦システムの専門家によるレビューと負荷テストを実施済みであること。X が今回の公開に掲げた目標はただ 1 つ。「プラットフォームが自分の投稿をレート制限(シャドーバン)しているかどうかを、ユーザー自身が判断できるようにする」ことです。
投稿が読者の目に触れるまで、3 つの関門を通過する必要がある
プロセス全体は 7 ステップですが、投稿する側にとって重要なのは、最終的に絞り込む 3 つの関門だけです。これらは掛け算の関係にあり、どれか 1 つでも通過できなければ結果はゼロ。後の関門でどれだけ高得点でも無意味です。
ソートと可視性は別々のシステムです。前者は順序を決定し、後者は表示の有無を決定します。サービスも入力もルールも異なります。X はこれを単独の設計判断として明記しています。レート制限(シャドーバン)を理解するには、まずこの役割分担を理解する必要があります。
あなたの返信は、見知らぬ人のタイムラインには表示されない
スコアリングの前に 17 個のフィルタがあります。ほとんどは常識的なものです。自分の投稿、ブロック・ミュートしている人、既読のもの、ミュートキーワードに該当するものなど。しかし、そのうち 3 つは、あなたの投稿が見知らぬ人に表示されるかどうかを直接左右します。特に最初の 1 つは直感に反するものです。
さらに 2 つ。48 時間は絶対的な制限で、これを超えると候補プールから除外されます。これは設定ファイルに書かれた定数であり、調整可能なパラメータではありません。もう 1 つは返信に関するルールです。返信が残るには、返信先の相手もその読者がフォローしている必要があります。ただし、自分自身への返信(スレッド)は影響を受けません。すべての祖先が投稿者本人の場合、このフィルタは通過します。
モデルが予測するのは、あなたが取るであろう具体的なアクション
旧世代のレコメンドシステムは、各コンテンツに「関連度」スコアを付けていました。今回の方式は考え方が異なります。モデルは好みを推測するのではなく、あなたがこの投稿に対してどのような具体的なアクションを取るかを個別に予測します。いいねするか? 返信するか? リンクをコピーして共有するか? 報告するか? そして、これらの確率を 1 つの数値に合成する独立したステップがあります。
X はこの「1 つの数値に合成する」ステップを単独の設計判断として明記しています。その意味はここにあります。予測はモデル、評価は人間。今回のオープンソース化で公開されたのは、まさに人間が決めた部分です。
ついでに、2 つの詳細が「なぜ一部のアカウントは自然と拡散されやすいのか」を説明します。1 つ目は、投稿のいいね・返信・リポスト・引用・インプレッション数・投稿経過時間が、バケット化された後、モデルへの入力特徴量として直接供給される点です。モデルはこれらの数値を参照できるため、初期の勢いは確かに自己強化されます。2 つ目は、各投稿はセマンティック ID投稿の本文と画像を「この投稿が何についてか」を表すコードに圧縮したもの。6 層あり、各層で 256 個のコードから 1 つ選択。同じテーマの投稿は先頭の層が共通で、図書館の請求記号のようなもの。同じ分野の本は接頭辞が共通。に圧縮され、同じテーマの投稿はコードの接頭辞を共有します。そのため、インタラクションがゼロの新規投稿でも、テーマが読者のよく見るものであれば、検索で見つかります。さらに、本番環境の検索モデルはユーザーごとに専用のベクトルを保持しません。国や言語などの大まかなプロファイルを除けば、読者はシステム上、自分がインタラクションしたものの集合体として認識されます。
いいね 0.5 点、リンクコピー共有 20 点
プラスの重み 21 個、マイナスの重み 5 個を以下に示します。
一目でわかる事実が 2 つあります。すべてのプラスの重みの合計は 43.324 で、「リンクコピー共有」だけでその約半分を占めます。また、報告 1 回分の絶対値は、プラスの重みの合計の 5 倍以上です。
これらの数値を単純に割り算してはいけません。これらの値は、「そのアクションがどれだけ価値があるか」と「そのアクションがネットワーク全体でどれだけ稀か」という 2 つの要素が混ざった結果です。ネガティブなフィードバックはそもそも発生頻度が極めて低いため、バランスを取るには十分に大きな重みが必要です。
つまり、「報告 1 回 = いいね 468 回分を台無しにする」という解釈は誤りです。報告はそもそも稀にしか発生せず、モデルが計算する報告確率は極めて小さな数値です。加重和で意味を持つように、重みを −234 に設定しているのです。
正しい読み方は、このテーブルが示すのは、モデルが計算する確率がたとえ極めて低くても、ゼロでなければ、重みを掛けることで総合スコアに増幅されて反映されるということです。体感としては、モデルがあなたの投稿に「報告される可能性がわずかでもある」と判断すれば、そのわずかな可能性だけで投稿は埋もれます。逆に「リンクがコピーされて共有されそうだ」と判断すれば、その兆候だけで投稿は押し上げられます。
スコアは、さらに 4 回調整されて確定する
加重合計は始まりに過ぎません。スコアが確定するまでに、さらに 4 回の調整が行われます。最初の 1 回は合計の「途中で」発生し、特定の項目の重みを変更します。後の 3 回は総合スコアに掛け算されます。以下の 4 ステップは、クリックして順に確認できます。
3 つの条件をすべて満たす必要があります。1 つでも欠けると加成されません:① 返信ではない ② リポストではない ③ 作者と読者が相互フォロー。つまり、加成はオリジナル投稿のみが対象です。
見落としがちな点:読者がフォローしている人による返信とリポストにもこのディスカウントが適用されます。つまり、このディスカウントは「二次コンテンツ」と「未知のコンテンツ」の 2 つのカテゴリに適用され、「フォローしているかどうか」と完全に一致するわけではありません。
同じリフレッシュ内で 2 回目に登場すると、自動的に 62% に。3 回目は 40% 台前半になります。
条件:作者のフォロワー数 ≤ 1000、この投稿のインプレッション数 < 1000、オリジナル投稿であること。さらに、有効な候補の上位 85% 以内にランクインしている必要があります。別途「投稿から 24 時間以内」という条件もありますが、これは実験グループのみの要件であり、全員に適用されるわけではありません。フォロワー数の上限が 1000 に設定されているため、ある程度の規模のアカウントではこの経路は利用できません。
レート制限(シャドーバン)は、フォローしていない人にのみ見えなくなること
スコアリングが完了しても、最後の関門であなたの投稿全体が除外される可能性があります。この関門では、投稿ごと・読者ごとに 3 つのいずれかの判定が下されます:表示、警告の背後に隠す(読者はクリックして表示可能)、非表示。
重要なのは、ルールが 2 セットに分かれていることです。1 セットはすべての人に適用されます。もう 1 セットは 27 のルールからなり、「この投稿が作者をフォローしていない人におすすめされた場合」にのみ実行され、非表示の判定しかできません。同じ投稿でも、フォロワーに対しては表示されます。
つまり、X におけるレート制限(シャドーバン)には明確な形態があります。フォロワーには通常通り表示されるが、フォローしていないすべての人のタイムラインからは完全に消える。あなた自身は異常を確認できません。なぜなら、あなたが見ているのは自分がフォローしている人たちの投稿だからです。
12 個のアカウントラベルを確認できるように
ページは x.com/i/under_the_hood にあり、過去 1 か月のアカウントと投稿に付いたラベルを確認でき、データをダウンロードすることもできます。これは段階的なトライアルであり、資格は 3 つの条件をすべて満たす必要があります:アカウント作成から 1 年以上、前月に 10 件以上投稿、テストグループにランダムに選出されること。
これらのラベルは、すべてが人手で判定されているわけではありません。オフラインのバッチ処理タスクが、他の人があなたの投稿にどう反応したかを監視しています。ブロック、報告、スパム報告は、すべて「いいね」数と比較して測定され、アカウントにラベルを付けます。つまり、「何人にブロックまたは報告されたか」はアカウントレベルの判定に直接入力され、単一の投稿の問題ではありません。
アカウントレベルのラベルは全部で 12 個あり、性質に応じて 3 つのカテゴリに分けられます。
最後の 3 つはアカウントの状態を判定するもので、投稿内容とは関係ありません。しかし、効果は前述の 9 つと同じで、フォロー外のユーザーにはおすすめされません。
投稿レベルのラベルの効果は 3 段階あります。最も軽いものはフォロー外のユーザーに非表示になるだけです(スパム高再現率、不審なリンク、アダルトテキストなど)。中間はコンテンツ警告が追加され、未成年・年齢未入力・未ログインユーザーには非表示になります。最も重いものは、X 上で完全に非表示になるか、発見可能性が作者のプロフィールページに限定され、全員に「この投稿はレート制限(シャドーバン)されています」という説明が表示されます。
明確にオープンソース化されていない部分が 2 つあります。コンテンツ分類器で使用される大規模言語モデルのプロンプトと、ラベル付けルールの一部です。その理由は README に書かれており、悪用を防ぐためです。X が提供する代替手段こそ、このページです。ルールは見せないが、結果は見せる。これらのシステムがあなたに対して何を出力したか、手動で追加されたラベルがあるかどうかを確認でき、ラベル名をコードと照合して、それがあなたにどう影響するかを調べることができます。
重みは変わる:相互フォロー加成は 3 週間で 20 から 15 に調整
これらのパラメータを使用する前に、1 つ理解しておく必要があります。それらは不変のものではありません。X は専用のドキュメントを公開し、7 月に話題となった相互フォロー加成を例に、今後のアルゴリズム更新の読み方を説明しています。
7 月 10 日に A/B テストを開始し、ユーザーは 5、10、15、20 の 4 つのグループにランダムに分けられ、大多数は 0 でした。7 月 13 日、初期結果が良好だったため、多くのユーザーに 20 で展開しました。7 月 24 日、完全な実験結果と X 上の実際のフィードバックを入手。ドキュメントで挙げられている例:ワールドカップ期間中、より多くのサッカー討論を見たいという声があったが、関連投稿のほとんどはフォロー外のアカウントからのものでした。そのため、20 を 15 に戻しました。
この因果関係は明確です。加成が大きすぎると、相互フォロー圏内のコンテンツが外部コンテンツを押しのけてしまいます。ちょうどワールドカップのような、盛り上がりが圏外にあるイベントと重なったため、ユーザーの体感はすぐに悪化し、5 ポイント引き下げられました。
ドキュメントには当時の完全なコード変更も掲載されています。冒頭には、今後のアルゴリズム更新はすべてこのリポジトリに公開され、diff を見れば何が変わったかわかると書かれています。X を活動の場としている人にとって、パラメータが変わったら当日中に確認でき、1 か月後にデータの低下から推測する必要はありません。
3 つの関門に基づく、投稿の調整方法
数値は変わりますが、関門は変わりません。現在のバージョンのパラメータに基づくと、3 つの関門を合わせると次の 1 文になります:
以下の内容は、コード内のパラメータから導き出したものであり、X が投稿アドバイスを提供したわけではありません。各項目には根拠となるパラメータと数値を明記しているので、リポジトリで確認できます。パラメータが変われば、この表も更新する必要があります。
| 行動 | 根拠 | 影響度 |
|---|---|---|
| 見知らぬ人に届けたいなら、オリジナル投稿のみを当てにする | フォロー外のユーザーへの返信・リポストはスコアリング前に破棄される | 失格ライン |
| 時事性の高い内容は当日中に投稿する | 48 時間超過で候補プールから即除外。ハードコードされた定数 | 失格ライン |
| 返信する相手は選ぶ | 返信が残るには、返信先の相手が読者もフォローしている必要がある | 失格ライン |
| 自分への返信(スレッド)は影響なし | すべての祖先が投稿者本人の場合、このフィルタは通過 | — |
| 行動 | 根拠 | 影響度 |
|---|---|---|
| リンクをコピーして共有したくなるような内容を作る | この項目の重みは 20.0。プラスの重み合計 43.324 の約半分 | 単項目最高 |
| 主要な読者と相互フォローになる | 相互フォロー加成 +15、返信の重み 5.0 → 20.0 | 4 倍 |
| ただし、加成はオリジナル投稿のみ | 返信やリポストでは対象外。3 つの条件がコードに明記 | — |
| 返信を誘発する内容を書く | 返信の重み 5.0。いいね 0.5 の 10 倍 | いいねの 10 倍 |
| フォローしたくなる理由を作る | 作者フォローの重み 4.0。いいねの 8 倍 | いいねの 8 倍 |
| 1 回のリフレッシュで連投しない | 同一作者 2 件目 ×0.625、3 件目 ×0.44、下限 0.25 | 2 件目は 62% |
| フォロワー 1000 未満:オリジナルを投稿 | 新規作者チャネルはフォロワー ≤1000、インプレッション <1000、オリジナル投稿が条件。別途「24 時間以内」は実験グループのみ有効 | 15–16 位に引き上げ |
| 行動 | 根拠 | 影響度 |
|---|---|---|
| まずラベルがないか確認する | 27 のルールのいずれかに該当すると、すべての見知らぬ人に完全に非表示 | 前提条件 |
| プロフィール画像とヘッダー画像も個別に判定される | NsfwAvatarImage、NsfwBannerImage は独立したアカウントラベル | アカウントレベル |
| 不審なリンクを含む投稿はしない | 不審なリンクは投稿レベルラベル。フォロー外への非推奨効果 | 投稿レベル |
| 炎上を誘う行為の代償はパラメータ上、最も重い | 報告 −234、ミュート −58.8、興味なし −43.2、ブロック −31.2。一方プラスの重み合計は 43.324 のみ | 最も重い |
| やらないこと | 根拠 |
|---|---|
| 露出アップのために有料会員にならない | スコアリングパラメータ・再ランク付けサービス・モデル特徴量の 3 箇所で subscription / premium / verified を検索したがゼロ件。候補投稿のデータ構造にも会員やブルーチェックのフィールドはなく、サブスクリプション限定投稿のアクセス制御フィールドのみ。このソートコードに有料での加成は存在しない。 |
| 動画自体に重みがあると期待しない | 動画の有効再生の重みは 0.05。さらに動画は 10 秒以上であることが条件。読者自身のフォロワー数が 1 万人に達するとこの項目はゼロになる。動画の価値は滞在時間と共有にあり、この項目ではない |
| 滞在時間やプロフィールクリックを水増ししない | 滞在の重み 0.0、プロフィール閲覧の重み 0.0。スコアに全く影響しない |
X が For You アルゴリズムをオープンソース化:いいね値 0.5 点、リンクコピー共有値 20 点
X が For You の露出を決定するアルゴリズムのソースコードと重みを公開。投稿が見知らぬ人に表示されるかは 3 つの関門で決まる。図解で 1 ページにまとめました
↓ 1 ページで読了 · 動く図あり
X は For You タイムラインのアルゴリズムのソースコードをオープンソース化し、同時に自分がレート制限(シャドーバン)されているか確認できるページを公開しました。今回示されたのは明確な料金表です。1 回のいいね、1 回のリンクコピー共有が、システム内でそれぞれ何点なのかが、設定ファイルに書かれており、推測は不要です。
スコアリングの工程はあるが、重みの数値・フィルタとラベルシステム・実際のトレーニングコードは非公開。モデル部分はサンプルコードのみ。
重みの実数値・完全なフィルタとラベルシステム・実際のトレーニングコードを全て公開。
これらの数値は X 自身のコードリポジトリに由来します。cron スクリプトが本番環境の重みを定期的にデフォルト設定へ同期しており、公開前には第三者の推薦システム専門家によるレビューと負荷テストも実施済みです。一部のユーザーは実験グループに割り当てられ、異なる値を受け取る場合があります。
プロセス全体は 7 ステップですが、最終的に重要なのは 3 つの関門です。候補プール入り → スコアリングとソート → 可視性の判定。3 つは掛け算の関係で、どれか 1 つでも通過できなければ、後のスコアがどんなに高くても無意味。さらに、ソートと可視性は別々のシステムで、一方は順序を、もう一方は表示の有無を管理します。
プラスの重み 21 個、マイナスの重み 5 個。すべて設定ファイルに明文で記載されています。
スコアリングが完了しても、最後の関門で投稿全体が除外される可能性があります。ルールは 2 セットあります。1 つは全員に適用、もう 1 つは 27 のルールからなり、作者をフォローしていない人へのおすすめ時にのみ実行され、非表示の判定しかできません。
✘ フォローしていない人:27 のルールのいずれかに該当すると、この投稿は彼の For You から完全に消えます
あなた自身は異常に気づきません。なぜなら、あなたが見ているのは自分がフォローしている人たちの投稿だからです。自分にラベルが付いていないか確認するには、x.com/i/under_the_hood で確認してください(アカウント作成から 1 年以上・直近 1 か月に 10 件以上投稿・テストグループに選出された場合のみ確認可能)。
届かないんだ?
オープンソース化
データが見える
台無し
リンクコピー 20
最強
プラスの合計の 5 倍以上
確認してみよう
一部のアカウントは実験グループの場合あり
3 つの関門をすべて通過すること