LLMのEmbeddingを活用したアイテム推薦の可能性

こんにちは。データサイエンティストの白井です。
今日は、LLMのEmbeddingをアイテム推薦に活用すると、どんな推薦が可能になるかを紹介したいと思います。

はじめに

アイテム推薦とは

アイテム推薦とは、「あなたにおすすめの商品はこれ!」といったかたちで、ユーザーの興味・関心に合った商品を提示する機能です。
この機能は、YoutubeやAmazon、Uber Eatsなど様々なサービスで提供され、膨大な選択肢の中から“自分好み”を次々と提案してくれます。

アイテム推薦の種類

アイテム推薦は、大きく分けて2つに分類できます。

  1. 行動履歴ベース
  2. コンテンツベース

行動履歴ベース推薦

行動履歴ベース推薦は、ユーザーの行動履歴を手がかりに、似た行動パターンを持つ人が好んだアイテムを推薦する方法です。
ユーザーの行動履歴データがあれば、それと一緒にアクションされているアイテムが推薦できます。
一方で、まだ誰も触れたことがない、新規アイテムやニッチなアイテムを推薦できない課題があります。

コンテンツベース推薦

コンテンツベース推薦は、アイテムのジャンルなどの属性や、商品の説明文などでマッチするアイテムを推薦する方法です。
属性データや説明文のデータがあれば、新規アイテムも推薦できます。
一方で、属性データの設計や設定にコストが高い点と、属性データなどで表現しきれない嗜好を捉えにくいという課題があります。

LLMのEmbeddingはコンテンツベースの強い味方になる

コンテンツベース推薦における文章データには、これまで主にTF-IDFなどが用いられてきました。
これに対し、近年流行しているLLM(大規模言語モデル)のEmbedding機能は、文章をベクトルで扱うことが可能です。
LLMのEmbeddingを利用することで、アイテムの説明文やレビューなどの自然言語をそのままベクトル化し、テキストの潜在的意味を加味した柔軟で表現力の高い類似度計算が可能になると考えられます。

本記事では、映画のレビューデータと映画のあらすじデータを用いて、行動履歴ベースとLLMのEmbeddingを用いたコンテンツベース推薦を試してみます。
そして、この2つの推薦結果から、それぞれの傾向を確認してみます。

利用データについて

今回利用するのは、 MovieLensTMDb です。
それぞれ簡単に紹介します。

MovieLens

MovieLensは、ミネソタ大学のGroupLens Researchによって公開されている映画のレーティングのデータセットです。
推薦システムの研究では定番のデータセットで、様々な論文で扱われています。
誰がいつ何の映画をどう評価した(1~5の0.5刻み)というレーティングデータや映画のタグ(コメディ・アクションなどのジャンル等)のデータがあります。
データセットの種類がいくつかあるのですが、今回は最近の映画も確認したいため、ml-latestを利用しました。(2025/6/1現在)

TMDb

TMDbは、映画やテレビ番組に関する情報を取得できるAPIを提供しているサービスです。
映画のあらすじやタイトルの受賞の有無、主演者など、リッチなデータが取得できます。
MovieLensのmovie_idと紐付けることができるようになっており、これを使って映画のあらすじを取得しました。
※ 本記事では念の為、TMDbのサポートフォームから記事の内容を伝え、記事での利用に許諾をいただきました。

行動履歴ベース推薦の実践

実施内容

今回は行動履歴ベースの手法の中で、比較的簡易に利用でき、かつ強力なItem2Vecを用います。
データの前処理として、レビュー件数が多い上位5%のユーザーのデータを除外しました。
レビュー件数が多いユーザーは、映画が非常に好きなヘビーユーザーと考えられ、ノイジーな動きになっていることが想定されるためです。
また、レビューの点数は、評価が1.0〜5.0の0.5刻みとなっていますが、4.0以上のデータだけを学習に利用しました。
好みが近い映画を推薦したいため、4.0以上を高評価と判断してこのデータだけで学習することで、好まれる組み合わせを発見することが狙いです。
本記事の最後に、利用したハイパーパラメータを記載しておきます。
以下は、Item2Vecを用いた推薦の全体像です。

Item2Vec推薦の概要
Item2Vec推薦の概要

推薦結果

上記で学習したモデルを用いて、推薦される映画を確認します。
今回は完全に私の好みで、以下の映画に対する推薦結果を確認します。

  • ターミネーター2
  • ハリーポッターと賢者の石
  • もののけ姫
  • 劇場版「鬼滅の刃」無限列車編
  • 君の名は
  • マッドマックス怒りのデス・ロード

上記の映画に対する、Item2Vecでの推薦結果の上位5件は以下でした。
()内の数字は上映年です。

