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 都筑友昭
 ご清聴ありがとうございました!