個人の興味関心の備忘録として記録したものであり、情報の正確性や完全性を保証するものではありません。
目次
- はじめに
- 三行まとめ
- なぜコールドアイテム推薦は難しいのか
- コンテンツから埋め込みを作る
- ColdLLMの全体像
-
ColdLLM
- Filtering Simulation
- Refining Simulation
- F_UとF_Iは何を学習しているのか
- 実験結果
論文:Large Language Model Simulator for Cold-Start Recommendation
三行まとめ
- ColdLLMは、LLMを使ってコールドアイテムに対する疑似的なユーザー行動を生成する手法
- 全ユーザーにLLMを使うと計算量が大きいため、まず軽量なフィルターモデルで候補ユーザーを絞る
- 生成した疑似行動を使ってコールドアイテムの埋め込みを更新し、推薦システムに組み込む
はじめに
推薦システムにおいて、新しく追加されたアイテムをどう推薦するか は大きな課題となる。
ECサイトに新商品が追加された直後、その商品に対するクリック・購入・閲覧といった行動履歴は存在しない。
このようなアイテムは コールドアイテム と呼ばれる。
既存手法では、タイトル・説明文・カテゴリなどのコンテンツ情報から、行動埋め込みに近いベクトルを生成することが多い。
一方、本論文では次のようなアプローチを取る。
コンテンツから埋め込みを直接作るのではなく、
LLMで「このアイテムに反応しそうなユーザー」を疑似的に作る。
このLLMで疑似的なインタラクションを作成するのが ColdLLM である。
なぜコールドアイテム推薦は難しいのか
通常の推薦システムでは、ユーザーとアイテムの過去行動から埋め込みを学習する。
例えば、あるアイテムに対して以下のような情報が存在する場合、そのアイテムの行動埋め込みを学習できる。
- 誰がクリックしたか
- 誰が購入したか
- どのアイテムと一緒に閲覧されたか
一方、新しく追加されたコールドアイテムには、こうした行動履歴が存在しない。
そのため、ウォームアイテムとコールドアイテムでは使える情報が大きく異なる。
| 種類 | 使える情報 |
|---|---|
| ウォームアイテム | コンテンツ情報 + 行動履歴 |
| コールドアイテム | コンテンツ情報のみ |
この差が、コールドスタート推薦を難しくする要因となる。
コンテンツから埋め込みを作る
既存のコールドスタート推薦では、コールドアイテムのコンテンツ情報から、行動埋め込みに近いベクトルを生成する手法が多く使われる。
| 手法 | イメージ |
|---|---|
| DeepMusic | 生成された埋め込みと実際の行動埋め込みの差を最小化 |
| GAR | 敵対的生成アプローチにより、生成埋め込みの分布を実際の行動埋め込みに近づける |
| ALDI | 実際の行動埋め込みを教師として、生成埋め込みに知識を転移 |
| DropoutNet / Heater | 学習中に行動埋め込みを落とし、生成埋め込みで代替できるようにする |
| CLCRec | 対照学習により、生成埋め込みと行動埋め込みの互換性を高める |
これらの手法は、基本的に以下の方向性である。
コンテンツから、行動埋め込みっぽいものを作る。
しかし、本論文ではこの考え方には限界があると指摘している。
既存手法の限界
論文では、既存手法の限界として主に3つを挙げている。
1. コンテンツと行動のギャップ
生成された埋め込みは、結局コンテンツ情報から作られる。
しかし、コンテンツが似ていても、実際のユーザー行動が似るとは限らない。
例えば、同じ「Python入門」の本でも、以下のような違いがあり得る。
- 学生に人気の本
- ビジネス職に人気の本
- 買われるが最後まで読まれない本
つまり、コンテンツ由来の埋め込みと、実際の行動から学習された埋め込みの間にはズレが存在する。
2. コールド推薦性能が十分ではない
既存手法は、ウォームアイテムの推薦性能を落とさずにコールドアイテムも推薦することを重視しがちである。
コールドアイテムそのものの推薦性能を十分に高められていない可能性がある。
3. コンテンツベースと行動ベースが混在する
ウォームアイテムは行動履歴から作った埋め込みを使う。
一方、コールドアイテムはコンテンツから生成した埋め込みを使う。
つまり、同じ推薦空間の中で以下が混在する。
- 行動ベースのアイテム
- コンテンツベースのアイテム
ウォームアイテムとコールドアイテムの表現のズレが生じる。
ColdLLMの全体像
ColdLLMの考え方はシンプルである。
コールドアイテムに行動履歴がないなら、LLMで疑似的な行動履歴を作る。
従来手法は、コンテンツから埋め込みを直接作る。
- コールドアイテムのコンテンツ
- 写像関数
- 行動埋め込みっぽいベクトル
一方でColdLLMは、次の流れとなる。
- コンテンツ、ユーザー、行動履歴
- LLMで「反応しそうなユーザー」を推定
- 疑似ユーザー行動を作る
- 埋め込みを更新
行動シミュレーション
ColdLLMはコールドアイテム $i$ に対して、反応しそうなユーザー列を生成する。
$$
\hat{s}_i = \mathrm{ColdLLM}(c_i, U, H, C), \quad \forall i \in I_c
$$
各記号の意味は以下。
| 記号 | 意味 |
|---|---|
| $\hat{s}_i$ | コールドアイテム $i$ に反応しそうな疑似ユーザー列 |
| $c_i$ | コールドアイテム $i$ のコンテンツ情報 |
| $U$ | 全ユーザー集合 |
| $H$ | 過去のユーザー・アイテム行動履歴 |
| $C$ | 全アイテムのコンテンツ情報 |
| $I_c$ | コールドアイテム集合 |
例えば、新しい本に対して以下のような疑似行動履歴を作るイメージ。
この本に反応しそうなユーザー:[user_35, user_102, user_871]
埋め込み最適化
疑似ユーザー列 $\hat{s}_i$ が得られれば、コールドアイテムをウォームアイテムのように扱える。
そこで、既存の行動埋め込み最適化の仕組みを使って、コールドアイテムの埋め込みを更新する。
$$
e_i^{(c)} = \mathrm{Emb}_{opt}(c_i, \hat{s}_i, E)
$$
| 記号 | 意味 |
|---|---|
| $e_i^{(c)}$ | コールドアイテム $i$ の最終的な埋め込み |
| $\mathrm{Emb}_{opt}$ | 行動埋め込みを最適化する関数 |
| $c_i$ | コールドアイテムのコンテンツ情報 |
| $\hat{s}_i$ | LLMで生成された疑似ユーザー列 |
| $E$ | 学習済みのユーザー・ウォームアイテム埋め込み |
コンテンツから直接アイテム埋め込みを予測するのではなく、疑似行動を作ってから埋め込みを更新
ColdLLM
理想的には、全ユーザーに対してLLMで購買有無等を判定できればよい。
しかし、数億〜数十億ユーザーに対してLLMを使うのは現実的ではない。
そこでColdLLMでは、以下の2段階で処理する。
1. Filtering Simulation
軽量なベクトル検索で候補ユーザーを絞る
2. Refining Simulation
絞った候補に対してLLMでYes/No判定する
Filtering Simulation
Filtering Simulationの目的は、全ユーザーからLLMに渡す候補ユーザーを絞ること。
まず、コールドアイテムのコンテンツ情報 $c_i$ をLLMでベクトル化する。
その後、変換関数 $F_I$ に通して、フィルタリング用アイテムベクトル $f_i$ を作る。
$$
f_i = F_I(\mathrm{LLM}_{emb}(c_i))
$$
ユーザー側では、ユーザーの行動埋め込み $e_u$ や、そのユーザーが過去に触れたアイテム情報 $C_u$ を使って、フィルタリング用ユーザーベクトルを作る。
その後、ユーザーベクトルとアイテムベクトルの内積を計算し、スコアが高い上位 $K$ 人を候補ユーザーとして抽出する。
s_i^{(f)} =
\mathrm{TopK}
\left(
\left\{
F_U(e_u \mid C_u)^\top \cdot f_i
\mid \forall u \in U
\right\}
\right)
つまり、Filtering Simulationは以下の処理をしている。
LLMにすべてのユーザーを判定させる前に、ベクトル検索で反応しそうなユーザーを粗く絞る処理。
Refining Simulation
Filtering Simulationで候補ユーザーを絞った後、LLMでより精密に判定する。
ただし、ユーザーの過去履歴をすべてLLMに渡すわけではない。
履歴が多すぎるとプロンプトが長くなり、関係ない情報も混ざってしまうためである。
そこで、対象のコールドアイテムと似ている過去アイテムだけを選び、ユーザーコンテキストとしてLLMに渡す。
C_u^{(f)} =
\mathrm{TopL}
\left(
\left\{
f_i^\top \cdot f_j
\mid \forall j \in C_u
\right\}
\right)
これは、ユーザー $u$ の過去履歴 $C_u$ の中から、対象アイテム $i$ と近いアイテムを上位 $L$ 件だけ取り出すことを表す。
例えば、新規アイテムが「LLM推薦システム入門」なら、ユーザーの全履歴の中から以下のような関連履歴だけを選ぶ。
- 推薦システムの本
- 機械学習の本
- LLM関連の記事
その後、LLMには次のように質問する。
【プロンプト】
このユーザーは過去にこれら(購買履歴・・・)のアイテムに反応しています。
では、この新しいアイテムにも反応しそうですか?
Yes / No で答えてください。
LLMが Yes と判定したユーザーだけを残し、最終的な疑似ユーザー列とする。
s_i^{(r)} =
\left\{
u \mid \hat{Z}_{u,i}=1,\ u \in s_i^{(f)}
\right\}
つまり、Refining Simulationは以下となる。
ベクトル検索で粗く絞った候補ユーザーに対して、LLMで「本当に反応しそうか」を確認する処理。
ここで残ったユーザー集合が、コールドアイテムの疑似行動履歴として使われる。
F_U と F_I は何を学習しているのか
Filtering Simulationでは、ユーザーとコールドアイテムの相性を内積で計算している。
\hat{Y}_{ui}
=
F_U(e_u)^\top F_I(\mathrm{LLM}_{emb}(c_i))
しかし、適当に変換したベクトル同士を内積しても、
そのスコアが「このユーザーがこのアイテムに反応しそうか」を表すとは限らない。
そのため、$F_U$ と $F_I$ の学習が必要となる。
1つ目の学習:実際の行動に合うようにする
フィルターモデルは実際のユーザー行動に合うように学習される。
例えば、ユーザー $u$ がアイテム $i$ に反応し、アイテム $j$ には反応していないとする。
このとき、モデルには以下を満たしてほしい。
\hat{Y}_{ui} > \hat{Y}_{uj}
つまり、反応したアイテムのスコアを、反応していないアイテムより高くしたい。
なので、論文ではBPR lossを使用している。
L_{BPR}
=
-
\sum_{(u,i,j)}
\ln \sigma
\left(
\hat{Y}_{ui}^{(B)} - \hat{Y}_{uj}^{(B)}
\right)
この損失関数は、正例アイテムのスコアが負例アイテムより高くなるほど小さくなる。
つまり、$F_U$ と $F_I$ は、実際に反応されたユーザー・アイテムペアの内積が高くなるように学習される。
2つ目の学習:LLMの判断に近づける
ColdLLMでは、フィルターモデルを実際の行動データだけでなく、LLMの判定結果にも近づける。
LLM Simulatorは、あるユーザー $u$ がアイテム $i$ に反応しそうかをYes / Noで判定する。
このLLMの判定結果を $\hat{Z}_{ui}$ とする。
| LLMの出力 | $\hat{Z}_{ui}$ |
|---|---|
| Yes | 1 |
| No | 0 |
フィルターモデルの出力 $\hat{Y}_{ui}^{(L)}$ が、このLLMの判定に近づくように学習する。
L_{coupled}
=
-
\sum_{(u,i)}
\left(
\hat{Z}_{ui}\ln \hat{Y}_{ui}^{(L)}
+
(1-\hat{Z}_{ui})
\ln(1-\hat{Y}_{ui}^{(L)})
\right)
これは二値分類のクロスエントロピーに近い形で、次のように学習する。
- LLMがYesと判定したペアには高いスコアを出す
- LLMがNoと判定したペアには低いスコアを出す
何のために学習するのか
このフィルターモデルの目的は、全ユーザーにLLMを使わなくても、LLMがYesと判定しそうなユーザーを事前に拾えるようにすること。
そのため、$F_U$ と $F_I$ は次の2つを満たすように学習される。
- 実際に反応したユーザー・アイテムペアのスコアを高くする
- LLMがYesと判定しそうなユーザー・アイテムペアのスコアも高くする
つまり、$F_U$ と $F_I$ は、ユーザーとアイテムを同じベクトル空間に写すだけでなく、内積スコアが「実際の行動」と「LLMの判断」の両方を反映するように学習される。
このようにして学習されたフィルターモデルを使うことで、ColdLLMは全ユーザーにLLMを適用せず、まず候補ユーザーを数十〜数百人程度に絞ることができる。
実験結果
論文では、CiteULikeとMovieLensを使ってオフライン評価を行っている。
評価では、アイテムの20%をコールドアイテムとして扱い、以下の性能を確認している。
- 全体推薦
- ウォームアイテム推薦
- コールドアイテム推薦
評価指標はRecall@20とNDCG@20。
比較対象として、以下のような既存手法が使われている。
| 種類 | 手法 |
|---|---|
| Dropout系 | DropoutNet, MTPR, CLCRec |
| 生成系 | DeepMusic, MetaEmb, GNP, GAR, ALDI |
| 行動シミュレーション系 | UCC, MI-GCN |
また、MF、NGCF、LightGCNの3つのバックボーンで検証している。
主な結果
ColdLLMは、複数のデータセット・バックボーンで一貫して既存手法を上回った。
特にLightGCNをバックボーンとした場合、平均NDCGは以下の改善を示している。
| 対象 | NDCG改善 |
|---|---|
| 全体推薦 | +10.79% |
| コールドアイテム推薦 | +37.10% |
特にコールドアイテム推薦で大きく改善している点が重要である。
オンラインA/Bテスト
さらに、大規模ECプラットフォームで2週間のオンラインA/Bテストも実施されている。
コールドスタート期間は、アイテム公開から2時間以内と定義。
評価指標は以下。
| 指標 | 意味 |
|---|---|
| Cold-PV | コールド期間中のクリック数 |
| Cold-PCTR | コールド期間中のクリック率 |
| Cold-GMV | コールド期間中の購入金額 |
結果は以下。
| 比較対象 | Cold-PV | Cold-PCTR | Cold-GMV |
|---|---|---|---|
| vs. Random | +11.45% | +5.60% | +23.80% |
| vs. MetaEmb | +9.20% | +4.35% | +18.25% |
| vs. ALDI | +7.25% | +3.70% | +16.90% |
強いベースラインであるALDIと比較しても、Cold-GMVが+16.90%改善している。
- 履歴がない対象に対して、LLMで疑似的な初期反応を生成するアプローチは、今後さらに広がると思う。
- 対象アイテムと類似した過去アイテムを用いてユーザーをフィルタリングしている点には改善の余地がありそう。
- LLMによる疑似行動を初期値として使い、その後に得られる実データで継続的に補正していくようなアプローチも考えられる。

