Next-item Recommendations in Short Sessions
著者
https://gyazo.com/9e3aff308716ac43f84b48c7d1f8ed22
中国, 吉林大学(きつりんだいがく)と オーストラリア, マッコーリー大学 の方
読んだきっかけ
セッションベースの推薦が度々GunosyDMで紹介されていたのでやや気になっていた
ちょうどセッションベースでのオフライン実験とかしていたこともあり
概要
短いセッションから次のアイテムを推薦することの課題
session-based recommender systems (SBSR) を few-shot learning (FSL) に落とし込み性能向上
INSERT(INter-SEssion collaborative Recommender neTwork)
と名付けられた SBSR を提案 略し方に無理がないか...?
課題
SBSR: セッションベースの推薦システム
ユーザーの短期的な動的に変化する興味をモデル化するためのシステム
ユーザーのセッションを与えて、同じセッションの次のアイテムを予測
ショートセッションへの着目
いままでは長いセッションのみに焦点が当てられていて、短いセッションは無視されていた
既存研究では、短いセッションをフィルタリングすることが一般的
短いセッションは少数のアイテムしか含まないため、文脈情報が限られており、予測が困難になる
定義
short session: sessionで 5 つ以下のアイテム
long session: session で 6つ以上のアイテム
データセットでも Delicious は 64.03% , Reddit は 96.65% と多くの短いセッションを含んでいる
https://gyazo.com/7826703d60fb2df8e2741d882f517cec
ショートセッションの 推薦: 3つのギャップ
1. セッション内のアイテム数
SBSR には大きく分けて シングルセッションベースとマルチセッションベース の2種類
シングルセッション型では短いセッションのアイテム数が限られているため、情報が少ない
マルチセッション型では、同ユーザーの過去のセッションを利用して、情報不足を緩和させる
短いセッションだと特に情報が少ないため、ユーザーの好みを十分に理解することが難しい
2. 他のユーザーのセッション
現在のセッションと類似した他のユーザーのセッションを利用する
(方法)
現在のセッションを固定長のOne-Hotベクトルやセッションに含まれるアイテムの埋め込みの平均で表現
このセッション表現をkeyとして、データセット全体から類似したセッションを抽出
次のアイテムを予測するために利用する
3.効果的な過去のセッション
セッションの表現が単純すぎると、keyの情報が限定されてしまい無関係なセッションを取得してしまう
現在のセッションに対していかに、本当に関連しているセッションを見つけ出し利用するか
これらの3つのギャップを埋める提案手法
提案手法
定義
ユーザー: $ U = \{u_1, ..., u_n\}
アイテム: $ V = \{v_1, ... v_m\}
ユーザー $ u のセッション: $ S_u = \{s^u_1, ...., s^u_{|S_u|} \}
ユーザー $ u の $ l 番目のセッション内のアイテム: $ s^u_l = \{v^{u,l}_1, ..., v^{u,l}_{|s^u_l|} \}
current user: $ u_c, current session: $ s^{u_c}_l, target_item: $ v^{u_c, l}_t
context: $ C_{ia} = \{v^{u_c, l}_1, ..., v^{u_c, l}_{t-1} \} までの情報を用いて target item を予測
$ \beta(S): $ S = \{ S | U\} に基づいて学習した $ d次元のベクトル
INSERT(INter-SEssion collaborative Recommender neTwork)
3つのギャップ ー> 3 つのモジュール
1. Local Module
現在のショートセッション $ C_{ia}からユーザーの好みを予測する
2. Global Module
現在のユーザーと他のユーザーの過去セッションから事前知識を学習する グローバルモジュール
3. Prediction Module
グローバルモジュールで学習した事前知識に従ってローカルモジュールで予測した好みに基づいて次のアイテムを予測する
https://gyazo.com/ac3823f399e733415693dc6a34c87816
ざっくり
$ C_{ia} に基づいて ユーザーの好みの表現 $ h_c を予測
$ h_cは MLP & softmax で短いセッションでの次のアイテムの推薦を行うことができる
ただし、$ h_c はアイテム数が限られているため信頼できる推論とはならない
そのためグローバルモジュールから他のセッションの有用な情報を取得し、最適化する
各モジュールについて
Local Module
GRU でユーザーの好みの埋め込みを学習
Global Module
Current User’s Prior Knowledge Learning Module (CUPKL): $ \mathbb{H}(u_c), h_c→ $ \beta({\mathbb{H}(u_c)})
Other Users’ Prior Knowledge Learning Module (OUPKL): $ \mathbb{S}(u_c), h_c → $ \beta(\mathbb{S(u_c)})
類似セッションの候補セット
全データセットから検索すると計算負荷が高くなるため、2つの候補セット を用いる(上記の2つ)
他のユーザー $ u_{\tau}との類似度 $ sim
$ {sim}_u (u_{\tau}, u_c) = \frac{|\Omega_{\tau} \cap \Omega_{u}|}{|\Omega_{\tau} | \times | \Omega_{u}|}
where $ u_{\tau} \in U, $ \tau \neq c, $ \Omega_{\tau}: $ u_{\tau} がインタクトしたアイテムの集合
Similar Sessions Retrieval Network (SSRN)
collaborative の部分
2つのセッションの類似度: 2セッションの埋め込み間の最小距離で計測する
メリットはFig.3 の (a)(b): 2セッション間の類似度指標を設計する必要がなくなるから
各 $ h_iについての類似度 $ \lambda_{i,c}: $ \lambda_{i,c} = h_i \cdot h_c
この max pooling で 2セッション間の最小距離とみなすことができる
https://gyazo.com/1e849e6136558ca3463445f3feae208c
Prediction Module
Local Module と Global Module の出力から MLP → softmax
Optimization and Training
各ミニバッチで異なるユーザーによって生成されたセッションのバッチを選択
cross-entropy loss
実験
データセット
https://gyazo.com/5b29a47ad2be980c3c81bacaaa441602
前処理(既存研究ベース)
10未満の出現のユーザーとアイテムを削除
同一ユーザーの隣接するインタラクションのうち、それらの時間間隔が3600秒より小さい場合、1つのセッションとして扱う
その後、セッションに属さないアイテムと長さが20を超えるセッションを削除
session の timestamp でソート → 最後の 10% / 20% / 30% のセッションをテストセットに
(コレくらいはするような気もしつつ、少数ユーザーも長いセッションも削っているのはやや気になった)
実験設定
評価指標は Recall@K と MRR@K
ベースラインは
シングルセッションベース SBRS: RNN, STAMP, SR-GNN
マルチセッションベース SBRS: SKNN, STAN, CSRN, HRNN, II-RNN
従来のシーケンシャル推薦システム: SASRec, BERT4Rec
結果
Q1. 全てのショートセッションにおけるアイテム推薦の結果
https://gyazo.com/dabc762b931bb47d669a9f6652a00e3d
INSERT 強い
論文中では、それぞれのモデルの特性を踏まえて考察がいくつかあった
シングルセッションベース / マルチセッションベースでの違い やモデルの構造など
Reddit データセットの BERT4Rec Recall では下回る
これらはユーザーの連続するセッションを一つのアイテム列に連結して予測してしまうため、トランザクション構造が破壊されてしまう懸念点がある
また、同じユーザーの連続したセッションの間には大きな時間間隔や好みの変化が存在する。
連続するアイテム間のシーケンシャルなパターンを仮定することが多いため、次のアイテムの予測を簡単に誤る可能性がある
Q2: 異なるセッションの長さでのアイテム推薦の結果
https://gyazo.com/a63b76e617bb9313eb1c8abc36c34370
セッションが短いほどINSERTの性能向上がより顕著に
Ablation Analysis
Q3: Moduleごとの性能
Q4: SSRN と他のセッション類度計算方法での性能
https://gyazo.com/63cb2aef454976d1ce1ab89c882a13a6
それぞれの Module が機能していた(詳細は省略)
INSERT-c: Global Module 削除
INSERT-h: 他のユーザーのセッションを削除 ($ \mathbb{S} を削除 $ \mathbb{H}を残す)
INSERT-o: 現在のユーザーの過去セッションを削除 ($ \mathbb{H} を削除 $ \mathbb{S}を残す)
INSERT-a: セッション間類似度をセッション埋め込みの平均値の内積
まとめ
短いセッションでの予測でも、同じユーザーの過去のセッション情報や、他の類似したユーザーのセッション情報を用いることで性能向上が目指せる
session単位の類似度はベクトルの平均値ではなく最も距離の近いsessionから算出すると良かったりする
感想
long session での性能も気になる(悪くはなさそうな気がする)
比較的シンプルな手法の組み合わせのがgood