Item2Vec推薦結果
Item2Vec推薦結果

分かること

以下3点が目につきました。

  1. 「ハリーポッターと賢者の石」の結果が、シリーズが並んでいる。
  2. 「もののけ姫」や「君の名は」の結果が、同じ制作会社や監督が並んでいる。
  3. 全体的に、推薦対象映画の上映年と近い年代の映画が並んでいる。

1. 「ハリーポッターと賢者の石」の結果が、シリーズが並んでいる。

「ハリーポッターと賢者の石」の推薦結果は、シリーズの2,3,4という順でおすすめとなりました。
シリーズの1を見て面白かったら、シリーズ2,3と連続して鑑賞することや、作品の雰囲気が似ているため高評価が続くのは、想像しやすいかと思います。
行動履歴ベース推薦では、高評価の時系列を考慮するため、このような結果が見られるのかなと思いました。

2. 「もののけ姫」や「君の名は」の結果が、同じ制作会社や監督が並んでいる。

「もののけ姫」はジブリ作品が並び、「君の名は」は新海誠作品が1位でおすすめされています。
これも「ハリーポッター」同様、ある作品を見て面白ければ、同じ監督や制作会社の作品を見てみるという行為から、このような結果が得られていると推測できます。

3. 全体的に、推薦対象映画の上映年と近い年代の映画が並んでいる。

例えば、「ターミネーター2」は1990年前後の上映年の映画がおすすめされており、「君の名は」は2010年代後半がおすすめされています。 これも、行動履歴ベースの学習が、レビューの前後関係を用いているところに影響されているのかなと思っており、同年代の作品は連続してレビューがされやすいためかと想定されます。

全体的に、有名な映画が並んでおり、納得感が高い結果だと思いました。

LLMのEmbeddingを用いた推薦の実践

実施内容

Embedding用のモデルにはOpenAIのtext-embedding-3-smallを用いました。
Embedding用のモデルは様々ありますが、text-embedding-3-smallは登場から時間は経過しているものの精度は悪くなく軽量であるため、採用しています。
これを用い、映画のあらすじデータをEmbeddingし、chromaDBでcollectionを作ってqueryで類似テキストを持つ映画を検索しました。
以下は、LLMのEmbeddingを用いた推薦の全体像です。

Embedding推薦の概要
Embedding推薦の概要

推薦結果

LLM Embeddingでの推薦結果の上位5件は以下でした。

Embedding推薦結果
Embedding推薦結果

分かること

Item2Vecの結果と対比して、以下3点が目につきました。

  1. 「ターミネーター」と「ハリーポッター」の結果が、シリーズで完全に埋まっている。
  2. 「もののけ姫」と「君の名は」の結果が、同じ制作会社や監督の作品に偏っていない。
  3. 全体的に、推薦映画の上映年の偏りが見られず、満遍なく推薦されている。

1. 「ターミネーター」と「ハリーポッター」の結果が、シリーズで完全に埋まっている。

どちらもTOP5が全て、シリーズもので埋まっています。
どちらも、"ターミネーター"や"ハリーポッター"などの固有名詞があらすじ内で現れやすく、これがEmbeddingしたベクトルに強めに現れて、cos類似度が高くなりやすいのではと想像しました。

2. 「もののけ姫」と「君の名は」はの結果が、同じ制作会社や監督の作品に偏っていない。

Item2Vecの結果では、同じ制作会社や作者の映画が多く見られましたが、Embeddingの結果では、「もののけ姫」の結果に「ゲド戦記」が1つあるだけでした。
これは、そもそもあらすじには、制作会社や作者を表す単語が出現しないためだと考えられます。
具体的には、"ジブリ"や"新海誠"などの単語があらすじに出現せず、Embeddingベクトルに表現されないため、これで類似度を計算しても"ジブリ"や"新海誠"要素が考慮されないと想像しています。

3. 全体的に、推薦映画の上映年の偏りが見られず、満遍なく推薦されている。

Item2Vecでは全体的に推薦対象の映画と、推薦結果の映画の上映年が近いことが特徴的でしたが、Embeddingでは偏りが見られませんでした。
Embeddingでは、レビューの時系列などを一切考慮しないため、年代がバラけるのは自然かと思いました。

Embeddingの推薦結果は、Item2Vecに比べて、これまで知らなかったような映画も推薦されており、推薦結果の意外性が印象的でした。

鬼滅の刃 無限列車編と推薦結果のあらすじ

実際にあらすじが近いかを確認するため、「鬼滅の刃 無限列車編」とその推薦結果のあらすじの文章を示します。
まず、検索対象である「鬼滅の刃 無限列車編」のあらすじを以下に示します。

