ネットサービス

Twitterのアルゴリズムをオープンソース化することはできるのか?


Twitterの買収に向けた動きを加速させているイーロン・マスク氏は、Twitterをオープンソース化することでもっと公平な場にするよう提言しています。ソフトウェア開発者のトラビス・フィッシャー氏も、「Twitterのアルゴリズムをオープンソース化することはできるのか?」という疑問を抱いたそうで、これを実現するために必要な要素を分析しています。

Open Sourcing Twitter’s Algorithm Part 1: How Twitter Works
https://transitivebullsh.it/oss-twitter-algorithm-part-1

イーロン・マスク氏は2022年4月14日に開催されたTED Talksの中で、「Twitterを言論の自由のための場にするため」にTwitterの買収を目論んでいると語りました。このイベントの中で、マスク氏は「Twitterのアルゴリズムをオープンソース化することで、コンテンツへの取り締まりの介入を最小限に留めるべきです」と主張。

マスク氏は過去にもTwitter上で「Twitterのアルゴリズムをオープンソース化すべき?」というアンケートを実施しています。なお、このアンケートには100万人以上が回答しており、「Yes(はい)」が80%以上を占める結果となりました。

Twitter algorithm should be open source

— Elon Musk (@elonmusk)


Twitterのオープンソース化に興味を抱いているのはマスク氏だけではありません。Twitterの創業者であるジャック・ドーシー氏も、「Twitterで使用する(あるいは使用しない)アルゴリズムについての選択権は、すべての人に開かれているべきです」とツイートしています。

The choice of which algorithm to use (or not) should be open to everyone https://t.co/o2DkSTWW0O

— jack⚡️ (@jack)


Twitterをオープンソース化する上で問題となるのはそのメカニズムです。Twitterはタイムラインに「トップツイート優先(Home)」と「最新のツイート(Latest)」の2つのアルゴリズムフィードを採用しています。「最新のツイート」は自身がフォローしているアカウントが投稿した最新のツイートを時系列に並べるだけのもので、これは2016年にTwitterが新しいアルゴリズムフィードを採用するまでデフォルトで採用されてきたもの。もうひとつの「トップツイート優先」は、Twitterでフォローしているアカウントの中からユーザーが頻繁にやり取りする相手のツイートや、自身が関与するツイートをベースにタイムラインにツイートを並べるというものです。


記事作成時点ではTwitterでデフォルトで採用されているアルゴリズムフィードは「トップツイート優先」で、「ほとんどのTwitterユーザーがこのアルゴリズムフィードを使用している」とフィッシャー氏。

続いて、Twitterの複雑なシステムを理解するために重要なこととして、フィッシャー氏は「Twitterのコア機能を理解すること」を挙げています。そこで重要なのが2020年に最初にリリースされたTwitterのパブリックAPI v2です。これによると、Twitterにおけるコア機能はユーザーが投稿する短文の「Tweet(ツイート)」と、ユーザーアカウントである「User(ユーザー)」の2つ。Twitterにはさまざまな機能がありますが、「Mentions(メンション)」「Quote Tweet(引用ツイート)」「Bookmarks(ブックマーク)」「Hidden Replies」などはあくまでも関係コンポーネントに過ぎないとのこと。また、「Space」「List」「Media」「Poll」「Place」などの機能も、別のリソースモデルとして存在しているとのことです。そのため、フィッシャー氏は「Twitterのメカニズムを知る上で必要不可欠ではないため、コア機能以外は無視する」としています。

Twitterのようなソーシャルネットワークサービスは非常に大規模なネットワークを形成しています。Twitterというネットワークにおけるノードは「ユーザーおよびツイート」で、エッジは「ツイートに対するリプライやリツイート、いいねといった反応(インタラクション)」です。


