LINEの機械学習エンジニアの仕事ってどうですか?

境美樹氏(以下、境):では、パネルディスカッションです。今日は「LINEの機械学習エンジニアの仕事ってどうですか?」ということで、そういう話をしていきたいと思います。

まず私から軽く自己紹介しますが、Machine Learning Planningチームのマネージャーをしています。下のほうにプロフィールが書いてあるので「あ、こんな人だけどプロマネやるんだ」と思っていただければいいと思います。写真は日光白根山の山頂です。では次に朱さん、お願いします。

朱捍華氏(以下、朱):みなさん、こんにちは。Machine Learning室 Solution2チームの朱捍華と申します。2020年に新卒として入社しました。自分は主にLINE公式アカウントのリコメンデーションシステムの開発を担当しています。現在は、LINE公式アカウント全体の友だち追加数を上げるために、さまざまなところでリコメンデーションの追加をしたり、既存ロジックの改善などを行なったりしています。よろしくお願いします。

:よろしくお願いします。では次は石河さんです。

石河純輝氏(以下、石河):Machine Learning Developmentチームの石河です。よろしくお願いします。2020年に新卒入社して、現在2年目です。担当している業務は、スタンプショップでのスタンプのレコメンドだったり、Machine Learning室全体で使っている内製ライブラリの開発などをやっています。最近は、MLOpsの共通基盤の設計や実装なども担当しています。今日はよろしくお願いします。

:お願いします。次は曽さんです。

曽弘博氏(以下、曽):みなさんこんばんは。私、曽弘博と申しまして、Machine Learning Solution1チームに所属しています。前職はメーカーの研究所だったのですが、2年前にLINEに入って今に至ります。現在は広告向けの属性推定や、出前館向けの機械学習システム諸々を担当しています。よろしくお願いします。

:最後は我らがフェロー並川さん、よろしくお願いします。

並川淳氏(以下、並川):こんにちは、並川といいます。LINEのMachine Learning領域の技術フェローというポジションで、全社的な機械学習の案件全般を担当しています。

経歴としては、昔研究所にいた頃に、ニューラルネットワークや機械学習の研究を始めて、そこで7年ぐらい研究して過ごした後に民間に出て、民間企業で2年ぐらい機械学習の仕事をやって、それからLINEに移って、こういった感じの仕事をしています。

LINEに来て7年ぐらいですね。なのでけっこう昔からこの手の業界で仕事をしていて、ちょうど僕はニューラルネットワークの第2次冬の時代をギリギリ経験している、そういう世代です。本日はよろしくお願いします。

:AIはそうですね、栄枯盛衰というか、波がありますよね。

では聞いてみたいことがあれば、ぜひ質問してみてください。最後に少し取り上げられたらなと思います。

機械学習エンジニアはどんなふうに仕事しているの?【曽さんの場合】

まずは1つ目のお題です。1つ目は「機械学習エンジニアはどんなふうに仕事しているの?」ということで、具体的な仕事の進め方を聞きたいと思っています。仕事のアサインは、わりとPMだったり各チームのマネージャーだったりが、締め切りや本人の希望、外的要因を多少考慮しながら決めていますが、実際に決まった後、どんな仕事の仕方をしているかを、まずは曽さんにうかがってみたいと思います。

:どういうサービスの案件をやるかによりますが、だいたいどの案件も、まずはデータの理解から始まることがけっこう多いかなと思います。

先ほど、LINEのデータ基盤の規模を菊地さんが話したと思いますが、あれだけ大量のデータがあって、テーブルがあって、カラムがあって、という状態なので、まずどのテーブルにどういうカラムがあるのか、どういう情報が入っているのかというのをデータサイエンティストや事業部の方とやりとりしたり、自分でクエリを打って中身見たり。あと場合によっては自分でサービスのアプリを使ってみて、自分のアプリ上の行動ログがどのようなデータになるかを理解することが、私にとっては最初の一歩かなと思います。

私は、前職がBtoBの会社だったので、こうやって自分でアプリを使ってそのログが手元のデータに流れてきて反映されるのが、新鮮でおもしろかったですね。

そこからは、たぶんみなさんが想像しているとおり、さっき見たデータを使って、特徴量作って実験して、オフラインで評価して、企画の方とやり取りして、ABテストして、最後にうまくいけばOKと。

今、まるで一直線に進むような話をしましたが、実際はそんなきれいにいくとは必ずしも限らなくて、前に戻ったりすることは、当然発生します。場合によっては、データが壊れて直すこともあります。ざっくりお話しすると、こんな感じかなと思います。

