Challenge研究開発部の菊田(@yohei_kikuta)です。機械学習を活用した新規サービスの研究開発(主として画像分析系)に取り組んでいます。最近読んだ論文で面白かったものを3つ挙げろと言われたら以下を挙げます。その第二回として機械学習を題材にしたハッカソンが七月末に開催されました。エンジニアにとって長期的に有益となる技術を題材にしようという想いがあります。今回はクックパッドの研究開発部が発足して一年経ち成長したというタイミングも重なることもあり、機械学習こそが時宜にかなったものであろうということでテーマが決まりました。隆盛を極めている機械学習をほぼ全てのエンジニアが経験するという有意義な会となりましたので、この記事ではその様子についてお伝えします。概要を簡単に紹介します。同様のイベントを開催しようと考えている方も少なくないと思いますので、参考になれば幸いです。目標は次のように設定しました。時間割は次のように設定しました。講義のコマでは私が講義をして、実習のコマではクックパッドのデータを使って機械学習を体験し、ハッカソンのコマでは各自が興味のあるトピックに取り組むという流れで進めました。機械学習に馴染みが薄い人も多かったので、系統的な講義や実習を多めにして実感を掴んでもらえるよう留意しました。講義と実習で具体的に何をやったかという内容を簡単に説明します。資料は後日近い内容のものをインターンでも使用してそちらを公開しますので、興味のある方は今しばらくお待ち下さい。クックパッドには非日本語話者も多いため、説明は日本語で実施しましたが、講義資料や実習資料などは全て英語で作成しました。全エンジニアが参加する大きなイベントなので、資料作成はかなり気合を入れて一ヶ月前から着手しました。資料の情報密度は相当高いものとなりましたが、参加者の能力を信じてやり切りました。結果的には、消化不良の部分も当然あったものの、非常に満足度の高いイベントとすることができました。Learning(画像分析)」の二本立てでした。機械学習とは何か機械学習とは何かという定義から始まり、機械学習を俯瞰できるように以下の内容を説明しました。機械学習界隈でよく出てくる言葉の意味や関係を説明し、頭の中を整理できるような構成になっています。自己学習ができるように機械学習を学ぶための書籍やウェブ上の有用な情報などもまとめて共有しました。なるための最短経路の話もしました。可視化の部分以外は体験してもらうことにしました。フォーカスして詳しく説明しました。内部では実際に何が行われいるかが理解できるような構成になっています。クックパッドでは画像分析(に限らずですが)の様々なタスクに取り組んでいるので、その適用事例に関しても共有しました。一時間半の講義でしたが、内容が凝縮されたかなり濃い講義になりました。進化に関しても少し言及しました。この後に各モデルの鍵となるアイデアとその意味を説明するスライドが続きます。時間的に一つ一つを丁寧に説明することは出来ませんでしたが、こうやって主要なモデルをいくつか並べてみるとどんなアイデアが鍵になって発展しているのかが分かり、興味深いですよね。実習は「レシピ分類(テキストデータ)」と「レシピ分類(画像データ)」の二本立てでした。使って分析をするという形にしました。使った分析もできるようになっています。ご飯もの、スイーツ)のレシピか否かを当てる二値分類モデルを作成しました。用いた特徴ベクトルの作成などが経験できるように準備をしました。不慣れだったり特徴ベクトルが具体的にどのような値になっているか不明瞭であったりで難しい点もありましたが、モデル構築の経験やモデルが正解する場合や間違える場合の具体的な例を見るなどして、実際のサービスで扱っている問題設定と同様のものを経験する機会となりました。いったモデルを動かしてみました。一通り経験した後には、オリジナルのモデルを構築してその精度を確かめてもらいました。パスタ、ラーメン)のレシピかを当てる多値分類モデルを作成しました。するというタスクに取り組んでもらいました。学習が困難だという実感が得られたのではないかと思います。それ以外にも、公開されている学習済みのモデルを使えば物体検出などもお手軽に試せるということも軽く紹介し、手元で動かせるようになってもらいました。学習は大変ですが、画像は見た目にも分かりやすいので楽しんで取り組んでもらえたように見受けられました。モデルが間違えた画像を調べることでそもそも答えのラベルが合っているのかを疑問視するという気付きを得られたことも、実際のサービスに適用する場合には重要なので良い経験になったと思います。学習の際の各種パラメタをどうやって決めればいいのかという疑問がたくさん出てきましたが、なかなか難しい話なので私も教えてもらいたいですね。切り、そこに達成した成果や困難だと感じた点などを記述していく方式で進めました。二時間半ほどの短い時間で新しいことに取り組むという難しい挑戦だったので、事前にトピックを考えてきてもらったり、取り組みやすそうな様々な問題を準備しておいて提示するといった工夫をしました。切られ、多くの参加者が楽しんで主体的に取り組んでくれました。ここではそのうちのいくつかを紹介したいと思います。マッチするか否かを解いてみたという話です。限られた時間でデータの準備から結果の検証までを行ったお手本のようなトピックでした。して適用することで精度が上がることも実験していて、パラメタ数と精度の関係やモデルの中でどうやって認識しているのかなどの議論が発生する興味深いものとなりました。ベースとしてクックパッドアプリの料理きろくでも使っている料理/非料理判定モデルをモバイルで動かしてみようという話です。共に料理/非料理判定モデルを動かすところまで実装ができ、みんなの興味を惹きました。機械学習を経験してこなかったモバイルエンジニアも、実習で一通り触ってからタスクに取り組むことで業務に利用していける感覚を掴めたという好例でした。通知を出すという話です。あったため、そちらを使用しています。多くの要素が絡む総合格闘技的なトピックでしたが、スピーディーに実装してみんなが確認できるものが出来上がったので、どうすれば人数カウントの精度が上がるかという議論も含めて盛り上がっていました。使ってカレーのレシピを生成してみようという話です。使ってカレーのレシピを生成するモデルを学習し、実際にレシピを生成して出力するというところまでやり切っていました。生成系は難しいためみんなの笑いを誘うような出力(例えば材料に玉ねぎが三回も出てくる)もありましたが、カレーという特定のカテゴリに絞ったことで材料や手順がある程度理解ができるものであったのは興味深いものでした。業務と結びつきの深いトピックを考えてみるプロの作ったレシピとそれ以外を判別する、広告CTRを予測するモデルを構築する、料理教室のレッスンの説明文から特徴ベクトルを作って比較をする、サービス上の重複画像を排除する、アクセスログデータからの攻撃検出、など実際のサービスを意識したにしたトピックも数多く挙げられました。問題設計やデータセットの構築に時間を要するためすぐに結果を出すというのは難しいものがほとんどでしたが、実際のサービスに活かせそうな部分を考えてみる良いきっかけとなったかと思います。証明を理解しようという話です。硬派なトピックであり、個人的にはこれを選んだ人がいてテンションが上がりました。全部は紹介できませんが、その他にも、データセット構築する、新しいライブラリを試してみる、マインスイーパーを解かせる、アニメの速報テロップやL字を判定する、など面白いトピックが盛り沢山でした。貢献をする人もいました。これらの成果は美味しい食事を楽しみながら発表をして、歓声や質問が飛び交うとても楽しい時間になりました。ロゴのライスケーキで、実現が難しいオーダーにも関わらず料理人の方に素敵に仕上げてもらいました。概ね上手くいきましたが、以下の点が反省点として挙げられます。帯域を圧迫してしまった。馴染みのない人向けの基本的な説明があるとよかった。長時間椅子に座って講義を聞いたり実習をしたりするのは大変。みんな楽しみすぎて、ブログに載せるための良い写真があまり撮れていなかった。まとめ社内のエンジニアには機械学習に馴染みのない人も少なくありませんでしたが、最高の講義だった、機械学習の系統的な理解が得られて良かった、実際に触ってみることでサービスへの活用方法などがイメージできた、など好評を博しました。企画側としては限られた時間でのハッカソンが盛り上がるかを特に懸念していましたが、優秀なエンジニアが多いため面白い取り組みをして結果を出すところまで到達する人も多く、実に楽しく有意義なものとなりました。機械学習は広く深い分野なので一日のイベントでできることには限りがありますが、これを契機に個々人が自発的に機械学習に取り組むようになってくれれば嬉しい限りです。いかがでしたでしょうか。クックパッドでは、機械学習を用いて新たなサービスを創り出していける方を募集しています。興味のある方はぜひ話を聞きに遊びに来て下さい。R&Dにおけるサービス開発者の仕事こんにちは。コメルコテックバナシ〜新規事業開発のリ...こんにちは。技術インターンシップ」を開催しましたいつもお世話になっております。エンジニア統括マネージャーの...2017-05-10最近のサービス間のデータとイベントの連携についてこんにちは。