菊地氏の自己紹介とアジェンダ紹介

菊地悠氏:LINEの菊地と申します。今日はよろしくお願いします。私はMachine Learning Solution室とMachine Learning Platform室という2つの部署を見ています。私自身はプロダクトマネジメントを主に仕事としてやっていて、プラスアルファで組織を見ています。

私自身の過去の経歴は書いてあるとおりですが、機械学習をずっと専門にしていたというよりは、さまざまな分野をけっこうとっかえひっかえやって今に至っている感じの経歴です。

今日は、主にマシンラーニングの領域で特定の組織で見ている話が中心にはなりますが、まず開発事例を紹介して、その後にどう働いているかというお話をしたいと思っています。新卒で2年目の方がこのあとの分科会で一緒にQ&Aをやってくれるので、どういう働き方をしているか、どういうプロダクトを実際にリリースしているかは、そちらで詳しく聞いてもらえたらなと思っています。

LINEアプリでマシンラーニングが使われているところは?

それでは、開発事例にいこうと思います。LINEのアプリケーションを使っている方はアプリの中にタブが5つぐらいあることをご存じかもしれません。左からHome、Talk、VOOM、News、Walletと並んでいます。マシンラーニングがこの中のどこに入っているかというと、(スライドを示して)このあたりに入っています。

アプリの中のさまざまなコンポーネントの中にMLが入っているのですが、私たちの組織ですべてを作っているわけではありません。一部は韓国で作っていたり、福岡の組織が関わっていたり、そういうかたちでいろいろな組織が携わっています。

開発事例1 スタンプのレコメンデーション

実際に私がいる組織で扱っているものをザーッと順番にお見せしていきます。1つ目がスタンプのレコメンデーションです。A/Bテストなどをやる際には、データサイエンティストを抱えている別の組織と連携をしながら機械学習のモデルが良くなったかどうか、検証をしています。

対象ユーザーが億を超えたり、おすすめの対象アイテムが1,000万を超えたりなど、そのような規模のデータを使って機械学習でレコメンデーションをやったりしています。年に1回ぐらいの頻度で、モデルの更新を行うことが多いです。スタンプに関して言うと、キーボード上で文字を入力した際に意味的に合致するスタンプが並ぶのですが、このあたりも実はMLで画像の分析をしてタグ付けの処理をやっています。

開発事例2 ユーザーのペルソナ予測

ほかにも広告の事業、あるいはLINE公式アカウントの領域で、ユーザーになにかコンテンツや広告を配信したりする際に、なんとなくこれくらいの年代・性別の人に送りたいというニーズはよくあって、こうしたものも機械学習でユーザーの分類の処理を行っています。こちらのデータの規模もやはり数億というユーザー単位になっています。

開発事例3 出前館アプリにおける需要予測

出前館に関しても同様に関わっています。先ほどディー・エヌ・エーさんのお話にもありましたが、私たちも需要予測をやっています。ほかにも、商品の推薦やドライバーにどの家に配達に行ってもらいたいかなど、うまく差配するための取り組みをやっています。

開発事例4 個別サービスのコンテンツ向けターゲティングロジック

そのほかにも、LINEのトークタブの画面の上のほうにはコンテンツや広告が出てくる枠の裏には、実は100を超えるロジックが入っています。例えば新しいスタンプを過去に購入した人におすすめしたいというルールベースの場合もありますし、レコメンデーションでやっている場合もあります。

1サービスには複数のロジックがあり、また、我々以外の複数の組織がそれぞれ、ユーザにおすすめしたいアイテムを入稿しています。表示枠は1つなので、複数の候補の中から1つだけを選ぶ、という処理も必要になります。

なので、ここは実は2段構えの機械学習あるいは推薦の処理になっています。後段の処理は俗にいうバンディットアルゴリズムが使われていて、直近で得られたユーザーの選んだ・選ばなかったというフィードバックも利用しながら、リアルタイムに学習をする処理が走っています。

あとこれは先週(※登壇当時)ちょうど発表の機会があったのですが、LINEは2022年9月の末にFederated Learningと呼ばれる技術をサービスに導入しています。(スライドの)右下にリンクも貼っているので、もし興味があればこのあたりも見てもらえたらなと思います。

どのような環境で開発をしているのか?

具体的にどのような環境で開発をしているかの紹介も簡単にしたいなと思います。

実際にサービスになにかを導入したり、作ったものが本当に良いものかどうかを確認するためには、レコメンデーションやMLのモデルだけを作っていてもうまくいきません。実際にどういうものがユーザーに出るのかを可視化したり、あるいはA/Bテストの仕組み自体を整えて全社の基盤として導入したりなどの開発も私たちが担っています。

