Hybrid Recommender System based on Autoencoders
src
- https://github.com/fstrub95/Autoencoders_cf
概要
- 行列分解による協調フィルタリングの行列分解部分をニューラルなネットワークでやる
- 結果は、行列分解による既存手法よりも、僅かに良かった
- cold-start に強いと言っている
手法
autoencoder
- \(\tilde{x} \mapsto \sigma(W' \sigma(W\tilde{x}+b) +b') \sim x\)
- 2層に限定してるわけではないが、実験では2層
- loss を \(\tilde{x}\) と \(x\) の誤差自乗で計算するのだけど、 corrupted したインデックスかどうかで、重みを付けて和を取る
- あとL2正則化もする
こっからやばい気がする
- ユーザーやアイテムに関するさらなる情報を用いたい.
- \(P\)次元情報 \(z\) を autoencoder の入力に加える:
\([x;z] \mapsto \sigma(W' [\sigma(W[x;z]+b);z] +b') \sim [x;z]\)
ここで \([;]\) はベクトルの連結.
- 強引すぎないか?
- "cold start に強い" って言ってるのは、これのことなんだろうな
- 一般に、"各層で、\(z\) を加える" とある
- \(z\) の影響が強すぎるので、\(z\) の次元数をかなり抑えるように、ともある
実験
- V-CFN
- 行列の列 (N users * 1 item) で autoencode
- V-CFN++
- Integrating Side Information を更に乗っける
- Dataset
- Side Information
- ユーザー情報: 年齢、性別
- 映画情報: カテゴリー、タグ
- データセットのサイズによって一部使ったり使わなかったりする. ややこしい.
- 結果
- V-CFN が強い
- ただし本人たちも言ってるように slightly improvement
- Torch はいいぞ!
- でもDAEを書くためのモジュールが整備されてないから書いたので使ってくれ