1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Xアルゴリズムの仕組み:公開ソースコードの重みを全部読んでみた(10月27日の変更まで)

1
Posted at

本記事には筆者が開発に関わっているサービス(GetXAPI)の紹介を含みます。重みと設定値はすべて、2026年10月28日(UTC)に xai-org/x-algorithm リポジトリを筆者が直接読んで確認したものです。

「いいねは0.5点」「通報1件でいいね355件分のマイナス」「プロフィールクリックは12点」。Xのアルゴリズムについて、日本語の解説記事やAIの回答にはこうした数字が並んでいます。ところが、いま公開されているコードを読むと、いくつかは2023年の旧Twitterのコードの数字で、いくつかは10月13日より前の古い値です。この記事では、Xのアルゴリズムの仕組みを公開ソースコードから行番号つきで整理し、重みがいつ変わったかも全コミットから洗い出しました。

2026年10月28日更新。重みは commit 2f25214(10月27日 01:28 UTC)の home-mixer/params/param.rs から引用し、翌日の commit 5ed7963 でも重みに変更がないことを確認しています。

Xのアルゴリズムはどういう仕組みですか?

リクエストのたびに候補の投稿を集め、各投稿に対してあなたが取りそうな行動の確率を予測し、重みをかけて足し合わせた点数で並べます。 候補はフォロー中のアカウント(Thunder)と、フォロー外のアカウント(Phoenixの検索、SimClusters、人気投稿)から集まります。点数は Σ(重み × その行動の予測確率) で、READMEにもこの式が書かれています。投稿から48時間を過ぎた投稿はスコア計算の前に除外されます。

いいねの重みは0.5ですか?

10月13日までは0.5でした。 commit e1a0375 で0.6に、翌日の 17c96bf で 0.66 に上がりました。0.5という数字は、いまも vm-ranker/params.rs の3行目にフォールバック(既定値)として残っています。本番の設定から同期されているのは home-mixer 側のファイル(1行目に「mirrored from config feature-switch defaults」とある)なので、引用するならこちらです。

通報1件はいいね何件分ですか?

そういう換算はできません。 重みは「回数」ではなく「予測確率」にかかります。param.rs の319〜346行目のコメントでは、X自身が「通報1件でいいね468件が帳消し」という読み方を誤りと書き、通報はいいねより1,000倍以上起きにくいと説明しています。

「Heavy Ranker」「プロフィールクリック12点」は今も正しいですか?

いいえ、2023年の旧Twitterのリポジトリ(twitter/the-algorithm)の話です。 現在のおすすめはPhoenixモデルで順位付けされ、プロフィールクリックの重みは 0、作者のリプライ返し(+75)という項目も今の重み一覧にはありません。「候補を約1,500件抽出」という数字も、現在のコードでは確認できませんでした。

Xアルゴリズムの重み一覧(commit 2f25214)

home-mixer/params/param.rs の348行目(FavoriteWeight)から460行目(ReportWeight)までの値です。

予測する行動 重み
リンクをコピーして共有 20.0
リプライ 5.0(相互フォロー同士なら +15.0)
引用 5.0
DMで共有 5.0
作者をフォロー 4.0
共有 2.0
リポスト 1.0
いいね 0.66
クリック後の滞在時間(連続値) 0.4
クリック 0.3
リンクを開く 0.2
画像の拡大、滞在 各0.05
動画を開く 0.02
滞在時間(連続値) 0.006
プロフィールクリック、動画の視聴品質 0
滞在しない −0.02
ブロック −31.2
興味がない −52.272
ミュート −58.8
通報 −234

ブックマークには重みがありません。ただし viewer_history.rs の30行目で ClientTweetBookmark は「ポジティブな行動」に入っていて、モデルが読む行動履歴には使われます。

重みはいつ変わった?(8月13日以降の全変更)

param.rs に触れた48コミットをすべて再生し、重みが変わったものだけを抜き出しました。

