$30 off During Our Annual Pro Sale. View Details »

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. Graphの推薦システムへの応用
    エムスリー株式会社 西場正浩(@m_nishiba)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 実際のデータへの適用

    View Slide

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

    View Slide

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

    View Slide

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









    user40000

    View Slide

  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に対応できている!!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide