【論文紹介】対話型推薦について知りたいのでChat-CRSという論文を読んでみた
Gather Inc. (https://gather-inc.com/) のR&Dチーム マネージャーの浦田です. 🐈
おでかけ先推薦AIを開発している過程で,推薦システム周りの論文調査を行っています.
今回は,対話型推薦(CRS)に関する論文を一つ紹介したいと思います.
論文名:ChatCRS: Incorporating External Knowledge and Goal Guidance for LLM-based Conversational Recommender Systems
CRS(Conversational Recommender System)とは?
ユーザーとの対話を通じて好みや目的を理解し,最適なアイテムを推薦するシステムのことです.
具体的には,LLM(大規模言語モデル)を用いてユーザーと複数ターンの会話を行い,そのやり取りの中から得られた嗜好・制約・状況などの情報を抽出し,場合によっては適切に外部知識を取得しながら,動的に推薦結果を更新するシステムです.
従来のログベース推薦よりも柔軟で,ユーザーが「まだ明確に何を求めているかわからない」状況でも,会話を通じて最適な選択肢へ導ける点が特徴です.
この論文の概要
- 知識データベース作り方(CRSの出力根拠) と 会話のリードの仕方を工夫するとLLMベースの推薦精度と会話の質が向上したという論文
- 良い会話ができれば情報がいっぱいとれるから,推薦精度も上がるよね
この論文が言及するCRSの課題感
LLMベースの対話型推薦システムの限界
CRSですが,実際の応用では以下のような課題が指摘されています.
1. 内部知識への過度な依存
LLMは事前学習済みの内部知識に頼って応答を生成するため,ドメイン固有の知識(特定地域・専門分野など)に弱く,誤情報や浅い回答が生まれやすい.😮💨
2. 外部知識の不足による応答の質低下
映画・観光・グルメなどの具体的な対象に関する情報が不足していると,ユーザーの意図に沿った自然な会話が難しくなる.😠
3. 対話の“目的性”の欠如
LLMは流暢な会話は得意でも,「情報収集 → 好み推定 → 推薦」といった対話の進行を自律的に設計することが苦手.結果として,会話が雑談で終わってしまうor情報がないまま推薦をしてしてしまうことがある.😞
4. 外部情報統合の難しさ
外部知識を単に検索で補う方法は,明確なキーワードを持たない対話形式では機能しづらい.また,次に展開する対話内容を予測して,先に必要な情報を準備することも難しい.😒
提案手法
これらの課題を解決するために提案されたのが,ChatCRSというフレームワークです.
ChatCRSは,対話型推薦システム(CRS)を「知識検索」と「目標計画」という2つのサブタスクに分解し,それぞれを専門エージェントが担当するマルチエージェント構成を採用しています.
ChatCRSフレームワーク
ChatCRSの全体像です.複数のエージェントが役割分担をしながら,応答や推薦を行う構成になっています.

引用:ChatCRS: Incorporating External Knowledge and Goal Guidance for LLM-based Conversational Recommender Systems,Figure 3
主な構成要素(エージェント)は3つです.
a) 知識検索エージェント
外部知識ベース(KB)を元にLLMが良い会話をするための専用知識グラフみたいなものを構築します.
b) 目標計画エージェント
過去の会話のログを元に,学習済みの会話目標予想器を用いて,会話の流れをリードするための目標設計を行います.
c) LLMベースの対話エージェント
知識検索エージェント,目標計画エージェントの出力を元にユーザーとの対話,推薦を作成します.
ステップ
- 複雑なCRSタスクが与えられると,まずLLMベースの対話エージェントがそれを知識検索,または目標計画エージェントによって管理されるサブタスクに分解.
- 各エージェントから検索された知識や予測された目標を,プロンプトに組み込み.
- LLMがCRSの応答や推薦を生成.
各エージェントの詳細
知識検索エージェント
- 対話の発話に関連する外部知識ベース(KB)内のエンティティE(具体的な単語)を抽出する
- KBからそのエンティティEに隣接する関係RがN個候補として抽出される
- LLMはN個の関係Rの中から,対話履歴を基に最も適切で潜在的な関係R*を選択する
- エンティティEと予測された関係R*を用いて知識トリプルKと名付けられた知識データ(エンディディ-関係R-エンティティ1,エンティティ2,エンティティ3)が作られる
例.
抽出されたエンティティ[お肉]が与えられると,システムはまずF1という関数を用いて[お肉]のすべての候補関係(生産者,お店,栄養素など)を抽出.その中からLLMが対話履歴に基づいて最も関連性の高い関係R*を選択.その後,知識検索エージェントはF2という関数を適用して,完全なアイテムベースの知識トリプル(例:[お肉 - 栄養素 - <タンパク質, 鉄分, 亜鉛, ..., カルニチン>])を最終結果として取得.
一つの発話に複数のエンティティが存在する場合は,個別に知識検索を実行.
目標計画エージェント
「挨拶」→「質問」→「スターに関する雑談」→「推薦」のように,目的を持って会話を積極的にリードし,最終的な推薦のための情報を収集する必要がある.
CRSデータセットの各対話発話の目標アノテーションを利用し,LLMを活用して,LoRA(Low-Rank Adapter)を使って学習している.具体的には,過去の対話履歴のプロンプトを用いて次の発話の対話目標G*を生成するようにファインチューニングしてある.
LLMベースの対話エージェント
ChatCRSでは,知識検索と目標計画エージェントはCRSタスクのための中間的なツールとして機能し,一方でLLMはこれらのツールを独立して,または共同で利用して主要なCRSの目的を達成する制御エージェントとして機能している.
- 新しい対話履歴を受け取る
- LLMベースの対話エージェントはこれらのエージェントを用いて対話目標Gと関連知識Kを決定する
- プロンプトにG,Kを埋め込み,システムの応答またはアイテムの推薦のいずれかを生成する
システムのモジュール化によって,各エージェントが独立して機能し,タスクを完了するために新しいLLMや,さらにはパーソナライズされたエージェントの統合も可能にしている.つまり,色々カスタマイズできるってこと
対話イメージ
以上によって,外部知識を適切に利用し会話の質を担保しながら,会話をリードして推薦に必要な情報を取得し,応答や推薦を生成することができるようになる.

