読者です 読者をやめる 読者になる 読者になる

エンジニアHubPowered by エン転職

若手Webエンジニアのための情報メディア

機械学習の取り組みを次々と実装! クックパッドの“即戦力”新卒エンジニアが活躍できる背景とは

「若手エンジニア、どんな活躍してますか?」第5回は、日本最大の料理レシピサービスを運営するクックパッド編。発足から間もない研究開発部で、機械学習の開発基盤から実サービスへの組み入れまでを担当した新卒エンジニアが、入社後すぐに第一線で活躍できた背景を詳しく伺いました。

f:id:blog-media:20170324112633j:plain

若手エンジニアのための情報メディア「エンジニアHub」。連載「若手エンジニア、どんな活躍してますか?」第5回は、日本最大の料理レシピサービスを運営するクックパッド編です。

2016年7月に発足したクックパッドの研究開発部で、機械学習の開発基盤から実サービスへの組み入れまでを担当したのは、新卒入社1年目の染谷悠一郎(そめや・ゆういちろう)さんでした。メンター役である部長の原島純(はらしま・じゅん)さんは「プログラミングに関しては染谷さんの方が上」と率直に語ります。同社にとって初めての取り組みにどのように挑んだのか。入社後すぐに第一線で活躍できた背景とは。詳しく伺いました。

── まずは自己紹介をお願いします。

染谷 2016年4月に新卒入社した染谷悠一郎です。3カ月の新人研修期間を経て、同年7月より研究開発部に配属され、業務を行なっています。

f:id:blog-media:20170316191620j:plain

染谷悠一郎さん。2016年4月入社で、まもなく入社して丸1年を迎える。大学時代は、海外インターンも経験

原島 同じく研究開発部の原島純です。2013年にクックパッドへ入社し、サービス開発部を経て、2016年に研究開発部が新設されたタイミングから所属しています。最初はリサーチャーとして、現在はマネージャーとして働いています。

f:id:blog-media:20170316191622j:plain

原島純さん。同連載で前回登場していただいたサイボウズの前田洋邦さんとは、大学時代隣同士の研究室に在籍しており、お知り合いだとか

──ここで原島さん、クックパッドの「研究開発部」について教えていただけますか?

原島 中長期的に会社に貢献すること、0を1にすることが研究開発部の役割です。当面の仕事は機械学習にまつわることが主です。レシピに対する自然言語処理や、写真に写っているのが料理なのか否かの判定などの取り組みを進めています。他にも機械学習に限らず、例えば「正月料理の変遷」のような料理にまつわる文化の研究や、料理そのものの研究も手がけています。

──なるほど。では染谷さん、クックパッドに入ろうと思った理由を教えてください。

染谷 Webの仕事をしたかったからです。実は大学院の頃に隣の研究室の人がクックパッドに入社して活躍している話を聞いたりしていて、できることなら自分も入ってみたいと思っていました。

──入社時点では、どういう仕事を希望していたのですか?

染谷 開発基盤やサービスインフラを見ることができたら楽しいだろうと思っていました。研修が終わって配属された部署は、当時立ち上がったばかりの研究開発部で、意外に思いました。

原島 研究開発部では機械学習に取り組む予定でしたが、プロダクションへの統合をアーキテクチャを含めて見れる人がいないと物事が進みにくい。そこを加速させるため、私の前に部長を務めていた方が、研究開発部の開発基盤担当として染谷さんを呼んでくれました。

入社1年目で、機械学習の取り組みを次々と実装

──入社1年目の染谷さんが、即戦力と認識されていたのですね。染谷さんは研究開発部でどんな仕事をしているんですか?

染谷 大きく3つあります。1番目は、研究開発のための基盤作りです。例えば、機械学習のためにAWSのGPUインスタンスを使っているのですが、新しく立ち上げてセットアップするとき、手作業でやっていては時間がかかってしまう。そこを自動化する仕組みを作りました。

2番目は、画像認識のモデルを作る仕事。3番目は、学習に基づく画像認識をプロダクション(実サービス)に組み込むアーキテクチャを考えて実装する部分です。

──それは、全部お一人で?

染谷 アーキテクチャを作る部分はインフラの担当者と一緒にやりました。実装は自分でやっています。入社してから研修期間が3カ月あったのですが、その間に個人で機械学習やディープラーニングの勉強をしていました。それを活かしながら進めていきました。

f:id:blog-media:20170316191630j:plain

──研究開発の基盤整備ですが、まず必要なものは何でしょう?

染谷 計算機、データ、細かいツール群が必要になります。もちろん、研究開発基盤にもアプリケーション開発基盤の知見を反映できますが、それだけだと不足している部分があり、そこを補完するためにドキュメントを整えたりツールを作ったりしています。

