Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

自己紹介 ● 西場正浩(@m_nishiba) ● エムスリー株式会社 ● AI・機械学習チームリーダー ● 自然言語処理や推薦システム ● 数理ファイナンスの研究(Ph.D.) → 金融機関 → エムスリー ● プロダクトには数学者・物理学者の名前をA-Zでつけています。

Slide 3

Slide 3 text

今日、話すこと ● Graph convolutional Network(GCN)のアルゴリズム紹介 ● ニュース記事等の推薦システムへの応用例 ○ 今月 or 来月からABテストを始める予定

Slide 4

Slide 4 text

なんでグラフを使うのか?? ● データが少ない!!!! (´;ω;`)ブワッ ● 最大ユーザー数30万人(日本の医師数) ● 正解ラベルが少ない しかし・・・ ● 少ないからグラフ構造がメモリに載るのでは??

Slide 5

Slide 5 text

Graph Convolutional Matrix Completion(GCMC) ● 2部グラフのリンク予測問題へのGCNの応用 ● Matrix Factorizationと同じ問題設定のイメージ ● 実際にMovieLensのデータセットでMFに比べて優位に良い ● (user, item)の組み合せからratingを予想する 【工夫点】 ● 2部グラフ ● userやitemの属性データ等も使うことができる。 ○ 属性データによりcold start 問題に対応できる。 ● 評価値ごとに隣接行列を持つ。5段階評価なら5個の隣接行列を使う。

Slide 6

Slide 6 text

モデルの概要 ※詳細は”Graph Convolutional Matrix Completion” ← itemのid embedding (のようなもの)と正規化定数 ← user iが評価しているitemの embeddingの合計

Slide 7

Slide 7 text

Bilinear decoder Model training Side information ↑ 属性データも考慮することができる。データが少ないと第 1項がまともに計算できない。

Slide 8

Slide 8 text

数値実験(論文) ● Movie Rensのデータでは、概ね既 存の方法より勝っている ● CF-NADEはcold-start問題に対応で きない(はず) ● CF-NADEは、様々な工夫を入れて いる(GCMC比べ) ○ 頑張れば勝てる??? ● 今回はcold-start問題に対応する必 要があるのでGCMCを選んだ。

Slide 9

Slide 9 text

数値実験(論文) ● cold-startに対する実験 ● side informationを入れるこ とで改善している。 User Cold Start問題に対応 サービス的にすごく重要!

Slide 10

Slide 10 text

実際のデータへの適用

Slide 11

Slide 11 text

問題設定 ● 週に1回20個の記事から5個の記事をリコメンドする。 ● 20個の記事は過去1週間の間に公開されている。 ○ 少なからず既読情報がある。 ● 既読と未読(ランダムサンプリング)を予測する ● データ ○ 既読 ○ ユーザー属性 ○ 記事カテゴリ、タイトル、本文 ● クリック数が5以上100以下のユーザーに限定する。 ※ 本当はUser cold 問題に向き合う必要があるが、 Graphが大きくなるので、簡易化して実験を行なう。 実験用設定

Slide 12

Slide 12 text

評価方法 ● 一定期間の一部のユーザーの既読・未読を予測する ○ precision@k ■ k=2・・・タイトルに使用される ■ k=5・・・メルマガに表示される ○ ランダムやランキングと比較する 開封率に影響大!! Click率に影響大!! バックテストで 強い!!

Slide 13

Slide 13 text

データの分割方法 ● テストデータのユーザーの割合 ⇒ 50%, 90% ● ユーザー数:約40,000人 ● 記事数: 約1,000個 ※ 一部のデータを利用 訓練データ テストデータ 2018/1/1 2018/12/31 2019/1/31 X% user1 user2 ・ ・ ・ ・ ・ ・ ・ ・ ・ user40000

Slide 14

Slide 14 text

数値実験結果 ● 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に対応できている!!

Slide 15

Slide 15 text

RankingModelとの組合せ ● 過去ログにバイアスがあり、RankingModelが非常に強い。 ● そこで、 ○ ① RankingModelを取り入れる ○ ② 徐々にRandomModelの比率を下げる。 ● まずは①で改善できることバックテストで確認する。 ● 調整後スコア = モデルによるスコア + 0.9 ** (RankingModel順位 - 1)

Slide 16

Slide 16 text

数値実験結果 ● 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に勝った!!

Slide 17

Slide 17 text

既存のモデルとの比較(状況を本番に合わせた) バックテストでクリック数が 20%アップ!!

Slide 18

Slide 18 text

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