:ちょっと泥臭い感じで、曽さんが一生懸命壊れたデータを直しているのを拝見したことがあります(笑)。

:細かいことが気になっちゃうのですが、そういったことは担当の方によって、またどこに重点を置くのかによって違うかなとは思いますね。

並川:曽さんは、今データを調べるところから始まって、いろいろなプロセスがありましたが、それぞれどれぐらい仕事で時間を使っていますか。割合といいますか。

:その前のステップをやっているときに同時に次のステップもやっていたりもするので、合計どれくらいなのかは難しいですけど、個人的には最初のこのデータ理解が一番時間かかっているかなあと思います。

もちろん、自分がすでに担当したことあるサービスだったら時間がかからないんですが、やはり初めてのサービスとなると、独学もけっこうあったり、そうじゃないとことろはいろいろな人の話を聞いたり、自分でクエリ打って「これ説明とちょっと合っているところもあるし、なんか違うところもあるけどどうなんだろう?」みたいなコミュニケーションもあったりするので、時間としてはそこが大きいかなと思います。

機械学習エンジニアはどんなふうに仕事しているの?【朱さんの場合】

:ありがとうございます。では次は朱さんに聞いてみようかと思います。

:曽さんと同じく、まずはどのデータが使えるかを把握する必要があります。そこは主にSparkなどを使います。あとはオフラインでモデルの精度を確認しますが、うちのチームではモデルの構築やチューニングは主に社内ライブラリを使って行うので、開発は基本的にスムーズにできると思います。

もし社内ライブラリに実装されていないモデルを使いたい場合は、自分で実装することもできるので、社内ライブラリに縛られることはないかなと思います。

あとは個人的な感じですが、うちのチームの締め切りはそんなに厳しくないかなと思っています。締め切りは開発の進捗に合わせてある程度調整ができると思います。自分も何回か、境さんや吉永さんに締め切りの調整をお願いしたことがあるので、緊急の案件でなければ、そこは調整してくれるかなと思っています。

:そういえば先週「来週までだった、締め切り」っていって急がせたりして申し訳なかったです。朱さんは仕事の中でけっこうABテストたくさんやっているなと思っていて。そのちょっとつらい話もしてもらえるとうれしいです。

:そうですね。先ほどフェローから頂いた質問でもありましたが、私はLINE公式アカウントを担当していて、なんかそこで初めてモデルを出しましたが、それに対して今年何回もABテストをしていて、なかなか自分の2020年実装した軸には勝てないという状況に出会っていて。そこはむしろ、データを毎回ABテストしても効果があまりよくない時は、そこのデータは何回もちゃんと見ないといけないことを実感していて。そこはやはりデータを持っているよりは、むしろ時間を費やしたほうがいいかなということを最近ますます感じていました。

:分析も一緒にしたりして、わりと楽しいのですが、なかなか正解にたどり着かないので(笑)、またがんばりたいと思います、というちょっと雑談的な話でした(笑)。

私は見た!この同僚がすごい!【石河さんの場合】

じゃあ次に、「私は見た!この同僚がすごい!」というお題で、今度は石河さんからにしましょう。

石河:改めて、Machine Learning Developmentチームの石河です。 Machine Learning Developmentチームにはすごい人はいっぱいいるのですが、やはりふだんから「すごいな」って感じているのは、自分の上長でもあって、先ほどMachine Learning Developmentチームの紹介をしていたウィットさんかなと思いますね。

自分たちのこのチームは、Machine Learning室全体で使用するライブラリや、あとチーム外のユーザーを見据えたMLプラットフォームの開発をしているので、MLの知識はもちろん、どうやって大きなデータを扱うかや、あとどうやって安定してシステムを動かすかなど、そういったエンジニアリングの知識や技術がすごく求められるチームなんです。

その中でウィットさんは、エンジニア兼マネージャーというポジションで、いろいろなプロジェクトを引っ張ってくれています。たぶんチーム内のほぼ全部のプロジェクトに、マネージャーとしてもですが、エンジニアとして関わられているのかなと思いますね。

確か、もともとアメリカの某大手IT企業だったり、国内の某メーカーで働いていた方なので、すごく幅広い分野というか、さまざまな領域で経験を積まれているので、自分が投げる技術的な相談だったり、プロジェクトの進め方だったり、いつもいろいろ相談させてもらっていて、すごい素早く的確な核心を突くようなアドバイスを返してくれるので、いつも助けられています。はい(笑)。

:話していて恥ずかしくなった(笑)?

並川:何か最近で、具体的にすごかったなって思ったようなエピソードありますか。

