本文へ移動
X解体新書

リファレンス

用語集

この資料に出てくる専門用語を、予備知識ゼロの状態から読めるように説明します。

46 / 46 件

用語説明

おすすめ

For You

Xを開くたびに、その場でゼロから組み立てられるタイムライン。

作り置きされた「今日の人気投稿リスト」ではありません。あなたがアプリを開いた瞬間に、あなた専用のフィードが毎回新しく作られます。レストランでいえば、棚から出来合いの弁当を渡されるのではなく、その場で厨房が一皿ずつ作っているようなものです。だから同じ投稿でも、見る人によって順位も、そもそも表示されるかどうかも変わります。最終的に返ってくる投稿は35件だけです。

関連 Home Mixer・候補・パイプライン

for_you_candidate_pipeline.rs:219-234

Home Mixer

home-mixer

おすすめタイムラインを組み立てる司令塔のサービス。

投稿をかき集め、絞り込み、点数を付け、並べ、広告やおすすめユーザーを差し込むまでを取り仕切ります。料理でいえば、材料の調達から盛り付けまでを回すキッチンの現場責任者です。実際の予測モデルや多様化サービスは別の建物にあり、Home Mixerはそこへ発注して結果を受け取ります。今回の公開コードで、制作者に効く定数のほとんどはここに集まっています。

関連 パイプライン・Phoenix・VMRanker

phoenix_candidate_pipeline.rs:282-339

候補

candidate

点数を付ける前に、とりあえず集められた投稿1件のこと。

1回のリクエストで、フォロー中・フォロー外あわせて最大で約3500件が集められます(既定の上限の合計)。オーディションでいえば、審査を受ける権利を得た応募者の一覧です。ここに入らなかった投稿は点数すら計算されないので、「バズるコツ」の議論の大半より、この一次選考に残るかどうかのほうが先に効きます。候補は複数の取得ソースから集められ、重複は先着1件だけが残ります。

関連 Thunder・Phoenix Retrieval・SimClusters・人気投稿リスト・Filter

candidate_pipeline.rs:129

Thunder

フォロー中の相手の投稿を保持する、シンプルな投稿倉庫。

本文やいいね数は保存していません。持っているのは投稿ID・著者・作成時刻・返信先や元投稿のIDなどです。図書館というより、番号札が時系列で並んだコインロッカーに近い仕組みです。返す順番は投稿が新しい順で、既定の保持は48時間です。著者ごとにオリジナル50件・返信+リポスト30件・動画100件という枠があります。

関連 候補・in-network / out-of-network・オリジナル投稿

post_store.rs:36-48

Phoenix

「この人はこの投稿にどう反応するか」を予測するAI本体。

投稿1件と閲覧者1人の組み合わせごとに、いいね・返信・通報などの行動の確率や、滞在の秒数を予測します。天気予報が「明日の降水確率60%」と言うのと同じで、結果ではなく予測を返すのがポイントです。公開設定では8層のTransformerで、閲覧者の直近の行動履歴をリクエストごとに受け取ります。そのため、直前の行動が次のリクエストに含まれ得ます。

関連 Transformer・予測ヘッド・予測確率・Scorer

xrecsys.py:260-265

Phoenix Retrieval

フォロー外の人に投稿を届ける、中心的な取得経路。

閲覧者と投稿をベクトルにして、近い投稿を探します。通常の索引に入るのはオリジナル投稿(引用を含む)で、コミュニティ投稿・リポスト・ドロップ対象は入りません。返信は通常の索引には入りませんが、今回から返信専用の索引ができました。ただし公開既定では、フォロー外の返信は後段のフィルタで落ちます。空港に、行き先ごとのゲートが分かれているようなものです。

関連 候補・オリジナル投稿・in-network / out-of-network

phoenixRankAllCandidateProcessor.strato:470-530

SimClusters

「この投稿を好きな人はあれも好き」で投稿同士を結んだ地図。

いいねの重なりだけを手がかりに、投稿と投稿の近さを測ります。書店で「この本を買った人はこの本も買っています」と並ぶ棚と同じ発想です。載る条件はいいね8件以上で、いいねの重みは8時間で半減します。そのため、同じ件数でも新しいいいねのほうがこの地図では重くなります。候補の年齢上限の既定は48時間です。