作品名 あらすじ
鬼滅の刃 無限列車編 蝶屋敷での修業を終えた炭治郎たちは、次なる任務の地、《無限列車》に到着する。 そこでは、短期間のうちに四十人以上もの人が行方不明になっているという。 禰豆子を連れた炭治郎と善逸、伊之助の一行は、 鬼殺隊最強の剣士である《柱》のひとり、炎柱の煉獄杏寿郎と合流し、 闇を往く《無限列車》の中で、鬼と立ち向かうのだった。

"無限列車"や"鬼殺隊"などの単語が、特徴的な単語として挙げられそうです。

続いて、以下に「鬼滅の刃 無限列車編」の上位5件のあらすじを上から順に示します。
近いと判断されたのかな?と感じた単語を、太字で記載しておきます。

作品名 あらすじ
仮面ライダー電王 俺、誕生! 宝石泥棒に憑依したイマジンを追って、過去の世界に向かった良太郎たち。しかし、それはデンライナーを奪うために仕組まれた罠だった。首謀者は時の列車ばかりを狙う強盗集団の首領・牙王。彼は“神の路線”を走り、全ての時間を支配できるという神の列車を手に入れるため、オーナー達を人質にデンライナーを過去へ走らせる。 残された良太郎とハナにデンライナーから脱出したモモタロスが合流するが良太郎はデンライナーを追っている最中に牙王に蹴られた後遺症で電王に関わる記憶が欠落していた。そこで11歳の良太郎(劇中で小太郎と命名される)やジークとも遭遇。小太郎は時間を超える列車に乗ってみたいと彼らに同行を申し出る。一行は桜井侑斗の助けを借り、ゼロライナーでその後を追った。様々な時代を通り抜け、良太郎たちがデンライナーを発見したのは江戸時代初期の『大坂の役』の頃。そこで牙王は神の路線へ繋がる最後の封印を解こうとしていた。
ガンツO 高校生の加藤勝は、地下鉄で起きた事件によって死ぬ。ところが次の瞬間、マンションの一室にいた。加藤はそこで、リーダーが不在の東京チームと一緒に火の手が上がる大阪に転送され、サバイバルゲームに参加することになる。大阪チームと遭遇し、妖怪型の星人軍団=百鬼夜行と戦いを繰り広げる加藤。一人で待つ弟のもとへ生還するため戦い抜く加藤の前に、大ボス“ぬらりひょん”が現れ……。
鬼滅の刃 刀鍛冶の里編 炭治郎は、上弦の陸との決着をつけなければならない。激闘の末、事態が落ち着いた後、彼は妹の禰豆子と共に新たな刀を求めて刀鍛冶の里を訪れる。
Cube 目が覚めるとそこは謎の立方体=CUBEの中だったー。 突然閉じ込められた男女6人。 エンジニア、団体職員、フリーター、中学生、整備士、会社役員。 彼らには何の接点もつながりもない。 理由もわからないまま、脱出を試みる彼らを、 熱感知式レーザー、ワイヤースライサーや火炎噴射など、殺人的なトラップが次々と襲う。 仕掛けられた暗号を解明しなくては、そこから抜け出すことは絶対にできない。 体力と精神力の限界、極度の緊張と不安、そして徐々に表れていく人間の本性… 恐怖と不信感の中、終わりが見えない道のりを、 それでも「生きる」ためにひたすら進んでいく。 果たして彼らは無事に脱出することはできるのか?!
西遊記2 妖怪の逆襲 三蔵法師、孫悟空、猪八戒、沙悟浄の4人組は遠く天竺を目指す長旅を続けていたが、お金が無くて食べる物にも困り、山中にあった屋敷に立ち寄って助けてもらうことに。そこで美女たちの歓待を受けて大喜びするが、実は美女たちは妖怪たちの仮の姿で、孫悟空が活躍して妖怪たちを倒すものの、自分が一行のリーダーだと考えていた三蔵法師は勝手に行動した悟空と対立するように。やがて一行は比丘国という栄えた国に到着する。

想像になりますが、"鬼殺隊"の単語が、"百鬼夜行"(ガンツO)や"妖怪"(西遊記2 妖怪の逆襲)などの単語を引っ掛けているのかと思いました。
また、"無限列車"の単語が、"神の路線"(仮面ライダー電王)や"地下鉄"(ガンツO)などと親和性が高いのかも知れません。
全ての結果がコメディや恋愛などではなく、アクションを感じさせる点で好感が持てました。

未来の映画の推薦

コンテンツベースのメリットの1つに、レビューがされていない未来の映画を推薦結果に含められる点があります。
最後に、このメリットを用い、2025/7月公開予定の映画の中からの推薦を試してみます。

2025年7月公開の映画のあらすじの作成

2025年7月に公開予定の映画45本を調べ、要約する形であらすじを自作しました。
以下に、2025年7月公開映画の中から推薦する流れを示します。

2025/7の推薦概要
2025/7の推薦概要

推薦結果

検索対象 推薦結果Top1タイトル 推薦映画のあらすじ
ターミネーター2(1991) エレベーション 絶滅ライン “リーパー”により人類の95%が死滅し、高地で暮らすわずかな生存者たち。ロッキー山脈の避難所で病弱な息子と暮らすウィルは、薬を手に入れるため元科学者たちと標高2,500mの安全圏を下り、モンスターが徘徊する麓の病院へ命懸けで向かう。
ハリーポッターと賢者の石(2001) ヘルボーイ/ザ・クルキッドマン アパラチア山中の呪われた村に“歪んだ男”と呼ばれる悪魔が暗躍。村へ戻ったトム・フェレルの過去の契約が蘇り、死者や魔女の呪いが解き放たれる中、ヘルボーイが滅びの右腕で悪魔と対決する。
もののけ姫(1997) 木の上の軍隊 1945年沖縄・伊江島で撤退中の日本兵2人が巨木ガジュマルに潜伏。終戦を知らぬまま2年間、増え続ける遺体と接近する米軍に怯えつつ“孤独な戦争”を続け、極限状態へ追い込まれていく。
劇場版「鬼滅の刃」無限列車編(2020) 私たちのオカルティックサマー 高校2年の夏希は失踪した姉を捜し、オカルト研究会の真嗣と巫女の千尋と共に「プールの幽霊」騒動を調査。3人は思わぬ脅威に直面する。
君の名は(2016) 愛されなくても別に 大学・家事・バイトに追われ希望を持てない宮田陽彩は、同級生で派手な同僚・江永雅が“殺人犯の娘”という噂を耳にする。孤独な2人が出会い、互いの人生を変え始める。
マッドマックス怒りのデス・ロード(2015) エレベーション 絶滅ライン “リーパー”により人類の95%が死滅し、高地で暮らすわずかな生存者たち。ロッキー山脈の避難所で病弱な息子と暮らすウィルは、薬を手に入れるため元科学者たちと標高2,500mの安全圏を下り、モンスターが徘徊する麓の病院へ命懸けで向かう。

「ターミネーター」や「マッドマックス」などのアクション系では、モンスターを倒すあらすじの「エレベーション 絶滅ライン」が推薦されており、親和性がありそうです。
「ハリーポッター」は、「ヘルボーイ/ザ・クルキッドマン」の"呪われた村"や"死者や魔女"などの単語で近しさを感じます。
「君の名は」は、"孤独な2人が出会い、互いの人生を変え始める。"の箇所がそれらしいかもと思いました。
「もののけ姫」、「鬼滅の刃 無限列車編」は正直、ピンと来ませんでした。
検索対象があくまで45作品のみですので、近い作品がないこともあるのかなという印象です。

このように、2025年7月の未上映映画も推薦できました。

終わりに

本記事では、映画のレビューデータセットおよびあらすじデータを用いて、LLMのEmbeddingをアイテム推薦に活用すると、どんな推薦が可能になるかを紹介しました。
行動履歴ベースでは、結果の納得感は高いものの、上映年代や制作会社や監督に偏る傾向が見られました。
一方、LLM Embeddingを用いると、シリーズものが固まって推薦される傾向はあります。
しかし、上映年代や制作会社や監督に偏らず幅広く推薦できる傾向が見られました。
さらに、LLM Embeddingを用いると、評価がされていない未知のアイテムも推薦ができました。
実際にサービスに利用する場合、どちらが良いかはその時々で異なるかと思いますが、結果を組み合わせたりしながら推薦するアイテムを決めてみるのも面白いかもしれません。
今回はあくまで私の主観で推薦結果を確認しましたが、今後Accuracyなどの定量評価もできたらと思っています。

また別の観点として、推薦システムには Beyond Accuracy という観点があります。
これは、「良い推薦システムとはHit Rateを上げる」だけではなく、「serendipity(意外な出会い)のようなものも重要」であるという指摘です。
今回は量的にこの観点を確認はしていませんが、私の個人的な感想としては、行動履歴ベースよりも意外な出会いを演出してくれるのでは?と感じました。
本記事が何かの参考になれば幸いです。

補足

Item2Vecのハイパーパラメーター

model = Word2Vec(
    sentences=movies_by_user,
    vector_size=10,
    window=15,
    min_count=3,
    sg=1,
    workers=4
)