Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
プロダクション環境で
オンラインで機械学習を
ぶん回すにあたってツラい話
Emotion Intelligence株式会社
(旧DoBoken)
ところてん
お前誰よ
• ところてん
• http://twitter.com/tokoroten
• 高機能雑用
• 半導体計測屋
• セキュリティ研究者
• ビッグデータ屋
• ソシャゲ・クロス集計おじさん
• ソシャゲ・ゲームデザイナ
• 広告部門の...
最近の活動
• 一般社団法人未踏のお手伝い
• http://www.mitou.org/
最近の活動
• タッチパネル性のゲーム開発
4http://www.nicovideo.jp/watch/sm25185906 https://www.youtube.com/watch?v=7-hPyxorhho
最近の活動
5https://twitter.com/t_tutiya/status/591536291050704896 https://twitter.com/dnasoftwares/status/591421236653133824
最近の活動
6
Emotion Intelligence株式会社
気持ちを解するテクノロジーの探究
※4/1に社名変更しました
ZenClerk
https://www.zenclerk.com/
リアルタイムオファー
• ECサイトに訪れているお客様にとって、
最適なタイミングでクーポンを提示する
• 家電量販店の店員のイメージ
• フロアを歩いて情報収集しているときは、
声をかけてこない
• 商品を比較検討していると、
声をかけてきて...
リアルタイム分析
• お客様の動きをリアルタイム分析
• 複数の商品間で迷っているが、意思決定には至っていない?
• ウィンドウショッピングで眺めているだけで、買う気ゼロ?
• 買いたい商品がなくて離脱直前なのか?
• テレビや雑誌で情報を得て...
オンラインで機械学習
• お客様の動きをリアルタイムに予測する必要がある
• オンライン予測が必要
• お客様の傾向は時間に対して大きくは変化しない
• 学習はデイリーバッチでもよい
• 月間10億PVのデータを使って、オフラインでバッチ学習
...
データ分析の分類と、ツールの状況
学習がオンライン 学習がオフライン
予測がオンライン
アルゴリズムトレード(HFT)
Twitterのタイムライン分析
ZenClerk
アドテク
予測がオフライン
データ量多すぎて保存できない
系、IoT系?...
ツールの整備状況
• オンライン機械学習、オンライン予測
• Jubatus、Spark MLlib
• 分散処理を前提とするので、重厚長大になりがち
• エラー耐性を真面目にやりすぎている
• ZenClerkは多少のエラーは許容できるビジネ...
機械学習の流れ
生データ
特徴
ベクトル
機械学習 パラメータ
予測器 学習結果
教師データ
テストデータ
前処理
オンラインシステムでの処理の流れ
生データ
特徴
ベクトル
機械学習 パラメータ
予測器 学習精度
テストデータ
生データ
コピー
特徴
ベクトル
予測器
本番データ
結果
教師データ
コピー
前処理
前処理
オフライン学習
データ分析屋の世界...
前処理を移植する
• リアルタイム予測の課題
• データ分析環境とプロダクション環境で、同じ特徴量を予測
器に入力する必要がある
• データ分析環境と、プロダクション環境では、言語が異なる
• 前処理用の言語を開発
• 特徴ベクトル変換器
• ...
オンライン予測器を根性移植する
• 根性でアルゴリズムを移植
• 決定木の移植
• ロジスティック回帰の移植
• 既存のオフライン予測器をオンライン化
• scikit-learnをオンライン化
決定木を移植する
• Scikit-learnの出力した決定木のdotファイルをパース
JS(Coffee)を出力する
決定木を移植する
• JSに変換された決定木を、Node.jsでevalする
• Nodeで実行されるので、プロダクションに組み込める
• V8でJITされて、Pythonを叩くよりも高速に実行される
• ツライ
• 決定木は簡単に移植できた
...
ロジスティック回帰を移植する
• 特徴ベクトル変換器が吐いたJSをmongoに格納
• スタック型仮想マシンによる特徴ベクトル変換
• Scikit-learnが出力したロジスティック回帰の係数をmongoに
格納
この画面は、compose....
ロジスティック回帰を移植する
• ロジスティック回帰の変換式と係数をNodeで読み込む
• 特徴ベクトル変換式をevalして実行
• クソコードだけど、JITしているので、そこそこ早い
• ロジスティック回帰の式を利用して、Node側でProb...
もう限界
• これ以上複雑なアルゴリズムを移植するのは無理
• エラー処理とか心折れる
• テスト工数が半端ない
• プロダクションコードと密結合になるので、
アルゴリズムの多段化などが難しい
• Nodeで作られたシステムの中にpythonで...
Python分析サーバ
Python分析サーバを立てる
生データ
特徴
ベクトル
機械学習 パラメータ
予測器 学習精度
テストデータ
生データ
コピー
結果
教師データ
コピー
前処理
オフライン学習
データ分析屋の世界
オンライン予測
プロ...
予測タスクQueueモデル
Front Server(JS) JS系分析サーバ
Application
Server (JS)
Application
Server (JS)
Python Demon
予測タスクをPush
Pull
Pytho...
固いところは固く、柔軟なところは柔軟に
• データ分析はPDCA速度が第一
• 実験コードを本番投入して、アイディアをすぐに検証したい
• データ分析の書くコードの品質はヒドイ
• データ分析者にNW系のコード書かせると、サービスが死ぬ
• デ...
顧客が本当に必要だった物
• issue
• プロダクションとデータ分析から同じ意味のものが叩ける
• 分析の実験コードを気軽にプロダクション投入したい
• 要件
• オンラインで利用できる
• レイテンシーが低い
• 保守性、安定性が高い
•...
機械学習サーバの検討
• 独立サーバ型のシステム
• Jubatus
• オンライン機械学習がしたいほどのデータ量ではない
• マルチテナントほしい、欲しい学習機がない
• Spark MLlib
• Sparkが重厚長大すぎる
• プロダクシ...
まとめ
• 機械学習をオンライン系サービスで利用するツラミ
• プロダクションとデータ分析の言語が異なる
• サービスと予測器を疎結合にするのがつらい
• 機械学習サーバによる解決
• 独立系サーバシステムによる解決
• Jubatus,Spa...
採用の話
• Emotion Intelligenceは機械学習がコアコンピタンス
• 精度を上げればあげるほど、利益が増える
• 新しいアルゴリズムを開発すればするほど、
適用可能範囲が増えて、利益が増える
• 金稼ぎが好きな機械学習エンジニ...
採用の話
• 募集しているポジション
• エンジニア(機械学習がわかっている)
• 機械学習モデラー
• 機械学習基盤エンジニア
• 機械学習のビジュアライズ
(管理画面エンジニア)
• 会社は恵比寿
• ガーデンプレイス(ここ)から
徒歩五分...
Upcoming SlideShare
Loading in …5
×

プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT

15,106 views

Published on

オフライン学習、オンライン予測ってジャンルが微妙に無いので、ツライことになるよ、という話。

Published in: Technology
  • Be the first to comment

プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT

  1. 1. プロダクション環境で オンラインで機械学習を ぶん回すにあたってツラい話 Emotion Intelligence株式会社 (旧DoBoken) ところてん
  2. 2. お前誰よ • ところてん • http://twitter.com/tokoroten • 高機能雑用 • 半導体計測屋 • セキュリティ研究者 • ビッグデータ屋 • ソシャゲ・クロス集計おじさん • ソシャゲ・ゲームデザイナ • 広告部門の手伝い • 機械学習おじさん Now 2
  3. 3. 最近の活動 • 一般社団法人未踏のお手伝い • http://www.mitou.org/
  4. 4. 最近の活動 • タッチパネル性のゲーム開発 4http://www.nicovideo.jp/watch/sm25185906 https://www.youtube.com/watch?v=7-hPyxorhho
  5. 5. 最近の活動 5https://twitter.com/t_tutiya/status/591536291050704896 https://twitter.com/dnasoftwares/status/591421236653133824
  6. 6. 最近の活動 6
  7. 7. Emotion Intelligence株式会社 気持ちを解するテクノロジーの探究 ※4/1に社名変更しました
  8. 8. ZenClerk https://www.zenclerk.com/
  9. 9. リアルタイムオファー • ECサイトに訪れているお客様にとって、 最適なタイミングでクーポンを提示する • 家電量販店の店員のイメージ • フロアを歩いて情報収集しているときは、 声をかけてこない • 商品を比較検討していると、 声をかけてきて商品の説明をしてくれる • 場合によっては、特別な割引を提案してく れる
  10. 10. リアルタイム分析 • お客様の動きをリアルタイム分析 • 複数の商品間で迷っているが、意思決定には至っていない? • ウィンドウショッピングで眺めているだけで、買う気ゼロ? • 買いたい商品がなくて離脱直前なのか? • テレビや雑誌で情報を得て、買う気満々で訪問した? • 適切な人にのみクーポンを提示する • 気持ちいいタイミングでクーポンが出るので、 コンバージョンレートが大幅上昇 • クーポンの露出量の減少、ブランド価値の維持 • ABテストで成果を確認 • クーポンを出すべきと判断した人のうち、 数割をコントロールグループとして、クーポンを表示しない • クーポンを出した群と、出さなかった群でCVRの変化を効果検証
  11. 11. オンラインで機械学習 • お客様の動きをリアルタイムに予測する必要がある • オンライン予測が必要 • お客様の傾向は時間に対して大きくは変化しない • 学習はデイリーバッチでもよい • 月間10億PVのデータを使って、オフラインでバッチ学習 • ZenClerkに必要な機械学習 • オフライン学習 • オンライン予測 • 多少データの欠落や、エラーがあっても良い • これに該当するライブラリが微妙にない
  12. 12. データ分析の分類と、ツールの状況 学習がオンライン 学習がオフライン 予測がオンライン アルゴリズムトレード(HFT) Twitterのタイムライン分析 ZenClerk アドテク 予測がオフライン データ量多すぎて保存できない 系、IoT系? バッチで予測、分析コンサル 協調フィルタリング系レコメンド 空白地帯 ブルーオーシャン? ↑たとえば、牛舎の大量のセンサーから、 将来の牛乳の生産量を予測する問題とか。
  13. 13. ツールの整備状況 • オンライン機械学習、オンライン予測 • Jubatus、Spark MLlib • 分散処理を前提とするので、重厚長大になりがち • エラー耐性を真面目にやりすぎている • ZenClerkは多少のエラーは許容できるビジネスモデル • サーバで動くので、プロダクションに持っていきやすい • 学習、予測をオフラインにすることもできる • オフライン機械学習、オフライン予測 • R、Scikit-learn • 小さいデータに対して、気軽に機械学習が書ける • 精度面では十分であることが多い • スクリプトとして動くので、プロダクションに導入しづらい • オンラインで予測させるには、根性が必要
  14. 14. 機械学習の流れ 生データ 特徴 ベクトル 機械学習 パラメータ 予測器 学習結果 教師データ テストデータ 前処理
  15. 15. オンラインシステムでの処理の流れ 生データ 特徴 ベクトル 機械学習 パラメータ 予測器 学習精度 テストデータ 生データ コピー 特徴 ベクトル 予測器 本番データ 結果 教師データ コピー 前処理 前処理 オフライン学習 データ分析屋の世界 オンライン予測 プロダクション環境 データ分析の世界(Pythonとか、Rとか) 本番環境の世界(RubyとかNodeとか)
  16. 16. 前処理を移植する • リアルタイム予測の課題 • データ分析環境とプロダクション環境で、同じ特徴量を予測 器に入力する必要がある • データ分析環境と、プロダクション環境では、言語が異なる • 前処理用の言語を開発 • 特徴ベクトル変換器 • 特徴ベクトル変換言語を使って、 source to sourceコンパイルすることで、 同質のPythonとJSを出力 • 詳細は道玄坂LT祭りの資料を参照 http://www.slideshare.net/TokorotenNakayama/vector-converter-dogenzakalt-dogenzakalt https://github.com/tokoroten/forth_fv_converter
  17. 17. オンライン予測器を根性移植する • 根性でアルゴリズムを移植 • 決定木の移植 • ロジスティック回帰の移植 • 既存のオフライン予測器をオンライン化 • scikit-learnをオンライン化
  18. 18. 決定木を移植する • Scikit-learnの出力した決定木のdotファイルをパース JS(Coffee)を出力する
  19. 19. 決定木を移植する • JSに変換された決定木を、Node.jsでevalする • Nodeで実行されるので、プロダクションに組み込める • V8でJITされて、Pythonを叩くよりも高速に実行される • ツライ • 決定木は簡単に移植できた • AdaBoostへの適用は?RandomForestは? • JS側にゴリゴリとロジックを書く必要がある • 個別の部品の移植だけでは、分類器の組み合わせが困難
  20. 20. ロジスティック回帰を移植する • 特徴ベクトル変換器が吐いたJSをmongoに格納 • スタック型仮想マシンによる特徴ベクトル変換 • Scikit-learnが出力したロジスティック回帰の係数をmongoに 格納 この画面は、compose.io(旧mongohq)のmongodbの管理画面
  21. 21. ロジスティック回帰を移植する • ロジスティック回帰の変換式と係数をNodeで読み込む • 特徴ベクトル変換式をevalして実行 • クソコードだけど、JITしているので、そこそこ早い • ロジスティック回帰の式を利用して、Node側でProbaを算出 http://www.mwsoft.jp/programming/numpy/logistic_regression.html
  22. 22. もう限界 • これ以上複雑なアルゴリズムを移植するのは無理 • エラー処理とか心折れる • テスト工数が半端ない • プロダクションコードと密結合になるので、 アルゴリズムの多段化などが難しい • Nodeで作られたシステムの中にpythonでscikit-learn が動くサーバを持ち込む
  23. 23. Python分析サーバ Python分析サーバを立てる 生データ 特徴 ベクトル 機械学習 パラメータ 予測器 学習精度 テストデータ 生データ コピー 結果 教師データ コピー 前処理 オフライン学習 データ分析屋の世界 オンライン予測 プロダクション環境 データ分析の世界(Pythonとか、Rとか) 本番環境の世界(RubyとかNodeとか)
  24. 24. 予測タスクQueueモデル Front Server(JS) JS系分析サーバ Application Server (JS) Application Server (JS) Python Demon 予測タスクをPush Pull Python DemonLB
  25. 25. 固いところは固く、柔軟なところは柔軟に • データ分析はPDCA速度が第一 • 実験コードを本番投入して、アイディアをすぐに検証したい • データ分析の書くコードの品質はヒドイ • データ分析者にNW系のコード書かせると、サービスが死ぬ • データ分析側のコードは余計なことを考えないですむ仕組みが必要 • お客様と直接つながるフロントサーバは固く作る • 分析サーバが落ちても問題ないようにする • Python系分析サーバは、タスクQueue • プロダクション環境と切り離されたPython分析環境を構築 • Pythonのデーモンがタスクをpull、分析スクリプトを実行 • コードの品質が安定したら、本番系mongodbに書き込み
  26. 26. 顧客が本当に必要だった物 • issue • プロダクションとデータ分析から同じ意味のものが叩ける • 分析の実験コードを気軽にプロダクション投入したい • 要件 • オンラインで利用できる • レイテンシーが低い • 保守性、安定性が高い • プロダクションに影響を与えない • アプローチ • 独立サーバに切り離された、機械学習用サーバ
  27. 27. 機械学習サーバの検討 • 独立サーバ型のシステム • Jubatus • オンライン機械学習がしたいほどのデータ量ではない • マルチテナントほしい、欲しい学習機がない • Spark MLlib • Sparkが重厚長大すぎる • プロダクションがJavaで書かれていたら、選択肢としてはありえそう? • このためだけにJVMのメンテはおつらい • 金の弾丸 • SPSS、 Amazon Machine Learning、Azure Machine Learning • 情報求む • 根性で自作する • 今回のアプローチ • R serve を本番投入している人いる?
  28. 28. まとめ • 機械学習をオンライン系サービスで利用するツラミ • プロダクションとデータ分析の言語が異なる • サービスと予測器を疎結合にするのがつらい • 機械学習サーバによる解決 • 独立系サーバシステムによる解決 • Jubatus,Spark MLlib • 根性による実装 • 今回採用した手段 • ホント、機械学習は地獄だぜ!フゥハハハーハァー
  29. 29. 採用の話 • Emotion Intelligenceは機械学習がコアコンピタンス • 精度を上げればあげるほど、利益が増える • 新しいアルゴリズムを開発すればするほど、 適用可能範囲が増えて、利益が増える • 金稼ぎが好きな機械学習エンジニアを募集中
  30. 30. 採用の話 • 募集しているポジション • エンジニア(機械学習がわかっている) • 機械学習モデラー • 機械学習基盤エンジニア • 機械学習のビジュアライズ (管理画面エンジニア) • 会社は恵比寿 • ガーデンプレイス(ここ)から 徒歩五分 • 月間10億PVを分析しましょう

×