$30 off During Our Annual Pro Sale. View Details »

機械学習を使ったレシピ調理手順の識別

 機械学習を使ったレシピ調理手順の識別

機械学習を使ってレシピの調理手順を識別する話です。

開発室Graph

July 27, 2018
Tweet

More Decks by 開発室Graph

Other Decks in Technology

Transcript

  1. 機械学習を使った
    レシピ調理手順の識別
    C-8 #devsumiC
    クックパッド株式会社 研究開発部 エンジニア
    1

    View Slide

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

    View Slide

  3. 課題の設定
    3

    View Slide

  4. 調理手順
    ● クックパッドのレシピ
    ○ タイトル
    ○ 材料・分量
    ○ 調理手順
    ■ 画像とテキストで入力
    できる
    4

    View Slide

  5. 調理手順 or Not
    ● 調理の手順そのものではないもの
    (非手順)がある
    ● 料理に関する手順のみを抜き出した


    ● 非手順を識別するアルゴリズム
    を作った
    5

    View Slide

  6. ルールベースな方法を試す
    6

    View Slide

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

    View Slide

  8. キーワード抽出でやってみる
    ● 非手順
    ○ 人気レシピに多い
    ○ 必ず調理手順の後ろの方に存在
    ● 人気レシピの調理手順のうち後ろ10件
    を取得する
    ● キーワードを抽出する
    ○ 単語ごとに分割する
    ○ 多く出現する順に並べる
    ○ ['掲載', 'つくれぽ', '話題', '感謝', 'み
    なさん', '100人', 'レシピ', 'コメント', '
    れぽ', 'ありがとう']
    8

    View Slide

  9. キーワード抽出はうまくいかない
    ● うまくいかない例
    ○ 上に三つ葉を散らしたらできあがり→非手順と判定
    ○ ○○さんがマヨネーズを足して作ってくれました→手順と判定
    ● Accuracy(正解率)
    ○ 51.7%
    9

    View Slide

  10. 機械学習を試す
    10

    View Slide

  11. 機械学習を試してみる
    ● まずはスコアを出すことを第一に考える
    ● 一般的な手法に頼る
    ○ キーワードの組み合わせの出現の特徴量を使って分類
    ■ TF-IDFベクトル
    ● 単語の出現回数を重み付けしたもの
    ■ ロジスティック回帰
    ● データを2値分類する手法
    11

    View Slide

  12. 92.4%
    Accuracy
    12

    View Slide

  13. 実験だけでなくリリースまでやる
    ● サービスから参照可能にするためにデータベースに投入
    ○ 毎週ペアプロしながらバッチにしていった
    ○ スコアを確認しつつリファクタリング
    ● 実際にサービスへ投入予定
    ○ スマートピーカーによるレシピの音声読み上げ
    ○ レシピ検索のインデックスからの除外
    13

    View Slide

  14. まとめ
    14

    View Slide

  15. やるべきことをやるべき順でちゃんとやる
    ● ディスカッション/ヒアリング しながら進めた
    ○ 1人で黙々とやるものではない
    ○ 課題設定も含めタスクの全行程で行った
    ● 一般的な手法を使った
    ○ 一般的な手法でちゃんとうまくいった
    ○ ディープラーニングはうまくいかなかったときに使う
    ● きちんと性能をチェックした
    ○ 正解率だけを見ない
    ○ 機械学習には性能をチェックする方法がいくつかある
    ● ちゃんとバッチ化をした
    ● 結果を記録に残していく
    15

    View Slide