マシンラーニングエンジニアはこういうことができてほしいという要件や要望を出す側でもありますが、その上で実際に同じチーム内にいるインフラ系やサーバーサイドのエンジニアと連携して開発をしています。

実はLINEの社内にも機械学習のプロダクトがたくさんあるのですが、複数のサービスにいろいろなものを提供している中で、似たような仕組みを共通で作りたいというニーズがあります。実際に私たちのところでは、LINE MUSIC、LINEスタンプ、LINEマンガなどのデータを共通のデータ処理の手続きに乗せてサービス横断で各種の推薦だったり分類だったり予測だったりという問題を解決できるようにしています。

そこでは生のデータも扱います。生のデータだと次元がメチャクチャ大きくて扱いにくいので、表現学習で密なベクトル(dense vector)に変換するということもやっています。

同じく、昔はマシンラーニングの処理をモデルそれぞれ同じように書いていたのですが、だんだんディープラーニングが主流になってくる中で再利用できるモデルをどんどん作っていこうという流れになっています。

モデル自体もライブラリとして共通化はしてきていますが、さらにそのモデルを利用する処理自体をAPI越しに利用できるようにプラットフォームの開発にも力を入れています。

実際に開発をする環境についてお話しします。私たちはマシンラーニングのモデリングがメインの業務ではありますが、そのシステムを、社内の他の組織にも提供してくれるデータプラットフォーム上で運用したり動かしたりしています。Hadoopの大きなクラスタがあって、SparkやHiveで処理を走らせて機械学習をバッチでやる場合もあるし、結果をRedisのような環境に入れてリアルタイム、オンラインで取り出せるようにするケースもあります。

こうした環境を私たちは利用者として使い、システムを運用してくれている人たちと連携をしながら仕事をしています。

開発に使っている環境や言語は今画面に出ているようなものが主ですが、マシンラーニングエンジニアは、主にPythonやデータの前処理にSQLを使うことが多いです。

ディープラーニング系だと、PyTorchで処理をする部分が最近は非常に多くなっています。このあたりも詳しく聞きたい場合、後ほどの分科会で質問をしていただければと思います。

ロールとプロジェクトの進め方を説明

仕事をする環境についてお話しします。MLエンジニアというポジションに関してお話をすると、プラットフォーム開発に寄っている組織と、事業やアプリケーションに近いところでマシンラーニングを導入していくソリューション寄りのエンジニアと、今は大きく2つに分けています。

ポジションとしては共通で応募いただきますが、実際に入ってみて、あるいは面接やその他の過程で「どちらが向いてそうか」を判断しながら実際の業務に従事してもらいます。

「マシンラーニング」と一言で言っても、今のようなことをやるために複数のロールが必要になっており、募集のポジションに関して言うと、(スライドを示して)ここの青色と黄色で書いてあるところが機械学習エンジニアが担当することです。

システムやプラットフォームを運用しようとすると、当然インフラの面でDevOpsのエンジニアやサーバーサイドのエンジニアも必要になりますし、これらの人たちが連携してプロジェクトを回していくためにプロダクトマネージャーやプロジェクトマネージャーと呼ばれるポジションの人も密に仕事をやっていく必要があります。

実際にプロジェクトを進める場合には、複数のチームからそれぞれ必要な人たちを適宜アサインしてプロジェクトを構成して仕事をすることが多いです。ここには書かれていませんが、メンバーがプロジェクトのタッグを組んで事業側の人たちと連携して開発をしたり、企画の方と話したり、サービス側の開発エンジニアの人と連携したりすることもあります。

求めるマインドセットとスキルセット

最後になりますが、私たちがぜひ受け入れたいなと思っているのは、(スライドを示して)こういうマインドセットやスキルセットを持っている方です。LINEはけっこうエンジニアリングに強い組織で、企画側や事業側の組織も当然あるのですが、エンジニアの中にはものすごいスキルを持っている方々がいます。

開発・実装は自分たちでやるし、使っているものの中身の隅から隅まで知っている人たちも多いです。当然事業に貢献するという意味では、データを見ていろいろ調べないとわからないこともあるので、こういうところに関しても温度感が高かったり、積極性が高い人はたぶん活躍してもらえるんだろうなと思います。

まとめになりますが、大量のデータやたくさんのサービスを扱って、これらのデータをうまく用意するというところで仕事をしているのが私たちのチームです。共通機能やプラットフォーム的な開発もだんだん増えてきているので、こうしたものに興味がある方はぜひ応募してほしいなと思っています。

こうしたページもまとまっているので、興味がある方は見ていただければと思います。このようなメンバーがチームの中にいます。みなさんと一緒にお仕事ができたらなと思っています。よろしくお願いします。私からは以上です。