アルゴリズムを学んでいてふと、実際のサービスにどんな感じで応用されているのだろう、と思いました。
知りたいですよね、実用例。
そう思って調べてみました。
ちょうど良い例が転がっていましたよ、そう、Twitterです。
Twitterのアルゴリズムが実現したいこと
ヤッカリーノ新CEOは、Twitterが目指す世界像をこう語っています。
「世界で最も正確なリアルタイム情報源、そしてコミュニケーションにおけるグローバルなタウンスクエア」
リアルタイムに、欲しい情報へアクセスすることができるプラットフォームにすること。そうすることで、ユーザーの継続利用に繋げたいと。
そのため、Twitterのアルゴリズムは、「どうやったらユーザーがTwitterに長く滞在してくれるか」をコンセプトに作られています。
広告収入を収入源にしているビジネスモデルなので納得ですね。
https://tweethunter.io/blog/x-algorithm-full-analysis
Twitterのアルゴリズム
Twitterのアルゴリズムには、「あなた専用のタイムライン」(the For You Timeline)という名前がついています。
その名の通り、あなたが長時間アプリ内に滞在してくれるように、様々なグラフやMLを用いてアルゴリズムを組み、あなた専用のタイムラインを作っているようです。
Twitterのgithubにthe For You Timelineの全プロセスが載っていました。
見たところ、大まかに3つのフェーズがあります。
- 候補となるツイートを選定 (Picking Tweets)
- ランキング化
- ヒューリスティックス & 抽出
(by https://tweethunter.io/blog/x-algorithm-full-analysis)
ユーザーに最適なツイート(フィード)を表示させるために、裏側では下記のようなステップを通してアルゴリズムが作られています。
- プラットフォーム上の数千万から数億のツイートから、あなたが最も気に入る1500のツイートを推測
- それぞれのツイートに「エンゲージメント確率スコア」を与え、ベストからワーストまでランク付けする(上位のツイートは、あなたがエンゲージする可能性が最も高いものになる)
- スパムやブロックされたアカウントなどを削除してツイートリストを篩にかけ、最もスコアの高いツイートを最初に表示させる。そして2-3ツイートごとに広告を投入する
この3つのステップを経てTwitterが表示するものが、Twitterフィードを作成しています。
それぞれのパートを細かく見ていきます。
候補となるツイートを選定 (Picking Tweets)
Twitterは、候補となるツイートを選定するために、下記3つの観点を重視しています。
- フォロワーの属性(どんな人があなたをフォローしているか)
- エンゲージメント(いいね、リツイート、リプライがどのくらいついているか)
- ユーザーデータ(ミュート、フォロー解除、スパムはされているか)
記事を見ると、これらを分析するためにTwitterはまず、Real Graphというアルゴリズムを使って、ユーザーが好みそうなtweetを1500個抽出していると書かれています。
しかも、さらに複数の観点から抽出しています。
- People you follow
- People you don’t follow
1は納得ですね。あなたがフォローをしている人が好きなツイートは、あなたが好きになりそうなツイートの確率が高い。
2は、ちょっとよく分からない。フォローしていない人?
つまり、マイナスからアプローチして、TLに表示させるツイートを選別しているということです。
フォローしていない人を抽出する際に、2つのグラフ(分布図)を使用しています。
- Social graph
- Embedding spaces
Social graph
Social graphでは、二つの疑問に対する解答を、Graphjetと呼ばれる、ユーザーとツイート間で行わているリアルタイムの交流を分析するエンジンに投げ込んで最適なツイートを抽出しています。
What Tweets did the people I follow recently engaged with?
あなたのフォローしている人は最近何に反応した?
Who likes similar Tweets to me, and what else have they recently liked?
自分と同じようなツイートにいいねをした人は誰か、そしてその人はどんなツイートにいいねをしてきたか?
Embedding spaces
Embedding spaces
自分と趣味趣向が似たようなユーザー、あるいは好きそうなツイートを探して、自分のタイムラインに表示させる候補のツイートを探しています。
https://www.ueo-workshop.com/wp-content/uploads/2014/04/sig-alternate.pdf
例えば、私が「ラップスタア誕生に出ていたAMOのLegendって曲めっちゃlitだよね炎」とつぶやいたとします。
そうすると、Twitterは先ほどの呟きと下記のようなユーザーの相関性を計算します。
- 私のツイートを見た誰かのユーザー
- ヒップホップに関するツイートを追っかけているユーザー
- ラップスタアというアカウントをフォローしていて、私のツイートを見たユーザー
そしてTwitterのアルゴリズムは、あなたに対して行なったカテゴライズと同じようなやり方で、残りの数千万以上のユーザーに対しても同様のプロセスを行い、多種多様なコミュニティを作成しています。
厳選されたコミュニティの中であなたに合いそうなコミュニティを探し、パーソナライズされた候補となるツイートを最終的に1500個抽出して次のフェーズへ進みます。
ランキング化
次に、抽出したツイートにランキングをつけます。
ランキング付けに必要な項目はポジティブなものからネガティブなものまで、多岐にわたっています。
それぞれの項目にはweightがふってあり、weightに応じてユーザーが起こすアクションを想定できるようになっているようです。
記事にあった例を引用すると、
- 誰かがあなたのツイートをクリックし、2分以上そこに留まった場合、私のツイートに「いいね!」を押しただけの場合と比べて22倍の重み付けがされる。
- 私のツイートから私のプロフィールをクリックし、ツイートに「いいね!」や「返信」をした場合、「いいね!」の24倍の重み付けになる。
- しかし、もし誰かがあなたのツイートをスパム報告したら、それは「いいね」の-738倍になり、ダメなツイート認定をされてしまう。
ヒューリスティックス & 抽出
ここまできたら、偏ったツイートを表示させないために、色々な味付けがなされます。例えば下記のようなフィルタリング。
- 表示させるかどうかをフィルタリング: ブロックかミュートをしているユーザーを非活性化
- ツイート主の一元化阻止: 同じツイート主をフィードにたくさん表示させない
- コンテンツのバランス化: ツイートのミックシング.
- フィードバックベースの非表示対応: 見たくないという反応が示されたツイートを表示させない.
- 社交性の証拠性: あなたがフォローをしている人がフォローをしている人のみ表示させる
ここまできてやっと我々ユーザーの元に最適なツイートが表示されるわけですね。
https://blog.x.com/engineering/en_us/topics/open-source/2023/x-recommendation-algorithm
まとめ
- Twitterはタイムラインに表示させるツイートを厳選する前に色々なアルゴリズムを組んで最適なツイートを選別している
- プラットフォーム上の数千万から数億のツイートから、あなたが最も気に入る1500のツイートを推測している
- それぞれのツイートに「エンゲージメント確率スコア」を与え、ベストからワーストまでランク付けをしている
- スパムやブロックされたアカウントなどを削除してツイートリストを篩にかけ、最もスコアの高いツイートを最初に表示させる。そして2-3ツイートごとに広告を投入することで、我々の手元に最高のツイートがサーブされる
- Twitterはすごい