JA EN
体系RAG・検索拡張
·★ 会員·論文·13分で読めます

推薦システムと埋め込み — RAGと同じ数学、違う目的

「あなたへのおすすめ」の中身は、RAGのベクトル検索とほとんど同じ数学です。協調フィルタリングの行列分解から二塔モデル、ANN検索の使い回しまでを前提知識ゼロから解説し、同じ道具を使いながら評価も落とし穴も別物になる理由を整理します。

対象textタスクretrieval

BPR: Bayesian Personalized Ranking from Implicit Feedback

一次資料 — この記事の根拠

この解説の公開 2026-08-22

BPR: Bayesian Personalized Ranking from Implicit FeedbackarXiv:1205.2618論文ページ·PDF
Neural Collaborative FilteringarXiv:1708.05031論文ページ·PDF

「あなたへのおすすめ」は誰が決めているのか

行きつけの古本屋を想像してください。店主が棚から一冊抜いて「これ、たぶん好きですよ」と差し出してくる。店主はその本を読んでいません。読んだのは中身ではなく、あなたと似た本棚を持つ他の客が、何を買っていったかです。

これが協調フィルタリングの発想そのものです。内容を一切理解しなくても、行動の重なりだけで好みは推測できる。「この商品を買った人はこんな商品も買っています」は、この考え方をそのまま日本語にしたものです。

対になるのが内容ベースで、こちらはあらすじやジャンルを実際に読んで似たものを探します。RAG(検索拡張生成)の文書検索は完全にこちら側です。現代の推薦は両方を同じ数式の中で混ぜ、出てくるのは埋め込み(Embedding)を1から理解するとまったく同じ意味を持った数値の並びです。RAGを作ったことがある人は、推薦システムの半分をすでに知っています。

直感: 巨大な穴あき表を埋める問題

行にユーザー、列にアイテムを並べた表を作ります。マスの中身は評価点でもクリックの有無でも構いません。実サービスなら数百万行×数百万列で、そしてほとんどが空欄です。1人が触るアイテムは全体のごく一部だからで、この空欄を予測することが推薦です。

なぜ予測できるのでしょうか。表がでたらめな数字の集まりなら埋めようがありません。埋められるのは、「SFが好きな人はSFを買う」といった傾向が数十個もあれば、大半のマスに説明がついてしまうからです。数学の言葉でいえば、この表は低ランク——縦長の行列と横長の行列の掛け算で近似できます。

r^ui=puqi=f=1dpufqif\hat{r}_{ui} = \mathbf{p}_u \cdot \mathbf{q}_i = \sum_{f=1}^{d} p_{uf}\, q_{if}
(1)

r^ui\hat{r}_{ui} はユーザー uu がアイテム ii をどれくらい好みそうかの予測値、pu\mathbf{p}_u はユーザーの好みを表す dd 個の数の並び、qi\mathbf{q}_i はアイテムの性質を表す dd 個の数の並びです。式全体は、dd 本の隠れた軸それぞれについて「この人がどれだけ求めているか」と「この作品がどれだけ持っているか」を掛けて、全部足すと言っています。つまり r^ui\hat{r}_{ui} は、その人の好みリストと作品の性質リストを上から順に突き合わせ、合っていた分だけ点を足していった合計点だということです。

肝心なのは、この軸の意味を人間が決めないことです。「SF度」も誰も定義しません。穴埋め誤差が小さくなるよう学習を回すと勝手に現れる——特異値分解と低ランク近似と同じ話です。そして副産物として、ユーザーとアイテムが同じ dd 次元空間の点になります。人と物が同じ地図に載る。これが推薦における埋め込みです。

FIG 1rを上げると、少ない成分だけで元の行列がみるみる復元されていきます。評価行列も同じで、数十本の軸だけで大半が説明できるから空欄を埋められる。パラメータ数の欄も見てください——表の全マスを持つより、両側の埋め込みを持つほうがずっと小さい

素朴な行列分解が現実に負けるところ

この形はNetflix Prizeの時代に主役でしたが、そのままでは現代のサービスに載りません。穴が3つあります。

コールドスタート。 新規登録したばかりのユーザーは行がまるごと空で、pu\mathbf{p}_u を学習する材料がありません。昨日公開された新作も列が空です。ところが新作こそ一番出したい。

特徴量の入口がない。 この式が見ているのはIDだけです。年齢もデバイスも時間帯もアイテムのタイトル文も、式のどこにも入り込めません。

そもそも「☆5」がない。 星を几帳面に付ける利用者はごく少数で、実際に貯まるのはクリック・再生・購入といった暗黙フィードバックです。しかもこれは正例しかありません。押さなかったのが「嫌い」なのか「画面に出ていなかった」のかを、ログは区別してくれないのです。

この3つ目の扱い方が、推薦システムでいちばん事故が起きる場所です。

暗黙フィードバックと、負例のつくり方

正例しかないデータで好き嫌いは学習できません。負例は自分で作るしかなく、作り方が結果を左右します。定番はバッチ内負例で、同じミニバッチにいる他のユーザーの正例を、自分にとっての負例に流用します。追加の読み込みが要らず、アイテム数が多いときの標準手法です。

もう一つは、スコアの絶対値を当てにいくのをやめる方向です。BPR(Bayesian Personalized Ranking)は「見たものは、見なかったものより上」というペアの順序だけを学びます。

L=(u,i,j)lnσ ⁣(r^uir^uj)\mathcal{L} = -\sum_{(u,i,j)} \ln \sigma\!\left(\hat{r}_{ui} - \hat{r}_{uj}\right)

が正例、 が負例、 はシグモイド関数です。正例のスコアが負例より大きければ損失が小さくなると言っているだけで、何点かには一切こだわりません。つまりこの式は、「押されたものが、押されなかったものより一段でも上に来ていればそれでよい」とだけ要求しているということです。出力は結局「上から20件」なので、順序さえ合えばよいという割り切りです。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. BPR: Bayesian Personalized Ranking from Implicit Feedback. arXiv:1205.2618論文ページ·PDF
  2. Neural Collaborative Filtering. arXiv:1708.05031論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です