- はじめに
- 現代Webサービスの「推薦システム」基盤
- 2段階ランキングプロセス
- Use Case 1:Netflixのリアルタイム「予測検索」
- Use Case 2:検索と推薦を統合するモデル「UniCoRn」
- まとめ
はじめに
ソーシャル経済メディア「NewsPicks」(Media Experience Unit)でエンジニアをしております小林です! 2024年11月、世界の最先端エンジニアが集うカンファレンス QCon San Francisco 2024 に参加してきました。数あるセッションの中で特に目を引いたのが、Netflixのシニアリサーチサイエンティストである Moumita Bhattacharya (モウミタ バッタチャーリヤ) 氏が語った 「Recommender and Search Ranking Systems in Large Scale Real World Applications」 です。Netflixがいかに膨大なコンテンツとユーザー数の中で、推薦と検索を組み合わせた高度な体験を生み出しているのか、本セッションはその舞台裏に迫る貴重な機会となりました。
スピーカー紹介
モウミタ・バッタチャーリヤ氏は、Netflixで検索・推薦システム向けの大規模機械学習モデルを手掛けるシニアリサーチサイエンティスト。Etsyでの推薦システム技術リーダー経験やコンピュータサイエンス分野で博士号取得、さらに主要国際学会での査読経験を併せ持つ、実務と学術を兼ね備えたエキスパートです。
現代Webサービスの「推薦システム」基盤
YouTube、Spotify、そしてNetflix — これら巨大プラットフォームがユーザーにシームレスな体験を提供する根幹は、パーソナライズドな「推薦システム」にあります。ユーザーの視聴履歴、評価、行動ログから適切なコンテンツを提示することで、ユーザーの探索コストを下げ、満足度を向上させます。
しかし、推薦システムを運用するには以下の課題があります。
- データプライバシー保護
- 多様性確保(フィルターバブル回避)
- コールドスタート問題(データ不足時の推薦精度向上)
これらをクリアするため、Netflixをはじめとする企業は、人気コンテンツによる初期足がかりや、データ蓄積後の協調フィルタリング転換など戦略的なアプローチを駆使しています。
2段階ランキングプロセス
膨大な作品数・ユーザー数を抱えるNetflixでは、ユーザー毎にリアルタイムかつ精密なランキングを実行するのは極めて困難です。そのため「2段階ランキングプロセス」というアプローチでその問題を解決しています(下記画像参照)。
ステップ1:候補抽出(First Pass)
最初のステップでは、数百万~億単位の候補アイテムから、シンプルなルールベースモデルや軽量な機械学習モデルを使って、数百~数千程度まで一気に絞り込みます。ここで求められるのは「速度と効率性」で、高精度はまだ必要ありません。この段階では下記のような計算コストを抑えた手法で行われます。
- 非パーソナライズされた人気度順
- クエリとの単純なテキストマッチ
- 類似作品抽出
ステップ2:精密ランキング(Second Pass)
絞り込まれた少数アイテムに対して、ディープラーニングを始めとする複雑なモデルで緻密なスコアリングを実施します。この段階では下記のような膨大な特徴量をもとにパーソナライズを深め、最終的な表示順を決定します。
- ユーザーの視聴履歴
- 評価データ、
- セッション内行動
こうした2段階構成により、「スケーラビリティ」と「精度」という相反する要素を両立しているようです。
モデル評価とA/Bテストサイクル
2段階ランキングプロセス後のモデルは、一般的な推薦システム同様にオフライン評価から始め、A/Bテストによるオンライン実証のプロセス(下記画像参照)のサイクルを繰り返すことでモデル精度とユーザー体験を持続的に向上させています。
1. オフライン評価: 過去ログを用いたシミュレーションでモデルの初期性能を検証
2. インフラ整備と推論最適化:レイテンシー削減、スループット向上、コスト最適化を考慮し、オンライン運用環境を最適化
3. A/Bテスト(オンライン評価):実ユーザーを対象に新旧モデルを比較。クリック率、視聴時間、満足度など、ビジネス的・体験的指標で効果を計測。 一部の検索結果や推薦リストにランダムな要素を混ぜることで、選択バイアスを軽減し、より正確な評価を行う
4. 改善と本番投入:テスト結果を踏まえモデルを改良し、本番へ反映。これを繰り返すことで推薦品質を着実に向上させる
Use Case 1:Netflixのリアルタイム「予測検索」
特に印象的だったのは、Netflixが「検索」という行為自体を拡張し、全体約60%のユーザーがTVデバイスで視聴している状況を踏まえて、リモコン操作でもユーザーが即座に興味あるコンテンツへアクセスできるよう工夫している点です。 特にTVデバイスでは、リモコンでの入力が面倒なため、ユーザーは検索行為を避けがちです。そこでNetflixは、ユーザーがまだクエリを入力し始める前から適切なコンテンツを提示する「プレクエリキャンバス(Pre-Query Recommendations)」を導入しました(画像の赤枠参照)。あたかもユーザーの意図を先読みするような体験を提供します。
ユーザーの過去の視聴履歴に基づく嗜好(長期的嗜好)と、現行セッション中のユーザー行動(短期的意図)をリアルタイムで組み合わせることで、より精度の高い推薦を実現できます。
上記の例では、「プレクエリキャンバス」上の推薦が、ユーザーのセッション中の行動に応じてリアルタイムで更新される仕組みが示されています。最初の推薦はセッション開始時の情報に基づいていますが、ユーザーがホーム画面で女性が主役の番組や映画を閲覧すると、即座に推薦結果が更新され、『エミリー・イン・パリ』や『ニュー・ワールド』など、女性が主役のコンテンツが表示されます(2枚目の画像)。
さらに、ユーザーが料理や菓子作りに関連する番組を閲覧すると、推薦はそのセッション内で再び更新され(3枚目の画像)、短期的な意図が反映されます。一方で、短期的な意図に偏り過ぎず、長期的な嗜好とのバランスを保ちながら適切なコンテンツを提示することが重要なトレードオフとして挙げられます。
Netflixのコンテンツベースのモデルではマルチタスク学習を採⽤することで、オフライン評価において約6%の指標改善が確認されるなど、データ上でもその効果が示されています。
リアルタイム推薦のインフラストラクチャ
Netflixが実現しているリアルタイム推薦は、ユーザーアクセスからデータ収集、モデル予測、結果のフィードバックまでを高速で行うエンドツーエンドの仕組みによって成立しています。その一連の流れは、次のようなプロセスを経ています。
ユーザーアクセス
- ユーザーが「プレクエリキャンバス」にアクセスすると、クライアントが起点となります
リアルタイムデータ取得
- ユーザーがページ上で行った「いいね」や「クリック」などの行動データは、リアルタイムデータソースへ即座に送信。
- 1~2秒前の最新データを参照でき、推薦生成に反映させることが可能です
JIT(Just-In-Time)リクエスト
- クライアントはサーバーへリクエストを送信し、現在のコンテキストに合わせた推薦コンテンツを要求します
オンラインモデルによる高速予測
- サーバーはリアルタイムデータを活用し、オンラインモデルを用いて推薦結果を算出
- 40ms未満という低レイテンシでランキング済み結果(Ranked Results)を生成し、すぐにクライアントへ返します
ログデータの保存
- ユーザー行動はログとして記録され、今後のモデル学習やチューニングに使用されます
オフライントレーニング
- 蓄積されたログデータはオフライン環境でモデルの再学習に活用され、精度向上や新しい特徴量の追加など、モデル改善のためのフィードバックループが形成されます
結果のレスポンス
- サーバーからクライアントへ、更新された推薦結果が返され、ユーザーは即座にパーソナライズされたコンテンツへアクセスできます
このようなインフラ構成により、Netflixはユーザーの短期的な行動や長期的な嗜好をバランスよく反映した、パーソナライズ性と即時性を兼ね備えたコンテンツ推薦を実現しています。
Use Case 2:検索と推薦を統合するモデル「UniCoRn」
Netflixは、検索と推薦を「同じコインの裏表」と捉え、これらを単一のモデルで扱う試みを進めています。その成果の一つが「UniCoRn(Unified Contextual Recommender)」と呼ばれるモデルです。UniCoRn導入で検索・推薦両タスクが改善され、+7%や+10%といった有意なリフトが得られており、Netflixにおける本番運用でもその有用性が確認されています。
参考論文: Joint Modeling of Search and Recommendations Via an Unified Contextual Recommender (UniCoRn)
UniCoRnのポイント
検索と推薦の一体化: 従来は検索(クエリ中心)と推薦(嗜好データ中心)で別々のモデルを使っていたが、UniCoRnはそれを一つにまとめています。基本原理は「ユーザーやコンテキストに応じたコンテンツのトップKランキング生成」という共通タスクに集約できるという発想です
マルチタスク学習:検索と推薦の両タスクを同時に学習させるマルチタスク手法を活用。これにより、検索で得られた関連性の知見を推薦に、推薦で得た行動知見を検索に還元でき、全体的な精度・効率が向上します
柔軟なコンテキスト対応:クエリが明示されない状況でも、視聴履歴や国・言語といったコンテキストから最適なコンテンツを提示可能。UniCoRnは、クエリ有無やユーザー属性など多様なパターンに対応し、シームレスなユーザー体験を提供します
コスト削減と一貫性向上:統一モデルによってモデル数が減り、開発・保守コストの削減やオンライン推論時の効率化が可能です。また、検索・推薦で一貫した体験をユーザーに提供できます
共通モデル化までのプロセス
共通のモデルで扱えるようにするためには、検索と推薦の異なるタスクに対するモデルの特性を分析し、異なるコンテキストを同一のモデルで処理出来るようにする必要がありました。少し細くなるので、私の方で整理してまとめたものを備忘録として残しておきます!
検索と推薦の比較
項目 | 検索 | 推薦 |
---|---|---|
コンテキスト | ユーザーのクエリが中心。入力されたクエリに基づき結果を返す | ユーザーのプロファイルや行動履歴が中心。パーソナライズされた関連性の高いコンテンツを返す |
データの種類 | クエリ入力、クリック、検索結果選択などの明示的な行動データ | 視聴履歴、購入履歴、ページ内のブラウジングなどの自然な行動データのパーソナライズされた情報 |
目的 | クエリに対する正確な一致や関連性の高い情報を返すことが目的 | ユーザーの興味や嗜好に基づいて、新しい提案を行うことが目的 |
アルゴリズム | 語彙の一致性やクエリとの直接的な関連性を重視する検索エンジンを使用 | パーソナライズされた候補を選定し、製品固有のビジネスルールを適用 |
ユーザー行動 | 能動的に情報を探す | 受容的に情報を受け取る |
エンゲージメントの収集方法 | クエリ入力やクリックなどの明示的な行動から収集 | コンテンツの閲覧といった自然な行動から収集 |
出力 | クエリに基づく結果リスト | 関連性の高いアイテムリスト |
統一モデルの実現方法
- 統一モデルの構築:
- 検索と推薦のコンテキストを統一し、両方のタスクを処理可能なモデルを作成
- データ統合:
- 両方のコンテキストで使われるクエリ、国、エンティティ(動画ID、人物、ジャンル)などを共通の特徴量としてモデルに入力
- タスク別の処理:
- 検索タスク: クエリ、国、言語を使用して検索結果を返す
- 推薦タスク: 視聴中の動画ID、国、言語を使用して関連性の高い作品を推薦
- トレードオフの学習:
- データにタグ付けし、検索ではクエリの正確性、推薦では視聴履歴の関連性を重視するよう調整
- 例: 検索時は『Stranger Things』がトップに表示、推薦時は関連性の高い作品を提案
※ 「国」、「言語」といったコンテキストは、ユーザーのデモグラ情報やコンテンツを制作した国・使用言語などを使用
全体のアーキテクチャ
- 入力: ユーザーやコンテンツに関するデータを特徴量としてモデルに提供
- 処理:
- 異なるタスク(検索、推薦)のトレードオフを学習するマルチタスク学習モデルを構築
- データを統合し、ディープラーニングアーキテクチャで処理
- 出力: 各タスクに応じて、最適化された結果(検索結果、推薦コンテンツ)をユーザーに提供
1. 入力
入力データは、ユーザーやコンテンツに関連する情報を特徴量としてモデルに提供します。
特徴量 | 何を指すか | 例 | 特徴 |
---|---|---|---|
Entity Features | 動画や人物など、特定の対象(エンティティ)に関連するデータ | ・ 動画ID: 『Stranger Things』の識別ID ・ 人物:「フィン・ウォルフハード」の識別ID ・ ジャンルID: 「フィクション」のID |
特定のコンテンツや対象に関する情報 |
Context Features | ユーザーが検索や操作を行う際の「状況や背景」を表すデータ | ・ 検索クエリ: ユーザーが入力したキーワード(例: 『Stranger Things』) ・ アクセスした国: 日本 ・ 使用言語: 日本語 |
動的な操作時の文脈を反映 |
Context-Entity Features | コンテキストとエンティティの関連性を示すデータ | ・ コンテキスト: 日本、夜、スマートフォン ・ エンティティ: 動画『Stranger Things』 ・ 関連性の例: 日本の夜にスマートフォンで視聴する文脈では、『Stranger Things』がよく選ばれる |
状況と対象の関係をモデルが学習可能にする |
Categorical Features | ユーザーやコンテンツの基本属性を示すデータ | ・ 国: 日本、アメリカ、フランス ・ 言語: 英語、日本語、スペイン語 ・ ジャンル: コメディ、アクション、ドラマ |
固定的な属性情報 |
2. 処理
モデルのアプローチ
- マルチタスク学習モデル: 検索や推薦など、異なるタスク(例: 再生、クリック、いいね)を1つのモデルで処理する
- データ統合とタグ付け: 各データに「コンテキスト(状況)」「タスクの種類」をタグ付けして、トレードオフを学習 (例: 「検索」ではクエリに重みを付け、「推薦」では視聴履歴を重視)
- 特徴量の活用:
- 数値的な特徴: モデルに直接入力
- カテゴリカル特徴量: 埋め込み(Embedding)を利用して数値ベクトルに変換
モデルアーキテクチャ
- 残差接続やシーケンス特徴を持つディープラーニングモデル: 複雑な関連性を学習するための高度なアーキテクチャ
- トレードオフの学習: 異なるタスク(例: 検索 vs 推薦)の優先順位をモデルが自動で調整
3. 出力
ポジティブなエンゲージメントの確率を予測: 与えられたコンテキスト(例: クエリや視聴中の動画)に基づき、ユーザーがクリック、視聴、いいね!する確率を算出
検索タスク: ユーザーが入力したクエリに基づいて、最適なコンテンツ(例: 『Stranger Things』)をランク付けして表示
- 推薦タスク: 視聴履歴やコンテキストに基づき、関連性の高い作品(例: 『Dark』や『The OA』)を提案
これらの全体アーキテクチャの内容をまとめると下記になります。
項目 | 検索タスク | 推薦タスク |
---|---|---|
優先される特徴 | ・ クエリ(「Stranger Things」の一致性が重要) | ・ 動画IDとジャンル(『Stranger Things』に関連する作品を推薦) |
ユーザーの行動 | ユーザーが検索バーに「Stranger Things」と入力 | ユーザーが『Stranger Things』を視聴中 |
入力 | ・ クエリ: 「Stranger Things」 ・ 国: 日本 - 言語: 日本語 |
・ 動画ID: 『Stranger Things』 ・ ジャンル: SF、ホラー ・ 視聴履歴: 『The OA』 |
処理 | ・ クエリを基に関連する動画を検索 ・ ランク付けして検索結果を生成 |
・ 『Stranger Things』のジャンルやストーリーを基に関連作品を探索 ・ 類似作品をランク付け |
出力 | ・ 検索結果に『Stranger Things』がトップで表示 | ・ 推薦リストに『The OA』や『Dark』などの関連作品が表示 |
まとめ
QCon San Francisco 2024で紹介されたNetflixのケーススタディは、現代的な大規模ウェブサービスが抱える課題を浮き彫りにしつつ、その解決に向けた緻密な取り組みをしています。2段階ランキングプロセスや、長期嗜好と短期的興味を組み合わせたリアルタイム推薦、そして検索と推薦を統合するユニークなモデル「UniCoRn」。
これらはすべて、ユーザーが「膨大な選択肢の中で迷わず楽しめる」体験を作ることを目標としています。Netflixはテクノロジーとデータ、そして人間中心のユーザー体験設計を組み合わせ、エンタメ発見の新たな可能性を切り拓いていました。
今回のセッションは、エンジニアやデータサイエンティストにとって、推薦・検索システムを改良するための考え方、アーキテクチャ設計、評価手法など、多くのヒントを与えてくれたと感じます。
私が所属するチームは、まさに検索・推薦機能の改善に取り組んでいます。NewsPicksユーザーにとってより使いやすいシステムへ改善していくために、今回得られた知見を大いに活用していきたいと思いました!
以上、QCon San Francisco 2024でのNetflixの推薦・検索システム事例報告でした。