音声プラットフォームVoicyのチャンネルレコメンド改善プロジェクト:第三弾

はじめに

はじめまして! 2022年8月から株式会社Voicyのデータチームにジョインしたイシケンです。

テックブログどころかブログの執筆自体が初めてなので、戸惑いながら筆をとっています!何卒、温かい目で見ていただければ!

今回は現在データチームで取り組んでいるレコメンド改善プロジェクトの続きのお話です。

さて、今回はレコメンド改善プロジェクトの中で私が取り組んだコンテンツベースフィルタリングのレコメンドについて簡単に紹介させていただきます。

もし前回・前々回の記事を見ていない方がいらしたら、先にそちらを読んでから当記事を読んでいただけると全体の流れを抑えながら読めるかと思います!

tech-blog.voicy.jp

voicy.jp

Voicyの既存のレコメンドについて

既存ロジックの概要

まず今回作成したレコメンドについて語る前に、既存のレコメンドについて軽く触れておきます。

Voicyで扱われている既存のレコメンドは協調フィルタリングという手法で作成されています。

協調フィルタリングとは、「自分と聴いている放送の好みが似ているユーザは、自分の趣味趣向と似ているだろう。ならば自分は聴取していないが自分に似ているユーザが聴取した放送は面白い放送に違いない!」という考え方の手法です。

多くのユーザの中から自分に似ているユーザ群を探し出し、そのユーザ群が聴取していて自分が聴取していない放送をおすすめするというのが基本のロジックです。

今回作成したレコメンドについて

コンテンツベースフィルタリングとは

上記で述べたようにユーザ行動履歴から似ているアイテム・ユーザを特定する方法を協調フィルタリングといいます。

対してアイテムのテキスト情報や属性情報などのアイテムの内容を元にアイテム間の近さを評価し、内容が近いものをオススメする手法をコンテンツベースフィルタリングといいます。

今回はこのコンテンツベースフィルタリングでレコメンドを作成したよ!というお話です。

作成したレコメンドの概要

コンテンツベースフィルタリングのレコメンドは「アイテムの内容を表す情報を元に評価を行う」のでアイテムの内容を表す情報を考える必要があります。

今回はこの「アイテムの内容を表す情報」をチャンネルに紐づくテキスト情報としてレコメンドを作成しました。

チャンネルに紐づくテキスト情報の具体的な内容としてはチャンネル名・チャンネル詳細ページに記載されている紹介文などをチャンネルの内容を表すテキスト情報と定義しこの情報をもとにチャンネルごとの近さを評価していきます。

用いた手法

上記のようにチャンネルのタイトルや紹介文を内容を表すテキストとして定義するぞ!と考えたのはいいのですが、これをもとにどのようにしてチャンネルごとの近さの評価を行うかが問題です。

今回はdoc2vecと呼ばれる手法を用いました。 doc2vecの根幹となる技術にword2vecという技術があり、こちらは文章内での単語の共起表現などから単語の分散表現を固定長のベクトルで獲得する技術です。 このword2vecを発展させた技術としてdoc2vecが登場し、こちらは単語ではなく任意の長さの文章を固定長のベクトルに変換することが可能です。

チャンネルごとに抽出したテキスト情報をdoc2vecに喰わせることで各チャンネルをベクトル空間上で表現した際のベクトルを得ることが可能です。

このようにして得たチャンネルを表すベクトルについて、各チャンネル同士でコサイン類似度などで距離を測り、チャンネル同士の近さを評価していきます。

これでチャンネル同士の近さを得ることができました!あとはレコメンドを表示するユーザが最も聴いているチャンネルAに対してチャンネルAに近いチャンネル群を抽出し、未聴や未フォローのチャンネルを剪定することで「チャンネルAを聴いているあなたにオススメのチャンネル一覧」が作成できます。

まとめ

今回は既存のレコメンドについて簡単に取り上げた後に、既存とは違うアプローチで作成したレコメンドについての解説を行いました!

果たして作成したレコメンドは既存レコメンドを打ち破ることができるのでしょうか!!(速報的に厳しい戦いになりそうなのが見えてきて絶望の最中にいることは内緒です。。。)

他にもVoicyではブログリレーとしてさまざまな連載をおこなっているので、サイドバーの【Voicy秋の運動会 】から読んでみてください。