引用:ChatCRS: Incorporating External Knowledge and Goal Guidance for LLM-based Conversational Recommender Systems,Figure 1
結果
推薦の精度と応答の質という2つの観点で評価がある.
推薦の精度
ChatCRSがユーザーの好みに合ったアイテムをどれだけ正確に推薦できるかを測定した.
-
何を使って評価したか? (評価指標)
NDCG@kとMRR@k -
どのように評価したか? (評価方法)
モデルに対話の履歴を見せ,「この次に来るべき推薦アイテムは何か」をfew-shotで予測させ,ランキング形式で出力.
比較対象は,外部知識を使わずに,ChatGPTやLLaMA-13bといった汎用LLMに直接応答推薦を行わせたもの -
結果
論文の表5を見ると,例えばDuRecDialデータセットにおける推薦精度(MRR@10)は- ChatGPT(汎用LLM): 0.018
- LLaMA-13b(汎用LLM): 0.024
- ChatCRS: 0.543
と10倍以上の性能を示したことが示されている.
chatGPTが知識ベース(KB)を使用しているのに対し,比較対象は外部知識一切なしなので,当たり前と言えば当たり前だけど...
応答の質
ChatCRSが生成する応答が,人間にとってどれだけ「質が高い」と感じられるかを測定した.
-
何を使って評価したか? (評価指標)
3人の評価者が,各モデルが生成した応答を0〜2の3段階(悪い,普通,良い)で以下の4点について採点.- 流暢さ (Fluency): 文法的に正しく,自然な文章か
- 一貫性 (Coherence): 会話の流れに合っていて,論理的か
- 情報量 (Informativeness): 応答に深い知識や豊富な情報が含まれているか
- 積極性 (Proactivity): ユーザーの意図を先読みし,会話をうまくリードできているか.
-
どのように評価したか? (評価方法)
データセットからランダムに100の対話を選び,ChatCRS,ChatGPT,LLaMA-13b,そして既存モデルのUniMINDがそれぞれ生成した応答を,評価者がブラインドで比較・採点した. -
結果
ChatCRSは「情報量」と「積極性」が向上していた.- 情報量 (Informativeness) スコア:
- ChatCRS: 1.69
- ChatGPT: 1.30
- 積極性 (Proactivity) スコア:
- ChatCRS: 1.76
- ChatGPT: 1.50
- 情報量 (Informativeness) スコア:
この結果は,ChatCRSの2つの主要な機能が効果的に働いていることを示している.
- 知識検索エージェントが外部から正確な知識を引っ張ってくることで,応答の情報量が向上
- 目標計画エージェントが次に来るべき対話の目標を予測することで,会話を能動的に進める積極性が向上
思ったこと
- “few-shot+外部知識”でUniMIND(フル学習)に迫る精度を出した部分が実務的な凄さだと思います.
- few-shotは重み更新や再学習が不要という点で扱いやすいですが,高精度化には候補網羅・同一性解決・制約遵守・知識鮮度といった難所を同時に満たす必要があります.これに対し,ChatCRSは知識検索×目標計画の統合で,従来は学習で内面化していたタスク固有の推論構造を推論時に再現し,低コストで同等精度を達成している点が興味深かったです.
- 具体的な方法として,会話の質を担保するための知識データの作り方が面白いと思いました.(一つのエンティティをキーとして,そっから関係,その関係につながるエンティティと連鎖させて会話で必要な情報を作る部分)
- 自分のドメインに応用することを考えると,検索のための知識ベース(KB)の作成が手間であるとも感じました.
- 会話のリードを意識している部分は,確かにエージェントに,今が推薦フェーズなのか情報収集フェーズなのかを明確にさせて,質の高い会話で,ユーザーのストレスなく情報収集を行うと推薦の質もユーザー体験も向上しそうな感じがしますね.
- 自分もAgentに負けないように日々目的を意識するよう心がけたいですね.
終わりに
この論文でCRSのイメージが掴めたと思います.我々のプロダクトも,現状は対話よりも推薦精度に集中しているので,ユーザー体験向上のためにも対話の質を上げていきたいものです.😎
次の記事はさらにCRS関連の論文を深掘りしてみようと思います.
引用論文(再掲):ChatCRS: Incorporating External Knowledge and Goal Guidance for LLM-based Conversational Recommender Systems
Discussion