Interview/

Junki Ishikawa

自己紹介をお願いします
石河純輝です。高専を出て大学に編入し、大学院を経て2020年に機械学習エンジニアとして入社しました。大学院時代の研究では、グラフに関する表現学習という分野を中心に行っていました。

自分は機械学習の実社会への応用にとても興味があって、学生時代から多くの企業でインターンシップやアルバイトをしていました。就活では、多くの人が使っているtoCのサービスに関われるような企業のなかで、機械学習エンジニアという枠があるところに応募し、LINEも含め何社かの内定をいただきました。どこに入社するかは本当にギリギリまで迷いましたが、すべての会社で内定者アルバイトをさせていただいた上で、LINEを選びました。最も興味を持ったところはやはり、サービス規模の大きさとユーザーの多様さです。機械学習のようなデータを扱う分野に関わる者としては、様々な性別や世代、趣味趣向を持ったユーザーが広く多く利用しているLINEのデータに触れられることは、とても貴重な体験です。自分や身の回りの人間がよく使っているサービスがいくつもあるので、事業に貢献した実感を感じられそうだと思ったのも理由の一つです。

また、内定者アルバイトのときに、チームの雰囲気やメンターさんらの知識の深さ・能力の高さにすごく感銘を受けて、社会人のスタートとして成長するのに最も適していると思えたことも大きかったですね。
業務内容や具体的な流れを教えて下さい
私の所属するML1チームには、機械学習エンジニアの他に、プロジェクトマネジメントを行うPM、計算環境やABテストの運用を行うサーバーサイドエンジニアが在籍しています。事業に直接関わる業務は、PMを中心に事業部側と仕様を固め、機械学習エンジニアがプロダクトを開発して、サーバーサイドエンジニアとともに保守をして行くという感じです。

現在の業務は、スタンプショップのレコメンドシステムの改善を担当しています。LINEのスタンプショップなどで、無数にあるスタンプの中からユーザーの好みに合うスタンプを提案するシステムです。チームの方々と相談して、現在チームで進めている業務のうち締切がシビアでないようなものから選ばせて貰う形で割り振ってもらいました。選んだ理由としては、チーム内のプロジェクトの中でも、最大級のデータ量を扱っているプロジェクトで、せっかくだから大量のデータで苦しんでみたかったので(笑)。データもプロジェクトも規模が大きいので、現行のシステムに携わっている先輩エンジニアの方々にサポートをしてもらいながら、楽しさと難しさを感じながら業務を進めています。

具体的な開発内容を説明します。スタンプのレコメンドは、スタンプショップの他にトーク一覧の上部やホームタブなどで行われていて、これらは私たちのチームが毎日全ユーザーへ向けて推薦アイテムの予測を行い、上位十数件をサービス向けのテーブルへ出力しているものが参照されています。現在は、ナイーブベイズに基づいたアルゴリズムが稼働していますが、かなり前から動いているクラシックな手法なので、ディープラーニングなどを用いた近年提案されている推薦アルゴリズムを実装して、精度改善を図るのが自分の担当業務です。

他のファミリーサービスと違い、スタンプショップは全世界の全てユーザーに向けてレコメンドを行う必要があります。全ての有料スタンプがレコメンド候補なので、累計すると膨大な数です。そのような巨大なデータを扱いながら、ディープラーニングのような近年注目度の高い機械学習アルゴリズムへ適用するのは、とても難しいですが自分の成長が感じられ、他社ではなかなか経験できないことを学べていると日々実感しています。

直近では、ユーザーの購買ログや特徴量を切り出してきて、オフラインでアルゴリズムの性能比較を行っています。指標としてはRecallやNDCGの他に、レコメンドしているアイテムのユニーク数やエントロピーなども用います。推薦精度はもちろん大事なのですが、人気アイテムばかり推薦していたら人気ランキングと大差なくなってしまうので、多様なアイテムを推薦できることが求められるからですね。また、オフライン評価に関する推薦精度は、どうしても現行のレコメンドシステムが有利になってしまうという点もあるので、オフラインである程度うまく動きそうなモデルができ上がったら、本番環境へ向けてリリースを行い、A/Bテストで最終的な評価を行っていきます。

