Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Graphの推薦システムへの応用
nishiba
March 08, 2019
Programming
6
6.6k
Graphの推薦システムへの応用
Graph Convolutional Matrix Completion(GCMC)を使ってNewsの推薦システムを作っています。
nishiba
March 08, 2019
Tweet
Share
More Decks by nishiba
See All by nishiba
gokartを作った話
nishiba
2
5k
m3 ai team
nishiba
35
29k
Graph Convolutional Networksを使った 推薦システム
nishiba
6
6.3k
機械学習関連の開発を 効率化した話
nishiba
6
3.7k
エムスリーの機械学習チームビルディングの考え方
nishiba
12
5.1k
AI・機械学習チームにおけるデータパイプライン構築
nishiba
8
21k
エムスリーにおける 機械学習活用事例と開発の効率化
nishiba
3
5.9k
医療用語に注目した文書の類似度計算
nishiba
6
3.3k
WSDM 2018 論文読み会 Hyperbolic Representation Learning for Fast and Efficient Neural Qestion Answering
nishiba
0
750
Other Decks in Programming
See All in Programming
Google IO 2022 社内LT会 / What's new in Android development tools
shingo_kobayashi
1
410
実践 SpiceDB - クライドネイティブ時代をサバイブできるパーミッション管理の実装を目指して / Practical SpiceDB
lmt_swallow
0
130
Amazon Lookout for Visionで 筆跡鑑定してみた
cmnakamurashogo
0
170
閱讀原始碼 - 再戰十年的 jQuery
eddie
1
300
Pythonで鉄道指向プログラミング
usabarashi
0
130
段階的な技術的負債の解消方法.pdf
ko2ic
2
940
クラウド KMS の活用 / TOKYO BLOCKCHAIN TECH MEETUP 2022
odanado
PRO
0
190
ベストプラクティス・ドリフト
sssssssssssshhhhhhhhhh
1
210
Untangling Coroutine Testing (Droidcon Berlin 2022)
zsmb
2
490
Efficient UI testing in Android
alexzhukovich
2
120
話題の AlloyDB は本当に凄いデータベースなのでプレビューを使い倒した #devio2022
maroon1st
0
13k
FullStack eXchange, July 2022
brucel
0
200
Featured
See All Featured
The Mythical Team-Month
searls
210
39k
Git: the NoSQL Database
bkeepers
PRO
415
59k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
655
120k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
119
28k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
11
4.9k
Three Pipe Problems
jasonvnalue
89
8.7k
How STYLIGHT went responsive
nonsquared
85
4k
Agile that works and the tools we love
rasmusluckow
319
19k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
The World Runs on Bad Software
bkeepers
PRO
57
5.4k
Transcript
Graphの推薦システムへの応用 エムスリー株式会社 西場正浩(@m_nishiba)
自己紹介 • 西場正浩(@m_nishiba) • エムスリー株式会社 • AI・機械学習チームリーダー • 自然言語処理や推薦システム •
数理ファイナンスの研究(Ph.D.) → 金融機関 → エムスリー • プロダクトには数学者・物理学者の名前をA-Zでつけています。
今日、話すこと • Graph convolutional Network(GCN)のアルゴリズム紹介 • ニュース記事等の推薦システムへの応用例 ◦ 今月 or
来月からABテストを始める予定
なんでグラフを使うのか?? • データが少ない!!!! (´;ω;`)ブワッ • 最大ユーザー数30万人(日本の医師数) • 正解ラベルが少ない しかし・・・ •
少ないからグラフ構造がメモリに載るのでは??
Graph Convolutional Matrix Completion(GCMC) • 2部グラフのリンク予測問題へのGCNの応用 • Matrix Factorizationと同じ問題設定のイメージ •
実際にMovieLensのデータセットでMFに比べて優位に良い • (user, item)の組み合せからratingを予想する 【工夫点】 • 2部グラフ • userやitemの属性データ等も使うことができる。 ◦ 属性データによりcold start 問題に対応できる。 • 評価値ごとに隣接行列を持つ。5段階評価なら5個の隣接行列を使う。
モデルの概要 ※詳細は”Graph Convolutional Matrix Completion” ← itemのid embedding (のようなもの)と正規化定数 ←
user iが評価しているitemの embeddingの合計
Bilinear decoder Model training Side information ↑ 属性データも考慮することができる。データが少ないと第 1項がまともに計算できない。
数値実験(論文) • Movie Rensのデータでは、概ね既 存の方法より勝っている • CF-NADEはcold-start問題に対応で きない(はず) • CF-NADEは、様々な工夫を入れて
いる(GCMC比べ) ◦ 頑張れば勝てる??? • 今回はcold-start問題に対応する必 要があるのでGCMCを選んだ。
数値実験(論文) • cold-startに対する実験 • side informationを入れるこ とで改善している。 User Cold Start問題に対応
サービス的にすごく重要!
実際のデータへの適用
問題設定 • 週に1回20個の記事から5個の記事をリコメンドする。 • 20個の記事は過去1週間の間に公開されている。 ◦ 少なからず既読情報がある。 • 既読と未読(ランダムサンプリング)を予測する •
データ ◦ 既読 ◦ ユーザー属性 ◦ 記事カテゴリ、タイトル、本文 • クリック数が5以上100以下のユーザーに限定する。 ※ 本当はUser cold 問題に向き合う必要があるが、 Graphが大きくなるので、簡易化して実験を行なう。 実験用設定
評価方法 • 一定期間の一部のユーザーの既読・未読を予測する ◦ precision@k ▪ k=2・・・タイトルに使用される ▪ k=5・・・メルマガに表示される ◦
ランダムやランキングと比較する 開封率に影響大!! Click率に影響大!! バックテストで 強い!!
データの分割方法 • テストデータのユーザーの割合 ⇒ 50%, 90% • ユーザー数:約40,000人 • 記事数:
約1,000個 ※ 一部のデータを利用 訓練データ テストデータ 2018/1/1 2018/12/31 2019/1/31 X% user1 user2 ・ ・ ・ ・ ・ ・ ・ ・ ・ user40000
数値実験結果 • 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に対応できている!!
RankingModelとの組合せ • 過去ログにバイアスがあり、RankingModelが非常に強い。 • そこで、 ◦ ① RankingModelを取り入れる ◦ ②
徐々にRandomModelの比率を下げる。 • まずは①で改善できることバックテストで確認する。 • 調整後スコア = モデルによるスコア + 0.9 ** (RankingModel順位 - 1)
数値実験結果 • 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に勝った!!
既存のモデルとの比較(状況を本番に合わせた) バックテストでクリック数が 20%アップ!!
今後の課題 • ユーザー属性を使ってコールドスタート問題に対応 • Ranking Modelとのアンサンブルの方法を最適化 • Item ID embeddingの有無の最適化