関連 埋め込み・候補・Phoenix Retrieval

Configs.scala:65

VMRanker

点数の再計算と、似た投稿を間引く多様化を担当するサービス。

home-mixer から呼ばれて、係数を掛けた点数を再計算し、新人枠の引き上げ、同一作者の減衰、フォロー外割引を掛けます。そのあと多様化で、選ばれなかった投稿の点数を0にします。プレイリストを組むDJが、良い曲でも同じジャンルばかりにならないよう外していくのに似ています。呼び出しに失敗したときは、home-mixer の手元の点数でそのまま配信されます。

関連 DPP・埋め込み・Scorer

dpp_model.rs:196-206

DPP

Determinantal Point Process

「良さ」と「重複しなさ」を同時に最大化する選抜アルゴリズム。

行列式点過程という数学の道具で、選んだ集合の中身が互いに似ていないほど値が大きくなる性質を使います。旅行のおみやげを選ぶとき、一番おいしい菓子を5個買うのではなく、味の違う5種を選ぶ判断を数式にしたものだと思ってください。公開既定では、点数上位150件をプールに使います。意味データが取れなかった投稿はランダムなベクトルで代用され、他のどれとも似ていない扱いになります。

関連 VMRanker・埋め込み

dpp.rs:35-56

Semantic ID

投稿の意味を数十個の番号列に圧縮した「内容の指紋」。

投稿の情報をまとめてAIが読み取り、ベクトルにしてから、6段階の番号列へ量子化します。長い住所を郵便番号のような階層コードに畳んだもの、と考えると近いです。モデルはこのコードを通じて投稿の中身を受け取ります。ただし取りに行くのは投稿から180秒後が既定です。

関連 埋め込み・Phoenix・Hydrator

semantic_id_hydrator.rs:106

埋め込み

embedding

言葉や画像を、意味の近さが距離になる数値の並びに変換したもの。

「犬」と「子犬」は近く、「犬」と「金融政策」は遠い、という関係を座標で表します。街の地図に店をプロットして、近い店ほど似た業種になるように配置し直したイメージです。Xでは投稿の内容表現(Semantic ID の元)にも、SimClustersの類似検索にも、VMRankerの多様化にも使われています。埋め込みが取得できない投稿は、VMRankerではランダムなベクトルで代用されます。

関連 Semantic ID・SimClusters・DPP

mm_encoder.py:23

Transformer

系列を丸ごと見て、どこに注目するかを学習するAIの基本構造。

ChatGPTなどの大規模言語モデルと同じ骨格です。文章を読むとき、人は全部の単語を均等に見るのではなく、重要な語に目を戻します。その「注目の配り方」自体を学習するのがTransformerです。公開設定のPhoenixでは8層・2560次元で、閲覧者の行動履歴1022件と候補64件を1本の列に並べて処理します。候補同士は互いを参照できない設計です。

関連 Phoenix・予測ヘッド・埋め込み

ranker_attention_utils.py:52-56

予測ヘッド

prediction head

モデル本体の最後に付く、行動1種類ごとの出力口。

1つのモデルが、いいね用・返信用・通報用……と用途別の蛇口を並べて持っているイメージです。二値ヘッドは「その行動をする確率」を、連続ヘッドは滞在秒数などの量を返します。ブックマークも行動の種類としては定義されていますが、26項目に固定の係数はありません。

関連 Phoenix・予測確率・ウェイト

recsys.proto:684-693

予測確率

predicted probability

「この閲覧者がその行動をしそうか」をモデルが見積もった0〜1の数値。

係数が掛かる相手は、実際に起きた回数ではなくこの確率です。ここを取り違えると数字の意味が正反対になります。健康診断の「10年以内の発症リスク3%」と同じで、まだ何も起きていない段階の見積もりです。たとえばリンクコピーの確率が3%なら、係数20を掛けて寄与は0.6点。誰かが本当にコピーしたかどうかは、この計算に一切関係しません。

関連 ウェイト・予測ヘッド・Scorer

scoring.rs:57-59

ウェイト

weight

予測確率や予測秒数に掛ける係数。home-mixer には26項目ある。

Xのコメントによると、「その行動をどれだけ大事にするか」と「その行動の起きやすさ」の両方を反映した値です。音楽のミキサーのつまみに似ています。公開既定ではリンクコピー共有が+20.0、返信・引用・DM共有が+5.0、いいねは+0.66、通報が-234.0です。滞在時間の係数は秒数に掛かるので、確率の係数と数字だけで比べることはできません。

