2.1.2 ユーザーモデリングの詳解

位置づけ

ユーザーモデリングとは、推薦システムが「このユーザーは何を好みそうか」「今この瞬間に何を見たい可能性が高いか」を推定できるように、ユーザーの行動、文脈、属性を表現する工程である。

前節のコンテンツ理解が「アイテム側を理解する処理」だとすれば、ユーザーモデリングは「ユーザー側を理解する処理」である。Hulu のような動画配信サービスでは、ユーザーというより profile_id 単位で見ることが多い。1 つのアカウントを家族で共有する場合でも、プロフィールごとに視聴履歴が分かれていれば、推薦はプロフィール単位で最適化するのが自然だからである。

Hulu のデータカタログでは、unique_viewed_series がユーザーモデリングの中心的な入力になる。このテーブルは、各 profile_id が 25% 以上視聴した series_idlast_viewing_date を持つ。つまり、推薦に使える主要なシグナルは「このプロフィールが、このシリーズを、少なくとも一定以上見た」という暗黙的フィードバックである。

ここで重要なのは、これは星評価ではないという点である。ユーザーが 5 段階評価で 5 を付けたわけではない。視聴したという行動から、嗜好を推定しているだけである。そのため、ユーザーモデリングでは常に次の曖昧さを意識する必要がある。

  • 視聴した作品が本当に好きだったとは限らない
  • 視聴しなかった作品が嫌いだったとは限らない
  • 表示されなかった作品は選ぶ機会がなかっただけかもしれない
  • 人気作品やトップ画面で露出された作品は視聴されやすい
  • プロフィールを複数人で共有していると、嗜好が混ざる
  • 子どもが親のプロフィールで見た、またはその逆が起きる可能性がある

したがって、ユーザーモデリングは「履歴を集計するだけ」ではない。ノイズやバイアスを含む行動ログから、推薦に使える嗜好表現を作る問題である。

ユーザーモデリングで作りたいもの

最終的に作りたいものは、推薦モデルが使えるユーザー表現である。代表的には次のような形がある。

  • ユーザーのジャンル嗜好分布
  • ユーザーの俳優、監督、制作国、年代への嗜好
  • ユーザーの mood 嗜好
  • 最近よく見ている作品群
  • 長期的に安定して好きな作品群
  • 短尺を好むか、長尺を好むか
  • 映画中心か、シリーズ中心か
  • SVOD だけ見る傾向か、TVOD にも反応する傾向か
  • 深夜、週末、スマートフォンなどの文脈依存の嗜好
  • モデルで扱うためのユーザー埋め込みベクトル

例えば、あるプロフィールが「インターステラー」「TENET」「ダークナイト」などをよく見ているとする。このとき、ユーザーモデルは単に series_id の集合を覚えるだけでは弱い。より役に立つ表現は、次のようなものである。

  • 洋画をよく見る
  • SF やサスペンスに強く反応する
  • クリストファー・ノーラン監督作品をよく見る
  • 知的、緊張感、重厚、思索的な mood を好む
  • 長尺映画でも離脱せずに見る可能性がある

このような表現が作れれば、まだ見ていない作品に対しても「このプロフィールに合いそうか」を推定できる。

データ収集

教科書では、データ収集として購買履歴、クリック、評価、閲覧履歴、文脈情報が挙げられている。動画配信では、これらを次のように読み替えると理解しやすい。

  • 視聴開始
  • 一定割合以上の視聴
  • 完了視聴
  • 視聴時間
  • 再生停止、早期離脱
  • 検索クエリ
  • 作品詳細ページの閲覧
  • マイリスト追加
  • 継続視聴
  • 同一シリーズの次話再生
  • 表示されたがクリックされなかった作品
  • 視聴日時
  • デバイス種別
  • キッズプロフィールかどうか

今回の Hulu ドメイン情報では、明確に与えられている行動ログは unique_viewed_series である。このテーブルは 25% 以上視聴したシリーズだけを保持する。したがって、このテーブルだけを見る場合、行動は次のように二値化される。

