Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

課題の設定 3

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

調理手順 or Not ● 調理の手順そのものではないもの (非手順)がある ● 料理に関する手順のみを抜き出した い ↓ ● 非手順を識別するアルゴリズム を作った 5

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

機械学習を試す 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

92.4% Accuracy 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

まとめ 14

Slide 15

Slide 15 text

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