目次
■エンジニアの軌跡
2018.08.10 2024.03.28 約5分
さまざまな企業で働くエンジニアとリレー形式で対談を行うDevRelay。引き続き菊田遥平 (@yohei_kikuta) 氏にお話を伺います。後編では、菊田氏が考えるエンジニアにとってのコミュニケーションと「研究」と「サービス」のギャップをお伺いします。この対談は、2部構成(vol.23・vol.24)でお届けします。
idesaku:最近では「クックパッドにおける Deep Learning を用いた料理画像判別の取り組み」という論文を拝見しました。
yohei_kikuta:人工知能学会で発表したものですね。機械学習を何とかビジネスに取り込みたいという企業の参加も増えていて大変な盛況でした。
idesaku:論文発表には組織としての成果をコミュニティにアピールする意味合いもあるというお話しでしたが、菊田さんのブログや Twitter を拝見しても、いわゆる「リクルーティング」としての機能をとても自覚されているように感じます。
yohei_kikuta:私は、一般的なエンジニアと比較すると、人前に出て何かやるのが好きなほうだと思っています。それはクックパッドに入る際に自分からアピールした点のひとつですし、会社からもそうした動きを期待されています。現状、業務の1割以上は採用や広報に関連することをやっていますし、期待されているのであれば、自分が提供できるバリューのひとつとして、出し惜しみはしません。
あと、Twitter については、多少、自分自身のブランディングという側面もあるかもしれないです。エンジニアの間で「Twitter転職」とかって、流行ったじゃないですか。
idesaku:ありましたね。
yohei_kikuta:もし、この先に自分が転職を考えることがあったら、ああいう形で次の会社を決められるといいなと思っているところはあります。エージェント経由とかではなく。
idesaku:あー。エージェント業を営む当社としては、痛いご指摘です(笑)。
yohei_kikuta:いや、決してエージェントがダメだと言っているわけではなくて(笑)、特に「理論寄りの機械学習エンジニア」という私のような人間の場合、持っている専門性を正しく把握してもらって、求めている相手とつなげてもらうというのは難易度が高いと思うんですよ。
その点では、Twitter だけでなく、論文も、GitHub のリポジトリも、ブログも「こういうことをこのくらいのレベルでできる人なんだな」というのを、多面的に知ってもらうためのツールとも考えることができますよね。
idesaku:なるほど。だから分からない部分については、わりと正直に「分からない」と書いておられるのですね。
yohei_kikuta:そういう率直さとか謙虚さって、大事だと思うんですよ。…Twitter を見ていて時々思うのですが、なんで一部の人は、あんなにエラそうにものを言ったり、他人を批判したりするんですかね(笑)。
idesaku:なんででしょう(笑)。たしかに、ハンドル握ると性格が変わるドライバーみたいな人もたまにいますよね。
yohei_kikuta:Twitter にはそういう文化があるということを理解した上でも、私にはその感覚が理解できないんですよね。技術的な内容なら大げさにでも控えめにでもなく正しく発信すべきだし、それに、もっとみんな他人をほめればいいのにと思うんです。ちなみに、会社の Slack には「ほめる」専用チャンネルというのがあって、参加しているメンバーには大変好評です。
idesaku:そこでは何を「ほめる」んですか?
yohei_kikuta:いや、仕事をしていて心が疲れたときにこのチャンネルに書き込むと、みんなが無条件にほめてくれるだけなんですけれどね。「今日は月曜日なのに出社してるなんてエライ! 服を着ていてエライ! がんばってる!」とか(笑)。
idesaku:それは心が慰められそうです(笑)。でも、ここまでのお話でも、菊田さんは人同士のコミュニケーションにとても気を配られているように感じます。
yohei_kikuta:会社に入って、人と一緒に働く時に、コミュニケーションは本当に重要だと思うんですよ。いくら技術力があっても、自分以外の誰かからある種の役割を求められている会社にいる以上、コミュニケーションがうまくいかなければ、ツラいし成果にもつながらない。これは不幸ですよね。
必ずしも、人前に出るのが好きだとか、雑談で盛り上がれるといったことだけではなく、たとえば「プルリクに対してきちんとレビューを返せる」とか、そういった形でもいいと思うのですが、人の意図を理解し、自分の思いを伝えられるコミュニケーション能力がないと、会社での仕事はまわりませんね。
idesaku:「エンジニアだから」というのをコミュニケーションが下手なことの免罪符にしてはいけないと。
yohei_kikuta:そう思います。エンジニアに限らず、例えば研究者にも、人に伝えることが苦手で、学会発表がひどい人がいるんですよ。でも本人は「論文にちゃんと書いてあるし、別にこれで問題ない」と思っていたりする。
でも、どんなに技術的な内容であっても、コミュニティに属している以上はそれを他人が評価してくれなければ意味がないですよね。ファインマン(リチャード・P・ファインマン、ノーベル物理学賞受賞者)が素晴らしいのは研究もスゴイし伝えるのもうまいからです。彼と比べれば自分がいかに物事を理解していないかは痛感できるので、せめてコミュニケーションの部分には最大限注意を払って自分の意図を正しく伝えようと考えるべきだと思います(笑)。
idesaku:コミュニケーションが苦手と自覚しているなら、スキルとして「伝える方法」を身につけていくという心構えも必要かもしれないですね。
yohei_kikuta:それは、エンジニアも考えていくべきでしょう。
たとえば、勉強会での発表に限らず、社内でも人前で話す機会があれば、事前にちゃんと練習してから本番に臨むとか、そういうところから取り組み方を変えていく。同僚相手に練習をして、直すべきところがあれば互いに指摘し合えるような場もあると、さらにいいですね。そうやって、伝える能力を高め合う環境が広がれば、その人たちが関わっているコミュニティ全体の質も、さらに良くなっていくと思います。
idesaku:エンジニアは開発のときに、あれだけきちんと「レビュー」も「テスト」をするんですから、それは発表も同じなのだという意識を持てば、だいぶ変わるのではないかと思います。
yohei_kikuta:クックパッドでは「Cookpad TechConf」というイベントで、エンジニアやデザイナーが業務の中で得た技術的知見を広く発表するという取り組みをやっています。この場で発表するエンジニアは、中堅も若手も含めて、みんな事前にしっかり練習して本番に臨んでいますよ。
idesaku:菊田さんは、研究開発部のメンバーとして、新規事業に関連した研究や、「料理きろく」のような、すでにスタートしているサービスのバックエンドで動いているモデルの洗練などにも取り組んでいらっしゃるのですよね。最近だと料理写真を「カテゴリ」で分類するようなモデルの作成をやっていらっしゃったとか。
yohei_kikuta:ええ。これは、面白いのですけれど、大変難しくもあり、取り組みがいのあるテーマです。研究の段階と、実際のサービスに適用しようとする段階との間にある乖離が激しいんですよ。
idesaku:「乖離」とは具体的にどういうことでしょう。
yohei_kikuta:研究の段階では、再現性があることが大切なので、だれでも利用できる決まったデータセットでモデルを評価します。しかし、そこで使われていたモデルを「料理きろく」のような実サービスで集めたデータで動かそうとすると、まったく状況が変わってしまうんです。
たとえば「パスタ」の写真から、それが「ミートソース」なのか「ナポリタン」なのかといった種類を判別するようなモデルがあったとして、そこに「カレー」の画像が入ってくると、もう判別ができなくなりますよね。モデルは「パスタ」のことしか知らないので仕方ないのですが、「ミートソース?」くらいに自信なさげに間違えるならともかく、結構自信満々で「ミートソース!」とか断言してしまったりする。
それを解消するために、色んなカテゴリに対応できるよう、複数のモデルを用意しておけばいいかというと、そう簡単にもいきません。そもそも料理の「カテゴリ」って何なのかとか、例えば一般的なカテゴリに当てはまらないような変わった料理が現れた場合、それをどう扱えばいいのかといった課題が次から次へと出てきてしまう。
そのあたりをどうコントロールして判別するか、そもそもまったく知らないものがデータとして入ってきたら、モデルはどう振る舞うべきかといったことを考えなければいけなくなるんです。
idesaku:たしかに難しそうですね。
yohei_kikuta:取り組む前に考えていたよりもずっと難しくて、その解決のためにいろいろなアイデアが出てきたんですよ。あと、研究とサービスが乖離しているとはいっても、まったくの別物というわけではないので、ほかで考えられている研究段階のアイデアを持ってきて、使えないかどうか試してみるということもできるんです。そうしたアイデアを得るためにも論文を読むというのは役立ちますね。こうしたアイデアを探しながらの試行錯誤は、実務で機械学習に関わっている人にとって一番面白い部分だと思います。
idesaku:そうした試行錯誤の結果として、ノウハウが蓄積されるのですね。
yohei_kikuta:今、人工知能や機械学習が流行っていて、「サービスに AI を導入しました」みたいな発表をする企業も増えているじゃないですか。恐らく、ほかのところでも、今お話しした「研究」と「実サービス」の間にある乖離に悩まされて、それを今使えるアイデアでなんとか埋めていく方法を考えたはずなんですよね。
今、ちょっと不思議に感じているのは、そうした事例がなかなか表に出てこないことなんです。私は、ブログでその時にどんな問題が出てきたのかとか、それを解決するために、どんなアイデアを使ったのかといったことを書いたのですが、もっとそういう話が機械学習をやっている人たちからも出てきていいと思っているんですよね。
idesaku:大手だったりすると、その試行錯誤の過程を事例として共有しようという考えにならず、社内のノウハウとして完結させてしまっているケースも考えられますね。
yohei_kikuta:あと「大したことやっていないから、公開するほどでは…」と、せっかくのノウハウを過小評価している可能性もあるのではないかと思っています。機械学習をサービスに適用する場合には、多くの現場で共通して直面する課題だと思うので、業界のためにも、もっとフランクに情報交換ができるような雰囲気ができるといいのですが。
idesaku:そうなるといいですね。ちなみに、私も「料理きろく」をちょっと試してみたんですよ。(と、自分の iPad 上にある写真を見せる)
使ってみての印象として、料理写真を判別する精度はかなり高いと感じました。
yohei_kikuta:(写真を見ながら)こうやって、ユーザーがどんな写真をモデルに判別しているのかを直接見せていただけるのはありがたいですね。特に、どんなタイプの画像を集中的に間違っているかというのは大変参考になる情報なので。もう、自分の場合はモデル側の気持ちになってしまうので、料理写真を撮るときも「確実に料理と判別できるように撮るぞ」と身構えてしまうんですよ。
idesaku:本末転倒ですね(笑)。
yohei_kikuta:そうなんです。…あぁ、でも、結構間違っているのがありますね。こういうのは、実際に運用してみないと分からないんです。クックパッドには料理の画像は山ほどあるのですが、「料理ではない画像」はそれ以外のすべてなので、どうしても限界があるんですよ。
でも、誤判定された写真を見ながら「どうしてモデルは、この判定を間違えたのか」と考え始めると、最終的に「そもそも人間は、どうやって目に入ったものが料理か、料理でないかを認識しているのだろう」というところに行き着くんですよね。機械学習に関わっていると、そういうところも面白く感じます。
idesaku:奥の深い世界ですよね。ところで、現在も「料理きろく」の料理画像を分類するモデルはアップデートが続いているのですか。
yohei_kikuta:「料理きろく」のモデル自体は、現時点で頻繁にアップデートされているわけではいのですが、あれをほかのサービスにも横展開していく構想はあります。
例えば、クックパッドには「つくれぽ」という、掲載されたレシピをもとに料理を作ったことを、レシピ作者さんに写真とコメントで報告する機能があります。ここに、ごくまれにですが適切でない画像が投稿されてしまうことがあります。これまでは、そうしたものを人間が目で見てチェックしていたのですが、多くの時間がかかったり、そもそも投稿画像が多すぎて、すべてをチェックできなかったりといった問題がありました。
この部分に、料理画像判別モデルを適用して、あらかじめ疑わしい画像を絞り込んでおき、それを人間にわたすことで、チェックの効率を上げることに成功しています。
idesaku:2年近く実運用を続けていると、モデルの判別精度やパフォーマンスなどは、細かく手を入れなくても、ある程度落ち着いてくるものなのですかね。
yohei_kikuta:そのあたりについては、サービスやビジネスとのバランスでも考えます。判別精度を今より1%上げることにどれだけリソースを割くべきかとか、パフォーマンスであれば単ノードでの性能をさらに上げるよりも、最初からスケールアップを考えた設計にしておいて、必要に応じてリソース追加で対応できるようにしておいたほうがトータルでは良いのではないかといった感じですね。
idesaku:研究開発部のメンバーとして、今後やっていきたいことはありますか。
yohei_kikuta:研究開発部としての課題は、画像認識に限らず、機械学習を生かしたクックパッドのサービスを、もっとたくさん作っていきたいということに尽きます。客観的に見て、クックパッドはサービスへの機械学習の適用が比較的うまくいっている企業だと思うのですが、それでも周囲や会社には「もっともっとできるんじゃないか」と期待されていますし、私たちもそうしていくべきだと思っています。
その中では、先ほどお話ししたような「研究とサービスの乖離」に何度も直面すると思うのですが、いろいろなアイデアを出したり、チャレンジしたりしながらギャップを埋め、埋まったらその結果を公開しながら、次に進んで行くというサイクルを作っていきたいですね。
idesaku:それが研究開発にとって、重要なサイクルになるのですね。
yohei_kikuta:あと、私個人は、理論に強い一方で、エンジニアリングのスキルはまだまだ低いと自覚しています。CI についても、最近ちょっと触り始めたくらいの段階ですので、作ったモデルをサービス向けにデプロイするのも、結構大変な作業です。
一方で、研究開発部のエンジニアには、私より高いエンジニアリングスキルを持った人も多くいます。彼らと一緒に、機械学習に関する成果を、より迅速にサービスに投入するためには、どんなふうにプロジェクトを進めていけばいいのかといったことについても考えて議論しています。いろんなタイプのエンジニアが力を合わせて一緒にやれる楽しさがある、良い環境で仕事ができていると思いますよ。
idesaku:機械学習の環境をどう構築するかという観点だけで見れば、最近、TensorFlow を Kubernates 環境上で簡単に使えるようにした「Kubeflow」のようなものも出てきていますし、これからさらに、実装よりも理論やアイデアの部分に、より多くの時間を割けるようになるかもしれないですね。
yohei_kikuta:そういったコンセプトが受け入れられると、そのうち TensorFlow だけでなく、お手製のライブラリを使った機械学習環境も簡単に実装できるような仕組みに進化していくでしょうし、そうなると私としても大変ありがたいので、どんどん発展してほしいです(笑)。
idesaku:機械学習をサービスに生かすという観点で、さらに長期的に考えておられるようなビジョンはありますか。
yohei_kikuta:これは会社のビジョンともつながってくることなのですが、ユーザーの生活に関わるデータをもっとリッチに取得して、そこからユーザーにとってより良いサービスを作るためにはどうしたらいいかについては常に考えています。
現在のクックパッドが抱える課題として、掲載されているレシピをどれだけの人が「見た」かは分かっても、それを参考にしてどれだけの人が実際に「料理を作った」かは分からないんです。それは、ログがとれないからなのですが、たとえばスマートキッチンのような環境が普及すれば、そこから何らかの形でオフラインの状態にあるユーザーの情報を得て、その分析結果をユーザーの暮らしをより良くするようなサービス作りに生かせるのではないかといったことですね。
idesaku:セキュリティ面など、考えなければならない点が多そうですが、たしかにそれが実現すれば大きなブレークスルーになりそうですね。合わせて、採用面に関しても、特にアピールしたいことがあればお願いします。
yohei_kikuta:アピールですか。そうですね…。今までにお話ししてきたとおりなのですが、機械学習をどんどんサービスに載せて使ってみたいと強く思っていて、そのために必要な技術や知識は、全部身につけてやる! くらいの気概を持った方(笑)。そういう方がいらっしゃったら、ぜひクックパッドを訪ねていただきたいです。
idesaku:本日は、興味深いお話をたくさん聞かせていただきまして、ありがとうございました。最後に、リレーインタビューのバトンを次に受け取って下さる方をご紹介いただければと思います。
yohei_kikuta:風間正弘さんを紹介します。
私と同じく機械学習を専門にしている方なのですが、国際会議のワークショップに論文を通したりしながら、ビジネス的なプロジェクトの推進も主導でき、更にサーバサイドやアプリの開発もしたりして、まさに現代的な機械学習エンジニアという人材です。私とはまた違う観点でエンジニアリングの興味深い話が聞けると思います。
idesaku:ちなみに、どのような経緯で知り合われたのですか?
yohei_kikuta:海外カンファレンスの論文読み会です。その後も、プライベートな勉強会を継続的にやっている仲なのですが、まだ若いのに推薦システムを始めとする機械学習に関する幅広い知識を持ち合わせていて、一緒に議論するのが楽しい人なんですよ。
idesaku:お話を伺うのがとても楽しみになってきました。本日は長時間、本当にありがとうございました。
※本記事の内容は掲載当時の情報であり、現在の情報とは異なる可能性がございます。