Lessons Learnt From Consolidating ML Models in a Large Scale Recommendation System

概要
- Netflixの検索とレコメンデーションシステムに関連する機械学習モデルを一つのモデルに置き換えたという話
- 単一のマルチタスクモデルで複数のユースケースに合うモデルを作成した。
- モデルのパフォーマンスが向上するだけでなく、システムアーキテクチャも簡潔になった
- 普通に個別のモデルを作っていくとパイプラインが以下の図のように複雑化する

- Offline pipelines
- リクエストはユースケースによって異なる
- 検索:クエリ、国、言語
- 類似アイテム推薦:ソースアイテム、国
- pipeline
- Label Preparation:(request_context, label)のペア生成
- Feature Extraction:(request_context, label)に対応する特徴量を生成
- Model Training:(feature_vector, label)で訓練
- Model Evaluation:評価
- Deployment:オンラインサービング
- 工夫
- 異なるリクエストを扱うために、共通のrequest contextベクトルを生成する
- あるユースケースに関しては欠落するcontextも存在する
- 入力としてどういうtaskなのかのカテゴリ値も入れる
- Online infrastructure
- モデルはユースケースに応じて違う環境にdeployするらしい
- ビジネスロジックなどに対応するため?
- Canvas-agonostic APIというところで、呼び出し側からはリクエストを工夫するだけで使えるようにしている
- heterogeneousなcontextのインプット (User, Video, Genre, etc)、heterogeneousなcandidatesの選択 (User, Video, Genre, etc)
- 教訓
- メンテナンス性の向上
- ワークフローの均質性、障害点の少なさ、コード行数の少なさ
- 他のユースケースでの精度向上を他のユースケースにも素早く適応できる。
- もちろんコンフリクトも同様に発生するが、ユースケースが十分に関連していればあまり問題にならない
- 逆に全く異なるターゲットのランキングモデルは利益を得られるかは不明。
- 拡張性の向上
- 1つのモデルに組み込む過程で、柔軟な設計を行うようになるので、拡張性が向上した。
- 実際、新しいユースケースの追加が簡潔になった。