世界を動かす技術を、日本語で。

Xは最新のアルゴリズムをオープンソース化しました

概要

  • Xのレコメンデーションアルゴリズム は、各種プロダクト画面で投稿やコンテンツのフィードを提供するサービス群
  • 共通データ・モデル・フレームワーク を基盤とするアーキテクチャ
  • For You TimelineRecommended Notifications など、主要な画面に適用
  • 候補選定、ランキング、フィルタリング などの複数コンポーネントで構成
  • オープンソース化とコミュニティ貢献 を推進

Xのレコメンデーションアルゴリズムの全体像

  • Xのレコメンデーションアルゴリズム は、For You Timeline、検索、Explore、通知など全プロダクト画面で投稿フィードを提供
  • 詳細な仕組み については公式エンジニアリングブログを参照
  • 共通基盤 としてデータ、モデル、ソフトウェアフレームワークを共有
  • このリポジトリ には主要な共通コンポーネントを収録

アーキテクチャと主要コンポーネント

  • tweetypie :投稿データの読み書きを担当するコアサービス
  • unified-user-actions :リアルタイムのユーザーアクションストリーム
  • user-signal-service :明示的・暗黙的ユーザーシグナルの一元取得
  • SimClusters :コミュニティ検出と疎な埋め込み
  • TwHIN :ユーザー・投稿の知識グラフ埋め込み
  • trust-and-safety-models :NSFWや不適切コンテンツ検出モデル
  • real-graph :ユーザー同士の相互作用予測モデル
  • tweepcred :Page-Rankアルゴリズムによるユーザー評価
  • recos-injector :GraphJet系サービス向けストリーム生成
  • graph-feature-service :ユーザーペアのグラフ特徴量提供
  • topic-social-proof :投稿に関連するトピック特定
  • representation-scorer :エンティティ間のスコア計算
  • navi :Rust製の高性能MLモデルサービング
  • product-mixer :フィード生成用フレームワーク
  • timelines-aggregation-framework :バッチ/リアルタイムで集約特徴量生成
  • representation-manager :SimClustersやTwHINの埋め込み取得
  • twml :TensorFlow v1ベースのレガシーMLフレームワーク

For You Timelineの仕組み

  • search-index :In-Network投稿の検索・ランキング(全体の約50%を占める)
  • tweet-mixer :Out-of-Network候補投稿の取得調整レイヤー
  • user-tweet-entity-graph (UTEG) :ユーザーと投稿の相互作用グラフ管理、GraphJetフレームワーク利用
  • follow-recommendation-service (FRS) :アカウント・投稿のフォロー推奨
  • light-ranker :search-indexで用いられる軽量ランキングモデル
  • heavy-ranker :候補投稿の選定後に使うニューラルネットワーク型ランキングモデル
  • home-mixer :Home Timeline生成・提供の主要サービス、product-mixer上に構築
  • visibility-filters :法令遵守・品質向上・信頼性確保・収益保護のためのコンテンツフィルタリング
  • timelineranker :Earlybird Search IndexやUTEGの関連度スコア投稿提供レガシーサービス

Recommended Notificationsの仕組み

  • pushservice :推薦通知の主要サービス
  • pushservice-light-ranker :候補選定のための軽量ランキングモデル
  • pushservice-heavy-ranker :通知開封・エンゲージ予測のマルチタスク学習モデル

ビルド・テスト・貢献

  • 多くのコンポーネントにBazel BUILDファイル を用意
  • トップレベルのBUILDやWORKSPACEファイルは未提供 (今後追加予定)
  • GitHub issueやPull Request によるコミュニティからの提案を歓迎
  • バグ報告やセキュリティ問題 はHackerOneの公式バグバウンティプログラム経由で受付
  • オープンソース化によりグローバルな知見を活用し、アルゴリズムの改善を目指す方針

まとめ

  • Xのレコメンデーションアルゴリズム は多層的なサービス・モデル・フレームワークで構築
  • 透明性・品質向上・コミュニティ貢献 を重視したオープンソースプロジェクト
  • 継続的な改善・拡張 を目指す姿勢

Hackerたちの意見

ずっと疑問に思ってたんだけど、非エンジニアの私がどうやってGHのコードが実際に彼らのサーバーでデプロイされてるか確認できるの?

確実に言えるのは、これが本番環境で動いてるコードじゃないってこと。

一般的に、オープンソースにすることの目的はそれじゃないと思う。

自分のCソースファイルから生成された機械語が、実際にその中にエンコードされた動作と一致しているかどうか、どうやって確認するの?

違うよ。最後の「アルゴリズム」リリースは、Twitterのリポジトリにあったコードのランダムな寄せ集めで、推薦やフィードに関連しているかもしれないものだった。ソース:TwitterでML/レコメンデーションシステムに関わってた。

RIP author_is_elon、君のことはあまり知らなかったよ。 https://github.com/twitter/the-algorithm/issues/236

共和党、民主党、そしてイーロン。すごいね。