関連 予測確率・Scorer・相互フォロー

param.rs:396-514

in-network / out-of-network

IN / OON

閲覧者がその著者をフォローしているか(IN)、していないか(OON)。

この区別はおすすめの多くの部分に効いています。同じ町内会の掲示板に貼るか、駅前の掲示板に貼るかの違いだと思ってください。フォロー外の投稿には公開既定で0.75倍が掛かり、公開既定ではフォロー外のリポスト・返信はフィルタで落とされます。可視性のルールも、フォロー外向けは27本多くなっています。

関連 Visibility Filtering・Phoenix Retrieval・Thunder

scoring.rs:206-215

相互フォロー

bidirectional follow

お互いにフォローし合っている関係。返信の係数が20.0になる条件。

閲覧者と著者が相互フォローで、かつその投稿が返信でもリポストでもないオリジナル投稿のときだけ、返信の係数が5.0+15.0=20.0になります。3つの条件が全部そろって初めて発動する、鍵が3本必要な金庫のような仕組みです。よく誤解されますが、相互フォローでも返信やリポストにはこのボーナスは付きません。なお相互フォローの重なり具合(Jaccard類似度)は選抜後の処理で、既定でも無効です。ここで効くのは相互かどうかの真偽値です。

関連 ウェイト・オリジナル投稿・in-network / out-of-network

param.rs:398-403

Hydrator

IDだけの候補に、本文や著者情報などの中身を付け足す部品。

候補が集まった直後は、投稿IDと著者IDくらいしか分かりません。そこへ本文・メディア・言語・フォロワー数・NSFWフラグ・エンゲージメント数などを外部から取ってきて肉付けします。名簿の名前だけの行に、住所と写真を貼っていく作業に近いです。閲覧者側にも19種のHydratorがあり、ブロック・ミュート・フォロー・行動履歴などを集めます。

関連 候補・Filter・Semantic ID

phoenix_candidate_pipeline.rs:383-414

Filter

条件に合わない候補を外す門番。For Youにはスコア前に21個、選抜後に5個。

順位を下げるのではなく、候補集合から外します。空港の保安検査と同じで、引っかかったら先に進めません。しかも宣言順に逐次適用されるので、前段を通ったものだけが次段に渡ります。公開既定で投稿者に関わるのは、48時間の年齢制限、フォロー外のリポスト・返信の除外、閲覧者のミュートキーワード、ブロック関係による巻き添え、既読判定などです。実験用で既定オフのものもあります。

関連 候補・Hydrator・Bloomフィルタ・Visibility Filtering

phoenix_candidate_pipeline.rs:420-444

Scorer

残った候補に点数を付ける工程。既定で動くのは主に3つ。

PhoenixScorerが予測を取り、ImmersiveVideoScorerが動画カルーセル用の予測を取り、VMRankerが係数を掛けて合計し、補正と多様化を行います。以前の RankingScorer という部品はなくなりました。採点競技で、技術点を出す審判と計算係が順に入るようなものです。計算は、合計のあとにオフセット変換・新人枠・同一著者の減衰・フォロー外割引の順です。

関連 Phoenix・ウェイト・VMRanker・コールドスタート

phoenix_candidate_pipeline.rs:466-472

Selector

点数順に上位だけを切り出す工程。ここでは50件。

採点が終わった候補を降順に並べ、上位50件だけを次へ通します。試験の合格発表で、点数順に定員ぶんだけ線を引くのと同じです。VMRankerに0点にされた候補はここで下に沈みます。この50件がさらに切り詰められ、最終的に返る投稿は35件です。

関連 Scorer・VMRanker・パイプライン

config.rs:17

パイプライン

candidate pipeline

候補取得から最終組み立てまでの12段の処理の流れ。

閲覧者情報の収集、候補取得、情報の肉付け、21個のフィルタ、Scorer、上位50件の選抜、後段の肉付け、5個のフィルタ、35件への切り詰め、副作用の記録という順に進みます。工場のベルトコンベアで、各工程が前の工程の出力だけを受け取る形です。だから上流で落ちた投稿は、下流でどれだけ良くても復活しません。

関連 Home Mixer・候補・Filter・Selector

candidate_pipeline.rs:123-166

Visibility Filtering

VF

「そもそも表示していいか」を順位とは完全に別に判定する仕組み。

READMEの説明では、答えはALLOW(普通に表示)、NOTICE(注記つきで表示)、INTERSTITIAL(警告を挟んで表示)、DROP(表示しない)の4つです。信号機に近く、公開のHome向けルールに「点数を少し下げる」ものは見当たりません。そのかわり、フォロー中向けとフォロー外向けで別のルール一覧が当たります。今回の更新で、実装はRustの新しいものに移りました。

関連 セーフティラベル・ドロップ・インタースティシャル・in-network / out-of-network

levels.rs:296-357

セーフティラベル

safety label

投稿やアカウントに付く、安全性の判定タグ。

スパム疑い、悪質URL、NSFW、暴力表現などが投稿単位・アカウント単位で付きます。図書館の本に貼る「閲覧注意」シールのようなもので、本を捨てるわけではなく、置く棚が変わることが多いです。Homeのフォロー中の投稿でも落ちるラベルは一部で、多くは「非フォロワーへの推薦」の面で効きます。

関連 Visibility Filtering・botmaker・Under the Hood・ドロップ

author_rules.rs:169-174

インタースティシャル

interstitial

警告を挟んだうえで、タップすれば見られる表示形式。

投稿の上に一枚カバーをかぶせて「センシティブな内容が含まれます」と出す表示です。本にかかった帯を外せば読める、という状態に近いです。Home向けのぼかしのルールは、ラベルがあること、閲覧者が著者本人でないこと、閲覧者が「センシティブなメディアを表示」設定にしていないことを条件にしています。

関連 Visibility Filtering・セーフティラベル・ドロップ

tweet_rules.rs:456-465

ドロップ

Drop

その閲覧者には表示しない、という最も強い判定。

順位が下がるのではなく、その面には表示されません。READMEの説明では、最初にDropと答えたルールで評価が終わります。裁判でいえば、他の証拠を見る前に却下が決まるようなものです。多くのルールで著者本人は対象外なので、自分の画面では気づきにくいことがあります。

関連 Visibility Filtering・インタースティシャル・セーフティラベル

README.md:421

Grok

grox

投稿の中身をLLMで読んで、安全性やスパムを分類する仕組み。

ポリシーの分類の中に、スパムの細分類が11種あります。エンゲージメント稼ぎ、エンゲージメント誘導、反応の取引、ハッシュタグ乱用、メンション乱用などの名前が並びます。判定基準のプロンプトは非公開なので、どの文面が当たるかは分かりません。返信のスパムスコアが0.97以上だと14日間のラベルが付く公開ルールがあります。

関連 セーフティラベル・エンゲージメント誘導・botmaker

state.py:28-47

botmaker

モデルのスコアを実際のラベル付与に変換するルールエンジン。

「NSFW判定が0.95以上ならこのラベルを7日間」といった条件を、設定ファイルとして書き並べたものです。工場の検査ラインで、測定器の数値を見て合格印・要再検査印を押す係にあたります。READMEによれば、一部のルールは公開されていません。モデルのスコアをもとにした凍結などの措置は、別の abuse-enforcement-service が担当します。

関連 セーフティラベル・agatha・user-cred-v2・Grok

ApplyNsfwUserLabel.df:30-37

agatha

「いいねに対する通報・ブロックの比率」でスパム性を測るシステム。

絶対数ではなく比率を見るのが特徴です。飲食店のレビューで、星1の件数そのものより「全体に占める星1の割合」を見るのに似ています。集計に使ういいねはフォロー外のものだけで、通報は180日遡って数えます。比率が一定を超えると投稿に1週間のスパムラベルが付く公開ルールがありますが、高PageRankのアカウントなどは対象外です。

関連 botmaker・user-cred-v2・セーフティラベル

AgathaLabelManager.scala:13

bdsm

行動の時系列パターンから、非真正アカウントを検出するモデル。

何を投稿したかではなく、いつ・どの間隔で行動したかを見ます。フォローとアンフォローの周期、機械的に等間隔ないいね、バースト的な連投など、人間ならまず起きないリズムを拾います。防犯システムが、足音の間隔だけで人か機械かを見分けるようなものです。8つの検出ヘッドを持ち、執行には最低30アクションが必要ですが、本番の閾値だけは公開コードでは伏せられています。