各個人の業務は、定例ミーティングなどでPMからの「こういう案件があるが、誰か担当してくれますか?」という話から発生することが多く、各々が自分のタスクの量を考えながら引き受けるという感じになっていて、自分から興味のあることに手を上げて参加することができます。例えば私は、チーム内では事業部へ提供する直接的な製品とは別に、チーム内で広く使える内製ライブラリのスクラム開発にも参加しています。ここは、自分にとって強い興味があった領域なので、マネージャーとの面談などで意思を伝えて、参加させてもらえるようになりました。機械学習では、どうしてもデータの整形や学習を行う際に長い時間がかかるので、隙間時間を見つけて開発を進めています。先輩エンジニアの皆さんも、優先度の差はあると思いますが、いくつかのタスクを並行して担当しています。
仕事を進める上で、意識していることはありますか
一つ目は、「自分に必要な物事を曖昧なまま進めずに、立ち止まって勉強する」こと。現在チームで中心的に扱っているのは、スタンプショップや各種ファミリーサービスにおけるレコメンドシステムですが、大学や大学院ではレコメンドシステムに触れることはあまり多くないと思います。チーム内の既存のコードなどを使えばそれなりに動かせてしまいますが、どう動いてるのかをちゃんと理解しないまま動かすのは怖いので、わからないところは立ち止まって学んだり、質問するように心がけています。

同様に、LINEでは巨大なデータを扱うためにHadoopやSpark、Kubernetesなどの計算基盤を使ってデータ処理を行っていますが、これも学生時代に扱ったことのある人は少ないと思います。これらのシステムがなるべくスムーズに扱えるようにチーム内でライブラリの整備などが進んでいますが、自分はそれを作る側に回れるようにコードリーディングをしたり、レビューに混ぜてもらったりして、本質的な理解が得られるように意識しています。

二つ目は、「やりたいことはちゃんと伝える」です。チームに入ったときから、マネージャーに「やりたいことは言って下さい」「わからないことは聞いて下さい」と言われています。特に自分たちがチームで初めて採用した新卒ということもあって、こちらからもちゃんとアクションや意思表示をすることを心がけています。実際に、やりたいと思ったことはちゃんと相談した上でやらせてくれる環境です。疑問点がある場合は、ある程度自分で考えた上で、それでも解決できなさそうならチーム全体のSlackチャンネルに投げています。

三つ目は、「適宜報告する」ことです。締切が厳しくないプロダクトを触らせて貰っているということもあり、一人で集中していろいろ試せるのですが、その分周りからは何やってるかわからない部分もあります。なので、適宜結果や進捗を報告してコードレビューなどを頼み、アドバイスを貰うようにしています。
おもしろいことや難しいことなど、働く中でこれまでに得た感触を教えて下さい
たくさんのデータに触れることはおもしろいです。しかしデータが多すぎて、多くの計算資源を使っても実験に時間がかかり、また機械学習のアルゴリズムはデータが多少変でも学習して動いてしまうので、正しくデータ処理ができているかを見極めることにとても難しさを感じています。業務で使う技術周りは、学生時代に触れたことがなかったものが多いので、基礎的かつ実践的な知識がついてきたと思います。また、チーム内のライブラリが良くできているので、そういったところから実装や設計思想から学べることも多いですね。配属前のエンジニア向けの研修では、Webエンジニアとしての素養も学べましたし、日々学ぶことが多いです。

自分の考える新卒に求められていることなのですが、事前に持っている知識ももちろん大事ですが、業務で使う知識は大学や大学院ではなかなか学ばないことが多い。だからこそ、新しいことを自主的に学んでいく姿勢が大事だと思います。特に機械学習の分野は多数の領域で毎日のように論文が出され、新たな知識が更新されていきます。これは自分にとっての大きな課題でもあるのですが、学校を出たばかりの新卒エンジニアには、自分の専門だった分野で最新の話題まで深い知識をつけてることが求められているのかなと思っています。
LINEに入社して良かったと感じることはなんですか
チームの雰囲気は気楽な感じで過ごしやすいですし、エンジニアの方々の技術力がとても高いので、毎日勉強になってます。先ほども言いましたが、機械学習エンジニアとして初めての新卒ということだったので、正直不安だった点もありましたが、チーム全体で支えてもらっている感じがあって助かっています。

機械学習エンジニアにも開発系のエンジニアにも、優秀な同期がたくさんいるので話していて楽しいですね。配属前の研修では、エンジニアは担当領域に関係なくチームを組んで開発演習をするので、特に機械学習を専門でやってきた人たちには新鮮で楽しいと思います。あと、今はコロナで基本的に在宅ですが、オフィスがきれいでカフェやマッサージルームなど充実しているので、たまに出社すると気分転換にもなります。
最後にメッセージを
機械学習エンジニアは流行りの職種ですが、その分数年以内に自動化されるだとかいう噂もあって、キャリアプランも練りづらいと思います。ただ、実際のところ、実務へ機械学習を応用しようとする場合にはさまざまな基盤技術を学ぶ必要があって、それは職種が変わっても活かされるものだと思っています。ですので、今機械学習の実応用に興味があるのなら、ぜひ飛び込んできてほしいですね。

LINEの機械学習チームには経験豊富なエンジニアや博士号持ちの方々、KaggleのGrand MasterやLINE初のエンジニア職のフェローまで在籍しているので、きっと楽しい機械学習エンジニアライフが送れます!ぜひ、一緒に働きましょう。