この記事は Wantedly Advent Calendar 2023 兼 情報検索・検索技術 Advent Calendar 2023 の3日目の記事です。
ウォンテッドリーでデータサイエンティストをしている角川(@nogawanogawa)です。ウォンテッドリーのデータサイエンスチームは、9/18〜9/23にシンガポールにて開催されたRecSys2023に聴講参加しました。
この記事ではRecSys2023で行われていた、推薦×LLMをテーマにしたチュートリアルの内容について紹介したいと思います。RecSys2023の参加レポートは社内の他のメンバーもブログで投稿していますので、よろしければそちらも合わせてお楽しみください!
はじめに 2023年現在、社会的に注目を集めている大規模言語モデル(以下、LLM)ですが、サービスにLLMを応用する動きが様々なところで進められています。もちろん、推薦の分野においてもLLMの応用は積極的に研究されています。
LLMに関する注目度の高さからか、今回のRecSys2023でも多くの推薦へのLLMの応用に関する研究が発表され、アクセプト論文から抽出されたキーワードのword cloudに”LLM”が入っているほど注目を集めていました。
さらに今回のRecSys2023では”Tutorial on Large Language Models for Recommendation”というテーマでのチュートリアルも行われ、先端研究だけでなく実践的な使用法についても発表されていました。今回のブログではこの”Tutorial on Large Language Models for Recommendation”のチュートリアルから、LLMの推薦の応用例についてご紹介したいと思います。
推薦におけるLLMの適用例 "A Survey on Large Language Models for Recommendation" によれば、「推薦にLLMを適用する」と言っても下記の図のように様々な形が挙げられています。
1つの方向性としては、 推薦システム内部の一機能をLLMが担う方法が挙げられます 。具体的には、LLMで使用されている埋め込み表現 (Embedding) を推薦で利用したり、ユーザーやアイテムに関する情報をLLMを使って補完する方法などが考えられます。
推薦システムで使用するEmbeddingを0から学習・作成するのは一般的にコストが高いですし、コンテンツ情報が不十分であるようなアイテムでは特徴量作成もうまくいかないことも考えられます。LLMが事前学習時に獲得した広範な一般知識を活用してEmbeddingや特徴量を作成することで、推薦の精度を効率よく向上させることが期待できます。
Generative Recommendation もう一つの方向性として、 LLMそれ自体を推薦システムとして使用する方法 (LLM as RS) が考えられます。この方法では、これまでの推薦システムとは異なり自然言語処理の生成タスクとして推薦を行う方向性になっています。RecSys2023のチュートリアルでも取り上げられていたP5も、このLLM as RSとして推薦を実現させています。
昨今では一口に推薦と言っても、推薦とその周辺を含めると様々なタスクが存在しています。 "Recommendation as Language Processing (RLP): A Unified Pretrain, Personalized Prompt & Predict Paradigm (P5)" によれば、ユーザーに対して候補の中から推薦すべきアイテムを予測するDirect Recommendationやユーザーの閲覧履歴をもとに次のアイテムを予測するSequential Recommendationなどのいわゆる推薦タスクから、アイテムの説明文を生成するExplanation Generationやアイテムのレビューを要約するReview Summarizationなどの関連タスクなどが挙げられます。(図は論文より引用)
このように推薦に関連する様々なタスクがありますが、それぞれ個別のモデルを作成することが一般的です。一方で、それぞれのモデル間で学習で得た知識をやり取りする方法に関する研究が進められているなど、推薦モデルを異なるタスク間で使えるようにすることは一つの課題と捉えられています。
こうした課題に対し、P5 (Pretrain, Personalized Prompt, and Predict Paradigm)ではLLMを活用した Generative Recommendation (生成的推薦) というパラダイムで解決を試みています。P5では 推薦タスクを自然言語処理の生成タスクとして扱っており 、ユーザーのログやアイテムのコンテンツ情報をプロンプトとして入力することで推薦結果を生成します。こうすることで、入力のプロンプトに応じて推薦タスクを切り替えることができ、モデル自体はP5だけ用意するだけで良くなります。
P5に関して詳細は RecSys2022論文読み会 で紹介された 日本語スライド が公開されておりますので、ご興味ある方はこちらも合わせて御覧ください。
OpenP5 RecSys2023のチュートリアルでは OpenP5 の紹介を通じて、Generative Recommendationのパラダイムについて紹介されていました。OpenP5はGenerative Recommendationの基礎モデルをベンチマークすることを目的としてGitHubで公開されています。
処理概要 OpenP5では 最初にプロンプトと結果に関するデータセットを用意する必要があります 。通常、推薦タスクで使用するデータはユーザーの行動ログであり、今回学習に使用したいプロンプトの形式にはなっていません。そのため、プロンプトと求めるモデル出力の形式に手元のデータセットを変換して、データセットを作成する必要があります。
OpenP5では下記のような形で入力プロンプトと出力のデータセットを作成しています。
"input" : "What is the top recommendation for ML100K user_4 ?"
"output" : "ML100K item_1081"
余談ですが、このときに指定しているItem IDは単なるアイテムを一意に特定する識別子としての役割しかありませんが、Item IDに意味をもたせるように設計することでGenerative Recommendationでの精度向上を行う研究なども進められており、Item IDの設計に関してご興味ある方は 勉強会スライド を御覧ください。
次に作成したプロンプト-モデル出力のペアを使用してモデルを学習します。 OpenP5では推薦タスクを解いてはいるものの、backboneにはT5やLLAMA 2などの自然言語処理系のモデルが使用されており、内部的にはText2Textの生成タスクが行われています。
モデルの学習ができれば、 プロンプトを入力することで推論を行うことができます 。このとき、モデルはどのようなタスクかをプロンプトのテンプレートによって見分けており、我々は同じモデルに対してプロンプトを変更することで別々の推薦タスクの結果を得ることができるようになっています。
実験 OpenP5の処理概要を紹介したところで、実際にどれくらいの性能がでるのか確認してみたいと思います。Google Colab環境で簡単に動作させて確認してみたいと思います。
使用するデータセットはMovieLens 100Kデータセットを使用し、Sequential RecommendationにおけるHit (@5, @10)と NDCG (@5, @10)で評価したいと思います。
結果 論文で指摘されている結果も踏まえて、どの程度精度が出ているのかを確認してみたいと思います。実際に動かしてみたところ下記のような結果になりました。
問題なく動作していることを確認するために、ML 100Kの結果で報告されている結果を参照すると下記のようになっています。( 引用元 )
実験環境や細かいパラメータの影響で結果の値に多少差はありますが、おおよそ論文と近い出力を出せているのではないでしょうか。ちなみに今回他のデータセットでも実験してみましたが、動作はしましたが論文に記載されているほど精度が出ず、ハイパーパラメータのチューニングなどが別途必要かもしれないと考えています。
生成タスクによって推薦を行っているので、本来のコンセプトの通り、異なる推薦タスクを単一のモデルを使って対応することも理論上可能です。現在は研究段階でまだまだ課題はあるとは思いますが、今後の発展次第では可能性がある分野であることは分かりました。
使用したnotebook (Google Colab) 今回使用したnotebookは下記に公開しています。ご興味ある方は試してみてください。
以上、OpenP5を利用したGenerative Recommendationの紹介でした。LLMに関しては技術進歩がとにかく速いので、推薦✕LLMといった応用が当たり前で行われる未来が数年後やってきたとしても特に不思議ではありませんね。「仕事でココロオドル人を増やす」ために推薦技術を活用している弊社としてもLLMは見過ごすことができない分野ですので、これからもプロダクトへの応用を視野に入れてキャッチアップしていきたいと思います。
ウォンテッドリーでは、ユーザーにとってより良い推薦を届けるために日々開発を行っています。推薦システムに興味があるという方は、下の募集の「話を聞きに行きたい」ボタンから気軽に話を聞きに来ていただけるとうれしいです!