関連 agatha・botmaker・セーフティラベル

heads.py:16

user-cred-v2

フォローの繋がりをたどって計算される、アカウントの信用スコア。

認証済みアカウントと直近7日のいいね・リポストを起点に、信用が水のようにフォローグラフを流れていく設計です。信用のある人からフォローされているほど高くなります。公開ルールでは保護の条件として使われていて、botmaker では54点以上で IsHighPageRankUser が真になり、スコアが取れない場合はフォロワー2.5万人超が代わりの条件です。自動執行サービス側の閾値は、公開ファイルでは本番と違う仮の値になっています。

関連 PageRank・セーフティラベル・botmaker・agatha

UserCredV2.scala:10

PageRank

「重要なところからリンクされているほど重要」と定義する古典的な指標。

Googleの初期検索を支えた考え方で、ウェブページをリンクで辿る代わりに、Xではフォロー関係を辿ります。人づての紹介で、信頼できる人から紹介された人ほど信頼される、という連鎖を数式にしたものです。Xの実装では、ジャンプ確率0.2で最大50回反復し、対数を取ってから0〜100に丸めます。フォロワー数を数えるだけの指標ではないので、フォロワーが少なくてもスコアが高いことがあります。

関連 user-cred-v2

UserCredV2.scala:10

Under the Hood

自分の投稿・アカウントに付いたラベルを確認できる開示ツール。

投稿ラベル19種・アカウントラベル12種について集計して見せる、試験的な開示ツールです。カルテを開示してもらうのに近い仕組みです。条件はアカウント作成から1年以上かつ前月に10投稿以上で、月末から10日後に反映されます。9月の更新で、法令対応による表示制限の開示も加わりました。機能スイッチの既定はオフなので、対象でもまだ見られないことがあります。

関連 セーフティラベル・Visibility Filtering

underTheHoodReport.User.strato:18-22

Feature Switch

コードを書き換えずに、設定ファイルで挙動や数値を切り替える仕組み。

公開されている数値は既定値です。READMEは主な本番値に合わせていると説明していますが、個別の人に当たっている値までは分かりません。舞台の照明卓のようなもので、同じ舞台装置でもつまみひとつで見え方が変わります。上書きは閲覧者ごとだけでなく投稿者ごとにも起こり得ます。実運用の設定ファイル本体は公開されていません。

関連 A/Bテスト・ウェイト

ranking_config.rs:16-19

A/Bテスト

一部の利用者にだけ違う設定を当てて効果を比べる実験。

同じ日に同じ投稿をしても、人によって当たっている設定が違うことがあります。新商品の試食を店舗ごとに味を変えて出し、売れ行きを比べるのと同じ発想です。Xでは閲覧者単位だけでなく投稿者単位の割当も実装されています。READMEは、トラフィックのおよそ10%以上の実験はリポジトリで見えるようにすることを目標にしていると書いています。この資料の数値は、公開コミット時点のスナップショットとして読んでください。

関連 Feature Switch

README.md:430

動画品質視聴

VQV

動画がきちんと視聴されたと判定される行動。公開既定の係数は0.0。

再生ボタンが押された、ではなく「ちゃんと見られた」に近い指標です。前回の0.05から0.0になったので、公開既定では点数に足されません。条件として、動画の尺が10秒を超えていること、home-mixer 側では閲覧者のフォロワーが1万人未満であることも残っています。

関連 ウェイト・予測ヘッド

candidates_util.rs:19-34

滞在時間

dwell time

その投稿の上に留まる予測秒数。1秒あたり+0.006。

二値の「滞在した/しなかった」(係数0.05)と、連続値の「何秒いたか」(1秒あたり0.006)は別項目です。さらに「クリックして開いた先の滞在」(1秒あたり0.4)もあります。図書館で本を手に取ったかどうかだけでなく、何ページ読んだかも見ている、と考えると近いです。掛かるのは予測秒数で、実測の秒数ではありません。

関連 ウェイト・予測ヘッド

param.rs:477-488

未探索

post unexplored

まだ十分に配信されていない投稿に付く小さな加点。係数+0.015。

新しい在庫を少しだけ試してみる、という探索のための項目です。スーパーが新商品を目立つ棚に少しだけ置いてみるのに似ています。ただし既定では「フォロー中の投稿にしか付かない」設定になっているので、フォロー外への拡散を助ける効果はありません。係数も0.015と小さめです。

関連 ウェイト・in-network / out-of-network

param.rs:465-470

著者多様性

author diversity

同じ著者の投稿が並ぶほど、2本目以降を減点する補正。

自分より上位にある自分の投稿の本数をkとして、倍率が0.5のk乗で減っていきます。2本目0.625倍、3本目0.4375倍、4本目0.34375倍で、下限は0.25です。ビュッフェで同じ料理を何度も取ると、皿が小さくなっていくようなものです。値は vm-ranker の静的既定です。

関連 Scorer・ウェイト

params.rs:175-186

コールドスタート

AuthorColdStart

小さいアカウントの投稿を1件だけ救い上げる新人枠。

「新人が全体的に優遇される」仕組みではありません。1回のリクエストにつき条件を満たす投稿を1件選び、その点数を16位相当まで引き上げます。掛け算のブーストではなく、席を1つ確保するイメージです。条件は、返信でない・リポストでない・著者のフォロワー5万人以下・ホームでの表示200回未満・投稿から2時間以内・点数付き候補の上位97%以内です。

関連 Scorer・オリジナル投稿

author_cold_start.rs:296-333

Bloomフィルタ

Bloom filter

「もう見た投稿か」を省メモリで判定する確率的データ構造。

全部のIDを覚える代わりに、ハッシュの痕跡だけを記録します。名簿を持たずに「この特徴の人は来た気がする」で判定する受付のようなもので、来ていない人を来たと誤認することがあります。この偽陽性のため、一度も見られていない投稿が「既読」と判定されて外れることが確率的に起こり得ます。投稿者側から個別に確かめることはできません。

ブランドセーフティ

brand safety

広告の隣に置いていい投稿かどうかの判定。リーチには効かない。

投稿が何人に届くかではなく、広告と並べられるかだけを決めます。雑誌で、記事の内容によっては広告ページを隣に置かない編集判断と同じです。Grokがまだ採点していない投稿も中リスク扱いになります。

関連 セーフティラベル・Visibility Filtering

brand_safety.rs:103-131

snowflake ID

投稿IDそのものに作成時刻が埋め込まれているID形式。

IDを22ビット右シフトして基準時刻を足すと、投稿されたミリ秒が復元できます。荷物の伝票番号の先頭に受付日時が入っていて、番号を見るだけで日付が分かるようなものです。おかげで48時間の年齢判定はデータベースに問い合わせずに済みます。逆に、IDから時刻を読めなかった投稿は安全側に倒して落とされます。

オリジナル投稿

返信でもリポストでもない投稿。引用ポストもこちらに含まれる。

いくつかの仕組みが、そろってこの条件を見ています。フォロー外の通常の索引、相互フォローの+15ボーナス、新人枠の対象条件です。加えて、フォロー中の相手で0.75倍を免れるのもオリジナル投稿だけです。四つ角に同じ看板がいくつも立っているようなものです。

関連 Phoenix Retrieval・相互フォロー・コールドスタート・Thunder

inputs.rs:20-22

エンゲージメント誘導

SpamEngagementBaiting

Grokのスパム細分類の名前のひとつ。判定基準は非公開。

名前から読むと、反応を促すことを目的にした投稿を指す分類です。近い名前にエンゲージメント稼ぎ、反応の取引、ハッシュタグ乱用、メンション乱用があります。試験の答案に「丸をください」と書いても点は増えないように、係数は一人ひとりの予測に掛かるので、呼びかけた数だけ点数が増えるわけではありません。プロンプトは非公開なので、具体的にどの文面が当たるかは分かりません。

関連 Grok・セーフティラベル・ウェイト

state.py:37-44

人気投稿リスト

popular posts

今回追加された、全員共通の人気投稿の候補リスト。

24時間以内の投稿を、半減期8時間で時間補正した表示数で並べたリストです。著者あたり最大5件、全体で最大500件が既定です。書店の入口の平台のようなものですが、並んだ本が全員に勧められるわけではなく、点数は閲覧者ごとに計算されます。

関連 候補・SimClusters

popular_posts.rs:36-53