pu,i={1if profile u watched series i at least 25 percent0otherwisep_{u,i} = \begin{cases} 1 & \text{if profile } u \text{ watched series } i \text{ at least 25 percent} \\ 0 & \text{otherwise} \end{cases}

ここで pu,i=1p_{u,i} = 1 は「好みである」と同義ではない。「嗜好を示す可能性がある観測済み行動」である。一方、pu,i=0p_{u,i} = 0 は「嫌い」ではない。「観測されていない」だけである。

この違いは非常に重要である。明示的評価の推薦では、ユーザーが低評価を付けた作品を本当に嫌っていると解釈しやすい。しかし暗黙的フィードバックでは、未視聴作品の大半は未露出、未発見、時間不足、配信タイミング不一致などの可能性を含む。

ユーザープロファイル構築

ユーザープロファイル構築とは、収集した行動ログを集約し、ユーザーの特徴として使える形に変換する処理である。

最も単純なプロファイルは、視聴済み作品集合である。

Iu={ipu,i=1}I_u = \{ i \mid p_{u,i} = 1 \}

ここで IuI_u はプロフィール uu が視聴したシリーズ集合である。しかし、これだけではユーザーの嗜好を一般化できない。そこで item_information_table の作品特徴を結合する。

例えば、作品 ii のコンテンツ特徴を ci\mathbf{c}_i とする。これは genre、sub_genre、sockets_tag、casts、film_directors、avg_mood_tag、avg_fingerprint などから作ったベクトルである。すると、ユーザー uu のコンテンツベースのプロファイルは次のように作れる。

pu=1IuiIuci\mathbf{p}_u = \frac{1}{|I_u|} \sum_{i \in I_u} \mathbf{c}_i

これは「視聴した作品特徴の平均」である。最近の視聴を重くしたい場合は、時間減衰重み wu,iw_{u,i} を使う。

pu=iIuwu,iciiIuwu,i\mathbf{p}_u = \frac{\sum_{i \in I_u} w_{u,i} \mathbf{c}_i} {\sum_{i \in I_u} w_{u,i}}

例えば、wu,iw_{u,i} を最終視聴日からの日数 Δtu,i\Delta t_{u,i} に応じて次のように置く。

wu,i=exp(λΔtu,i)w_{u,i} = \exp(-\lambda \Delta t_{u,i})

λ\lambda が大きいほど、最近の視聴を強く重視する。動画配信では、この時間減衰がかなり重要である。なぜなら、ユーザーの興味は短期的に大きく変わるからである。

例えば、普段は洋画を見ているプロフィールが、ある週だけ子ども向けアニメを連続視聴したとする。長期嗜好だけを見ると洋画を出すべきだが、短期文脈ではアニメの続きを出すべきかもしれない。したがって、実務では長期プロファイルと短期プロファイルを分けることが多い。

pulong=1IuiIuci\mathbf{p}_u^{\text{long}} = \frac{1}{|I_u|} \sum_{i \in I_u} \mathbf{c}_i
pushort=iIuexp(λΔtu,i)ciiIuexp(λΔtu,i)\mathbf{p}_u^{\text{short}} = \frac{\sum_{i \in I_u} \exp(-\lambda \Delta t_{u,i}) \mathbf{c}_i} {\sum_{i \in I_u} \exp(-\lambda \Delta t_{u,i})}

長期プロファイルは安定した好みを表し、短期プロファイルは直近の関心を表す。

デモグラフィック情報について

教科書では、年齢、性別、居住地などのデモグラフィック情報がユーザープロファイルの一部として挙げられている。しかし Hulu のような動画推薦で、これらを使う場合は慎重であるべきだ。

理由は 3 つある。

第 1 に、プライバシーと規制の問題がある。GDPR や CCPA のような規制だけでなく、サービス利用者の期待としても、過度に個人属性へ依存した推薦は望ましくない場合がある。

第 2 に、デモグラフィック情報は嗜好を粗くしか説明しない。年齢や性別が同じでも、作品嗜好は大きく異なる。

第 3 に、固定属性に頼ると、ステレオタイプ的な推薦になりやすい。動画推薦では、実際の視聴行動、視聴文脈、作品特徴を中心にした方が、個別性を捉えやすい。

一方で、キッズプロフィールや年齢制限のような安全性制御は重要である。これは「好みを当てるための属性」というより、「出してはいけないものを制御するための属性」である。

明示的特徴ベースモデル

明示的特徴ベースモデルは、ユーザー属性や明示的フィードバックを使って嗜好を予測するモデルである。

典型例は次である。

  • 年齢、地域、契約プランなどのユーザー属性
  • ユーザーが明示的に選んだ好きなジャンル
  • 星評価
  • いいね、よくないね
  • アンケート回答

これらを特徴量として、ロジスティック回帰、決定木、勾配ブースティング木などで「この作品を視聴するか」を予測する。

例えば、候補作品 ii とユーザー uu に対する特徴量ベクトルを xu,i\mathbf{x}_{u,i} とし、視聴確率を次のようにモデル化する。

Pr(yu,i=1xu,i)=σ(wTxu,i)\Pr(y_{u,i}=1 \mid \mathbf{x}_{u,i}) = \sigma(\mathbf{w}^{\mathsf{T}} \mathbf{x}_{u,i})

ここで σ\sigma は sigmoid 関数である。

Hulu のように視聴ログ中心のサービスでは、明示的評価が少ないことが多い。その場合、明示的特徴ベースモデルだけで高精度な推薦を作るのは難しい。ただし、解釈性は高い。

例えば、次のようなルールやモデルは理解しやすい。

  • SF をよく見るプロフィールには SF を出す
  • キッズプロフィールには年齢不適合作品を出さない
  • 最近アニメシリーズを見ているプロフィールには次話や関連シリーズを出す
  • TVOD 購入履歴がないプロフィールには TVOD 作品を控えめにする

明示的特徴ベースモデルの弱点は、微妙な嗜好を捉えにくい点である。例えば「ダークコメディが好き」「重い雰囲気の SF は好きだが軽い宇宙冒険はあまり見ない」「恋愛要素のある医療ドラマは見るが純粋な恋愛映画は見ない」といった嗜好は、手作り特徴だけでは表現しにくい。

暗黙的行動モデル

暗黙的行動モデルは、クリック、視聴、滞在時間、購入などの行動から嗜好を推定する。Hulu の unique_viewed_series はまさにこのタイプである。

暗黙的行動モデルでは、観測された行動を「正例」として扱う。ただし、未観測を単純な負例として扱うと危険である。未視聴作品は非常に多く、その多くはユーザーが嫌いだから見なかったのではなく、単に知らなかった、表示されなかった、時間がなかっただけかもしれない。

この問題に対処するため、暗黙的フィードバックでは「嗜好」と「信頼度」を分けて考えることが多い。

pu,i={1if interaction is observed0otherwisep_{u,i} = \begin{cases} 1 & \text{if interaction is observed} \\ 0 & \text{otherwise} \end{cases}
cu,i=1+αru,ic_{u,i} = 1 + \alpha r_{u,i}

ここで ru,ir_{u,i} は視聴回数、視聴時間、完了率などの行動強度である。unique_viewed_series だけを使う場合は視聴強度が 1 に近い二値情報になるが、もし視聴時間や完了率が別ログにあるなら ru,ir_{u,i} に反映できる。

暗黙的行動モデルの強みは、ユーザーが明示的に評価しなくても大量の行動から学習できる点である。一方で、露出バイアス、人気バイアス、位置バイアスを受けやすい。

例えば、ホーム画面の一番上に出た作品は見られやすい。その作品が本当に好まれていたのか、単に目立つ場所にあったから見られたのかは区別しにくい。このため、実験設計やログ設計では「表示された候補」「表示位置」「クリック」「視聴開始」「視聴完了」をできるだけ分けて記録することが重要である。

系列モデル

系列モデルは、ユーザー行動の順序を使うモデルである。単に「何を見たか」ではなく、「どの順番で見たか」を扱う。

動画配信では、順序が非常に重要である。

例えば、次の 2 つのプロフィールは同じ作品集合を見ていても、次に推薦すべきものが違う可能性がある。

  • 1 か月前に映画を数本見て、今日アニメ第 1 話を見た
  • 今日映画を見て、1 か月前にアニメ第 1 話を見た

前者ではアニメ第 2 話や関連アニメが有力である。後者では映画関連の候補が有力かもしれない。

系列モデルでは、視聴履歴を次のような列として扱う。

Su=(i1,i2,,iT)S_u = (i_1, i_2, \ldots, i_T)

目的は、次に視聴される作品 iT+1i_{T+1} を予測することである。

Pr(iT+1i1,i2,,iT)\Pr(i_{T+1} \mid i_1, i_2, \ldots, i_T)

GRU4Rec は RNN 系のモデルで、セッション内の次アクション予測に使われる。SASRec や BERT4Rec は Transformer 系のモデルで、自己注意機構によって過去のどの視聴が次の推薦に効くかを学習する。

系列モデルのメリットは、短期意図を捉えやすいことである。例えば、ユーザーがあるドラマシリーズを連続視聴しているなら、次話推薦を強く出すべきである。また、直近でホラー映画を連続して見ているなら、一時的なホラー関心を拾える。

一方で、系列モデルには弱点もある。

  • 十分な時系列ログが必要である
  • 計算コストが高い
  • 履歴が少ない新規ユーザーには弱い
  • 家族共有プロフィールでは系列が混ざりやすい
  • 長期嗜好と短期嗜好のどちらを重視するか調整が必要である

Hulu の unique_viewed_series には last_viewing_date がある。これは厳密な再生順序ではないが、日単位の最近性を使った短期プロファイルや時間減衰には使える。

協調フィルタリング

協調フィルタリングは、ユーザーとアイテムの相互作用パターンだけから推薦する手法である。作品のジャンルや説明文を使わなくても、「同じものを見たユーザーは似ている」「同じユーザーに見られた作品は似ている」という仮定で推薦できる。

Hulu の暗黙的フィードバックで考えると、ユーザー、正確にはプロフィールとシリーズの行列を作る。

R{0,1}m×n\mathbf{R} \in \{0,1\}^{m \times n}

ここで mm はプロフィール数、nn はシリーズ数である。Ru,i=1\mathbf{R}_{u,i}=1 ならプロフィール uu がシリーズ ii を 25% 以上視聴したことを表す。

ユーザーベース CF

ユーザーベース CF は、ユーザー同士の類似度を計算し、似たユーザーが見た作品を推薦する。

例えば、プロフィール uuvv の視聴ベクトルを ru\mathbf{r}_urv\mathbf{r}_v とする。cosine 類似度は次の通りである。

sim(u,v)=ruTrvrurv\text{sim}(u,v) = \frac{\mathbf{r}_u^{\mathsf{T}} \mathbf{r}_v} {\|\mathbf{r}_u\| \|\mathbf{r}_v\|}

プロフィール uu に対する作品 ii のスコアは、近いプロフィールがどれだけ作品 ii を見ているかで計算できる。

r^u,i=vN(u)sim(u,v)rv,i\hat{r}_{u,i} = \sum_{v \in N(u)} \text{sim}(u,v) r_{v,i}

ここで N(u)N(u) はプロフィール uu に近い近傍ユーザー集合である。

直感的には、「あなたと似た視聴履歴の人が見ている作品を推薦する」という方法である。

ただし、Hulu の規模ではユーザーベース CF を素朴に実装するのは難しい。unique_viewed_series は約 15 億行であり、プロフィール数も非常に多い。全プロフィール間の類似度を計算すると、組み合わせが膨大になる。

また、ユーザーベース CF はプロフィールの嗜好が変わると類似ユーザーも変わるため、更新コストが高い。

アイテムベース CF

アイテムベース CF は、作品同士の類似度を計算する。ユーザーではなくアイテムを軸にするため、動画推薦ではこちらの方が実務的に扱いやすいことが多い。

作品 iijj の視聴ユーザー集合が大きく重なっていれば、両者は似ていると考える。

sim(i,j)=riTrjrirj\text{sim}(i,j) = \frac{\mathbf{r}_i^{\mathsf{T}} \mathbf{r}_j} {\|\mathbf{r}_i\| \|\mathbf{r}_j\|}

ここで ri\mathbf{r}_i は作品 ii を見たユーザーを表す列ベクトルである。

プロフィール uu が過去に見た作品集合 IuI_u に対して、候補作品 jj のスコアは次のように計算できる。

r^u,j=iIusim(i,j)\hat{r}_{u,j} = \sum_{i \in I_u} \text{sim}(i,j)

直感的には、「過去に見た作品と一緒に見られやすい作品を推薦する」という方法である。

例えば、多くのプロフィールが「インターステラー」と「TENET」を両方見ていれば、アイテムベース CF はこの 2 作品を近いと判断する。これは作品説明文やジャンルを知らなくても学習できる。

ただし、アイテムベース CF にも注意点がある。

  • 人気作品同士が過剰に近くなりやすい
  • 新作は視聴ログが少ないため不利である
  • 視聴ログが少ないロングテール作品も不利である
  • 「似ている理由」は行動共起であり、意味的に似ているとは限らない

例えば、同じキャンペーン枠に出ていたため一緒に見られた作品が、内容的にはまったく似ていない可能性がある。これは協調フィルタリングの強みでもあり弱みでもある。コンテンツ特徴に出ない関連を拾える一方で、露出や企画の影響も拾ってしまう。

行列分解

行列分解は、ユーザーとアイテムを低次元の潜在ベクトルで表し、その内積で相互作用を近似する手法である。

教科書の説明では RUTV\mathbf{R} \approx \mathbf{U}^{\mathsf{T}} \mathbf{V} のように書かれているが、次元を明確にするなら、通常は次のように書く方が分かりやすい。

RPQT\mathbf{R} \approx \mathbf{P}\mathbf{Q}^{\mathsf{T}}

ここで各行列の次元は次の通りである。

  • RRm×n\mathbf{R} \in \mathbb{R}^{m \times n}: ユーザー、アイテム相互作用行列
  • PRm×k\mathbf{P} \in \mathbb{R}^{m \times k}: ユーザー潜在因子行列
  • QRn×k\mathbf{Q} \in \mathbb{R}^{n \times k}: アイテム潜在因子行列
  • kk: 潜在次元数

ユーザー uu の潜在ベクトルを puRk\mathbf{p}_u \in \mathbb{R}^k、アイテム ii の潜在ベクトルを qiRk\mathbf{q}_i \in \mathbb{R}^k とすると、予測スコアは次のようになる。

r^u,i=puTqi\hat{r}_{u,i} = \mathbf{p}_u^{\mathsf{T}} \mathbf{q}_i

この式の意味は、「ユーザーの潜在嗜好」と「作品の潜在特徴」の向きが近いほどスコアが高い、ということである。

潜在次元は、人間が名前を付けたジャンルそのものとは限らない。しかし、学習後に観察すると、ある次元が「アニメ寄り」「洋画アクション寄り」「国内ドラマ寄り」「キッズ寄り」「長尺映画寄り」のような意味を持つことがある。

明示評価向け MF と暗黙的 MF の違い

星評価のような明示評価では、観測された評価値を再現するように学習する。

minP,Q(u,i)Ω(ru,ipuTqi)2+λ(pu2+qi2)\min_{\mathbf{P}, \mathbf{Q}} \sum_{(u,i) \in \Omega} \left(r_{u,i} - \mathbf{p}_u^{\mathsf{T}} \mathbf{q}_i\right)^2 + \lambda \left( \|\mathbf{p}_u\|^2 + \|\mathbf{q}_i\|^2 \right)

ここで Ω\Omega は評価が観測されたユーザー、アイテムのペア集合である。

しかし、Hulu のような暗黙的フィードバックでは、観測値は評価点ではなく視聴有無である。そのため、暗黙的 MF では嗜好 pu,ip_{u,i} と信頼度 cu,ic_{u,i} を使う定式化がよく使われる。

minP,Qu=1mi=1ncu,i(pu,ipuTqi)2+λ(u=1mpu2+i=1nqi2)\min_{\mathbf{P}, \mathbf{Q}} \sum_{u=1}^{m} \sum_{i=1}^{n} c_{u,i} \left( p_{u,i} - \mathbf{p}_u^{\mathsf{T}} \mathbf{q}_i \right)^2 + \lambda \left( \sum_{u=1}^{m} \|\mathbf{p}_u\|^2 + \sum_{i=1}^{n} \|\mathbf{q}_i\|^2 \right)

この式では、未観測の pu,i=0p_{u,i}=0 も学習に入る。ただし信頼度 cu,ic_{u,i} は低い。観測された視聴は高い信頼度を持ち、未観測は低い信頼度を持つ。

これにより、「見た作品は好きだった可能性が高いが、見ていない作品を強い嫌いとは扱わない」という暗黙的フィードバックの性質を反映できる。

ALS

ALS は Alternating Least Squares、つまり交互最小二乗法である。行列分解の学習方法の 1 つである。

行列分解では、ユーザー行列 P\mathbf{P} とアイテム行列 Q\mathbf{Q} の両方を同時に最適化したい。しかし両方を同時に見ると、目的関数は単純な線形最小二乗ではなくなる。

ALS は次のように交互に解く。

  1. アイテム因子 Q\mathbf{Q} を固定し、ユーザー因子 P\mathbf{P} を解く
  2. ユーザー因子 P\mathbf{P} を固定し、アイテム因子 Q\mathbf{Q} を解く
  3. これを収束するまで繰り返す

片方を固定すると、もう片方は最小二乗問題として解ける。これが ALS の基本発想である。

Hulu のように相互作用行数が非常に多い場合、ALS は分散処理しやすい点が利点である。各ユーザー因子や各アイテム因子を比較的独立に更新できるためである。

ただし、ALS で得られるのは基本的に静的なユーザー、アイテム表現である。直近のセッション意図や時間帯文脈を細かく扱うには、別の特徴量や系列モデルと組み合わせる必要がある。

行列分解の強みと弱み

行列分解の強みは、疎な行列から潜在的な嗜好構造を学習できることである。unique_viewed_series のように巨大だが疎な視聴行列でも、「このプロフィール群はこの作品群を見やすい」という構造を圧縮できる。

また、ユーザーとアイテムが同じ潜在空間に埋め込まれるため、候補生成にも使いやすい。ユーザー uu に対して、内積が大きいアイテムを近似最近傍探索で取り出せば候補生成になる。

一方で、弱点もある。

  • 新規アイテムは視聴ログがないためベクトルを学習しにくい
  • 新規ユーザーは履歴がないためベクトルを学習しにくい
  • 線形内積なので複雑な文脈依存関係は表現しにくい
  • 学習データの露出バイアスをそのまま受ける
  • なぜ推薦されたかを説明しにくい
  • 配信終了、キッズ制御、TVOD などのビジネス制約は別途扱う必要がある

そのため、行列分解は強力な候補生成器として使い、ランキング段階ではコンテンツ特徴、文脈特徴、品質制約を加える構成が自然である。

因子分解マシン

因子分解マシン、Factorization Machines、FM は、行列分解を一般化したモデルである。行列分解は基本的にユーザー ID とアイテム ID の相互作用を学習する。一方、FM は任意の特徴量間のペアワイズ相互作用を学習できる。

FM の標準的な 2 次の式は次の通りである。

y^(x)=w0+i=1nwixi+i=1nj=i+1nvi,vjxixj\hat{y}(\mathbf{x}) = w_0 + \sum_{i=1}^{n} w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle \mathbf{v}_i, \mathbf{v}_j \rangle x_i x_j

ここで xRn\mathbf{x} \in \mathbb{R}^n は入力特徴ベクトル、w0w_0 はバイアス、wiw_i は各特徴の線形効果、viRk\mathbf{v}_i \in \mathbb{R}^k は特徴 ii の潜在ベクトルである。

教科書の式では i=1nj=1n\sum_{i=1}^{n}\sum_{j=1}^{n} のように書かれているが、実務上は i<ji < j の組み合わせで書く方が分かりやすい。全組み合わせで書くと、自己相互作用や二重カウントをどう扱うかが曖昧になるからである。

FM の直感は、「特徴同士の相性」を学習することである。

例えば、入力特徴に次のようなものを入れる。

  • profile_id
  • series_id
  • genre
  • sub_genre
  • film_director
  • cast
  • service_type
  • media_type
  • device_type
  • hour_of_day
  • day_of_week
  • user_recent_genre
  • item_mood_tag

FM は、これらのペアの相互作用を学習する。

例えば次のような相性である。

  • あるプロフィールと SF ジャンルの相性
  • あるプロフィールと特定監督の相性
  • 週末夜と長尺映画の相性
  • スマートフォン視聴と短尺コンテンツの相性
  • キッズプロフィールとキッズ向けジャンルの相性
  • TVOD 作品と TVOD 視聴経験があるプロフィールの相性
  • mood tag の「thought-provoking」と特定プロフィールの相性

このように、FM は ID ベースの協調フィルタリングと、メタデータベースの特徴量モデルの中間に位置する。

FM が疎な特徴に強い理由

FM は one-hot 特徴が大量にある状況で強い。動画推薦では、profile_id、series_id、cast、director、genre、tag などが非常に高次元かつ疎になる。

通常の線形モデルでは、特徴の組み合わせを明示的に作らない限り、相互作用を表現できない。例えば「このプロフィールは SF が好き」という効果を入れるには、profile_id と genre の交差特徴を作る必要がある。しかし、すべての組み合わせを手作りすると特徴数が爆発する。

FM は各特徴に潜在ベクトル vi\mathbf{v}_i を持たせ、相互作用を内積で表す。

vi,vj\langle \mathbf{v}_i, \mathbf{v}_j \rangle

これにより、観測が少ない組み合わせでも、似た特徴から一般化できる。

例えば、あるプロフィールが「宇宙 SF」を数本しか見ていなくても、SF、洋画、ノーラン、知的 mood、長尺映画といった特徴の組み合わせから、別の似た作品への反応を推定しやすくなる。

CF、MF、FM の違い

協調フィルタリング、行列分解、FM は似ているが、扱う情報の範囲が違う。

手法 主な入力 学習するもの Hulu での使いどころ
ユーザーベース CF 視聴行列 似たプロフィール 小規模分析、説明、近傍探索の理解
アイテムベース CF 視聴行列 一緒に見られやすい作品 類似作品、候補生成、関連作品
MF 視聴行列 ユーザーと作品の潜在ベクトル 大規模候補生成、嗜好埋め込み
FM 視聴行列 + 属性 + 文脈 特徴間の相互作用 CTR、視聴開始、25% 視聴予測、ランキング

CF は近傍ベースであり、直感的で説明しやすい。MF は行列全体を低次元に圧縮するため、大規模で疎なデータに向いている。FM は ID 以外の特徴を自然に入れられるため、ランキングやハイブリッド推薦に向いている。

Hulu の推薦パイプラインでの使い分け

Hulu のような動画配信では、1 つの手法だけで推薦を完結させるより、複数のユーザーモデルを役割ごとに使い分けるのが自然である。

候補生成では、次のようなモデルを使う。

  • アイテムベース CF による「この作品を見た人はこれも見た」
  • MF によるユーザー埋め込みとアイテム埋め込みの近傍探索
  • コンテンツ embedding による類似作品検索
  • 人気作品、新着作品、継続視聴、編集枠

ランキングでは、次のような特徴量を組み合わせる。

  • MF スコア
  • アイテムベース CF スコア
  • ユーザーの genre 嗜好と候補作品 genre の一致
  • ユーザーの mood 嗜好と候補作品 avg_mood_tag の一致
  • ユーザーの視聴済み監督、キャストと候補作品の一致
  • 最近視聴した作品と候補作品の embedding 類似度
  • 配信終了までの日数
  • SVOD/TVOD の適合性
  • キッズ適合性
  • 既視聴かどうか
  • 同一シリーズや同一ジャンルの出しすぎ

このように見ると、ユーザーモデリングは単体のモデル名ではなく、候補生成、ランキング、制約、説明にまたがるユーザー理解の集合である。

LLM とユーザーモデリング

教科書では、LLM の登場により、ユーザー対話やテキスト履歴から直接推薦を生成できるようになったと説明されている。動画推薦で LLM を使う場合、いくつかのパターンがある。

第 1 に、視聴履歴の要約である。例えば、ユーザーの視聴作品と作品メタデータを LLM に渡し、次のような自然言語プロファイルを作る。

{
  "long_term_preferences": ["洋画", "SF", "重厚なストーリー", "有名監督作品"],
  "short_term_intent": ["宇宙もの", "思索的な映画"],
  "avoid": ["短尺バラエティへの反応は弱い"],
  "explanation_seed": "知的でスケールの大きい SF 作品を好む傾向"
}

第 2 に、検索クエリや自然言語入力の理解である。ユーザーが「家族で見られる軽い映画」「怖すぎないサスペンス」「ノーランっぽい映画」と入力した場合、LLM はその曖昧な意図を構造化し、候補生成やランキングに渡せる。

第 3 に、推薦理由の生成である。例えば「最近、壮大な SF 作品を視聴しているため」といった説明を作れる。

ただし、LLM をユーザーモデリングに使う場合は注意が必要である。

  • 個人情報やセンシティブ属性を不用意に推定しない
  • 視聴履歴から過度に断定的な人物像を作らない
  • 推薦理由に事実でない内容を混ぜない
  • LLM 生成プロファイルをそのままオンラインランキングの唯一の根拠にしない
  • オフラインで固定スキーマに落とし、監視可能な特徴量として使う

特に、動画視聴履歴は個人の趣味嗜好を強く反映する。LLM で自然言語化すると、人間に読める分だけプライバシーリスクも上がる。実務では、必要最小限の粒度で、推薦品質に効く範囲に限定して使うべきである。

コールドスタート

ユーザーモデリングで避けられない問題がコールドスタートである。

新規プロフィールでは視聴履歴がないため、CF や MF はほとんど使えない。この場合は、次のような情報に頼る。

  • 人気作品
  • 新着作品
  • 編集部キュレーション
  • 初回オンボーディングで選んだジャンル
  • デバイスや時間帯などの文脈
  • キッズプロフィールかどうか
  • コンテンツベースの多様な候補

新規作品では視聴ログがないため、協調フィルタリングや MF では不利である。この場合は、item_information_table のコンテンツ情報が重要になる。

  • genre
  • sub_genre
  • casts
  • film_directors
  • sockets_tag
  • description
  • avg_mood_tag
  • avg_fingerprint
  • service_type
  • publish_start_at

つまり、ユーザーコールドスタートでは人気や文脈が効き、アイテムコールドスタートではコンテンツ理解が効く。ユーザーモデリングとコンテンツ理解は、この点でも補完関係にある。

評価

ユーザーモデリングの良し悪しは、ユーザー表現そのものの見た目だけでは判断できない。最終的には推薦品質に効くかを見る必要がある。

オフラインでは、過去の視聴履歴を時間で分割し、過去から未来の視聴を当てる。

例えば、ある日付より前の視聴を学習に使い、その後の視聴をテストにする。

Iutrain={ilast_viewing_dateu,i<t}I_u^{\text{train}} = \{ i \mid \text{last\_viewing\_date}_{u,i} < t \}
Iutest={ilast_viewing_dateu,it}I_u^{\text{test}} = \{ i \mid \text{last\_viewing\_date}_{u,i} \ge t \}

このとき、推薦上位 KK 件に将来視聴された作品が入っているかを見る。

代表的な指標は次である。

  • Recall@K
  • Precision@K
  • NDCG@K
  • MAP@K
  • HitRate@K
  • Coverage
  • Diversity
  • Novelty

ただし、オフライン評価だけでは十分ではない。視聴ログには過去の露出バイアスが含まれるからである。最終的にはオンライン実験で、視聴開始率、25% 以上視聴率、完了率、継続利用率、長期リテンション、多様性、ユーザー満足を確認する必要がある。

実務上の注意点

第 1 に、未視聴を負例として扱いすぎないことである。暗黙的フィードバックでは、未観測は「嫌い」ではない。負例サンプリングや confidence weighting が必要である。

第 2 に、視聴済み作品の扱いを分けることである。映画推薦では視聴済み作品を除外することが多い。一方、シリーズ作品では次話や続きの視聴を促すため、継続視聴枠として別扱いにする必要がある。

第 3 に、プロフィール共有を考えることである。1 つのプロフィールで大人向け映画と子ども向けアニメが混ざる場合、単一の平均ベクトルでは嗜好がぼやける。クラスタリング、短期履歴、セッション文脈を使って混在を緩和する必要がある。

第 4 に、人気バイアスを抑えることである。CF や MF は人気作品を高くしやすい。ランキング後に多様性、ロングテール露出、ジャンル偏りを調整することがある。

第 5 に、配信制約を必ず入れることである。publish_start_atpublish_end_atis_blacklistrating_namekids_mature_flgservice_type などは、モデルスコアとは別に推薦可能性を制御する。

第 6 に、時間変化を扱うことである。ユーザーの嗜好、作品カタログ、配信権利、話題性は変化する。ユーザーベクトルや類似度行列は定期的に更新し、直近行動を反映する仕組みが必要である。

まとめ

ユーザーモデリングとは、ユーザーやプロフィールの行動から、推薦に使える嗜好表現を作る工程である。Hulu では unique_viewed_series による 25% 以上視聴ログが重要な暗黙的フィードバックであり、これを item_information_table の作品特徴と結び付けることで、ジャンル、人物、mood、シリーズ性、長期嗜好、短期意図を推定できる。

教科書の 3 分類は、次のように整理できる。

  • 明示的特徴ベースモデル: 属性や明示フィードバックを使う。解釈しやすいが、微妙な嗜好には弱い。
  • 暗黙的行動モデル: 視聴やクリックから嗜好を推定する。Hulu の主戦場だが、未観測と嫌いを混同しない注意が必要である。
  • 系列モデル: 視聴順序や最近性を使う。次話推薦、セッション意図、短期嗜好に強い。

CF、MF、FM は、ユーザーモデリングを実現する代表的な方法である。

  • CF は、似たユーザーや一緒に見られる作品を使う
  • MF は、ユーザーと作品を低次元ベクトルに分解する
  • FM は、ユーザー、作品、ジャンル、文脈などの特徴間相互作用を学習する

実務では、これらを単独で使うより、候補生成、ランキング、品質制御、説明生成の各段階で組み合わせる。特に Hulu のような動画配信では、暗黙的フィードバックの曖昧さ、視聴順序、プロフィール共有、配信制約、キッズ安全性、SVOD/TVOD の違いを含めてユーザーをモデル化することが重要である。