🚴‍♂️

【論文要約】TRON: Transformerベースの推薦システムのためのNegative Sampling手法

2024/08/24に公開

0.論文情報

TRON

タイトル:TRON: Scalable Session-Based Transformer Recommender using Optimized Negative Sampling
学会:RecSys '23: Proceedings of the 17th ACM Conference on Recommender Systems
著者実装:https://github.com/otto-de/TRON

(本記事における図と表は上記論文・実装からの引用)

1.どんなもの?

  • Transformerベースの推薦システム(SASRec)において、最適化されたスケーラブルなネガティブサンプリング手法、TRONを提案
    • Top-k Negative SamplingとList-wise損失関数により解決
  • RONはSASRecと同程度の学習速度を維持しながら推薦精度を向上
  • A/Bテストでは、SASRecと比較してCTRが18.14%向上
  • 著者らは以前にkaggleコンペで題材にもなったE-commerceサイト、Ottoのメンバー

2.先行研究の背景

前提1:Negative Samplingについて

推薦システムは、セッション内でのユーザーの以前の活動に基づいて、ユーザーが次に接するアイテムを予測する。

  • ユーザがクリックした商品の集合をP(s)、全アイテムの集合をIとする
  • この時、正例はP(s)、負例はN(s) := I \backslash P(s)
  • 実際のシステムではIが大きすぎて、全部の負例を使った学習は不可能
  • また、N(s)から直接サンプリングするためには、I \backslash P(s)を計算する必要があり、これはこれで非効率

そこで、一様サンプリングもしくは頻度サンプリングが行われる。

  • 一様サンプリング:Iについての一様分布u_Iに従ってNegative Sampling
  • 頻度サンプリング:ユーザの頻度に従ってNegative Sampling
    • 頻度サンプリングはIn-Batch Negative がよく使われる

前提2:Negative Samplingの実装方法

Negative Samplingは、要素ごと、セッションごと、バッチごとに行う方法がある(それぞれを組み合わせることも可能)。

負例の数をdとすると、学習バッチに対する負例の次元は以下の通り。

Negative Samplingの種類 負例のshape
elementwise(要素ごと) [b, T, d]
sessionwise(セッションごと) [b, 1, d]
batchwise(バッチごと) [1, 1, d]

要素ごとのサンプリングでは、CPUとGPU間のデータ転送がボトルネックになる可能性があり、セッションごとのサンプリングかバッチごとのサンプリングではそこまで問題にはならない。

下の表では負例の数はk+m

3.技術や手法のキモはどこ?

TRONにおけるNegative Sampling

TRONではバッチごとの一様サンプリングセッションごとの頻度サンプリングを併用し、サンプリングされた負例についてTop-k Negative Samplingを利用。

Top-k Negative Samplingでは、候補となる負例を一旦モデルに入力し、そのなかでスコアが上位k個のものをを実際に学習に加える(間違えやすいアイテムに着目して学習させるということ)。

これにより、難しいサンプルの識別をモデルに学習させる。

4.どうやって有効だと検証した?

データセット

  • セッションベースレコメンデーションのためのデータセットを利用
    • Diginetica, Yoochoose, OTTO

評価指標

  • Recall@20、MRR@20

Baseline

  • GRU4Rec+、SASRec

この論文における実験では適切な損失関数の調査のため、以下の損失関数を比較

  • Pointwise loss: Binary cross‐entropy (BCE)
  • Pairwise loss: Bayesian personalized ranking max (BPR)
  • Listwise loss: Sampled softmax (SSM)

(Ref:Sampled somfmaxについて

Negative Sampling

  • SASRec M-Negs:
    • SASRecについて、512のバッチごとの一様サンプリングと16のセッションごとの頻度サンプリング(In-batch Negatives)を実施
  • SASRec L-Negs:
    • SASRecについて、8192のバッチごとの一様サンプリングと127のセッションごとの頻度サンプリング(In-batch Negatives)を実施
  • TRON L-Negs
    • SASRecについて、8192のバッチごとの一様サンプリングと127のセッションごとの頻度サンプリング(In-batch Negatives)を実施し、その後top-k negative samplingで上位100件を取得
    • 損失はSSM
  • TRON XL-Negs
    • SASRecについて、16384のバッチごとの一様サンプリングと127のセッションごとの頻度サンプリング(In-batch Negatives)を実施し、その後top-k negative samplingで上位100件を取得
    • 損失はSSM

結果

  • SASRec BPR-MAXとSASRec SSM では L-Negsの方法でNegative samplingを実施

結果から分かることは以下

  • TRONはYoochooseデータセットのMRR@20を除く全てのデータセットで勝利
  • TRONはバッチごとのネガティブサンプル&Top-k negative samplingにより、SASRec SSMよりも高速に学習可能
  • TRONはデータセットが大きくなっても、SASRecと比較して相対的な速度低下が少ない
  • BCEとNegative samplingの相性の悪さ
    • SASRecとSASRec M-Negs&SAS L-Negsを比較すると精度に大きな変化はなく、L-Negに関しては悪化しているケースが多い
    • これはBCEのようなPoint-wiseな損失関数にネガティブを追加することがモデルの精度に悪影響を与えることを示唆

オンラインのA/Bテスト
実際のOTTOのサービスにおいて、TRON XL-Negs、SASRec SSM、SASRecを比較した。

オフライン評価での結果は以下

そして、実際に運用されたモデルのA/Bテストの結果は以下。
ここでは、TRON XL-NegsとSASRec SSMがSASRecに対してどれくらい改善したか?を表示

TRON XL-NegsはSASRecと比較して、CTRが18.14%増加し、カートへの追加率が23.85%増加し、ユニット数が23.67%増加したことを示している。

Discussion