書いてる理由
Graphを使ったニューラルネットに興味があったけど、これまでやってこなかったから勉強 + コード動かしてみたい。
参考
Knowledge Graph Convolutional Networks for Recommender Systems
github(KGCN-pytorch)
概要
- 4 EXPERIMENTS
- 4.1 Datasets
- 4.2 Baselines
- 4.3 Experiments Setup
- 4.4 Results
詳細
やりたいことの概要
まずは、KGCNの論文を読んでみる。次にコードを読みつつ、動かして理解を深める。今回は論文読み。
4 EXPERIMENTS
本節では、KGCNを映画/書籍/音楽のレコメンド用の実際のデータを用いて評価する。
4.1 Datasets
以下3つのデータセットで評価する。
1 MovieLens-20M
映画のレコメンドで広く使われるデータセット。約2000万もの5段階評価でのレートデータ。
2 Book-Crossing
書籍に関する100万の10段階のレートデータ。
3 Last.FM
オンラインの音楽システムで得た、2000ユーザーのレートデータ。
3つのデータセットは、ユーザーが明示的に示したフィードバックデータを持っており、これを1(好意的)と0(好意的ではない)に分類する。
Movie-Lensは5段階中4以上を1とし、他の二つはレートをしたアイテムは1、それ以外を0とする。(他の二つはデータが膨大ではないため、このようにしているらしい)
KGの構築には、MicrosoftのSatoriを用いてKGを構築した。
h, r, tの組のうち、全体から見た時の確信度が0.9以上のものを抽出した。
映画/書籍/音楽のそれぞれで、監督/著者/歌手の名前を取得し、複数のノードに接続するものと何も接続が得られなかった物は省いた。
ここから、実験に利用するアイテム名でヒットするものを取得して利用する。
以下が各データセットの情報である。
※ K: 取得する近接ノード数、d: エンべディング時のベクトルの次元数、 H: 探索するリレーションの深さ、 λ: L2正則化の重み、η: 学習率
4.2 Baseline
KGCNを評価するにあたり、以下の6つの手法と比較した。各ハイパーパラメータは後述する。
1. SVD(KG利用なし)
一般的な強調フィルタリングに利用される手法
2. LibFM(KG利用なし)
属性ベースのファクタライゼーションモデル。LibFMへの入力には、ユーザーIDとアイテムIDを結合したものを利用した。
3. LibFM + TransE(KG利用あり)
LibFMを拡張し、TransEを用いてユーザーとアイテム間の関係性を学習に利用する手法。
4. PER(KG利用あり)
KGをヘテロジニアスな(異種の繋がりを持つ)ネットワークとして利用し、ユーザー・アイテム間の関係性を表現するmeta-pathを抽出する手法。
5. CKE(KG利用あり)
レコメンドのために、構造/文字/視覚的な情報を結合した強調フィルタリング。
6. RippleNet(KG利用あり)
ユーザーの好みを伝播させるメモリネットワークに似た手法。
4.3 Experiments Setup
KGCNではfとgを内積用の関数、σを活性化関数(最終層以外はRelu、最終層はtanh)を用いる。
他のハイパーパラメータはAUCを見ながら検証用データセットで最適化した。
各データセットで、学習/検証/テストは6:2:2の割合で利用した。
各データセットで3回テストを行い、その平均でパフォーマンスを評価した。
検証は、2種類の方法で実施し、1つ目はCTR(Click Through Rate)をAUCとF1スコアを用いて評価した。
二つ目は確信度の高いTopK個のデータを取得し、Recallを用いて評価した。
パラメータの最適化にはAdamを用いた。
KGCNはpythonで全てコードを作成している。
比較する他の手法のハイパーパラメータは、SVDはunbiased versionを用いた。
次元数と学習率は、MovieLends/Book-Crossing = 8, 0.5, Last.FM = 8, 01。
LibFMの次元数は{1, 1, 8}をもちい、ecpochは50。
TransEの次元数は32。
PERは手動で定義したitem-attribute-itemのpathを特徴量として利用した。
CKEの次元数はそれぞれ、64, 128, 64を用いた。
KGの学習係数は0.1を用いた。
SVDは学習率は同様で実施した。
RippleNetは、......
他はオリジナルの論文と同様のパラメータを利用。
4.4 Results
上記が、CTRでのAUC/F1-scoreとTopKでのRecallの結果のまとめ。
分かったことは、以下。
- movieよりもBook/Musicの方が他の手法よりも改善が大きい。KGCNはスパースさが強いところでパワフルである。
- SVD/LibFMの方がPER/CKEより精度がよく、後者は全てのKGを利用していない点で劣ってしまっていそう。
- LibFM + TransEは、LibFMよりも多くの場合で精度が良く、KGの有用性が示されている。
- PERは最も悪くなってしまっており、KGとして利用するmeta graphの作成が困難であることを意味する。
- RippleNetは良い結果がでており、KGCNと同じようにKGを利用する手法の良さが見て取れる。
table2の下4段はKGCNのReceptive fieldの統合の方法を変えた結果で、avgという物が追加されている。
これは、sumの計算式と同じだが、アイテムのベクトルをユーザー/アイテム間の期待値を用いずに計算した物である。そのため、avgはユーザーアイテム間の期待値の有用性を図ることができる。
3つの統合方法の異なる物と、avgを用いた実験から以下が分かった。
- 統合方法が異なっても他のベースラインよりも良い結果が得られた。sumが一番良く、neighborはMovielens以外では明確に劣った。アイテム自体のベクトルも用いた方が良いことがわかる。
- avgはsumより劣り、特にBookとFMで解離が激しい。この二つはデータがスパースである。スパースでも有用なのがsumの方法である。
4.4.1 impact of neighbor sampling size.
近接ノードを何個利用してアイテムを表現するかの数は、4か8あたりが良さそう。これ以下だと少なく、これより多いとノイズが増えていくのだと思われる。
4.4.2 impact of depth of receptive field.
Receptive Fieldを何個掘っていくかは、1か2で十分となった。4にすると精度が著しく低下した。
4.4.3 impact of dimension of embedding
エンべディングする際の次元数は、少ない場合は増やすと精度が上がるが、64くらいで頭打ちした。
5 Conclusions and future work
本論ではKGCNを提案した。KGCNはノンスペクトル方のGCNを拡張し、KGを用いることでユーザーのアイテムへの潜在的な興味が予測可能なように設計した。
またミニバッチで学習可能なようにすることで、大規模なデータにも対応できる設計とすることができた。
映画/書籍/音楽の実際のデータで比較実験をし、その有用性を確かめた。
今後は、1. 近接ノードの取得をランダムにしているが、それをランダムではないようにする。2. 今回はアイテム(探索される側)の属性しか利用していないが、ユーザー(探索する側)のKGを利用したい。3. より良いKGの最初と最後の結合アルゴリズムの探索。
以上!きたねぇw 整理するかも???