Graph Convolutional Networksを使った 推薦システム

De48ef31de22781848d8f9988bd20a5e?s=47 nishiba
June 24, 2019

Graph Convolutional Networksを使った 推薦システム

De48ef31de22781848d8f9988bd20a5e?s=128

nishiba

June 24, 2019
Tweet

Transcript

  1. Graph Convolutional Networksを使った 推薦システム エムスリー株式会社 西場 正浩

  2. 自己紹介 • エムスリー株式会社 西場正浩(@m_nishiba) • AI・機械学習チーム/チームリーダー ◦ 自然言語処理や推薦システムが好き ◦ 採用マーケティング

    ◦ プロダクト・プロジェクトマネジメント • We are hiring!! ◦ データエンジニア ▪ グローバルなデータ基盤作ってください!! ◦ サーチエンジニア ▪ 医療系の最強検索エンジン作ってください!! ◦ 利点 ▪ 楽しいよ!! ◦ 欠点 ▪ ポスト◯ットの会社でしょ?
  3. 今日話すこと • 問題設定: テキスト記事をユーザーごとに推薦する。 ◦ 100個の中からユーザーごとに 10個選ぶ ◦ 対象のテキストへのアクセス数は少ない(全体の数 %)

    • モチベーション: 属性データ活用 & ファットテール ◦ inactiveなユーザーにも”いい感じ”に出し分けたい。 ◦ 100個の中から”いい感じ”に満遍なく出し分けたい。 • アプローチ: Graph Convolutional Networks & Latent Cross ◦ Graph Convolutional Matrix Completion ◦ Latent Cross: Making Use of Context in Recurrent Recommender Systems • 既存モデル(2017): Google Newsの論文がベース ◦ Personalized News Recommendation Based on Click Behavior 10分なので ざっくりと
  4. ニュース記事等の推薦 • 配信する記事をユーザーごとにスコアリングを行う。 ◦ 媒体はメルマガを想定 • 推薦の問題としての特徴 ◦ inactiveのユーザーにも対応する。 ▪

    日本の医師は30万人 ◦ アクセス数が少ないアイテムから選ぶ。 • 人によって興味が大きくことなる。 ◦ 若手のキャリア ◦ オンコロジー領域 ◦ 内科・外科・耳鼻科・・・
  5. GCNモデルの紹介 • ユーザー × アイテムの2部グラフ • message passingを利用 ◦ 他の方法として下記

    2つもメジャー(?) ▪ random walk ▪ graph Fourier transform • 属性データ ◦ Latent cross的なアイデアで統合 • 各ノードのembeddingを学習 ◦ o_user ← clickしたitem_embeddingの平均 ◦ o_item ← clickしたuser_embeddingの平均 ◦ (次で詳しく) (e0, e1, e2,...) 属性データ (v0, v1, v2,...) 属性データ
  6. モデルをもう少し詳しく(正確ではない) • {e}はtrainable variables • u1がi1をclickする確率 ◦ cos(average(e_i1, e_i3), average(e_u1,

    e_u3)) • 新しいアイテムも多少のクリックがあれば評価できる。 e_u1 e_u2 e_u3 e_u4 e_i1 e_i2 e_i3
  7. データの分割方法 • テストデータのユーザーの割合 ⇒ 50%, 90% • ユーザー数:約40,000人 • 記事数:

    約1,000個 訓練データ テストデータ 2018/1/1 2018/12/31 2019/1/31 X% user1 user2 ・ ・ ・ ・ ・ ・ ・ ・ ・ user40000
  8. 数値実験結果(オフライン) • 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
  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
  10. モデルの挙動 • 期待通りに満遍なく推薦できている (編集部調べ) • 属性データを入れることで、 inactive ユーザーにも自然な推薦になっている (編集部調べ)

  11. モデルの挙動 ・似ているユーザーの埋込みは 近くなる。 ユーザーの埋込みの分布 ・ユーザーのclickにより、アイテ ムの埋込みが計算される。 ✗ 記事の品質は関係ない ✗ みんなから人気のものはみ

    んなから遠い
  12. 今後の課題 ① アイテムの品質を予測するモデルを構築 • 似ている人がclickしているだけでなく、人気のものを探す。 ◦ 例: どっちが人気? ◦ (a)

    共働き医師の強い味方!意外な才能が身に付く学童 ◦ (b) 医師になるまでにかかった総額はいくらですか? ② クラスタ別に人気の記事を評価する。 • どうしようかな〜