無理をしない機械学習プロジェクト2/step_or_not2

 無理をしない機械学習プロジェクト2/step_or_not2

Machine Learning 15minutes! というイベントで登壇したときの資料です。
https://machine-learning15minutes.connpass.com/event/127412/

67d36f3f18a22b190854d0e80754d57f?s=128

開発室Graph

May 25, 2019
Tweet

Transcript

  1. 無理をしない機械学習2 @studio_graph3 !1

  2. もくじ •課題の設定 •ルールベースな方法を試す •機械学習を試す •サービス導入へ向けて •デプロイ後の改善 •まとめ・参考資料 !2

  3. クックパッド •毎日の料理を楽しみにするサービス •月間約5,500万人のユーザー •レシピ数は310万品 ‣ 大量の画像・テキストデータ •ユーザがレシピを書いて投稿 ‣ かなり自由な投稿が可能 ‣

    気軽に投稿できる
 !3
  4. 今日する話 !4

  5. 機械学習プロジェクトのサイクル !5 実験 コード整理 デプロイ

  6. 機械学習プロジェクトのサイクル !6 実験 コード整理 デプロイ どう回していくか

  7. 課題の設定 !7

  8. 調理手順 •クックパッドのレシピ ‣ 調理手順 • 画像とテキストで入力
 できる
 !8

  9. 調理手順ではないものがある •手順そのものではない
 ものが存在→非手順 ‣ コメント,アドバイスなど •本当の調理手順を抜き出したい ‣ 音声読み上げデバイスで利用 ‣ 他タスクの精度向上

    •非手順を識別する
 アルゴリズムを作った !9
  10. やったこと •ルールベースで解決できるか試す •機械学習を利用した分類を行う •システムに組み込む •精度向上のために別のアルゴリズムを試す !10

  11. ルールベースな方法を試す !11

  12. 機械学習プロジェクトのサイクル !12 実験 コード整理 デプロイ

  13. 機械学習プロジェクトのサイクル !13 実験 コード整理 デプロイ

  14. 機械学習を使わずに解けないか? •まずデータを眺めて開発者が自ら解いてみる •やってみると気づく ‣ 非手順には特定のキーワードが登場 ‣ 文章全体を見ることはなかった •まずはキーワード抽出でできないか? •機械学習を使わずに済むならそれに越したことはない ‣

    メンテナンスも楽だし可読性も高い !14
  15. キーワード抽出はうまくいかない •うまくいかない例 ‣ 「できあがり」があると非手順に • 例: 上に三つ葉を散らしたらできあがり ‣ アドバイスを手順としてしまう •

    ◦◦さんがマヨネーズを足して作ってくれました •正解率 (Accuracy) は51.7% ‣ アノテーターに作業依頼し小さい評価用データを作成 !15
  16. 機械学習を試す !16

  17. 機械学習を試してみる •まずはスコアを出すことを第一に考える •なるべく一般的な手法に頼る ‣ キーワードの組み合わせの特徴量で分類 • TF-IDFベクトル - 単語の出現頻度を重み付けしたもの •

    ロジスティック回帰 - データを2値分類する手法 !17 手順のテキスト データ TF-IDFベクトル化 ロジスティック回帰 真または偽で判断
  18. 機械学習で結果が出た! •まずまずのスコア ‣ 正解率 (Accuracy) 92% •機械学習でうまくいくタスク
 と判断できる !18

  19. サービス投入に向けて !19

  20. 実験だけでは意味がない •スコアはあくまで評価データ •データベースに投入 ‣ サービスから参照可能にする •実験ではない本番環境のコードへ ‣ ペアプロしながらバッチ化 !20

  21. 機械学習プロジェクトのサイクル !21 実験 コード整理 デプロイ

  22. 機械学習プロジェクトのサイクル !22 実験 コード整理 デプロイ

  23. ぐちゃぐちゃ実験コードを整理 •理解できるコードにする ‣ まずはJupyter Notebookをスクリプトにする •実験フローの構造化 ‣ 前処理,学習,参照のコードをそれぞれ関数やクラスに •Dockerで動かせるようにする •リファクタリング・テストの追加

    ‣ 最低限のテストは書く !23
  24. 機械学習プロジェクトのサイクル !24 実験 コード整理 デプロイ

  25. 機械学習プロジェクトのサイクル !25 実験 コード整理 デプロイ

  26. 効率化されたデプロイ •デプロイ先 ‣ クックパッドの共通コンテナ環境を利用 •機械学習エンジニア自身でデプロイまで ‣ 必要なファイルをPull Requestベースで追加するだけ •機械学習プロジェクトの共通化が進んでいる ‣

    認証,データ置き場,権限など •設定が必要になる項目をなるべく減らす !26
  27. 構成図 !27 ECR Jenkins GitHub S3 Redshift Hako (ECS)

  28. 構成図 !28 ECR Jenkins GitHub Hako (ECS) S3 Redshift Dockerfileを元に


    ビルド Jenkins: CIのための自動化ツール
  29. 構成図 !29 ECR Jenkins GitHub Hako (ECS) S3 Redshift ECRにプッシュ

    EC2 Container Registry
 Dockerコンテナイメージを保存し ているもの
  30. 構成図 !30 ECR Jenkins GitHub Hako (ECS) S3 Redshift ジョブ実行命令

    Kuroko2
 クックパッド製のジョブ
 スケジューラー・管理ツール
  31. 構成図 !31 ECR Jenkins GitHub Hako (ECS) S3 Redshift ECRから


    イメージ取得 Hako (ECS)
 コンテナのデプロイ・管理
 ツール
  32. 構成図 !32 ECR Jenkins GitHub Hako (ECS) S3 Redshift S3から


    モデル取得 Simple Storage Service
 拡張性と堅牢性に優れた
 ストレージサービス
  33. 構成図 !33 ECR Jenkins GitHub Hako (ECS) S3 Redshift 予測結果を


    S3に保存 Redshiftから
 予測用データ取得 Redshift
 大量データを扱える
 データウェアハウス
  34. 構成図 !34 ECR Jenkins GitHub Hako (ECS) S3 Redshift S3から


    データ取得
  35. 構成図 !35 ECR Jenkins GitHub Hako (ECS) S3 Redshift Redshiftに


    保存
  36. デプロイ後の改善 !36

  37. !37 もっと精度(※)
 よくなりませんか?

  38. !38 やってみます!

  39. ディープラーニングを元にした手法 •精度が必要なので
 ディープラーニングを使う •LSTMとMLPを使ったモデル •単語ベクトル ‣ 全手順で学習したword2vec •正解率95% !39 Word

    Embedding LSTM ! ! ! ! ! ! ! Dropout ! ! ! ! ! ! ! LeakyReLu モデルの構造
  40. !40 デプロイ大変
 じゃないの?

  41. 機械学習プロジェクトのサイクル !41 実験 コード整理 デプロイ

  42. 機械学習プロジェクトのサイクル !42 実験 コード整理 デプロイ 変える部分が少なくて済む

  43. モデルの改善 •先にコードを整理しておいた •変更部分が少なくて済む ‣ 前処理やデータ受け渡し部分は
 そのまま利用 •環境もそのまま利用可能 ‣ Dockerfileも使い回せる !43

  44. まとめ !44

  45. クックパッドの機械学習サイクル •機械学習エンジニアが最後まで面倒を見る ‣ 分析,実験,デプロイまで ‣ 必要ならばソフトウェアエンジニアと一緒に •改善するのが容易 ‣ きちんとサイクルを回しておくことは大事 ‣

    改善や別プロジェクトに使い回せる •実際にサービスで使われないと意味がない !45
  46. おまけ (学会発表) •EMNLP 2019のワークショップで発表 ‣ 自然言語処理のトップ
 カンファレンスのひとつ •学会発表も積極的に行う ‣ けれどサービスに出す方が大事

    •今後の予定 ‣ すでにAlexaスキルの裏側で利用されている !46
  47. 参考資料 !47

  48. 参考資料 •機械学習チームにおけるソフトウェアエンジニア〜役 割、キャリア /devsum-2018-summer ‣ https://speakerdeck.com/takahiko03/devsum-2018- summer !48

  49. !49 Step or Not: Discriminator for The Real Instructions in

    User-generated Recipes ▪ cookpad: Most viewed recipe sharing service in the world •Largest recipe sharing service in Japan •Users can upload and search original, user-generated recipes •Most viewed recipe sharing service in the world •Community platform for people to share 
 recipe ideas and cooking tips •Available in 68 countries 22 languages ▪ Step or Not: Automatic step validation •Recipe steps •Main part of recipes (besides title, ingredients) •Include text and/or photos •Used by authors for communication (fake steps) •Fake steps •Some of the “steps” are not actually part of the cooking process. •Advertisements of recipe (e.g., “introduced on TV”) •Comments (e.g., “Thanks for many messages”) •Advice (e.g. “Also good with rice” ) •Arrangements (e.g., “Using as pasta sauce is good” ) •Fake steps cause problems •Spoken by devices such as smart speakers •Recipe search indexing •Task setting •Distinguish between fake steps and the steps actually used for cooking Fake Steps 41% True Steps 59% Example of recipe steps Fake step Monthly users Recipes Japan 55.6 million 2.95 million Global 36.3 million 1.65 million This recipe became hot recipe on Oct. 9, 2010. Thank you for all who cookedˑ Put all seasonings and mix. Type of steps
  50. !50 The 4th Workshop on Noisy User-generated Text, Nov 1,

    2018, Brussels, Belgium (at EMNLP 2018) Method Accuracy Precision Recall Dict 51.2 52.2 53.3 XGB 84.8 87.4 79.5 RForest 89.3 86.1 92.3 LogReg 92.4 91.1 93.1 LSTM 95.1 94.6 95.0 AVG 93.3 93.1 92.9 ▪ LSTM with pre-trained word vectors ▪ Experiments • Data • Collected 20,000 distinct steps from cookpad • Manually annotated by human • Pos / Neg rate is balanced • Only using text information • Without position, timestamp, etc. • Methods • Dict: Manually selected clue words • Non-neural models (Input: TF-IDF vector) • LogReg: LogisticRegression • RForest: RandomForest • XGB: XGBoost • Neural models(Input: pre-trained skip-gram) • LSTM: LSTM • AVG: Average of word vectors •Distinguish between fake steps and the steps actually used for cooking Word Embedding LSTM # # # # # # # Dropout # # # # # # # LeakyReLu Sigmoid Model Architecture • Preprocessing • Split sentences into words • Input: “ௐຯྉΛશͯೖΕͯࠞͥ߹Θͤ·͢” • Ouput: “ௐຯྉ”, “Λ”, “શͯ”, “ೖΕ”, “ͯ”, “ࠞ ͥ߹Θ”, “ͤ”, “·͢” • Not apply normalization • e.g. “ೖΕ” → “ೖΕΔ” • Word Embedding • Skip-Gram Word2vec • Pre-trained with our whole recipe steps dataset (over 20 million steps) • (218408, 100) vector • Results and Discussion • Over 95% accuracy in neural models • Non-neural models are easy to deploy but insufficient for our service • LSTM-based model misclassifies • Steps that include special words such as “finished”, “completed”, etc. • Steps that are advice including cooking vocabularies • Future Work • Get higher score • Not only textual features • Deploy and apply in our services cookedˑ • False Positive • JP: “ίʔώʔʹೖΕͯɾɾɾ؁͓͍͍ͯ͘͠ ϛϧΫίʔώʔͷग़དྷ্Γ<unk>” • EN: “Put in Coffee. You will get sweet delicious milk coffee. That’s all.” • False Negative • JP: “'ˎΦʔϒϯͷ৔߹̎̏̌℃ʹ༧೤ͨ͠Φʔ ϒϯͰ̍̑෼͘Β͍ম͘ɻ'” • EN: “Bake for about 15 minutes in an oven preheated to 230℃.” Example of results