Knowledge Graph Convolutional Networks(KGCN)を調査するよー その3

書いてる理由

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以上のものを抽出した。
映画/書籍/音楽のそれぞれで、監督/著者/歌手の名前を取得し、複数のノードに接続するものと何も接続が得られなかった物は省いた。
ここから、実験に利用するアイテム名でヒットするものを取得して利用する。
以下が各データセットの情報である。

f:id:raishi12:20210502153812p:plain
※ 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

f:id:raishi12:20210502180624p:plain

f:id:raishi12:20210502180638p:plain

上記が、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あたりが良さそう。これ以下だと少なく、これより多いとノイズが増えていくのだと思われる。
f:id:raishi12:20210504155827p:plain

4.4.2 impact of depth of receptive field.

Receptive Fieldを何個掘っていくかは、1か2で十分となった。4にすると精度が著しく低下した。
f:id:raishi12:20210504155830p:plain

4.4.3 impact of dimension of embedding

エンべディングする際の次元数は、少ない場合は増やすと精度が上がるが、64くらいで頭打ちした。
f:id:raishi12:20210504155834p:plain

5 Conclusions and future work

本論ではKGCNを提案した。KGCNはノンスペクトル方のGCNを拡張し、KGを用いることでユーザーのアイテムへの潜在的な興味が予測可能なように設計した。
またミニバッチで学習可能なようにすることで、大規模なデータにも対応できる設計とすることができた。
映画/書籍/音楽の実際のデータで比較実験をし、その有用性を確かめた。

今後は、1. 近接ノードの取得をランダムにしているが、それをランダムではないようにする。2. 今回はアイテム(探索される側)の属性しか利用していないが、ユーザー(探索する側)のKGを利用したい。3. より良いKGの最初と最後の結合アルゴリズムの探索。

以上!きたねぇw 整理するかも???