SlideShare a Scribd company logo
D2-2-S02
リクルートライフスタイルにおける
深層学習の活用と GCP での実現方法
堀澤健太
グループマネージャー
株式会社リクルートライフスタイル
2018 年 9 月 20 日
堀澤健太 @horiken4
株式会社リクルートライフスタイル
グループマネージャー
2011 年 大学院卒業後
大手スマホゲーム開発会社に新卒入社
2016 年 現職
マネジメントをしつつデータエンジニア, 機械学習エンジ
ニアとして開発業務に従事
Photo
Speaker
堀澤健太 @horiken4
株式会社リクルートライフスタイル
グループマネージャー
情報処理学会
ビッグデータ研究グループ 運営委員
https://sites.google.com/view/ipsj-bpd/
Photo
Speaker
Agenda
● 弊社について
● CET の紹介
● 深層学習の活用
● Wrap-up
1 弊社について
リボンモデル
リクルートのビジネスモデル
リクルートライフスタイルのサービス
2 CET の紹介
Capture EveryThing
CETとは
Capture EveryThing の略
様々なログを収集するための基盤の開発チームとして立ち上げ
弊社の様々なサービスで利用されているデータプロダクト
CET チームのミッション
直接的な収益インパクトと, Insight や技術資産 など間接的な価値を創出する
Process Outcome
データプロダクト×リーン
データプロダクトのライフサイクルを想定し専門チームが推進
リーンアプローチ, リーンアナリティクス
クラウド活用を前提とした開発基盤とプロセス整備
ミッションを推進する CET 基盤システム
CET API
ML バッチ処理基盤
ストリームデータ処理基盤
CET API
リクエストパスに応じて Bigtable の行を返す
API データローダで TSV の内容を Bigtable へ書き込み
他グループにも開放
非エンジニアでも簡単に API を作成できる
CET API
User
GET request
TSV
ML Batch,
Data scientist,
Engineer,
etc
TSV upload
Web server
ML バッチ処理基盤
GitHub Flowと Drone による CI/CD
デプロイフローの属人化、コードの属人化を排除
非エンジニアでも品質を保ちながら本番反映可能
ML バッチ処理基盤
Deploy DAG Launch
Training data
Push
DAG, Batch source
Prediction
result
Developer
Zipped source
Web hook
Docker image
ストリームデータ処理基盤
弊社サービスの Web サーバログを収集
じゃらん net
ホットペッパーグルメ
ホットペッパービューティー
など
LTV 予測, UU 集計, 推薦などに利用
ストリームデータ処理基盤
Access log
Web server
3 深層学習の活用
深層学習の活用事例
宿レコメンデーション
リアルタイム宿レコメンデーション
宿泊プランレコメンデーション
宿レコメンデーション
目的
検索画面に戻り再検索しなければならず離脱が増加
宿の詳細ページにおすすめの宿を表出
迷っているユーザが簡単に最適な宿を探せるように
Recommendation
アーキテクチャ
PV log
Feature
vector
Training
data
Feature
vector
K nearest neighbors
(recommendation)
GET https://api.example/yad_recom/yad_id
PV
User
Collaborative Denoising Auto-Encoders [1]
宿の特徴抽出に利用
DAE にユーザベクトルを追加した
レコメンデーションモデル
入力はアイテムに対するユーザの
好みを表現する疎行列 ( Preference )
0 :好まない, 1 :好む
CDAE の学習
重み行列全体ではなく特定の
行を更新
更新する行は Preference で決定
Optimizer.minimize() では実現不可
重み行列の部分行列の更新方法
Item Index
Preference
Fixed
Row Index
Updated
Row Index
tf.gather tf.dynamic_stitch
Loss
tf.gradients tf.scatter_update
W
updated W
重み行列の部分行列の更新方法
preference = …
w = tf.get_variable(...)
...
i_updated, i_fixed 
= build_item_indices(prefernece, ...)
w_updated = tf.gather(w, i_updated)
w_fixed = tf.gather(w, i_fixed)
w = tf.dynamic_stitch([i_updated, i_fixed],
[w_updated, w_fixed])
…
...
loss = build_loss(w)
grad = tf.gradients(loss, w_updated)
w_updated = build_update(w_updated, grad)
train_op = tf.scatter_update(w, i_updated,
w_updated)
…
with tf.Session() as sess:
while …:
sess.run(train_op, ...)
推薦の方法
CDAE により宿ごとの特徴ベクトルを計算
BigQuery で最近傍探索
ある宿に対する類似宿リスト作成
類似宿リストを Bigtable へ書き込みサービング
リクエストされた宿に対する類似宿リストを返す
学習データの準備
BigQuery から宿ページの閲覧ログを抽出
ユーザを素性とみなし宿×ユーザ疎行列 ( Preference ) を作成
PV 数上位ユーザを素性とみなす
あるユーザに閲覧されたら 1, 閲覧されてなければ 0
Implicit feedback
学習と特徴抽出
ML Engine で CDAE を学習
学習完了後, 同じジョブで全 Preference に対する中間層出力を計算
特徴ベクトルが得られる
特徴ベクトルを GCS へ保存
BigQuery による最近傍探索
特徴ベクトルを GCS から BigQuery へインポート
距離計算用の UDF を定義, CROSS JOIN により全宿間の距離計算
全宿に関して距離の昇順で宿をソート, 上位数件を類似宿とする
BigQuery による最近傍探索
CREATE TEMPORARY FUNCTION
calc_distance(x ARRAY<FLOAT64>,
y ARRAY<FLOAT64>)
RETURNS FLOAT64
LANGUAGE js AS """
// Calculate distance
// e.g. Euclidean, Cosine, Hamming
distance = …
return distance;
""";
…
WITH all_dist AS (
SELECT
a.item_id AS a_id,
b.item_id AS b_id,
calc_distance(a.vector, b.vector) AS dist
FROM feature AS a CROSS JOIN feature AS b),
ranking AS (# Assign rank to item using window),
knns AS (# Extract and aggregate kNNs),
...
CDAE による推薦モデルの強さ
ドメインエキスパートの作成したモデルと CDAE で AB テスト
ドメインエキスパートのモデルとほぼ同等の効果が得られた
CVR を大きく改善
必要なデータはページの閲覧ログだけ
BigQuery のクエリが書ければ誰でも, どのサービスでも利用可能
リアルタイム
宿レコメンデーション
目的
ディスプレイ広告から特定宿の詳細ページへ流入
好みではないので直帰, また流入, 直帰, …を繰り返す
流入したときに最適な宿を推薦して CVR を向上させたい
在庫の存在する宿だけ推薦
アーキテクチャ
PV log
Training
data
Feature
vector
Training
data
Feature
vector
K nearest
neighbors
GET https://api.example/rt_yad_recom/user_id
PV
User
K nearest neighbors
Recommendation
Stock
Stock
PV log
効率的なレコメンデーション
CDAE の通常の推薦方法だとネットワークの順伝播が必要
パイプラインが詰まる可能性が高まる
宿特徴ベクトルを利用したアイテムベースレコメンド
推薦に必要なのは類似宿 LUT のみ
事前に BigQuery で最近傍探索して求める
パイプライン
GCS から類似宿リストを
副入力として読込
セッションウィンドウで
直近 n 件の閲覧宿を保持
類似宿をルックアップ
在庫が存在する宿でフィルタ
推薦処理
PCollection
<KV<String, Iterable<Log>>>
X, Y, Z
X A, U 0.4, 0.1
Y W, P 0.5, 0.2
Z T 0.3
PCollectionView<LUT>
ParDo
Lookup X, Y, Z
A, U, W, P, T
Sort by distance ASC
U, P, T, A, W
宿泊プラン
レコメンデーション
目的
リスティング広告流入したユーザにユーザが流入した宿の
宿泊プランを推薦
直帰率低下, CVR 向上
アーキテクチャ
Exported
model
GET https://recom.example/user_id/yad_id
PV log
Plan feature extraction
User feature extraction
Deploy
CV 予測モデル
全結合の NN
CV するか否かの 2 値分類
入力はユーザ特徴, プラン特徴ベクトル
CDAE の中間層出力
User feature Plan feature
CV
ReLU
Dropout
L2 regularization
Softmax
推薦モデル
CV 確率降順にプラン ID をソート
入力はユーザ ID と宿 ID
GET リクエストパスで受け取る
ユーザ ID と宿 ID を特徴ベクトルへ
マッピング User ID Plan IDs
CV
model
Plan IDs
User feature Plan feature
Yad ID
ユーザと宿泊プランの特徴抽出
ユーザ×宿, 宿泊プラン × ユーザの Preference 行列から CDAE を学習
中間層出力を特徴とする
中間層は 128 個
ユーザ, 宿泊プランごとに 128 次元の特徴が得られる
PV の多いユーザに限定
少ない学習時間で効果の高い推薦をするため
CV 予測モデルの学習データ
対象のユーザと宿泊プランの PV, CV イベントを抽出
ラベルは PV だけなら 0, CV したら 1
ユーザと宿泊プランの特徴ベクトルと PV, CV ログを JOIN
推薦モデルの利点 1
コールドスタート問題の解決
アイテムベースだと宿泊プランページを閲覧したユーザにしか
推薦できない
宿ページを閲覧しただけのユーザにも推薦可能
宿閲覧ログを利用し CDAE でユーザ特徴を抽出
推薦モデルの利点 2
特徴ベクトルが自由に選択できる
例)フォトギャラリーの写真の推薦
Convolutional DAE で画像特徴ベクトルを抽出
ユーザ特徴, 画像特徴ベクトルを CV 予測モデルの入力とする
コールドスタート問題も解決
フォトギャラリーを閲覧しなくても好みの写真を推薦可能
推薦モデルの擬似コード
u_id = tf.place_holder(tf.string, (None, )) # From request prameter
y_id = tf.place_holder(tf.string, (None, )) # From request prameter
...
pid_str = p_lut.lookup(yid) # Lookup plan IDs
pid = tf.string_split(pid_str, delimiter=‘-’)
pf = pf_lut.lookup(pid) # Lookup plan features
uf = uf_lut.lookup(uid) # Lookup user features
...
score = build_cv_prediction(uf, pf)
…
top_k_score, top_k_index = tf.nn.top_k(score, k=tf.minimum(10, tf.shape(score)[0]))
...
モデルを小さくする工夫
TensorFlow モデルは外部データストアを利用できない
宿, 宿泊プランの特徴ベクトルはメモリに保持
使用メモリを小さくしたい
中間層の出力をしきい値処理し binary vector にする [2]
活性化関数は Sigmoid なので, 0.5をしきい値にして二値化
特徴ベクトルを 1/32 に圧縮
Serving
TensorFlow Serving を GKE にデプロイ
モデル更新はモデルパスを変更して kubectl apply
containers:
- name: tf-serving
image: tf-serving:v1.0.0
env:
- name: MODEL_NAME
value: ${model_name:?}
- name: MODEL_PATH
value: ${model_path:?}
CMD ["/bin/bash", "-c", "gsutil cp -r ${MODEL_PATH}/* /model
&& tensorflow_model_server --rest_api_port=8501
--model_name=${MODEL_NAME}
--model_base_path=/model"]
Dockerfile deployment.yml
Serving
nginx をリバースプロキシとして配置
GET でリクエストを受けれるように
location ~ "^/(?<model_name>([-a-zA-Z0-9]+))/(?<user_id>([a-zA-Z0-9]+))/(?<yad_id>([0-9]+))$"
{
proxy_method POST;
proxy_set_header Content-Type 'application/json';
proxy_set_body '{"instances": [{"user_id": "$user_id", "yad_id":"$yad_id"}]}';
proxy_pass 'http://127.0.0.1:8501/v1/models/$model_name:predict';
}
なぜリクエスト時に推薦処理を行うのか
CET API は利用できない
組合せが膨大で事前に推薦しておくことが難しいため
全ユーザ × 全宿 = 約 3 TB を Bigtable へ書き込む必要がある
Bigtable の Tablet 最適化で CET API のパフォーマンスが劣化
なぜリクエスト時に推薦処理を行うのか
宿と宿泊プランの対応関係を利用し効率的に CV 確率を予測可能
宿に紐づく宿泊プランに絞って CV 確率を予測
宿に含まれる推薦対象の宿泊プランは数十個程度
小さい順伝播ですむ
4 Wrap-up
まとめ
CET チームと GCP を活用した基盤システム
データとエンジニアリングで利益創出
深層学習と GCP を活用した利益貢献施策
GCP で本来の作業に集中できる
GCP で深層学習を活用するためのノウハウ
参考文献
[1] “Collaborative Denoising Auto-Encoders for Top-N Recommender
Systems” http://alicezheng.org/papers/wsdm16-cdae.pdf
[2] “Deep Learning of Binary Hash Codes for Fast Image Retrieval”
https://www.iis.sinica.edu.tw/~kevinlin311.tw/cvprw15.pdf
Thank you.

More Related Content

PPTX
オーバーエンジニアリングって何? #devsumi #devsumiA
PDF
大企業アジャイルの勘所 #devlovex #devlovexd
PDF
ゼロからはじめるプロダクトマネージャー生活
PDF
リーン開発の本質 公開用
PPT
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
PPTX
WayOfNoTrouble.pptx
PDF
アジャイル開発とメトリクス
PDF
カネとAgile(大企業新規事業編) #rsgt2021
オーバーエンジニアリングって何? #devsumi #devsumiA
大企業アジャイルの勘所 #devlovex #devlovexd
ゼロからはじめるプロダクトマネージャー生活
リーン開発の本質 公開用
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
WayOfNoTrouble.pptx
アジャイル開発とメトリクス
カネとAgile(大企業新規事業編) #rsgt2021

What's hot (20)

PDF
Swaggerでのapi開発よもやま話
PDF
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
PDF
SolrとElasticsearchを比べてみよう
PDF
Software design and team design
PDF
研究発表のやり方
PDF
ユーザーストーリー駆動開発で行こう。
PPTX
振り返り(アジャイルレトロスペクティブズ)
PPTX
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
PDF
エンジニア必見!Sreへの第一歩
PDF
Laravelでfacadeを使わない開発
PDF
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
PDF
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
PDF
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
PDF
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
PDF
テスト文字列に「うんこ」と入れるな
PDF
Leanstartupをリーンにヤル #リーンスタートアップ
PDF
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
PDF
LEANSTARTUPアンチパターン #devlove #leanstartup
Swaggerでのapi開発よもやま話
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
SolrとElasticsearchを比べてみよう
Software design and team design
研究発表のやり方
ユーザーストーリー駆動開発で行こう。
振り返り(アジャイルレトロスペクティブズ)
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
エンジニア必見!Sreへの第一歩
Laravelでfacadeを使わない開発
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
テスト文字列に「うんこ」と入れるな
Leanstartupをリーンにヤル #リーンスタートアップ
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
フロー効率性とリソース効率性、再入門 #devlove #devkan
LEANSTARTUPアンチパターン #devlove #leanstartup
Ad

Similar to リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法 (20)

PPTX
Hadoopカンファレンス2013
PDF
パターン QA to AQ: 伝統的品質保証(Quality Assurance)からアジャイル品質(Agile Quality)へ
PDF
リクルート式ビッグデータ活用術
PDF
アジャイル品質パターンによる伝統的な品質保証(Quality Assurance)からアジャイル品質(Agile Quality)への変革
PDF
RTTJapan 会社概要 140120
PPT
マーケティング向け大規模ログ解析事例紹介
PPTX
Microsoft ではじめる AI DLラボ パートナープログラムご紹介
PPTX
Relationship betweenddd and mvc
PPTX
サービス開発における工程
PDF
ドメイン駆動設計と要求開発
PPTX
DRIVE CHARTを支えるAI技術
PPTX
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
PDF
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
PDF
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
PDF
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
PDF
第15回ピク活IT勉強会 ピクト図解入門(01 ピクト図解入門 20140328_公開用)
PDF
アジャイルソフトウェア開発の道具箱
PPTX
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
PPTX
Microsoft Power Platform がエンジニアにも必要な理由
PDF
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
Hadoopカンファレンス2013
パターン QA to AQ: 伝統的品質保証(Quality Assurance)からアジャイル品質(Agile Quality)へ
リクルート式ビッグデータ活用術
アジャイル品質パターンによる伝統的な品質保証(Quality Assurance)からアジャイル品質(Agile Quality)への変革
RTTJapan 会社概要 140120
マーケティング向け大規模ログ解析事例紹介
Microsoft ではじめる AI DLラボ パートナープログラムご紹介
Relationship betweenddd and mvc
サービス開発における工程
ドメイン駆動設計と要求開発
DRIVE CHARTを支えるAI技術
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
第15回ピク活IT勉強会 ピクト図解入門(01 ピクト図解入門 20140328_公開用)
アジャイルソフトウェア開発の道具箱
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Microsoft Power Platform がエンジニアにも必要な理由
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
Ad

More from Recruit Lifestyle Co., Ltd. (20)

PDF
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
OOUIを実践してわかった、9つの大切なこと
PDF
Flutter移行の苦労と、乗り越えた先に得られたもの
PDF
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
PDF
「進化し続けるインフラ」のためのマルチアカウント管理
PDF
Air事業のデザイン組織とデザイナー
PDF
リクルートライフスタイル AirシリーズでのUXリサーチ
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
PPTX
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
PDF
Real-time personalized recommendation using embedding
PDF
データから価値を生み続けるには
PDF
データプロダクト開発を成功に導くには
PDF
Jupyter だけで機械学習を実サービス展開できる基盤
PDF
SQLを書くだけでAPIが作れる基盤
PDF
BtoBサービスならではの顧客目線の取り入れ方
PDF
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
PDF
ビックデータ分析基盤の成⻑の軌跡
PDF
Refactoring point of Kotlin application
PDF
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
分散トレーシングAWS:X-Rayとの上手い付き合い方
OOUIを実践してわかった、9つの大切なこと
Flutter移行の苦労と、乗り越えた先に得られたもの
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
「進化し続けるインフラ」のためのマルチアカウント管理
Air事業のデザイン組織とデザイナー
リクルートライフスタイル AirシリーズでのUXリサーチ
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
Real-time personalized recommendation using embedding
データから価値を生み続けるには
データプロダクト開発を成功に導くには
Jupyter だけで機械学習を実サービス展開できる基盤
SQLを書くだけでAPIが作れる基盤
BtoBサービスならではの顧客目線の取り入れ方
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
ビックデータ分析基盤の成⻑の軌跡
Refactoring point of Kotlin application
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて

リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法