該当のファイルは今ここにあるよ: https://github.com/twitter/the-algorithm/blob/main/home-mixe... author_is_elon、author_is_democrat、author_is_republicanは実際に消えてる。今はgrok_politics_neutral、grok_politics_left、grok_politics_rightがあるよ。これに加えて、grok_category_sportsやgrok_category_musicなどの他のカテゴリーもある。すべてGrokによる注釈に基づいてる。重要なのは、このファイルは推薦には使われてないってこと。ここにある情報は「さまざまな属性を持つ投稿をどれだけ頻繁に提供しているかを測るためのメトリクストラッキング目的」にのみ使われてるんだ。これもauthor_is_elonに当てはまるね。

まじで笑ったwww author_is_elon author_is_power_user author_is_democrat author_is_republican

前回のリリースと同じように、アーキテクチャだけ公開して重みは公開しなかったね。競合他社がシステムを分析するのには役立つかもしれないけど(私が前に調べた感じだと、業界の最先端の推薦システムの厳密なサブセットみたいだった)、新しく推薦システムやリトリーバルシステムに入る人にはいいかも。でも、これじゃTwitterのフィードの動きについてはほとんど何もわからないよ。

もし誰かが特定の重みでフィードが正常に動いてないことを示せれば、何か価値があるかもね。

欠点はあるけど、パラグたちがツイッターを運営してた頃よりはマシだね。

コメントやフィードのどの投稿がスパムか、または抑制されるべきかの基準も、やっぱり隠されてるね。青いチェックマークのアカウントは非認証のアカウントよりもコメントの順位が上なのは知られてるけど、フィードの可視性についてはよくわからないな。

重みがないだけじゃなくて、みんなの期待が何なのかよくわからないけど、あの赤い部分の修正があったせいで、これが有効なコードですらないことが多いよね。これって一体誰のためのものなんだろう?これが彼らが作業してるリポジトリじゃないよね? [1] https://github.com/twitter/the-algorithm/blob/main/trust_and...

MLの専門家じゃないけど、実際のTwitterフィードをオラクルとして使って重みをトレーニングするのは可能なの?

重みが常に変わっていると仮定すると、重みそのものではなく、リアルタイムで重みを調整するサービスをオープンソースにする必要があるね…

野生のスカラを見るのはいつもいいね。 :)

私たちはたくさんいるよ!

最新の差分を見ようとしたけど、ボイラープレートが多すぎて、ざっと見ただけじゃ本当の洞察は見つけられなかった。誰か有用な情報を見つけた人いる?面白い針の中の藁の山問題だね。

余談だけど、GitHubにxのユーザー名を移転させるのはいつになると思う? https://github.com/x/

ここで聞くのが正しい場所か分からないけど、BlueskyはXに比べてなんでこんなに読み込みやすくて反応が早いの?表面的には両方とも似たようなインターフェースで、コンテンツも同じくらい豊富なのに、Blueskyは常にサクサクしてて、反応も良い感じ。新しいプラットフォームなのにね。

使用頻度が低いからかもね。

わかんないけど、ログインしてないとTwitterはほとんど使えないよね。

新しい方が一般的に速いし、長年の進化でゴチャゴチャになってないからね。でも、一番の要因は、すべてを追跡する100トンの分析データがないことだと思う。

過去のディスカッション: 2022年4月25日 https://news.ycombinator.com/item?id=31160546 コメント数: 380 2023年3月31日 https://news.ycombinator.com/item?id=35391433 コメント数: 1185

ちょっと見てみたけど、いくつか気になる点や面白いと思ったことがあったよ。例えば、スロップに関する言及がいくつかあって、HomeTweetTypePredicatesにあるSlopsAuthorScoreFeatureがそれ。つまり、みんな0から1の間でスロップスコアを持つってこと。これがオープンに見えるようになって、高スロップスコアの人には名前の横に小さな豚の絵文字が付くといいなと思った。CLIENT_TWEET_TAKE_SCREENSHOTっていうアクションがあって、これはおそらく(モバイルだろうけど)クライアントがスクリーンショットを撮ったときに追跡するために使われるんだ。これまで考えたことなかったけど、投稿がスクリーンショットで外部にシェアされることが多いソーシャルメディアアプリでは、これを追跡することで別のエンゲージメント指標が得られるかもね。NSFWフィルターが2種類あって、isNsfwとisSoftNsfwだけど、その違いが分からなかった。他のメタデータタイプには、isGore、isViolent、isSpam、isLowQuality、isOcrがある。ContentFeatureAdapterには、各ツイートタイプの範囲を示すgetTweetLengthType関数があって、これは他のところでTWEET_LENGTH_TYPEを設定するために使われるんだ。ツイートの長さを変えて、すべての長さカテゴリに当てはまるツイートを定期的に出すことでバイラリティに役立つのか、それともリーチにはあまり影響しないのか気になるな。トップレベルのGrokトピックのハードコーディングされたリストがあるんだけど、彼らが何をトップレベルのカテゴリと考えているのかを見るのはちょっと面白い。アニメは独自の大きなカテゴリに分けられて、文化的に大きな勝利を収めたね。異なるサービスリクエストタイプのタイムアウト値がアプリケーション全体でかなりバラバラで、どうやってその数字に決めたのか気になる。これは前から考えていた質問だけど、深く調べる時間がなかったんだ。[0] https://github.com/twitter/the-algorithm/blob/c54bec0d4e029f...

トレーニングセットや重みがないと、これって基本的に役に立たないよ。オープンソースの見せ物だね。