機械学習を使ってレシピの調理手順を識別する話です。
機械学習を使ったレシピ調理手順の識別C-8 #devsumiCクックパッド株式会社 研究開発部 エンジニア1
View Slide
クックパッド● 毎日の料理を楽しみにするサービス● 月間約5,500万人● レシピ数は290万品● 大量の画像・テキストデータ● ユーザがレシピを書いて投稿○ かなり自由な投稿が可能○ 気軽に投稿できる2
課題の設定3
調理手順● クックパッドのレシピ○ タイトル○ 材料・分量○ 調理手順■ 画像とテキストで入力できる4
調理手順 or Not● 調理の手順そのものではないもの(非手順)がある● 料理に関する手順のみを抜き出したい↓● 非手順を識別するアルゴリズムを作った5
ルールベースな方法を試す6
機械学習を使わずに解けないか● データを眺めて開発者が自ら解いてみる○ 非手順には出てくる単語が限られている○ 文章全体を見ることはなく特定のキーワードで判断していた● まずはキーワード抽出でできないかやってみる● 機械学習を使わずに済むならそれに越したことはない○ メンテナンスも楽だし可読性も高い7
キーワード抽出でやってみる● 非手順○ 人気レシピに多い○ 必ず調理手順の後ろの方に存在● 人気レシピの調理手順のうち後ろ10件を取得する● キーワードを抽出する○ 単語ごとに分割する○ 多く出現する順に並べる○ ['掲載', 'つくれぽ', '話題', '感謝', 'みなさん', '100人', 'レシピ', 'コメント', 'れぽ', 'ありがとう']8
キーワード抽出はうまくいかない● うまくいかない例○ 上に三つ葉を散らしたらできあがり→非手順と判定○ ○○さんがマヨネーズを足して作ってくれました→手順と判定● Accuracy(正解率)○ 51.7%9
機械学習を試す10
機械学習を試してみる● まずはスコアを出すことを第一に考える● 一般的な手法に頼る○ キーワードの組み合わせの出現の特徴量を使って分類■ TF-IDFベクトル● 単語の出現回数を重み付けしたもの■ ロジスティック回帰● データを2値分類する手法11
92.4%Accuracy12
実験だけでなくリリースまでやる● サービスから参照可能にするためにデータベースに投入○ 毎週ペアプロしながらバッチにしていった○ スコアを確認しつつリファクタリング● 実際にサービスへ投入予定○ スマートピーカーによるレシピの音声読み上げ○ レシピ検索のインデックスからの除外13
まとめ14
やるべきことをやるべき順でちゃんとやる● ディスカッション/ヒアリング しながら進めた○ 1人で黙々とやるものではない○ 課題設定も含めタスクの全行程で行った● 一般的な手法を使った○ 一般的な手法でちゃんとうまくいった○ ディープラーニングはうまくいかなかったときに使う● きちんと性能をチェックした○ 正解率だけを見ない○ 機械学習には性能をチェックする方法がいくつかある● ちゃんとバッチ化をした● 結果を記録に残していく15