LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

より良い機械学習基盤を構築するために。属性推定システムのリニューアルにおける工夫と改善 

2021年11月10日・11日の2日間にわたり、LINEのオンライン技術カンファレンス「LINE DEVELOPER DAY 2021」が開催されました。特別連載企画「DEVDAY2021 アフターインタビュー」では、発表内容をさらに深堀りし、発表では触れられなかった内容や裏話について登壇者たちにインタビューします。今回の対象セッションは「属性推定システムのリニューアルで見えた様々な課題とその解決の事例紹介」です。

ユーザー一人ひとりへ最適なコンテンツやサービスを届けるため、LINEでは機械学習を用いてユーザーの属性や興味・関心を推定する属性推定システムを開発・運用しています。2021年の夏に、この属性推定システムの利便性やメンテナンス性を向上させるため大規模なリニューアルを実施しました。

その過程で、機械学習モデルだけではなくモデルへの入力データパイプラインやモデル推論結果を安定的に外部供給するための仕組みなど、いくつもの改善ポイントが見えてきました。それらの課題を解決するために取り組んだ施策の秘話を、Machine Learning Solution 2チーム Senior Machine Learning Engineerの渡辺哲朗が解説します。

自由度の高い運用を可能にするため、属性推定システムのリニューアルを実施

――Machine Learning Solution 2チームの役割や渡辺さんの業務内容を教えてください。

私たちが所属しているMachine Learning室には、機械学習を実際の事業に展開する役割を担うMachine Learning Solution 1チームと2チームが存在しています。1チームでは、LINEの提供する個別のサービス・プロダクトに対する機械学習による施策が多いのですが、私が所属する2チームは、LINE全社的に展開されるような大きな仕組みを担当するケースが多いです。そのなかで、私はユーザーの属性推定システムやFeature Store関連の開発・運用を担っています。

――「LINE DEVELOPER DAY 2021」で渡辺さんは、「Mesos clusterとTheanoで構成されていた旧来のシステムでは、PyTorchのような新しいライブラリを導入することが難しかった」という旨のお話をされていました。この理由を詳しく教えてください。

旧来の属性推定システムでは、ライブラリの依存関係などをコードで管理するためにDockerを、Mesos用のコンテナオーケストレーションプラットフォームとしてMarathonを用いていました。しかしこのアーキテクチャでは、一部の機械学習のタスクのみ新しいライブラリを用いるような柔軟な運用が難しかったのです。

機械学習の領域では、さまざまなライブラリが日々進歩し続けています。そのため、精度の高い属性推定システムを実現するには、それらの新しいライブラリを積極的に導入することが望ましいです。より自由度の高い運用を可能にするため、属性推定システムのリニューアルを決めました。

――リニューアル後の属性推定システムでは、インフラ基盤としてKubernetesを導入していると伺いました。Kubernetesを効率的に運用するために工夫している点はありますか?

Machine Learning室の内部では、Kubernetesクラスタで効率的にジョブを走らせるために独自に開発した、Swimmyという分散処理用RPCライブラリを用いています。これは「LINE DEVELOPER DAY 2021」の「機械学習で使っている分散処理用RPCライブラリ」というセッションで、大東哲平さんが解説したライブラリです。

SwimmyはCPUやGPUなどのコンピューティングリソースを、自動的にマネジメントしてくれます。機械学習に携わるエンジニアたちはKubernetesの詳細な仕組みを知らなくても、Swimmyを用いるだけで効率の良いインフラ運用を実現できるようになりました。

MLP-Mixerの導入で機械学習モデルをさらに改善

――セッション内では、分析の精度を上げるための機械学習モデル構築の知見も語られていました。そして、「モデルのさらなる改善のためにstate-of-the-artの手法であるMLP-Mixerを導入した」という旨を渡辺さんは話されていましたが、MLP-Mixerは他の手法と比較してどのような点が優れているのでしょうか?

MLP-Mixerは2021年にGoogleが発表したばかりの新しい手法です。近年主流になっている他の手法と比較すると、構造がシンプルでありながら高い精度を保ちつつ高速に学習や推論が行えることに特徴があります。属性推定システムでは億を超える人数のユーザーデータを扱いますし、かつ推論を毎日動かす必要がありますから、短時間で処理を完了させられることは非常に重要です。

また、MLP-Mixerという手法の特徴そのものが、LINEで扱っているデータの特性にマッチしているという面もあります。これはセッション内でも解説したのですが、属性推定システムではz-featuresと呼ばれるサービス横断型の特徴量データを使用しています。

