Data Platform Meetup 【vol.2】 https://data-platform-meetup.connpass.com/event/155073/ での発表スライドです。 クックパッドにおける,DWHと密に連携した機械学習プロジェクトの話です。
DWHを活用したクックパッドの機械学習 プロジェクトクックパッド株式会社 開発室Graphstu3dio_graph1
View Slide
もくじ•クックパッドにおける機械学習プロジェクト•DWHを使った機械学習プロジェクト‣ 学習フェーズにおけるデータ取得編‣ 推論フェーズにおけるデータ投入編•まとめ2
クックパッドでの機械学習プロジェクト3
クックパッド•毎日の料理を楽しみにするサービス•月間 約5,483万人のユーザー (国内)•レシピ数は320万品‣ 大量の画像・テキストデータ•ユーザがレシピを書いて投稿‣ かなり自由な投稿が可能‣ 気軽に投稿できる 4
レシピと機械学習•レシピの検索•レシピの解析•同義表現の認識•材料名の正規化•手順の分類•レシピの分類5
レシピと機械学習•レシピの検索•レシピの解析•同義表現の認識•材料名の正規化•手順の分類•レシピの分類6すでにサービスに投入済
レシピと機械学習•レシピの検索•レシピの解析•同義表現の認識•材料名の正規化•手順の分類•レシピの分類7たくさんデータが必要
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース推論モデル特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果8
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果9推論モデル
DWHを使った機械学習〜学習フェーズにおけるデータ取得編〜10
Redshiftから直接データを取ってくるRedshift Python11
Redshiftから直接データを取ってくるRedshift Python12
Redshiftから直接データを取ってくるRedshift Python13破滅
Redshiftに直接接続してしまうと•クエリが巨大な場合にクライアント側のリソースが枯渇‣ カーソルを使うとリーダーノードの具合も悪化• リーダーノードにデータをマテリアライズする• カーソルがクローズされるまでコネクションを占有し続ける•PostgresSQL として直接接続してしまうと‣ 遠隔地 (別AWSリージョン) からの接続が面倒‣ コネクションが不安定14
Queuery •Redshiftに直接繋がずにHTTP APIでクエリ発行できる 内製ツール‣ APIでselect文を受け付けてunload文でラップし問い合わせ実行‣ 結果をS3に直接かつ並列にunloadする→安全•queuery-client (Ruby / Python) を使用‣ クエリ結果を単純に行単位の Enumerable / iterator で扱える15
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース推論モデル特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果16
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース推論モデル特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果どうやっているか17
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送④Pythonオブジェクト として扱う18
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送④Pythonオブジェクト として扱う19
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送Redshift 大量データを扱える データウェアハウス④Pythonオブジェクト として扱う20
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送クエリ実行S3 (Simple StorageService) 拡張性と堅牢性に優れた ストレージサービス④Pythonオブジェクト として扱う21
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送④Pythonオブジェクト として扱う22
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送⑤学習23
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送⑤学習24機械学習モデルができた!
RedshiftS3PythonQueuery①HTTP リクエスト②unload文でラップ③並列に結果を転送⑤学習25投入して使ってもらわないと 意味ない
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース推論モデル特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果26
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース推論モデル特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果27
DWHを使った機械学習〜推論フェーズにおけるデータ投入編〜28
機械学習プロジェクトのデータ利用とは•推論した結果データを 他部署のメンバーに使ってもらう‣ 既存テーブルのフィルタリング‣ クラスタリング用など分析用途にも•DWHに集約させておくことが大事29
機械学習プロジェクトのデータ利用の問題•DWHに置いておくだけで使ってもらえるわけではない‣ 使い方を書いておかないと使ってもらえない•他部署の人がテーブルの情報を知るのが困難‣ 精度とは?スコアとは?ラベルとは?‣ 機械学習モデルの推論結果は信用できるものか?30
Dmemo•https://github.com/hogelog/dmemo•毎晩Redshiftにアクセスして最新の メタデータを取り込む‣ DB・スキーマ・テーブル・カラムの各階層ごとに説明が書ける‣ GoogleAuthと連携し変更履歴も管理される•PullRequest上やSlackでの分析のやりとり‣ dmemoのURLを貼って一言二言伝えるだけで完結31
Dmemo32
Dmemoの使われ方33
推論フェーズにおけるデータ投入•既存テーブルとほぼ同じ行数のテーブルが誕生‣ たとえばレシピ,手順,材料に対するメタ情報など‣ 初期は全データに対して推論を行う‣ その後は日時バッチで追加されたデータに対しても推論•頻繁な書き換えが発生する用途には向いていない34
Pipelined-migrator•MySQLテーブルのRedshiftへの取り込みを管理‣ GUIで追加するテーブル,DBを管理できる‣ インフラやDWHチームへの依頼は不要•s3を介してRedshiftにテーブルを取り込む35
Pipelined-migrator36取り込むテーブル一覧取り込むデータベースの情報実際に取り込むかどうか
Pipelined-migrator を使うことによる利点•PythonからはMySQLに書きに行くだけ‣ 機械学習エンジニアは後ろ側を意識しなくてもいい•研究開発部が管理しているMySQLサーバー‣ 実サービスから分離したスタンドアロン構成•Redshiftへの投入は日時に自動で行われる‣ ミニバッチに分割して投入するといった手間は不要37
RedshiftS3Python並列に書き込みAuroraMySQLとして 書き込み38Pipelined-migrator
RedshiftS3Python並列に書き込みAuroraMySQLとして 書き込み39Pipelined-migratorAurora (MySQL)AWS上に展開されたマネージドなRDMBSシステム
RedshiftS3Python並列に書き込みAuroraMySQLとして 書き込み40Pipelined-migrator
RedshiftS3Python並列に書き込みAuroraMySQLとして 書き込み41Pipelined-migrator
まとめ42
クックパッドでのデータフロー•データ取得‣ S3をうまく使ってRedshiftに負荷をかけすぎないようにする‣ 他の分析者のストレスにならないように•データ投入‣ S3をうまく使うことでMySQLからの取り込みも簡単に‣ じぶん達で作ったデータは使われ先も置き先も面倒を見る•DWHチームに頼り切らずにデータ取得/投入を行うことができた‣ でも困ったらすぐ頼れるので助かる (実際に私も困ったので頼った)43
機械学習プロジェクトの概略図バッチシステム推論バッチ 学習バッチデータベース推論モデル特徴抽出モデル学習機サービスのデータ特徴量学習結果特徴量推論結果44
RedshiftS3PythonQueueryHTTP リクエストunload文でラップ並列に結果を転送AuroraMySQLとして 書き込み並列に書き込み45
参考文献•無理をしない機械学習プロジェクト2 https://speakerdeck.com/studio_graph/step-or-not2•クックパッドのデータ活用基盤 https://techlife.cookpad.com/entry/2017/10/06/135527•データベースドキュメント管理システム dmemo のご案内 https://techlife.cookpad.com/entry/2016/08/08/103906•データ活用基盤の今 〜DWH外観図〜 https://techlife.cookpad.com/entry/2019/10/18/09000046