フィッシャー氏は「Twitterのコアビジネスの大部分はこのユーザー・ツイート・インタラクションにより構築された膨大なデータベースであると言えます」と主張。このデータベースには、ユーザーがログインしたり、ツイートを表示したり、別ユーザーのプロフィールを表示したり、ツイートしたり、リプライしたりといった記録がすべて保存されます。

Twitterの「トップツイート優先」アルゴリズムフィードは、「ユーザーがどのツイートやユーザーとやり取りする可能性が高いか」を予測する、パーソナライズされたレコメンデーションシステムを利用しています。このレコメンデーションシステムにおける重要なポイントは以下の2つ。

1:機械学習モデルの教育に使用される基礎データ(上記で説明したTwitterの大規模独自ネットワークから得られる情報、つまりは内部データベースに保存されているデータ)
2:関連性を判断するためのランキングアルゴリズム

Twitterのランキングアルゴリズムは、「ツイート自体の持つ特性」(ツイートの最新性やメディアの有無、インタラクション)や「ツイート主との関係」(過去のやり取りやアカウント間のつながりの強さなど)、「ユーザー自身について」(過去に関与したツイートやTwitterを使用する頻度など)を考慮し、Twitter上で行われる各アクションに重みづけを行います。


これらの要素をベースにフィッシャーさんが作成した「Twitterのアルゴリズムフィードを大幅に簡略化した擬似コード」が以下の通り。

export abstract class TwitterAlgorithmicFeed {
  /**
   * Pseudo-code for understanding how Twitter's algorithmic feed works.
   */
  async getAlgorithmicTimelineForUser(user: User): Promise<Timeline> {
    const rawTimeline = await this.getRawTimelineForUser(user)
    const relevantTweets = await this.getPotentiallyRelevantTweetsForUser(user)

    const mergedTimeline = await this.mergeTimelinesForUserBasedOnRelevancy(
      user,
      rawTimeline,
      relevantTweets
    )

    return this.injectAdsForUserIntoTimeline(user, mergedTimeline)
  }

  /**
   * Returns a reverse-chronological stream of tweets from users directly
   * followed by a given user.
   */
  abstract getRawTimelineForUser(user: User): Promise<Timeline>

  /**
   * Returns a stream of tweets ordered by relevancy for a given user at a
   * given time.
   *
   * This will only consider tweets from users the given user is not already
   * following.
   */
  abstract getPotentiallyRelevantTweetsForUser(user: User): Promise<Timeline>

  /**
   * Returns a stream of tweets ordered by relevancy to a given user, taking
   * into account both their raw timeline of latest tweets and a subset of
   * the network graph timeline containing potentially relevant tweets.
   */
  abstract mergeTimelinesForUserBasedOnRelevancy(
    user: User,
    rawTimeline: Timeline,
    relevantTweets: Timeline
  ): Promise<Timeline>

  /**
   * Returns a stream of tweets which injects ads into the timeline for a
   * given user.
   */
  abstract injectAdsForUserIntoTimeline(
    user: User,
    timeline: Timeline
  ): Promise<Timeline>
}


なお、この擬似コードはGitHub上でも公開されています。

twitter-feed-algorithm/algorithmic-feed.ts at master · transitive-bullshit/twitter-feed-algorithm · GitHub
https://github.com/transitive-bullshit/twitter-feed-algorithm/blob/master/src/algorithmic-feed.ts

この記事のタイトルとURLをコピーする

・関連記事
イーロン・マスクがTwitter買収に向け6兆円を調達、「買収成功時にはスパムボットを抹殺する」宣言 - GIGAZINE

「Twitterが保守派に厳しいのは間違い、保守派が誤情報を共有しがちなだけ」という指摘 - GIGAZINE

Twitterにジョークを投稿した医師がアラブ首長国連邦で逮捕される - GIGAZINE

Twitterで「このユーザーに関わっている人を全員ブロック」を一発実行できる「Red Block」の使い方 - GIGAZINE

in ネットサービス, Posted by logu_ii

You can read the machine translated English article here.