立ち上げ期のサービスでレコメンドを導入した際の機械学習モデルの開発とアーキテクチャの事例
by
tsuzuki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
立ち上げ期のサービスでレコメンドを導入した際の機械 学習モデルの開発とアーキテクチャの事例 株式会社DROBE CTO 都筑友昭
Slide 2
Slide 2 text
自己紹介 都筑友昭 株式会社DROBE CTO 新卒で半導体の会社に就職 ソーシャルゲームの開発やコンサルティング会社を 経て2019年より株式会社 DROBE の CTO 機械学習よりはサービス / システム開発を得意とし ています 出身地 : 千葉県 他 : 2児の父
Slide 3
Slide 3 text
検索からパーソナライズへ SEARCH PERSONALIZATION
Slide 4
Slide 4 text
サービス立ち上げ期の課題 1. 開発メンバーが足りない 2. 専門家が居ない 3. データが無い 4. パーソナライズ機能の設計と運用の経験が無い
Slide 5
Slide 5 text
DROBE というサービスの立ち上げを事例として あらゆるリソースが足りない中でどうやって パーソナライズ機能を開発したかについてお話しします 本日お伝えすること
Slide 6
Slide 6 text
1 DROBEとは
Slide 7
Slide 7 text
DROBEのマイルストーン 従業員家族・知人約200名にサービス提供 クローズドβ開始 一般の方向けにオンラインでの集客を開始 オープンβ開始 AIを活用したサービス提供開始 正式リリース AIを用いて推薦された商品を直接購入できる機能 ストア機能リリース 事前提案機能を大幅に更新 単品のレコメンドだけではなくアイテムの集合をレコメンド 2019.06 2019.09 2020.03 2020.10 2021.04 2022.05 パーソナライズ EC の実証実験開始 B2Bでレコメンドモデルの提供開始
Slide 8
Slide 8 text
スタイリストがつくネットショッピング 8 70問のアンケートに答える 1 2 3 自宅にスタイリストが選んだ商品 が届く 気に入ったもののみ購入、 それ以外を返品
Slide 9
Slide 9 text
スタイリストが使う商品検索画面
Slide 10
Slide 10 text
ユーザーに直接商品を提案する機能
Slide 11
Slide 11 text
カテゴリや色などのバランスを加味しつつ提案を作る
Slide 12
Slide 12 text
DROBEのマイルストーン 従業員家族・知人約200名にサービス提供 クローズドβ開始 一般の方向けにオンラインでの集客を開始 オープンβ開始 AIを活用したサービス提供開始 正式リリース AIを用いて推薦された商品を直接購入できる機能 ストア機能リリース 事前提案機能を大幅に更新 単品のレコメンドだけではなくアイテムの集合をレコメンド 2019.06 2019.09 2020.03 2020.10 2021.04 2022.05 パーソナライズ EC の実証実験開始 B2Bでレコメンドモデルの提供開始
Slide 13
Slide 13 text
2 パーソナライズ機能
Slide 14
Slide 14 text
パーソナライズ機能 ● 一人一人のユーザーに合わせて商品やコンテンツを最適化する機能 ● 性年代といったユーザーの属性情報やサイト内での行動を元に、最適化する ● 機械学習等によるレコメンドや事前に設定したルール、またそれらの組み合わせで実現される
Slide 15
Slide 15 text
パーソナライズ機能を実現するには? 1. データを貯めて 2. レコメンドモデルを開発し 3. 機能設計をする
Slide 16
Slide 16 text
データを貯める 1
Slide 17
Slide 17 text
課題1 どんなデータを貯めれば良いかわからない 機械学習に使えそうだという仮説が立てられそうなデータにフォーカスする
Slide 18
Slide 18 text
課題2 データの規模・更新頻度などが予測できない マネージドサービスを使う
Slide 19
Slide 19 text
データパイプライン 必要最小限のデータにフォーカスしたマネージドサービスで構築したデータパイプライン
Slide 20
Slide 20 text
データパイプライン データソースは RDB に永続的に保存されたデータにフォーカス 弊社の事業特性上重要だと考えられるデータが RDB に保存されているデータであるという仮説に基づいた意思決定
Slide 21
Slide 21 text
データパイプライン Amazon CloudWatch と StepFunction で簡易的なワークフローを実現
Slide 22
Slide 22 text
データパイプライン データの抽出、変換、ロードを AWS Glue によって行う事い将来的な大規模に備える
Slide 23
Slide 23 text
データパイプライン parquet 形式でデータを Data Lake (S3) に保存し、Amazon Athena や SageMaker、local マシンなどで使う
Slide 24
Slide 24 text
Data Lake の実体
Slide 25
Slide 25 text
貯めたデータの活用 ● 毎日の Data warehouse のスナップショットを zip に固めてアーカイブしておくと便利 ○ ビジネス職のメンバーや社外のエンジニアと簡単にシェア出来る ○ 再現性のある検証や開発が出来る
Slide 26
Slide 26 text
● データパイプラインは特別な理由が無い限りマネージドサービスを使う ● データは共有しやすい形式で保存しておく データを貯める まとめ
Slide 27
Slide 27 text
レコメンドモデルを開発する 2
Slide 28
Slide 28 text
課題1 アルゴリズムの種類が多すぎる Context-Aware Recommendation Pop ItemKNN BPR NeuMF ConvNCF DMF FISM NAIS SpectralCF GCMC NGCF LightGCN DGCF LINE MultiVAE MultiDAE MacridVAE CDAE LR FM NFM DeepFM xDeepFM AFM FFM FwFM FNN PNN DSSM WideDeep DIN DIEN DCN AutoInt XGBOOST LIGHTGBM FPMC GRU4Rec NARM STAMP Caser NextItNet TransRec SASRec BERT4Rec SRGNN GCSAN GRU4RecF SASRecF FDSA S3Rec GRU4RecKG KSR FOSSIL SHAN RepeatNet CKE CFKG KTUP KGAT RippleNet MKR KGCN KGNNLS General Recommendation ENMF NNCF RaCT RecVAE EASE SLIMElastic SGL ADMMSLIM NCEPLRec SimpleX NCL Sequential Recommendation Knowledge-based Recommendation HGN HRM NPE LightSANs SINE CORE
Slide 29
Slide 29 text
課題1 アルゴリズムの種類が多すぎる 自社サービスの仕様や要件をまとめ、相性が良さそうなアルゴリズムの仮説をたてる
Slide 30
Slide 30 text
DROBE のレコメンドに関わる仕様や制約条件 ● サインアップ時に豊富なユーザーデータを取得出来る ● ユーザーが能動的に商品を探索などしないので行動ログがほぼ使えない (当時) ● ユーザーからは返品も含め明示的なフィードバックが得られる ● 商品の種類が豊富 ● 商品の入れ替わりが激しい ● 利用の間隔が長いユーザーが多い サービスの特徴 相性が良さそうなア ルゴリズム ● ID だけではなくユーザーやアイテムの特徴を使える ● 明示的フィードバックを利用可能
Slide 31
Slide 31 text
Context-Aware Recommendation Pop ItemKNN BPR NeuMF ConvNCF DMF FISM NAIS SpectralCF GCMC NGCF LightGCN DGCF LINE MultiVAE MultiDAE MacridVAE CDAE LR FM NFM DeepFM xDeepFM AFM FFM FwFM FNN PNN DSSM WideDeep DIN DIEN DCN AutoInt XGBOOST LIGHTGBM FPMC GRU4Rec NARM STAMP Caser NextItNet TransRec SASRec BERT4Rec SRGNN GCSAN GRU4RecF SASRecF FDSA S3Rec GRU4RecKG KSR FOSSIL SHAN RepeatNet CKE CFKG KTUP KGAT RippleNet MKR KGCN KGNNLS General Recommendation ENMF NNCF RaCT RecVAE EASE SLIMElastic SGL ADMMSLIM NCEPLRec SimpleX NCL Sequential Recommendation Knowledge-based Recommendation HGN HRM NPE LightSANs SINE CORE DROBE のレコメンドと相性が良さそうなアルゴリズム この辺りのアルゴリズムの相性が良さそう
Slide 32
Slide 32 text
課題2 チームに専門家が居ない 機械学習に詳しくなくてもマネージドサービスや OSS などを利用した開発は可能
Slide 33
Slide 33 text
開発の方針 マネージド 独自実装 OSS 実装難易度 本番化難易度 カスタマイズ性 具体的選択肢 中 低 中 低 中 低 DLRM 高 高 高
Slide 34
Slide 34 text
開発の方針 Managed 独自実装 OSS 実装難易度 本番化難易度 カスタマイズ性 具体的選択肢 中 低 中 低 中 低 DLRM 高 高 高 DROBEの場合は ● ある程度知識のある ML エンジニアが居た ● レコメンドをサービスの中で重要な機能と位置付けた ● 想定している結果を出すまで PDCA を回す前提 という事を背景に、OSS を中心に検証を開始
Slide 35
Slide 35 text
検証中に出てきた問題 ● 学習は回るがパーソナライズされない ● 一般的に使われるメトリクス (Accuracy や Precision) だけだとサービスにとって良いレコメン ドかどうかの判断がつかない 同じランキングが別のユーザーに提案されてしまう (パーソナライズされない )
Slide 36
Slide 36 text
定性評価 最終的にはスタイリストの定性的評価を軸として意思決定を行った 具体的には各モデルで出したランキングを表にしてスタイリストに評価してもらった
Slide 37
Slide 37 text
https://arxiv.org/pdf/1507.08439.pdf LightFM Metadata Embeddings for User and Item Cold-start Recommendations という論文の python 実装 主な特徴 ● user, item 両方の cold start 問題に対応出来る ● Cython を使って書かれているため CPU でもある程 度高速に動作する
Slide 38
Slide 38 text
レコメンドモデルの開発 まとめ ● 自社サービスの特徴を踏まえどういったアルゴリズムが良さそうかの当りをつける ● チームの状況に合わせ実装方法を選択する ● 導入初期には定量的な数値だけではなく、定性的な意見も含めて意思決定を行う
Slide 39
Slide 39 text
機能として設計する 3
Slide 40
Slide 40 text
課題 レコメンドやルールをどのように協調動作させるか 各種機能を Filter と Ranker (Sorter) と捉えて整理し、設計する
Slide 41
Slide 41 text
DROBE における Filter ● サイズがマッチしない商品は推薦しない ● ユーザーが嫌いと答えた特徴を持つ商品は推薦しない ● 既に購入済みの商品は推薦しない ● 在庫がない商品は推薦しない ● 販売不可能な商品は推薦しない
Slide 42
Slide 42 text
DROBE における Filter ● サイズがマッチしない商品は推薦しない ● ユーザーが嫌いと答えた特徴を持つ商品は推薦しない ● 既に購入済みの商品は推薦しない ● 在庫がない商品は推薦しない ● 販売不可能な商品は推薦しない 検索エンジン 機械学習モデル
Slide 43
Slide 43 text
DROBE における Ranker ● サービス全体のランキング ● 価格順 ● 新着順 ● ユーザー毎にパーソナライズされたランキング
Slide 44
Slide 44 text
DROBE における Ranker ● サービス全体のランキング ● 価格順 ● 新着順 ● ユーザー毎にパーソナライズされたランキング 検索エンジン 機械学習モデル
Slide 45
Slide 45 text
DROBE のパーソナライズ機能 ● Filter と Ranker を実装とマッピング ● 協調動作部分はバックエンドのロジックとして実装 する ○ どういった順番で Filter と Ranker を適用して クライアントにレコメンドするアイテムを返すの か
Slide 46
Slide 46 text
3 本番運用
Slide 47
Slide 47 text
API としてモデルを動作させる API サーバーとしてモデルを動作させるには コンテナにしてしまうのが簡単 (CPU で動作可能な場合は特に )
Slide 48
Slide 48 text
API としてモデルを動作させる モデルトレーニング用のコードも同じコンテナ に持ち、コンテナ内部でトレーニングし結果を docker commit する
Slide 49
Slide 49 text
API としてモデルを動作させる 推論時にはコンテナ起動時に weight を Model が読み込んで初期化し、 API サー バーがリクエストを受けて Model の推論機 能を呼び出す
Slide 50
Slide 50 text
本番化を踏まえたデータパイプラインの設計
Slide 51
Slide 51 text
モデルのトレーニングとデータパイプライン 複雑化する ETL Workflow に対応するために Kubernetes 上で動く OSS の Workflow エンジンを導入 ① Extract ① Extract ② Load ③ Transform
Slide 52
Slide 52 text
モデルのトレーニングとデータパイプライン トレーニングは CodePipleine で行う Build して Push するコンテナイメージ
Slide 53
Slide 53 text
動作確認と評価 stg や QA 環境はデータが本番と違う場合が多い レコメンドモデルは本番のデータを使ってトレーニングする事が多い 本番のデータを使ってトレーニングしたレコメンドモデルを QA 環境にあげても API の動作確認は出来るがモデ ルの動作確認は難しい
Slide 54
Slide 54 text
カナリアリリース
Slide 55
Slide 55 text
カナリアリリース 機械学習 API の数が増えても管理可能 ArgoCD を使う事で GitOps での運用が行えるの で、AB テストなども比較的容易に行える
Slide 56
Slide 56 text
機械学習 API 全体像 DROBE の場合、モデルは CPU で動作可能 スケーラビリティと本番環境へのカナリアリリースを考えて EKS + istio で機械学習 API を運用
Slide 57
Slide 57 text
● 開発と本番で同じデータを使えるようにしておく ● CPU で動作させる事ができれば通常の Web インフラが使える ● 機械学習機能は動作確認や性能の判断が困難な場合が多いので、本番環境で検証出来る仕 組みを考えておく 本番運用 まとめ
Slide 58
Slide 58 text
まとめ
Slide 59
Slide 59 text
まとめ 本日お話したこと あらゆるリソースが足りないスタートアップでも、パーソナライズ機能の導入は可能 アルゴリズムの選定や評価を除けば基本的には Web の一般的な開発の知識だけでも機能の実装 を行う事は出来る 運用面では機械学習モデルがあるがゆえの難しさはある
Slide 60
Slide 60 text
We are hiring!! 60 採用情報 https://info.drobe.co.jp/jobs エンジニアリング資料 https://info.drobe.co.jp/engineering 少しでも気になった方、お気軽にご連絡ください!! カジュアルに技術話をするだけでも大歓迎です! Twitter Meety
Slide 61
Slide 61 text
株式会社DROBE CTO 都筑友昭 ご清聴ありがとうございました!