ママのQ&Aサイト「ママリ」。ここでは全国の悩めるママたちの投稿が日夜飛び交っているという。質問の回答数は90%を超え、しかも投稿から回答がつくまでの平均時間は約5分。このようなアクティブなコミュニティが作られている背景には、AI/機械学習があるという。
今回はAI未経験からコネヒト株式会社に転職し、機械学習エンジニアとしてQ&Aアプリ「ママリ」を支えている野澤哲照さんに、ママリにおけるAI/機械学習の活用方法と、エンジニアのキャリアについてお話を伺った。
最初はRuby、その後Pythonに。機械学習エンジニアのキャリア
ーーお久しぶりです。最初に野澤さんとお会いしたのは弊社のKaggleイベントでしたよね。その時はまだ転職活動中だったかと思います。まず、これまでのキャリアについて教えていただけますか?
新卒で入社したSIerに5年くらい在籍していまして、その時はERPパッケージ(業務改善システム)の導入をメインでやっていました。業務の半分はお客様のもとへ行って要件定義を行い、もう半分でシステム開発を行うような仕事でした。その時はPythonとかではなく、「Smalltalk」という、多くの人からすると馴染みの薄い言語を使っていました。
ーーなかなか珍しい言語を使っていたんですね。
はい、そのような状況で働いているうちに「これからのキャリアをどうしようか」ということを考え始めました。モダンな技術を身につけて、もう少しキャリアの選択肢を広げておきたいなと思っていましたね。
Rubyに取り組み始めたのもその頃です。当時、「自分が普段使っているサービスって、どんな言語が使われているのだろう」と思い調べてみると、Rubyを採用している企業が多かったので、「じゃあそこからやってみるか」と思い、まずはネットで検索してたどり着いたRuby on Railsのチュートリアルに取り組みました。
そうしているうちにだんだんと勝手がわかりはじめ、 次第に何かオリジナルのサービスを作りたいと思うようになり、その過程で機械学習に出会いました。
当時は「家具のレコメンドサービス」にチャレンジしようと思っていました。家具って同じような見た目でも高いのものあれば安いものだってあるじゃないですか。対象の家具をスマホで写真に撮って、その画像に写っている家具と似ている商品をECサイトから拾ってきて買えるようになったら面白いなと思っていて。その設計をしているときに、「どうやって写真に写っている物体を検知すれば良いんだろうか」ということで調べていくうちにたどり着いたのが「機械学習」でした。
今でこそ「機械学習」という言葉を耳にする機会は多いと思うのですが、当時馴染みのなかった自分にとってはとても興味深く、次第にのめり込んでいました。気づいた時にはRubyではなくひたすらPythonを書いていましたね(笑)
ーー野澤さんはKaggleにも挑戦されていますよね。どのようなきっかけではじめましたか?
機械学習を勉強し始めてすぐの頃、情報収集を目的にTwitterを始めました。そのとき機械学習やPythonに関する情報を発信している人たちをフォローしていったんですけど、彼らがずっと「Kaggle」のことを話していて。そこで「Kaggleってなんだろう?」と興味を持って、自分も取り組んでみようと思いました。
最初に参加したのはスマホゲームのデータを使用したコンペで、ユーザーの行動からゲーム内の最終的な順位を予測するというものでした。このコンペを選んだ理由としては、ある程度身近に存在するデータを使用していたからです。動画や書籍で学習してはいたものの、データをどのように分析するのが正解かも分からない中で、そもそものデータのイメージすら沸かない、となると結構しんどいかなと思っていました。実際にそのゲームで遊んだことはなかったのですが、コンペを機に遊び始めて、なんとなくデータのイメージが沸いたというのも参加理由の1つです。
ーーKaggleに取り組み始めて、詰まったことはありませんか?
そうですね、、、躓きの連続だったと思います。(笑)
特に躓いたのはバリデーションの切り方ですね。困ったというか、その時はどう切れば良いのかの具体例が少なくて…。クロスバリデーション?やった方が良いのそれ?…という状態でした。
今ではKaggle専用の記事や書籍なども増えてきているので、このようなことで悩むことは少なくなってきてるかなと思います。
ですが、たくさん躓いた分Kaggleから得られた知見はとても多いです。
最先端の情報がキャッチアップできるのはもちろん、世界中の人たちがコードを公開してくれたり、解法をシェアしてくれたりするので、そこから学べることは無限にあると思っています。
Kaggleのデータを「アウトプット」として活用。面接で分析結果をシェア
ーー野澤さんはKaggleをやりながら同時に転職活動をされていたと伺っております。この二つを両立するのは大変でしたか?
そうですね、先ほどのスマホゲームのコンペ中に転職活動を行っていました。もともと業務で機械学習やデータ分析をやっていたわけではないので、転職活動はあまりスムーズにはいきませんでしたね。というのも、募集要項を見ると経験○年必須とか、実際に面接まで進んでも、専門的な質問に対して上手く答えられず、思うような結果がでなかったり・・・。
初学者って「勉強しています!」と言うことはできても、それだけじゃやっぱり採用には結びつかなくて。そこで自分のできること/できないことを証明するためにも、アウトプットが大切だと改めて実感しましたね。
弊社の面接ではスキルチェックの一環として、実際に参加したコンペのコードを土台にDiscussionしました。その時自分がKaggleに公開していた分析〜モデリングまでのコード(notebook)を見せながら、「ここはこういう意図があります」だったり「このような分析した結果から、この特徴量を追加しました」…みたいなことを議論しました。
ーーアウトプットというとどうしてもアプリを作るだとか、機械学習のモデルを作るだとかがまず思いつきますが、そういう方法もあるんですね。
コネヒトでは機械学習エンジニアとして活躍。
ーーママリでは機械学習をどのように活用されているのでしょうか?
ママリは全国の悩めるママたちが日常の悩みを投稿し、それに他の先輩ママたちが回答するというQ&Aコミュニティです。月間150万もの投稿があり、中には荒らし目的などの不適切な投稿もあります。そこで不適切な投稿を検知できるように機械学習を活用し、コミュニティを健全な状態に保つといったことをしています。
また、最近サービスへ導入したものだと、投稿時の「カテゴリ類推」も機械学習で行っています。ママリではカテゴリごとに質問を表示しているため、質問内容とカテゴリの整合性はコミュニティ運営上、大事な要素になります。これまでは、質問を投稿するときはユーザー自身が「妊娠・出産」「子育て・グッズ」「お金・保険」などのカテゴリを選んでいました。それを機械学習を用いて、文章中の表現からカテゴリを類推しサジェストしてあげる、というものを実装しています。正確なカテゴリを類推することで、「ユーザー自身がカテゴリを選ぶ」というアクションが減り、質問を投稿するまでの流れをスムーズにするという狙いや、質問が適切なカテゴリに分類されることで、回答をつきやすくするという狙いがあります。
ーー野澤さんご自身で、次に実施しようと考えているアイデアは何ですか?
さらに回答率を向上させる取り組みをしたいと思っています。現在、ママリはユーザー数の増加に伴い投稿される質問も増加しているため、回答がつき辛い質問も増えはじめています。たとえば、その地域ならではの悩みなど、同じ地域に住んでいないと回答し辛い質問もあります。そういった質問に回答がつきにくいのは、単純に投稿数が増えただけではなく、質問の内容も多種多様になってきている中で、然るべき質問が然るべきユーザーの目に触れていないからなのではないか、という仮説を持っています。それらを機械学習を用いて、然るべきユーザーに然るべき質問をマッチングさせることで、もれなく悩みを解決できるような、そんな仕組みを作っていきたいです。
ーー実務の中で機械学習に携わることの面白さとは何ですか?
前提として、一般的な機械学習プロジェクトのワークフローは下記のようなものだと思っています。
この中で、例えばKaggleなどの分析コンペで主に携わる部分は下記の領域だと思います。
一方、実務で携わっている部分はこの図の全体にあたるため、この差分が「実務ならでは」の面白さだと思っています。
例えばレコメンドエンジンを例に挙げると、モデルによって推薦されたアイテムに対して、ユーザーがどんなリアクションをしているのかを測定・分析することで、そこから新たな知見を得ることができます。その知見をもとにモデルを更新し、A/Bテストを行いながらより良いものに改良し続ける、という部分にはとてもやりがいを感じます。
不正検知などのタスクはKaggleなどのコンペでも取り組むことができると思いますが、上記のようなレコメンデーションのタスクは実際の業務でしか体験できないんじゃないかなと思います。
また、モデルを安定して動かすための機械学習基盤作りや、MLOpsに取り組めるのも実務ならではの面白さだと思います。
ーー野澤さんは入社後も積極的に対外的な活動をされていらっしゃいますよね。それは会社としての方針があるのですか?
そうですね、コネヒトの開発部は外部発信を是とする文化が根付いています。その一環として「ス・マイル制度」という制度があります。これは「メンバー一人ひとりが開発部にマイルとして貯まり、誰でもそのマイルをインプットに使える」という制度です。
弊社は「人の生活になくてはならないものをつくる」をミッションに掲げているのですが、開発部としても「技術コミュニティになくてはならない開発組織になる」というのを目指しています。わたしたち地震が多くのOSSの恩恵を受けたり、他社の事例を参考にしたりすることでママリを成長させてきました。弊社からもしっかりと外部に情報を還元することで、技術コミュニティや他社に恩返しをしていきたいよね、ということでこの「ス・マイル制度」が始まりました。
仕組みとしては、まず、イベント登壇、OSSコントリビュート、執筆などのアウトプットを行います。すると開発部にマイルが貯まります。そうして貯まったマイルを、今度は誰かがインプットするときに使えるんです。インプットの例としては、海外カンファレンスに参加する際の費用や、有料講座への参加などが挙げられます。
個人としての対外的な発信はしていきたいと思っていた中で、このような制度もあり、積極的に活動することを心がけています。
目指すはユーザーファーストな体験設計
ーー今後、ママリで成し遂げたい目標は何ですか?
ママリはサービス提供を開始して6年目になります。過去の蓄積されたデータを見ると、ユーザーが悩みを投稿するときの平均文字数が400文字を超えているのがわかりました。これはあくまで平均なのでこれよりももっと多く書く方もいらっしゃいます。ママリは匿名のアプリだからこそ、本音の悩みというか、真剣な悩みが多く投稿されています。他のSNSにはない、熱い悩みが多いので、それを生かして感情分析などを行い、ユーザーがどんな人物なのかを知ることで、例えば、ユーザーの抱える悩みを軸としてユーザー同士のマッチングをするなど、ママリがもっと良い場所になっていくようにサポートしていきたいですね。
そして最終的には、ママリを開くだけでママたちが今悩んでいることが全部解決できるようなサービスを目指していきたいです。悩みって人それぞれですし、そんなに簡単に解決できるものじゃなくて。ママたちにただ解決策を提示してあげるんじゃなくて、一人ひとりの悩みに寄り添っていけるような、そんなサービスを目指していきたいです。
そうすることでママたち自身に余裕が生まれて、それが結果的にママリのブランドミッションである「ママの一歩を支える」に繋がるんだと思っています。
ーーそういった意味では、究極のレコメンドですね。ありがとうございます。では最後に、これから機械学習エンジニアになりたいと思っている読者の方に向けて、何かアドバイスをいただけますか?
まずは必要最低限のスキルを学び、課題に取り組んでみることをおすすめします。
機械学習は基礎から徹底的に学ぼうとすると時間がかかってしまったり、数学が苦手な人は理論的な部分で躓いてしまったりなど、面白さに気づかないまま挫折してしまう可能性もあると思っていて、とても勿体ないと感じます。
例えば、私はずっと野球をやっていたんですけど、野球ってざっくり言うとボールの捕り方・投げ方・バットの振り方が分かっていれば試合に出ることはできます(活躍はできないかもしれませんが)。
試合に出て初めて「野球って楽しいな!」「あれ、でもうまく捕球できないな」とか「速い球は打ち辛いな」などを感じて、守備練習や素振りなどの重要性・必要性みたいなものが分かってきます。
打席にも立たず、野球の楽しさを実感したことがない状態で、素振りの練習だけするのは効果的ではないですし、楽しくもありません。
自分の中では機械学習も同じ考えで、まずはpandasやscikit-learnといった、試合に臨める最低限の部分だけ習得し、データ分析コンペだったり、自分で課題設定した問題に取り組んでみるのが良いと思います。そこで「面白いな!」とか「ここ上手くできないな」などが見てくるはずです。
あとは学習→実践→学習→・・・を繰り返すことで自分に足りないものや、こうすれば良かったなっていう勘所だったりが段々と分かってくると思います。
上記のような学習にプラスして、その過程で身に付いたことや気付きだったりをアウトプットしておくことで、自身への知識定着にもなりますし、いざ「転身しよう」と思ったときに自分の武器としても活躍してくれると思います。
ゼロイチの極意。0から目指すAI/機械学習エンジニア
AI市場が拡大していく一方で、AI人材は不足している。
急激に拡大する市場に対して人材の側が対応しきれないくらい、AI市場は爆発的な拡大をしつつある。
だからこそ、今、本当に求められているのは、何もない状況から「1」を作り出せる人たちなのかもしれない。