Innovative Recommendation Applications Using Two Tower Embeddings at Uber

概要

  • Uberの推薦システムにおけるTwo-Towerモデルの話
    • Two-TowerモデルはUser-Itemのインタラクションの特徴量を持たず、User EmbeddingとItem Embeddingの関係からCVがあるかなどを学習するのでメモリ効率がいいことが知られている。
  • Uberのような数百万店舗の中から注文者との関係性の高い上位数店舗を数百msecで検索するのは容易ではない。そこでTwo-Towerモデルを使うと店舗のベクトルを事前に計算しておいてUserのベクトルだけリアルタイムに作成して、ANNによって店舗ベクトルから上位数件を撮るだけで良くなる。
    • 元々はDeepMFモデルを都市ごとに作成していて、スケールしなかった。数千のDeepFMモデルを一つのモデルで置き換えられた。
    • DeepMFだとメタ情報を特徴量に追加できず、IDだけで学習していた
  • 訓練方法の戦略などについても語られている
    • Uber EatsではRecall@100を主要なメトリクスとしているため、正確に訓練時に指標を測るためには、ネガティブサンプルを多くサンプリングする必要がある
    • あまり大きくしすぎると、訓練コストが高くなるので、”in-batch negatives”を使うことが多いが、これはバッチ内のネガティブサンプルを賢くとってくる必要がある
  • モデリング
    • 注文者のIDを過去の行動の系列に置き換えることで、モデルサイズを縮小し、コールドスタート問題を緩和させた。(eater_id -> [ordered_store_1, ordered_store_2, ordered_store_3, …])
    • (当たり前だが)store_idのEmbedding Layerは共通化した
  • その他
    • eater_id、store_idは特徴としてとても重要だが、モデルサイズが課題になってくる
    • 訓練が数日かかってしまう
    • 今後はEatsだけでなく、他のチームでもTwo Towerモデルを使えるように横展開できるプラットフォームを作る。
    • そうすることで、さまざまなEmbeddingを作成することができ、それを入力特徴とした新たなプロダクトも作りやすくしていく。(地理Embeddingとか?)