今後は、知見の共有手法の改善も重要だと考えています。海外事業部にもマシンラーニング(機械学習)を手がけている人がいるなど、リソースが豊富な反面、実験やサーベイが重複するケースも出はじめているので、適切なツールを使って、知見の蓄積・共有をきちんとしていきたいですね。

もう一つ、データの整備が大事です。研究開発に有用なデータをAmazon S3にまとめて、どこに何があるのかを整理するようにしています。

機械学習のタスクの8割はデータを集めて、加工して、きれいにする、といった作業に費やされます。データの種類も、DBから取得したデータを使う場合もあれば、まだ整理されていない画像である場合もあります。こうした作業のためには、共通化できる部分を共通化して効率化できる抽象レイヤーがあれば助かるのですが、特にRDBに乗せていない画像などのデータについては未だ洗練されていない部分も多いです。そこも課題です。

原島 リサーチャーの立場からいうと、1番目に挙げてもらった環境構築の自動化はありがたかったですね。以前であれば、インフラエンジニアにお願いして1週間や2週間ほど待って、ようやく研究のための環境が手に入りました。今なら機械学習のフレームワークが使える状態のAWSインスタンスをすぐ作ることができます。とても助かっています。

複数のフレームワークに対応できることも重要です。Web開発フレームワークだと、複数のフレームワークを同時に使うことはあまりありません。ところが、ディープラーニングのフレームワークは、TensorFlowやChainerやCaffeとメジャーなものが複数あって、それを全部使いたい。どれでも使えることがありがたいんですね。

f:id:blog-media:20170316191634j:plain

染谷 ちまたのディープラーニングの応用による成果の前例を見ると、使われているフレームワークはどれか一つに偏ってなくて散らばってます。それぞれの前例と同じフレームワークを使った方が早く結果が出るので、複数のフレームワークを使えるようにしています。

──そうして整備した基盤の上で、画像認識のモデルを作っていったわけですね。

染谷 すでにプロダクションで動いています。ある写真が、料理の写真なのかそうでないのかを見分けるモデルです。サーベイ(調査)して、こういうモデルなら使えるかとデータを集め、トレーニング(学習)して、精度が出たと報告し、この精度が出るならユーザーの役に立てるという結論が出て、プロダクションに行こうと。

プロダクションに入れる部分が大変でした。クックパッドのユーザーからのアクセスを受けるわけですが、月間6,000万人以上にのぼります。日々の膨大なアクセスに対処するために工夫が必要でした。詳しい話は、2016年11月に外部の勉強会で発表しています。プロダクション環境では、GPUインスタンスを4〜5台を使っています。

──それだけのトラフィックに対応するアーキテクチャも設計したわけですね。

染谷 画像認識の処理は重いので、同期的なAPIとして直接叩くのは無理です。そこで非同期APIとして実装しました。アプリケーション側の実装が少し大変になりますが、そこはアプリケーション開発のチームが対応してくれました。

何もない段階から「役割」を見つけていく

──配属されて約8カ月でそれだけの仕事に関わったのは、激動だったのでは?

染谷 研究開発部ができた時期と入った時期がほぼ同時で、最初は何もない場所から始まりました。メンバーはそれぞれが何かを解決する役割を期待されており、具体的な取り組み方は個人の裁量に任されている部分が大きいと感じました。

──指示に従ってタスクを片付けていったわけではないのですね。

原島 自分がやりたいことが一番パフォーマンスが出ます。なので、まずやりたいことを見つけてもらうやり方です。

──何もない段階で、どんなことを考えましたか?

染谷 料理の画像認識をやるのかな、というところから考えました。1個のGPUインスタンスが用意されているけども、これをみんなで使うんだろうか。だとしたら、今はいいけど、そのうちなんとかしないといけないな──と考えていました。例えばGPUインスタンスの環境構築だけで2時間ぐらいかかってしまうので、立ち上げた時点で環境ができあがるAMI(Amazonマシンイメージ )に切り替えた方がいいだろうと。そこで画像認識のサーベイをしながら、並行して計算機環境の自動構築の仕組みを作ってきました。

──研究開発基盤の整理で、効率は上がりましたか?

原島 効率は間違いなく上がりました。例えばタスクの人数を増やしたとき、途中でジョインしたメンバーもすぐに元のメンバーと同じ課題に取り組めるようになりました。

f:id:blog-media:20170316191626j:plain

──改めて、染谷さんの現在のミッションはどうなっているんですか?

