Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

開発室Graph

May 25, 2019
Tweet

More Decks by 開発室Graph

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    !3

    View Slide

  4. 今日する話
    !4

    View Slide

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

    View Slide

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

    View Slide

  7. 課題の設定
    !7

    View Slide

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

    できる

    !8

    View Slide

  9. 調理手順ではないものがある
    •手順そのものではない

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

    アルゴリズムを作った
    !9

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. キーワード抽出はうまくいかない
    •うまくいかない例
    ‣ 「できあがり」があると非手順に
    • 例: 上に三つ葉を散らしたらできあがり
    ‣ アドバイスを手順としてしまう
    • ○○さんがマヨネーズを足して作ってくれました
    •正解率 (Accuracy) は51.7%
    ‣ アノテーターに作業依頼し小さい評価用データを作成
    !15

    View Slide

  16. 機械学習を試す
    !16

    View Slide

  17. 機械学習を試してみる
    •まずはスコアを出すことを第一に考える
    •なるべく一般的な手法に頼る
    ‣ キーワードの組み合わせの特徴量で分類
    • TF-IDFベクトル
    - 単語の出現頻度を重み付けしたもの
    • ロジスティック回帰
    - データを2値分類する手法
    !17
    手順のテキスト
    データ
    TF-IDFベクトル化
    ロジスティック回帰
    真または偽で判断

    View Slide

  18. 機械学習で結果が出た!
    •まずまずのスコア
    ‣ 正解率 (Accuracy) 92%
    •機械学習でうまくいくタスク

    と判断できる
    !18

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. 効率化されたデプロイ
    •デプロイ先
    ‣ クックパッドの共通コンテナ環境を利用
    •機械学習エンジニア自身でデプロイまで
    ‣ 必要なファイルをPull Requestベースで追加するだけ
    •機械学習プロジェクトの共通化が進んでいる
    ‣ 認証,データ置き場,権限など
    •設定が必要になる項目をなるべく減らす
    !26

    View Slide

  27. 構成図
    !27
    ECR
    Jenkins
    GitHub
    S3 Redshift
    Hako (ECS)

    View Slide

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

    ビルド
    Jenkins: CIのための自動化ツール

    View Slide

  29. 構成図
    !29
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    ECRにプッシュ
    EC2 Container Registry

    Dockerコンテナイメージを保存し
    ているもの

    View Slide

  30. 構成図
    !30
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    ジョブ実行命令
    Kuroko2

    クックパッド製のジョブ

    スケジューラー・管理ツール

    View Slide

  31. 構成図
    !31
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    ECRから

    イメージ取得
    Hako (ECS)

    コンテナのデプロイ・管理

    ツール

    View Slide

  32. 構成図
    !32
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    S3から

    モデル取得
    Simple Storage Service

    拡張性と堅牢性に優れた

    ストレージサービス

    View Slide

  33. 構成図
    !33
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    予測結果を

    S3に保存
    Redshiftから

    予測用データ取得
    Redshift

    大量データを扱える

    データウェアハウス

    View Slide

  34. 構成図
    !34
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    S3から

    データ取得

    View Slide

  35. 構成図
    !35
    ECR
    Jenkins
    GitHub
    Hako (ECS)
    S3 Redshift
    Redshiftに

    保存

    View Slide

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

    View Slide

  37. !37
    もっと精度(※)

    よくなりませんか?

    View Slide

  38. !38
    やってみます!

    View Slide

  39. ディープラーニングを元にした手法
    •精度が必要なので

    ディープラーニングを使う
    •LSTMとMLPを使ったモデル
    •単語ベクトル
    ‣ 全手順で学習したword2vec
    •正解率95%
    !39
    Word Embedding
    LSTM
    ! ! ! ! ! ! !
    Dropout
    ! ! ! ! ! ! !
    LeakyReLu
    モデルの構造

    View Slide

  40. !40
    デプロイ大変

    じゃないの?

    View Slide

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

    View Slide

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

    View Slide

  43. モデルの改善
    •先にコードを整理しておいた
    •変更部分が少なくて済む
    ‣ 前処理やデータ受け渡し部分は

    そのまま利用
    •環境もそのまま利用可能
    ‣ Dockerfileも使い回せる
    !43

    View Slide

  44. まとめ
    !44

    View Slide

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

    View Slide

  46. おまけ (学会発表)
    •EMNLP 2019のワークショップで発表
    ‣ 自然言語処理のトップ

    カンファレンスのひとつ
    •学会発表も積極的に行う
    ‣ けれどサービスに出す方が大事
    •今後の予定
    ‣ すでにAlexaスキルの裏側で利用されている
    !46

    View Slide

  47. 参考資料
    !47

    View Slide

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

    View Slide

  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

    View Slide

  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: “ίʔώʔʹೖΕͯɾɾɾ؁͓͍͍ͯ͘͠
    ϛϧΫίʔώʔͷग़དྷ্Γ”
    • 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

    View Slide