石河:今チームで作っているgheeという分散学習ライブラリは、G・H・E・Eでgueeって、アジアのバター的な調味料の名前を冠したライブラリでして、名付け親はウィットさんです。

「なんでですか」と聞いたら、「すごく打ちやすいから」って言っていて(笑)。なるほどそういうとこまで考えて作るんだって。ちょっとネタみたいになっちゃって申し訳ないですが、最近感動したところです(笑)。

:ウィットさんには私もよく助けられていて。お仕事お願いすると、気がついたら終わっていることが多くて(笑)。ウィットさんだけじゃないのですが、みなさんすごいなっていつも思っています。次に曽さんのほうからも、ちょっと聞いてみたいなと思います。

私は見た!この同僚がすごい!【曽さんの場合】

:難しい質問ですね。だいたいみなさん何かしらすごいので、誰を紹介するか迷いますね。石河さんに倣ってマネージャー紹介しましょうか。

Machine Learning Solution1チームでは、先ほど発表した久保さんですかね。本人が聞いているので、若干恥ずかしいのですが。基本的に全方位できているなぁというところで尊敬しています。

Machine Learningエンジニアとしてもちろん、機械学習のモデルの実装をしているのですが、それだけじゃなくて、例えばオンラインで時間制限がシビアな状況で予測をするために、データの流れどうしましょうというときに、うまくシステムを設計したり。

加えて技術以外でも、企画の方とやりとりしている時、例えば自分でサービス使い込んでいって、どういうふうな面でMLのアルゴリズムの結果をどう出していけばサービスに貢献できるか、かなり細かく考えて提案されているところがすごいなと思っています。

:どうもありがとうございます。

:他の方についてもいろいろと語りたいんですが、ちょっと時間がないのでこのぐらいにさせてもらいます。

:久保さんも非常によくサービスを見て、それでどうしたらいいかっていうの考えながらリコメンド作っていたりしているので、「ああ」っていつも思って。ご本人いらっしゃる前で言うと恥ずかしいのですが、非常に尊敬しています、私は。

これからチャレンジしようとしていること【朱さんの場合】

時間もあれなので、そろそろ最後の話題です。MLエンジニアとしてだったり、Machine Learning室としてだったり、これからチャレンジしようとしていることを、ちょっと聞いてみたいかなと思っています。まず朱さんに少し聞いてみたいと思います。

:自分がチャレンジしたいことですか。そうですね、最近は強化学習を業務中に応用することを試していて、ご存じの方もいると思うんですけれども、海外の企業ではリコメンデーションシステムに強化学習を利用する事例がたくさん出てきています。

自分は大学院での研究テーマが強化学習なので、それを業務中に利用したくて、最近担当しているLINE公式アカウントのタスクを使って、試しています。

PMとマネージャーからも支持していただいたので、これからがんばっていきたいかなと思っています。

:確かウィットさんのスライドの最後のほうにも新しい技術にチャレンジして試していくといった話が出ていたと思いますが、そういうところも個人発でどんどん試せるのがいいところかなと思います。

もちろん、(ABテストなどで既存のモデルに)勝てないとリリースできないので、既存のもののと比べて悪くなる時はちょっと引っ込めることもありますが、よければどんどん新しくしていくような取り組みをするのは、すごくいいなと思っています。

これからチャレンジしようとしていること【ML室の場合】

では最後、ちょっとここはMachine Learning室としてどうするのかを並川さんに語っていただきたいなと思っています。

並川:僕自身はいろいろなものに興味あるタチなので、チャレンジしたいことがいっぱいありすぎて悩むのですが。やはりMachine Learningエンジニアとして楽しいところは、高度な機械学習のモデルなどを作る部分ではあるんですけど、それはただモデルがあるだけじゃ動かないから、ちゃんとサービスに適用するまでのパイプラインとかもきちんと設計して、という部分がたぶんチャレンジングなところだと思います。

そういう意味では、チャレンジする対象の1つとして、僕らも開発に関わっている、CRSと僕らが呼んでいる全社横断の推薦システムがあります。現在、ここの推薦モデルのリプレースを検討しています。これは十分チャレンジする対象になり得るのかなと思っています。

このCRSがどういうものかっていうと、今だとデイリーで20億件以上のリクエストを捌く、オンラインで動く推薦システムなのですが、ここの最適化は Contextual Banditで動いています。

この Contextual Bandit は、先ほど朱さんの話にもあった強化学習の、すごい古典的なバージョンだったりするわけですよね。そこは現在かなりシンプルなモデルで動いていまして、大量のリクエスト捌くためにシンプルにする意思決定をしたのですが、設計した当時に比べて、今は僕らの技術力も上がっていたり、研究も進んでいたりするので、例えば朱さんが言っているような、より高度な強化学習のアルゴリズムを適用するのも1つのテーマです。

あとは、今はわりとシンプルな Neural Factorization Machinesみたいなモデルで動いていますが、並列計算できるようなプラットフォームとかライブラリもチームで作ってきたので、もうちょっとディープなモデルも動かせるようになってきました。なので、より複雑なモデルを使って精度を上げたりするところにも取り組みたいと思っています。

あとは今日の話になかったところでいうと、MLOpsですかね。僕らってすごいたくさんのデータを使えるようになったのですが、そうするとデータが壊れてたり、サービス側がUXを変えてユーザーの行動パターン変わっちゃったからデータの分布も変わったみたいなデータのドリフトなどが、毎日のように起こるわけで。

そのへんを自動化してきちんと検出しないとモデルの精度を維持できないです。僕らってサービス運用もやっているので、そういった安定したMachine Learningのシステムを精度担保するためにっていう部分も改善していきたいなって思っています。

:そこのところで石河さん的に「これ試したい」とかあります? 「僕、これジョインしたい」みたいなの。

石河;「ジョインしたい」というか、もうすでにジョインしていますが、そのMLOpsの企画が最近すごくホットですね。そこでけっこうエンジニアとしては中心的に動かせてもらっているので。今はML室内の利用を中心に開発していますが、最終的には全社的にいろいろ使えるような、汎用的なシステムを作れたらなとは思っています。そういうところにチャレンジしていきたいですね。

:みなさんありがとうございました。すごくいろいろお話をうかがえたので、みなさんの意気込みが聞けたり、各マネージャーのすごいところが聞けたりして、私的には楽しかったです。

三木鉄平(以下、三木):みなさん、楽しいトークをありがとうございました。実際に機械学習エンジニアがどういう働き方をしているかが、見ていただいているみなさんにも活き活きと伝わったんじゃないでしょうか。

ちょっと時間が押しているんですが、駆け足で次のQ&Aにいきたいと思います。

成果評価はどういう点を重視されるのか

まず1問目。「モデルの作成など狙いどおりに行かない部分も多いかと思いますが、成果評価はどういう点を重視されるのでしょうか」。こちら、どなたかお答えいただけますか。

菊地:室長の私から簡単にお話ししますね。Machine Learningをやっている以上、パフォーマンスで評価されてしまうというところ、あるいは会社の業績にどう貢献するかっていうのはどうしても重要になってしまうので、そういう意味では成果の評価において、パフォーマンスは重視しています。

ただ、今日お話ししたとおり、いろいろなチームが存在していて、よりエンジニアリングレイヤーで開発や成果を測ることもあります。あとは先ほどパネリストのみなさんが話していて、なんとなく伝わっているといいのですが、大勢の人がいて、試験もたくさんあるので、みんなで協力して成果が出るようにうまく後ろ支えしてあげるようなチームワークはあると思っています。これで回答になっているといいんですが、みんなで成果を出せるようにというところは非常に大事にしています。

並川:補足すると、ピンポイントでモデルの作成というところにフォーカスして言うと、当然サービス適応した後で、例えばCTRが上がったり、売上が上がったり、ユーザーが喜んでくれたなど、そういうところを見ています。

そこのリフトがものすごく小さくて、かつ、運用コストがメチャクチャ大きいみたいな時は、やはり実装の複雑さとかメンテナンスコストみたいなところも評価基準には入ってくるので、最終的には複合的な、長期的に運用をしていけるかも評価には入ってきます。基本的には、Machine Learningのモデルとしての精度が第一にあると思ってくれていいと思います。

その評価指標自体は、広告だったらRIGやcalibrationという定番のものがありますし、ユーザーのクラス分類だったらLogLossで見たりなど、MLのタスクによって個別の評価指標は違うので、そこは問題に合わせてやっています。レコメンデーションだったらnDCGとかですね。

三木:ありがとうございます。では2問目にまいります。

大量のデータでクエリを実行する際に課題はあるのか

「データの理解に時間が必要とのことでしたが、大量にデータがあるとデータを眺めるためにクエリを実行する際に、結果が返ってくるまでの時間が長い/費用が課題でクエリのジョブを気軽に実行できない、などの課題はありますか。データの期間やカラムを絞るなどの工夫はされていますか」。こちらどなたかお答え可能でしょうか。

:こちらの質問ですが、まず費用という点は基本的には気になっていないです。なぜかというと、データ基盤は、基本的に社内で全部内製化されているものなので、「外部サービスを利用するのでクエリを打つとお金がかかる」という状況ではないからです。

時間がかかるということに関しては、例えば「過去5年分全部のインプレッション見たいです」などとなると、さすがに時間がかなりかかったり、計算機に負荷がかかって悪影響が出たりするかもしれません。ただ、例えば「1日分のインプレッションを集計したいです」や、あとは「データの、このカラムにどういう情報入っているかだけを見たい」などでしたら、数秒ぐらいで見れるような基盤ができていますね。

具体的にはPrestoをクエリエンジンに使って、Webブラウザからクエリ入れて実行して、結果を見るというツールが内製化されています。ですので、基本的には時間や費用などを気にしてクエリが気軽に打てないことは、私はないと感じています。

ただ、期間を絞ることはします。LINEが始まってから全部のデータとか見ることはできないので、昨日1日であったり、1週間で見たりとか、ある程度期間を絞ってやるのはみなさんされるかと思います。

時系列異常検知への機械学習に応用されたプロダクトはあるか

三木:では3問目。「時系列異常検知への機械学習に応用されたプロダクトなどはありますか」。こちらについてはどなたかお答え可能でしょうか。

並川:これは僕が担当したところでいうと、菊地さんが紹介されたスマートチャンネルというシステムの裏側で、データサイエンティストの方が時系列異常検知のアルゴリズムなどを実装されて、ライブラリも使われてやっていました。実際それでシステムの異常などを検知して、事故を防げたことも何度かありました。

逆に異常検知を入れた当時、開発がものすごい活発な時期でして、毎週のように新機能が追加されるので、新機能の追加によってアラートが上がることもありました。なので、なかなかカッコいいアルゴリズムを入れても難しいんだな、と思ったことはあります。

:これからの話だと、MLOpsの文脈で先ほどデータのドリフトがどうとかの話をしていたと思います。あと成果を継続的に見ていくようなところで、異常検知のアルゴリズムをこれから検討しようといった話は、取り組みとしてあります。

チーム間の交流はどのぐらいあるか

三木:では、続いての質問。「先ほどのマネージャーの方々の説明で、チームがしっかり分かれている印象を受けたのですが、チーム間の交流はどのぐらいあるのでしょうか。移動があるのか、情報交換はどのぐらい行われているのか教えていただきたいです」。

:Machine Learning Planningチームは基本すべてのチームと交流します。お願いして回る側なので。

タティヤーヌパンウォン・ウィット(以下、ウィット):そうですね。Machine Learning Developmentチームもみんな使っているライブラリ以外を作っているので、要望や問題起きた時のトラブルシュートや、パフォーマンスチューニングなどは一様にやっていますね。

三木:ちなみにチーム間で移動とかあったりするんですか。

:これは室長の菊地さんが答えるのがいいと思いますが、すべてのチームがもともとまるっと1つの組織だったんですよね。それが分かれたのがけっこう最近なので、まだ異動という事例はないと思っています。

菊地:1つのチームでやっていたんですが、なんとなくぼんやりしちゃうところがやっぱり出てきたので、もう少し「このへんをがんばってやる人たちの集まり」というグループを作ったほうが、全体的に効率が上がるかな、というフェーズに入って、今ではチームに分かれています。

ただ運用としては、今ほとんどみんなリモートで仕事をしているので、本当に機会を作らないとチーム間で話す場がまったくないことが起こっちゃうので、30人で週2時間、毎週自分がやったことを報告する会をしていたりします。

あとはプロジェクトごとに、例えばこのサービスに向けて何かを開発するという話になった時に、エンジニアがいろいろなチームから何人か声をかけられて「ちょっと一緒にやろうよ」っていうかたちで運営されるものも、だいだい10個くらいあります。それぞれに会議があったり、slackのチャンネルがあったりコミュニケーションを取っています。

あとは、会社の福利厚生でコミュニケーションをリモートで取りやすくするために、家に2週間に1回ランチが届くような運用もしていたりして、みんなでご飯を食べることもやっていますね。

三木:ありがとうございます。他になにか交流するイベントはあったりします? 技術的な共有会とかってやってたりするんですか。

ウィット:そこまで厳密にやっていないですけど、エクストリームリーディングという会があります。最初はプロダクトマネージャーが立ち上げてくれて、プロダクトマネジメント系の本を1冊読んだんですよ。今は強化学習の本をみんなで読み始めています。すでにプロダクトマネージャーの方は挫折しているんですけど、それぐらいゆるくやっていますね。

三木:ありがとうございます。いろいろとまだお聞きしたいことあるんですが、お時間の関係で、このあたりにしたいと思います。ご質問ありがとうございました。