z-featuresが生成される仕組みを簡単に紹介させてください。まず、データの利用許諾を得たユーザーのサービスログを抽出し、そこにフィルタリング処理を施すことで、利用許可されたデータのみを収集します。それらを統合してFeature Storeとして格納した特徴量データがz-featuresです。

属性推定システムの機械学習モデルでは、z-featuresを利用して学習と推論を実施しています。私たちはこのプロセスで、特徴量データの元になったサービスの種類ごとに、別々に処理するようにEmbeddingレイヤーを分割しています。EmbeddingやMixingをしつつ学習・推論をしていくというMLP-Mixerの仕組みが、z-featuresの構造ととても相性が良かったことが、導入の決め手になりました。

SmoothingやVolume calibrationにより推定属性を安定供給

――セッション内では他にも、属性ごとに推定されたユーザー数の日々の変動が大きいと事業側に不便が生じることや、推定属性の安定供給を実現するうえで変動を抑制するためのSmoothing(平滑化)やVolume calibration(ボリューム調整)を実施していることが語られていました。具体的にどのような処理を施しているか解説していただけますか?

まずSmoothingについてお話しすると、特定期間内のデータに対する移動平均をとる方法や、他にも多数決をとる方法などを用いています。

移動平均は、時系列データの誤差変動などをSmoothingする際によく用いられる手法です。一定区間ごとの平均値を、区間をずらしながら求めるものです。移動平均を用いることで、長期的な傾向を表す滑らかな曲線を得ることができます。仮に特定セグメントのユーザー数がある日付だけ急激に大きくなったとしても、ユーザーごとのセグメントが移動平均による平均値で均され、結果としてセグメントごとのユーザー数の変動も平滑化される仕組みになっています。

多数決をとる方法はもっとシンプルです。例えばあるユーザーの年齢が、特定の日に「20〜24歳」、次の日も「20〜24歳」、さらに次の日は「25〜29歳」と推定されたとします。それらの値のうち、特定期間内で最も出現頻度の高い要素を、Smoothing後の最終的なセグメントにするという方法です。さきほどの例で言いますと、3日間の多数決を取って「20〜24歳」を最終的なセグメントに決定する、といった具合です。実際には、もっと長い期間での多数決を用いています。

Smoothingにはさまざまな手法があります。それぞれの方法で実際にSmoothingした結果を比較しつつ、推定結果を活用する事業サイドのメンバーの意見などもヒアリングしたうえで、具体的にどの方法を使うかを決めていますね。

Volume calibrationの処理では、例えば「1日ごとに許容するセグメントボリュームの変動は、前日と比較して±20パーセントまで」などの条件を設定しておき、それを超える変動が抑制されるように推定属性の調整を行います。

セッション内で示した例では、各推定属性のセグメントボリュームが最低でも15万人は存在するように設定しており、それを下回らないように出力が調整されていることを解説しました。

Volume calibrationの仕組みは、ユーザーの興味や関心のように、各ユーザーに複数のセグメントが付与されるような属性に関して、特に有効に機能しています。SmoothingとVolume calibrationとを併用することで、推定属性の安定供給を実現できています。

影響力の大きい機械学習基盤を扱うからこそ、エンジニアに求められる要素とは

――どのような特性やマインドを持ったエンジニアが、Machine Learning Solution 2チームでは活躍しやすいと思われますか?

冒頭でお話ししたように、私たちはLINE全社的に展開される機械学習の基盤を担当しているため、さまざまな部署の方々とのコミュニケーションが必要になる場面が多いです。

あくまでこれは個人的な意見になりますが、積極的にそうしたステークホルダーとの情報連携に取り組める人、一定以上のコミュニケーションスキルがある人が活躍しやすいです。私たちのチームのエンジニアは、みなさんこのスキルを備えていると私は感じています。

また、影響力の非常に大きいプロダクトを扱うからこそ、一つひとつの作業を丁寧に検証しつつプロジェクトを進められるスキルも重要です。そういった、良い意味での慎重さを持ったエンジニアが、チーム内では活躍しているように思いますね。

――今後のMachine Learning Solution 2チームの活躍や属性推定システムのさらなる改善が楽しみです。今回はありがとうございました。

採用情報

LINE株式会社では一緒に働くエンジニアを募集しています!

今回のインタビューと関連する募集ポジションはこちらです。