糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding (WSDM 2018) 読んだ

Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding (pdf)

A Simple Convolutional Generative Network for Next Item Recommendation (WSDM 2019) を読もうとしたところ引用されていたのでまずはこちらから読む.WSDM 2019 の方は dilated 1d conv + residual unit という感じで WaveNet に非常によく似た形なのであまり読むモチベーションが上がらない.余談ですがこの構造を "A Simple but Hard-to-Beat Baseline" と名付ける著者らが理解できません.

問題はユーザ u における閲覧などによって得られる t -1 個の item の系列 S_1^{u}, S_2^{u}, \cdots を入力として S^{u}_{t} 以降の item を予測する,というものです.

Marcov Chain や FPMC (昔読みましたね) といった既存手法では t より前の item から個別に将来のどのアイテムがどれだけ発生しやすいかをモデルする point-level な推定を行っていた.しかし系列の傾向を捉えるには union-level なモデル化が必要.また, point-level な推定では skip (陽に隣り合っているわけではないが関係するもの) が考慮できない(これを association rule で示している図が面白いのだけれど説明が少なすぎるので理解が正しいのかがわからない.).のでモデルに組み込んでいく.

手法

ConvolutionAl Sequence Embedding Recommendation (Caser) を提案している.ある user の長さ L の系列を入力として T 個 item を予測するモデルを考えて L+T の窓をずらしながら学習していく.

方針としては

  • L 個の item について,それぞれに d 次元の embedding を lookup することで L \times d の matrix を得る.これを image と見なして操作していく.
  • この image に二種類の filter を適用し,次の操作を行う
    • 高さ h で幅 d の複数行を移動しながら系列性を抽出する holizontal convolutional filter
      • 高さ  1 \leq h \leq L なるフィルタを使い, activation function に通すことで L - h + 1 個の値が得られます.その後,max pooling を行うことで 1 つのフィルタにつき値を 1 つ得る.
      • これを h を変えた n 個のフィルタを用意し,操作することで n 次元の値を得る.これを \mathbf{o} とする.
    • 高さ L で幅 1 の各列を移動しながら抽出する vertical convolutional filter
      • こちらは \tilde{n} 個のフィルタを準備し d 列分抽出を行うので結果 d\tilde{n} 次元の値を得る.これを \tilde{\mathbf{o}} とする.
  • \mathbf{o}\tilde{\mathbf{o}} を連結したものを FC 層に通し,更に user ごとの embedding を lookup し連結して最後に item の確率を出す層につなぐ