Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Graphの推薦システムへの応用

nishiba
March 08, 2019

 Graphの推薦システムへの応用

Graph Convolutional Matrix Completion(GCMC)を使ってNewsの推薦システムを作っています。

nishiba

March 08, 2019
Tweet

More Decks by nishiba

Other Decks in Programming

Transcript

  1. 自己紹介 • 西場正浩(@m_nishiba) • エムスリー株式会社 • AI・機械学習チームリーダー • 自然言語処理や推薦システム •

    数理ファイナンスの研究(Ph.D.) → 金融機関 → エムスリー • プロダクトには数学者・物理学者の名前をA-Zでつけています。
  2. Graph Convolutional Matrix Completion(GCMC) • 2部グラフのリンク予測問題へのGCNの応用 • Matrix Factorizationと同じ問題設定のイメージ •

    実際にMovieLensのデータセットでMFに比べて優位に良い • (user, item)の組み合せからratingを予想する 【工夫点】 • 2部グラフ • userやitemの属性データ等も使うことができる。 ◦ 属性データによりcold start 問題に対応できる。 • 評価値ごとに隣接行列を持つ。5段階評価なら5個の隣接行列を使う。
  3. 数値実験(論文) • Movie Rensのデータでは、概ね既 存の方法より勝っている • CF-NADEはcold-start問題に対応で きない(はず) • CF-NADEは、様々な工夫を入れて

    いる(GCMC比べ) ◦ 頑張れば勝てる??? • 今回はcold-start問題に対応する必 要があるのでGCMCを選んだ。
  4. 問題設定 • 週に1回20個の記事から5個の記事をリコメンドする。 • 20個の記事は過去1週間の間に公開されている。 ◦ 少なからず既読情報がある。 • 既読と未読(ランダムサンプリング)を予測する •

    データ ◦ 既読 ◦ ユーザー属性 ◦ 記事カテゴリ、タイトル、本文 • クリック数が5以上100以下のユーザーに限定する。 ※ 本当はUser cold 問題に向き合う必要があるが、 Graphが大きくなるので、簡易化して実験を行なう。 実験用設定
  5. 評価方法 • 一定期間の一部のユーザーの既読・未読を予測する ◦ precision@k ▪ k=2・・・タイトルに使用される ▪ k=5・・・メルマガに表示される ◦

    ランダムやランキングと比較する 開封率に影響大!! Click率に影響大!! バックテストで 強い!!
  6. データの分割方法 • テストデータのユーザーの割合 ⇒ 50%, 90% • ユーザー数:約40,000人 • 記事数:

    約1,000個 ※ 一部のデータを利用 訓練データ テストデータ 2018/1/1 2018/12/31 2019/1/31 X% user1 user2 ・ ・ ・ ・ ・ ・ ・ ・ ・ user40000
  7. 数値実験結果 • Randomに比べると勝っているが、Rankingモデルには優位に劣っている。 • テストユーザー90%のp@2でGCMC(LDA+Category)がRankingに次いで高い • p@2はメルマガのタイトルになるのでビジネス的に非常に重要 without ranking adjustment

    model test user=50%(warm start) test user=90%(cold start) #@2 p@2 #@5 p@5 #@2 p@2 #@5 p@5 Random 1,649 - 3,792 - 2,977 6,762 - RankingModel 6,510 7,367 10,817 16,651 11,820 13,400 19,343 29,680 GCMC(ID) 4,869 6,301 8,468 14,074 6,498 7,999 13,055 20,585 GCMC(ID+LDA) 5,102 6,647 8,562 14,370 7,448 9,801 13,015 20,776 GCMC(ID+LDA+Category) 5,318 6,880 8,882 14,867 7,894 10,099 14,435 23,220 GCMC(LDA) 5,354 6,949 8,354 13,874 8,825 11,177 13,502 21,280 GCMC(LDA+Category) 5,028 6,417 8,202 13,564 9,105 11,610 14,319 23,337 Item Cold Startに対応できている!!
  8. RankingModelとの組合せ • 過去ログにバイアスがあり、RankingModelが非常に強い。 • そこで、 ◦ ① RankingModelを取り入れる ◦ ②

    徐々にRandomModelの比率を下げる。 • まずは①で改善できることバックテストで確認する。 • 調整後スコア = モデルによるスコア + 0.9 ** (RankingModel順位 - 1)
  9. 数値実験結果 • GCMCのすべてのモデルがRankingModelに勝利 • モデルの差分が出づらくなっている。アンサンブル方法を要検討 • Item ID embeddingなしでも同程度の精度が出るので、itemに対してはcold start

    に対応できそう。 with ranking adjustment model 50% 90% #@2 p@2 #@5 p@5 #@2 p@2 #@5 p@5 Random 1,649 - 3,792 - 2,977 - 6,762 - RankingModel 6,510 7,367 10,817 16,651 11,820 13,400 19,343 29,680 GCMC(ID) 8,007 10,224 11,588 20,376 13,830 17,560 20,444 35,253 GCMC(ID+LDA) 7,789 9,940 11,561 20,363 13,884 17,758 20,508 35,332 GCMC(ID+LDA+Category) 7,965 10,211 11,726 20,724 13,588 17,307 20,581 35,565 GCMC(LDA) 7,694 9,901 11,276 19,784 13,602 17,257 20,241 34,419 GCMC(LDA+Category) 7,749 9,897 11,465 20,176 13,764 17,503 20,710 35,675 GCMCがRankingに勝った!!