MixChannel
MixChannelは、(株)Donutsが運営する、おもに若者世代から人気を集めているライブ配信&動画投稿コミュニティアプリです。利用者は累計1,000万ユーザーを超え、月間での利用ユーザー数は80万人ほどと規模の大きなサービスとなっています。
このように大規模なサービスでは、趣味・嗜好が異なるユーザー群が多く現れるため、それぞれのユーザーに適切なコンテンツを提供する必要があります。ここで必要になるのが、レコメンドシステムです。
レコメンドシステムmarble
このような問題を解決するシステムを、MixChannelのチームではレコメンドシステムmarbleと呼んでいます。
marbleには、APIサーバからユーザーIDを受け取り、そのユーザーに対して適切なライブや動画のIDの列を出力する機能が求められます(図1)。レコメンドは後述するようなアルゴリズムを用いて行われており、レコメンド結果の送信には、gRPCと呼ばれるプロトコルが使われています。
レコメンドアルゴリズム
レコメンドアルゴリズムは、次の2種類に大きく分けられます。
- コンテンツベースフィルタリング
- 協調フィルタリング
以降では、これらについて概要をそれぞれ説明します。
コンテンツベースフィルタリング
コンテンツベースフィルタリングは、その名のとおり、コンテンツの中身に基づいて推薦を行います。その方法は、「レンタルビデオショップの店主」によくたとえられます。
レンタルビデオショップの店主は、普段から多彩なジャンルの映画を大量に見ています。そのため、客に「戦争がテーマの純愛ものの映画でお勧めはないか」と聞かれたときに、即座に複数のタイトルを提示できます。さらに、そのタイトルの一つ一つは、レンタルビデオショップの店主独自の基準によって評価されているので、それをキーにソートされた状態で出力されることでしょう。
これをシステムで置換することを考えると、各映画について、それがどのような内容であるかを示すタグを付けることになります。映画の量があまりにも膨大でタグを付けることが困難な場合は、内容が既知の映画に対して機械学習を用いることで識別器を作成してもよいでしょう。
映画の「良さ」を表す指標を用いるのも、コンテンツベースフィルタリングの1つです。雑誌などに掲載されているレビューや、レビューサイトの星の数が多い順に並べたり、興行収入が多い順に並べたりすることができます。
協調フィルタリング
一方、協調フィルタリングは、「映画A、B、Cの組が好きな人がたくさんいるならば、映画A、Bの組が好きな人は映画Cも好きだ」という仮定の下で推薦を行います。「この商品が好きな人は、こちらの商品も購入しています」という文言を目にしたことがある人も多いでしょう。
この方法は、レンタルビデオショップの店主が取る戦略としては現実的ではありません。「この映画の組がよくセットで借りられているなあ」と感じることはあるでしょうが、推薦に実用的なほどのデータを獲得することは普通の人間には難しいでしょう。
逆に、コンピュータで行う方法としては、コンテンツベースフィルタリングよりも容易です。あるユーザーがある映画を評価したという組が大量にあれば、ヒューリスティックな処理を挟むことなくどの映画を勧めるべきかを判断できるからです。
レコメンドアルゴリズムの実装
marbleでは、おもに協調フィルタリングを用いて推薦を行っています。協調フィルタリングを実装する方法について紹介します。
ナイーブな協調フィルタリングは、縦軸をユーザー、横軸をアイテムとし、その交点にユーザー/アイテム間の評価を値として持つ図2のような行列を用います。このとき、まだ評価されていない組は欠損とし、計算時には0として扱うのが自然です。
ユーザー間協調フィルタリングと呼ばれる手法ではまず、推薦を実施したいユーザーとほかのすべてのユーザーについて類似度(適当に定義しましょう)を計算し、ベクトルの形にします。図2のような行列を各アイテムについて切り出した縦ベクトルと類似度ベクトルの内積を求めることで、各アイテムの評価値を得ます。
ほかに、アイテム間協調フィルタリングという方法もあります。あらかじめすべてのアイテム間で類似度を計算しておき、あるユーザーが未評価のアイテムについて、評価済みのアイテムの評価と類似度の積の総和から評価値を計算する方法です。
しかし、これらの方法では、ユーザー数やアイテム数のオーダーが大きくなると現実的な時間では計算できなくなってしまったり、ほとんど評価をしたことのないユーザーや評価されたことのないアイテムについて適切なレコメンドを行うのが難しかったりします。そのため、何らかの下処理を行い、簡単に計算できるような状態にしたり、ある程度のクラスタとして扱えるようにしたりする必要があります。
このような下処理をしてからレコメンドを行うような方法をモデルベース協調フィルタリングと呼びます。後編では、下処理の方法として行列分解とWord2Vecの2種類を紹介しますが、アルゴリズムの実装については踏み込まず、出力の特徴を述べることにします。
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT