Pro Yearly is on sale from $80 to $50! »

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

De48ef31de22781848d8f9988bd20a5e?s=47 nishiba
March 08, 2019

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

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

De48ef31de22781848d8f9988bd20a5e?s=128

nishiba

March 08, 2019
Tweet

Transcript

  1. Graphの推薦システムへの応用 エムスリー株式会社 西場正浩(@m_nishiba)

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

    数理ファイナンスの研究(Ph.D.) → 金融機関 → エムスリー • プロダクトには数学者・物理学者の名前をA-Zでつけています。
  3. 今日、話すこと • Graph convolutional Network(GCN)のアルゴリズム紹介 • ニュース記事等の推薦システムへの応用例 ◦ 今月 or

    来月からABテストを始める予定
  4. なんでグラフを使うのか?? • データが少ない!!!! (´;ω;`)ブワッ • 最大ユーザー数30万人(日本の医師数) • 正解ラベルが少ない しかし・・・ •

    少ないからグラフ構造がメモリに載るのでは??
  5. Graph Convolutional Matrix Completion(GCMC) • 2部グラフのリンク予測問題へのGCNの応用 • Matrix Factorizationと同じ問題設定のイメージ •

    実際にMovieLensのデータセットでMFに比べて優位に良い • (user, item)の組み合せからratingを予想する 【工夫点】 • 2部グラフ • userやitemの属性データ等も使うことができる。 ◦ 属性データによりcold start 問題に対応できる。 • 評価値ごとに隣接行列を持つ。5段階評価なら5個の隣接行列を使う。
  6. モデルの概要 ※詳細は”Graph Convolutional Matrix Completion” ← itemのid embedding (のようなもの)と正規化定数 ←

    user iが評価しているitemの embeddingの合計
  7. Bilinear decoder Model training Side information ↑ 属性データも考慮することができる。データが少ないと第 1項がまともに計算できない。

  8. 数値実験(論文) • Movie Rensのデータでは、概ね既 存の方法より勝っている • CF-NADEはcold-start問題に対応で きない(はず) • CF-NADEは、様々な工夫を入れて

    いる(GCMC比べ) ◦ 頑張れば勝てる??? • 今回はcold-start問題に対応する必 要があるのでGCMCを選んだ。
  9. 数値実験(論文) • cold-startに対する実験 • side informationを入れるこ とで改善している。 User Cold Start問題に対応

    サービス的にすごく重要!
  10. 実際のデータへの適用

  11. 問題設定 • 週に1回20個の記事から5個の記事をリコメンドする。 • 20個の記事は過去1週間の間に公開されている。 ◦ 少なからず既読情報がある。 • 既読と未読(ランダムサンプリング)を予測する •

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

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

    約1,000個 ※ 一部のデータを利用 訓練データ テストデータ 2018/1/1 2018/12/31 2019/1/31 X% user1 user2 ・ ・ ・ ・ ・ ・ ・ ・ ・ user40000
  14. 数値実験結果 • 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に対応できている!!
  15. RankingModelとの組合せ • 過去ログにバイアスがあり、RankingModelが非常に強い。 • そこで、 ◦ ① RankingModelを取り入れる ◦ ②

    徐々にRandomModelの比率を下げる。 • まずは①で改善できることバックテストで確認する。 • 調整後スコア = モデルによるスコア + 0.9 ** (RankingModel順位 - 1)
  16. 数値実験結果 • 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に勝った!!
  17. 既存のモデルとの比較(状況を本番に合わせた) バックテストでクリック数が 20%アップ!!

  18. 今後の課題 • ユーザー属性を使ってコールドスタート問題に対応 • Ranking Modelとのアンサンブルの方法を最適化 • Item ID embeddingの有無の最適化