肉料理か否か)にしています。肉料理か魚料理か...)にすると、各カテゴリに対する分類が独立でなくなって、結果を改善するのが難しくなるためです。学習を行うには、そのための訓練データが必要です。肉料理の分類器を構築するには、肉料理のレシピ(正例)と肉料理でないレシピ(負例)が必要です。訓練データを用意する方法はいくつかありますが、コストがかかるのが悩みのタネです。訓練データは正しくないといけません。そのため、これを用意するには、どうしても人手が必要です。そこで、クックパッドでは、レシピカテゴリを利用して、訓練データを用意しています。他薦によって、各カテゴリのレシピが蓄積されています(下図)。肉料理の訓練データを用意する場合、「お肉のおかず」というカテゴリを正例として、その他のカテゴリを負例として利用しています。人手を介したデータを利用することで、訓練データを用意する手間を大きく削減しています。テストデータを用意する分類精度をチェックするには、テストデータが必要です。精度をチェックする仕組みがないと、デグレが起こった時に気付けません。これをサボるとひどい目に遭います(遭いました)。テストデータは必ず用意しておくべきです。クックパッドでは、分類器を更新する際、テストデータにおける精度をチェックしています。精度が閾値を下回った場合、分類器を更新しないようにしています。することで、デグレが起こっても、本番環境に反映されないようにしています。開発データを用意する分類器を構築した後、その精度を改善するには、チューニングが必要です。精度が分かれば、その値に基づいて、分類器をチューニングできそうです。テストデータがあれば、精度が分かります。テストデータを用いてチューニングしてはいけません。テストデータにおける精度が良くなるだけで、その他のデータにおける精度が良くなっているとは限りません。そこで、テストデータとは別に、開発データも用意しています。開発データを用いてエラーを分析し、分類器をチューニングすることで、分類器が汎用的になるように気をつけています。改善フェーズさて、モデルを決定して、データも用意しました。実装した分類器の精度は、大抵悲惨なものです。分類器を改善する必要があります。以下では、分類器を改善する際に気をつけたことを紹介します。素性を修正する最初に思いつくのが、この方法ではないでしょうか。必要な素性を追加したり、不要な素性を削除すれば、精度が良くなりそうです。本タスクでは、素性を修正することはほとんどありません。言うのは、以下で紹介する方法の方が簡単で、効果が高かったからです。訓練データを修正する本タスクで一番効果が高かったのは、訓練データを修正する方法です。正確には、「訓練データに利用するレシピを変更する」です。訓練データにはレシピカテゴリを利用しています。利用するカテゴリを変更すれば、分類器の振る舞いも変更できます。素性を修正するには、少なからずコードを変更する必要があります。素性を追加する場合(レシピから新しい素性を抽出する場合)は、そのためのコードを追加で実装しなければいけません。我々の場合、訓練データを修正するだけであれば、ほとんどコードを変更する必要がありません。利用するカテゴリを変更するだけで、実装的には定数を変えるだけです。クックパッドでは、訓練データを修正することで、分類器を改善することが多いです。ルールで直すここから先は力技です。困ったことに、素性を修正しても、訓練データを修正しても、分類誤りを直せないことがあります。このような場合、汎用的なルールが作れれば、そのルールで対応しています。サラダの分類器を構築する時、タイトルが「サラダ」で終わるレシピはサラダとみなしても良さそうということが分かりました。このような場合、機械学習に拘らず、ルールを優先して分類を行うようにしています。手で直す素性を修正しても、訓練データを修正しても、直りません。汎用的なルールも作れません。それでいて、ユーザさんからお問い合わせがあるなど、何が何でも直さないといけない時があります。こんな時は、手で直しています。いう事態を想定して、スタッフが結果を修正するための社内ツールを用意しておくと良いです。ここでも機械学習には拘りません。ちなみに、手で直したデータは、後で訓練データとして利用できます。地道な手作業も、積もり積もれば、分類器を賢くしていくのです。まとめ本エントリでは、レシピの自動分類の裏側を紹介しました。着実な方法で実装する(実績のあるモデルを使う、地道にデータを用意する)手軽な方法で改善する(素性でなく、訓練データを修正する)最後は機械学習に拘らない(ルールで直す、手で直す)といったところでしょうか。ネットを漁っても、プロダクトに機械学習を導入した時の知見はそれほど多くないようです。本エントリが、私と同じく、機械学習に悩める方の一助となれば幸いです。検索編成部では検索エンジニアを、研究開発チームではレシピ翻訳エンジニアと画像解析エンジニアを募集しています。ご興味がある方は、是非ご応募ください。17:00機械学習によるレシピの自動分類、その裏側Tweet関連記事2018-04-06ディープラーニングによるホットドッグ検出器のレシピ研究開発部の画像解析担当のレシェックです。〜クックパッドにおける研究開発のサービ...こんにちは!人事部の冨永です。Te...2017-03-03クックパッドにおける最近の機械学習についてこんにちは、研究開発部の山田(@y_am_a_da)です。去る2月16...2016-08-01アプリのアップデートに依存せずにアプリの画面を改善し続ける仕組み検索事業部の日高(@kaa)です。使ったセキュリティログ検索基盤の構築サービス特性にあった検索システムの設計戦略クックパッド採用説明会「クックパッドはサービスの作り手を採用したいんです。/*}*/スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。