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

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

Avatar for nishiba nishiba
March 08, 2019

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

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

Avatar for nishiba

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に勝った!!