日付 コミット 変更
8月25日 0d3cdd8 滞在 0→0.05、動画を開く 0.05→0.07、動画の視聴品質 0.05→0
9月29日 a707cc2 クリック 0.4→0.3、クリック後の滞在時間 0→0.4、興味がない −43.2→−47.52
10月7日 78460ca 未探索の投稿 0.02→0.015
10月13日 e1a0375 いいね 0.5→0.6、動画を開く 0.07→0.02、滞在時間 0.004→0.006
10月14日 17c96bf いいね 0.6→0.66、興味がない −47.52→−52.272

相互フォローのリプライ加点は同期ファイルができる前の変更で、リポジトリ内の docs/BIDIRECTIONAL_BOOST_CHANGE.md によると7月13日に20で導入され、7月24日に15へ下げられています。

10月27日の変更で何が変わった?

重みは変わっていません。 変わったのは VMRankerSendDebiasInputs が false から true になったこと(param.rs 508行目)で、投稿ごとに7つの特徴量(動画の有無、最長動画の長さ、画像の有無、メディア数、文字量、改行数、URLの有無)が再ランキングのサービスに送られるようになりました。ただし、それを使う側の UserDebiasEnabled は vm-ranker/params.rs で false のままで、オフのときは処理がそのまま返ります。「リンク付き投稿は減点される」という説明も見かけますが、重みの上ではリンクを開く行動は +0.2 で、マイナスの項目はありません。

自分のアカウントに影響があったか測る

コードからわかるのは「何が変わったか」までです。自分の投稿に効いたかは、変更日の前後で数字を比べるしかありません。GetXAPIのユーザー投稿取得エンドポイントは、最新投稿約20件の表示回数・いいね・リプライ・リポスト・引用・ブックマークを 1回0.001ドル で返します。

import csv
import os
from datetime import datetime, timezone

import requests

API_KEY = os.environ["GETXAPI_KEY"]
FIELDS = ["viewCount", "likeCount", "replyCount", "retweetCount", "quoteCount", "bookmarkCount"]

def snapshot(username, out="post_metrics.csv"):
    r = requests.get(
        "https://api.getxapi.com/twitter/user/tweets",
        params={"userName": username},
        headers={"Authorization": f"Bearer {API_KEY}"},
        timeout=30,
    )
    r.raise_for_status()
    taken = datetime.now(timezone.utc).isoformat(timespec="seconds")
    new_file = not os.path.exists(out)
    with open(out, "a", newline="", encoding="utf-8") as f:
        w = csv.writer(f)
        if new_file:
            w.writerow(["taken_at", "post_id", "created_at"] + FIELDS)
        for p in r.json()["tweets"]:
            w.writerow([taken, p["id"], p["createdAt"]] + [p.get(k) for k in FIELDS])

snapshot("your_handle")

検証結果: 2026年10月28日に公開アカウント(@nikitabier)で実行し、1回の呼び出しで 22件 の投稿と6つの指標がCSVに書き込まれました。cronで毎日動かし、リポジトリのコミット履歴と見比べてください。

このコードからわからないこと

  • 返信欄の並び順。 XのヘルプセンターによるとX Premium(有料)の加入有無は返信の並びに考慮されますが、おすすめの順位付けコードにはPremiumや認証の項目はありませんでした。
  • 非公開の部分。 一部のルールファイルとGroxという分類器のプロンプトは公開されていません。
  • 一人ひとりの順位。 予測確率は人によって違うので、同じ投稿でも点数は人ごとに変わります。

よくある質問

Xのアルゴリズムはオープンソースですか?

はい。github.com/xai-org/x-algorithm に、おすすめタイムラインのパイプライン、重み、フィルター、Phoenixモデルのコードが公開されています。一部のルールファイルと分類器のプロンプトは非公開です。

おすすめに表示させない・おすすめを変えるには?

見たくない投稿には「興味がない」(重み −52.272)を使い、アカウントのミュートやブロック、ミュートワードを設定すると、その投稿はスコア計算の前に除外されます。フォロー中のアカウントだけを見たいときは「フォロー中」タブに切り替えます。

Xのアルゴリズムはどのくらいの頻度で変わりますか?

リポジトリにはほぼ毎日コミットがありますが、重みが変わったのは8月13日から10月28日までで5回です。多くのコミットは同期時刻の更新や、オフの新しい設定の追加です。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?