染谷 まず、全体の効率を高めるというところが真ん中にあります。コミュニケーション問題も守備範囲に入ってくるはずです。例えば海外にいるエンジニアとのコミュニケーションをどうするか。それに、人事との情報共有も大事だと思っています。現場ではこういう人が必要、という情報を採用にうまく反映できるようにする仕組みなどです。

機械学習は参入障壁が低くなった分、エンジニアリングが重要

──原島さんから見た染谷さんはどんな人ですか?

原島 頼れる存在だと思います。技術力が秀でているだけでなくて、自走力が高いところが凄いと思います。画像認識の仕組みをプロダクションに載せるところがゴールだとして、その道筋を自分で切り開いて実現できる人です。

f:id:blog-media:20170316191632j:plain

──染谷さんは、研修期間中に機械学習の勉強をしたと言ってましたよね。

染谷 大学院の専攻は別の分野でした。機械学習については入社前からぼちぼち勉強をしていたのですが、本格的に取り組んだのは入社してからです。

画像認識の分野は今は知見が急増していて、実装できると意外にスッと成果が出るようになっています。

原島 参入障壁は下がってますね。

染谷 だからこそ、全体のエンジニアリングに興味が移ってきたというか。

──学習して、画像認識モデルを作って、プロダクションに入れるまでのソフトウェアエンジニアリングはまだフロンティアということなんでしょうか?

原島 そうですね。機械学習の効率化全般がそうです。

海外インターンシップで「開発を楽しめた」ことが転機に

──染谷さんは、学生時代はどんな過ごし方を?

染谷 成果が目立つ学生というわけではなくて、普通の大学生でした。学部4年で研究室に入って、専攻がコンピュータサイエンスと決まって、そこで周囲の人の能力が際立って高く見えました。それに深いインサイト(洞察)を持っている人ばかり。このままだと、この業種で戦っていくのは厳しいと思いました。

そこで、修士1年と2年の間に1年休学して、奨学金付きインターンシップでヨーロッパに行きました。行った先はかなりニッチで、物理実験で使う加速器のような大型実験装置の制御ソフトウェアを作っている会社でした。Java言語で2万行ぐらいのアプリケーションにコミットしていました。メンターについてくれた人の仕事ぶりから学ぶことは大きかったですね。「設計はこうする」などソフトウェア開発者の仕事ぶりを学ぶことができました。「プログラミングを仕事としてこのあと数十年続けていける、仕事を楽しめる」という感触を得ることができました。

インターンシップに行った背景には、やはりソフトウェア業界で戦っていけるか不安があったので、強みとなるスキルを身につけたいという思惑がありました。それにキャリアの選択肢も広がるだろうと。もし、インターンの時期に自分が得意な部分や楽しめる部分が見いだせていなかったら、エンジニアにならなかったかもしれません。

f:id:blog-media:20170316191628j:plain

──インターンシップに行く前は、かなり追い詰められていたんですか?

染谷 深く悩んだというほどではないですが、もしインターンシップに通らなかったら、という不安はありましたね。

──インターンシップで得たものがあったから、クックパッドの研究開発部で最初から即戦力として仕事ができたんですね。

「言い続ける」こと、「自由にやってもらう」ことの大事さ

──ところで、研究開発部では皆さんどんなプログラミング言語を使っているんですか?

染谷 基本的には、個人ごとに自由に使っています。コンソールでPythonを書いている人もいれば、Jupyter Notebookの人もいます。Juliaの人もいます。

──原島さんにとっても研究開発部は新しい経験だったわけですよね。

原島 そうですね。メンターとして接するのも染谷さんが初めてでした。自分も新人時代には、それまでRubyを書いたことはなかったので一から勉強しました。

会社に入ってから「研究をやりたい」と言い続けて、3年ぐらい経ってからそういう場が増えてきました。例えば、大学との共同研究のためレシピデータを提供するなどの機会も生まれました。その意味では言い続けることは大事でした。

──染谷さんから見て、クックパッドはどういう会社ですか?

染谷 みんな、ものすごいスピードでたくさんの仕事をしていて、そこは予想以上でした。社外から見えている部分は全体のほんの数パーセントで、実務では泥臭い仕事もたくさんあることを知りました。

f:id:blog-media:20170316191624j:plain

──原島さん、メンターについてどういう考えですか?

原島 これは会社としての考え方ですが、本人に最大のパフォーマンスを出してもらうことが、会社のためにもなる。メンターとしても、一挙手一投足を縛るより、構えずに自由にやってもらった方がいいと思っています。

──そのような関係性への考え方があったからこそ、即戦力人材の活用もうまくいったということですね。本日は、ありがとうございました。

取材:星 暁雄/写真:赤司聡

連載バックナンバー

employment.en-japan.com