![見出し画像](https://assets.st-note.com/production/uploads/images/13668634/rectangle_large_type_2_859a067469f2a988f101b83f8f2f8aae.png?width=1200)
Spotifyが採用している3つのレコメンデーションモデル
こんにちは。アサヤマ(@taasayan)です。
Spotifyには「Discover Weekly」というSpotifyオススメの30曲が毎週更新されるプレイリストがあります。
このレコメンドが超絶絶妙でいつも感動するチョイスをしてくれるのです。
「いったいSpotifyは毎週一人ひとりのユーザーのためにどうやってこの30曲を選んでいるのだろう?」と気になっていたところで
「How Does Spotify Know You So Well?」
というSpotifyファンのエンジニアによる記事を見つけたのでざっくり和訳&サマライズしてみました。
ーーーーー以下記事のざっくり和訳ーーーーー
SpotifyはDiscover Weeklyを作るために以下の3つのレコメンデーションモデルを採用しています。
①協調フィルタリング
②自然言語処理
③生音声モデル
それぞれのモデルについて説明します。
協調フィルタリング
協調フィルタリングとは、あるユーザの嗜好と類似した他のユーザの情報を用いて自動的に好みの推測をする方法のことです。
Netflixは以前、星による評価でユーザーの好みを分析して成功しましたが、
Spotifyは代わりに「曲をプレイリストに保存」、「アーティストのプロフィールページへの訪問」などのユーザーの行動データを使っています。
例えば以下のように推測が行われています。
例)
タカシくんが聴いた曲:A, B, C, D
サクラさんが聴いた曲: B, C, D, E
↓
■協調性フィルタリングによる推測
タカシくんとサクラさん、2人は3曲同じ曲を聴いてるということは趣味が似ているユーザーだね。
サクラさんが聴いた曲なら、タカシくんもきっと気にいるよ!
実際には膨大なデータなのでSpotifyはPythonのライブラリを使ってユーザーベクトルと曲ベクトルによるマトリックスマスを作っています。
実際のデータは
・1億4000万のユーザーベクトル
・3000万の曲ベクトル
協調フィルタリングにおいてこの膨大なデータから他のすべてのユーザーのベクトルを比較して、どのユーザーがあなたに最も似ているのかを見つけ出しています。
曲ベクトルにおいても同じですべての曲から似ているものを見つけ出します。
自然言語処理
協調フィルタリングに自然言語処理を付け加えることが効果的であることをSpotifyは知っていました。
SpotifyはコンスタントにWeb上をクローリングして特定のアーティストや曲について人々がなんと言っているのかの情報を収集しています。
・どのような形容詞で表現されているか
・どの言語層で話題になっているか
・一緒に話題になっているアーティストや曲はなにか
など。
収集されたデータから、「トップタームス」と呼ばれる、各曲やアーティストに最も関連性の高い言葉たちとその「重みづけ」がわかってきます。
Spotifyはこういったトップタームス&重み付けと協調性フィルタリングを組み合わせて、曲と曲、アーティストとアーティストの類似性を導き出しているのです。
生音声モデル
新しくSpotifyに登場したばかりの知られていないアーティストの場合、リスナーがほとんどいないので、協調性フィルタリングをしようと思っても類似するリスナーが少なくなってしまいます。
また、Web上で話題になっていないアーティストだと自然言語処理を行うためのデータもありません。
しかし人気の曲と新しい曲を差別することがない生音声モデルのおかげで無名なアーティストでもDiscover Weekly上で人気曲の隣に表示されることができるのです。
一見抽象的な生音声データを分析するためにSpotifyは畳み込みニューラルネットワークを使っています。
畳み込みニューラルネットワークは顔認識ソフトウェアで使われている技術で、Spotifyではピクセルの代わりに音声データを使ってこの技術を応用しています。
ニューラルネットワークは
・拍子
・音程
・モード
・テンポ
・音量
といった各楽曲の音声的な特徴を理解し吐き出してくれます。
リスナー数やWeb上の情報が少ないアーティストや楽曲であってもこういった楽曲の生音特徴の理解によってSpotifyが
・曲同士の音声的な類似性
・ユーザーが好むであろう曲の特徴
を推測することを可能にしているのです。
Spotifyが公開している生音特徴データを取得できるAPIを使って、実際に楽曲分析をしてみたのでこちらも良ければ見てみてください。
この記事が気に入ったらサポートをしてみませんか?