Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ド...

MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み

イベント概要
第52回 MLOps コミュニティイベントです!
第52回は株式会社MIXI 谷様、株式会社オープンストリーム 高岡様による発表になります。
MLOps コミュニティでは次回以降の発表者を募集しております。発表したい方はこちらより奮ってご応募ください!

発表申し込みフォーム
ハッシュタグ:#mlopsコミュニティ
発表内容
特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
MIXI の運営するサービス minimo は、今年リリースから11周年を迎え、より最適な体験のためにAI/機械学習の導入を進めています。 モデルの学習から推論、実サービスへの実装までの一連の流れで、品質を保証し、高速にモデル改善のサイクルを回すためには、特徴量の一貫した管理と、その管理の自動化が重要だと考えています。 これらを実現するために、minimo では特徴量の管理を中心に据えた自動化を導入しました。 今回は、特徴量ドリブンな MLOps を実現するために行なった試みを紹介します。

関連記事: https://zenn.dev/mixi/articles/mixi-feature-driven-mlops

株式会社MIXI 谷 知拓 (Taniii)
株式会社MIXI minimo事業部 システム開発グループ AI推進チーム。最近は、既存サービスへのAI/機械学習の導入を中心に起案から設計・実装まで行なっています。大学では、LLMを用いた汎用推薦システムの研究をしています。個人開発も好きです。

X: https://x.com/taniiicom
企業ページ: https://mixi.co.jp/
採用ページ: https://mixigroup-recruit.mixi.co.jp/jobs/
MLOps ツール “Knitfab” を作ったワケ
私達は MLOps を支援する基盤となるツール “Knitfab” を開発しています。 この製品は、私達が参画した機械学習モデル開発の経験から、ぜひ欲しい、と思って開発を始めたものです。 今回は、 Knitfab の生まれた経緯と、MLOps における我々のペインポイントとアプローチについてお話します。

高岡 陽太 様
株式会社オープンストリームで、MLOps 基盤ツール Knitfab を開発しています。

Knitfab on Github
会場
オンライン開催 (URLは別途ご案内)

タイムテーブル
時間 内容 スピーカー
19:00 ~ 19:10 はじめに MLOps勉強会事務局
19:10 ~ 19:35 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み 谷 知拓 (Taniii) 様
19:35 ~ 19:55 MLOps ツール “Knitfab” を作ったワケ 高岡 陽太 様
19:55 ~ 20:10 Q&A
20:10 ~ Ask-the-speaker
配信スポンサー
株式会社ディー・エヌ・エー様

Avatar for Tomohiro Tani

Tomohiro Tani

May 28, 2025
Tweet

More Decks by Tomohiro Tani

Other Decks in Programming

Transcript

  1. ©MIXI 特徴量を⾔語を越えて⼀貫して管理する, 『特徴量ドリブン』な MLOps の実現へ の試み MLOps Community JP >

    MLOps 勉強会 #52 株式会社 MIXI Vantage スタジオ minimo 事業部 プロダクト開発グループ AI推進チーム ⾕ 知拓
  2. 2 ©MIXI Taniii ⾃⼰紹介 ⾕ 知拓 Tomohiro TANI 𝕏 :

    @taniiicom : Taniii.com 株式会社 MIXI Vantageスタジオ minimo 事業部 システム開発グループ AI推進チーム - 好きな技術 : 設計論, アーキテクチャ (DDD) - 変遷 : Android (Java) → PHP/Laravel → Go, Typescript (React) → Flutter → MLOps - ⼤学 : Scalable, General な LLM4Rec の研究をしています - 趣味 : 旅⾏, 個⼈開発
  3. ©MIXI エモーションと コミュニケーションで 「心もつながる」場と機会を 創造し続けます。 MIXI GROUPは、 ただ「つながればいい」という効率的な機能の提供ではなく、 歓喜や興奮、温かな思い、幸せ、居心地の良さの共有を通じて、 その先に、もっと深くて濃く豊かな、心のつながりを生み出すような、

    サービスの開発・提供を目指しています。 現在、スポーツ・ライフスタイル・デジタルエンターテインメント の3つの領域で事業を展開しており、 それぞれの主な事業内容は右の通りです。 また、近年の投資活動の拡大と重要性を勘案し、 FY2023からはスタートアップやファンド出資等の投資活動を事業化しました。 スポーツ事業 プロスポーツチーム運営および 公営競技ビジネスの推進 ライフスタイル事業 インターネットを活用し、 人々の生活に密着したサービスの提供 デジタルエンターテインメント事業 スマホゲームを中心としたゲームの提供 MI I G の事業領域 
 3つの領域で “「心もつながる」 場と機会” を創造する事業を推進
  4. 9 ©MIXI - 700万ダウンロード突破 * のサロン予約サービス
 
 - 美容師やネイリスト・アイデザイナーなどのアーティストを, サロン単位では

    なく, 個人単位で予約 することができます.
 
 - ユーザが自らの『なりたい』を叶えるのに最適なアーティストと出会えるよ うに, ユーザやアーティストの特徴量を活用することで, ユーザそれぞれ に最適な検索結果 を予測するモデルを構築しています
 * 2025 年 5 月時点
 minimo について
  5. 10 ©MIXI - 10 年以上の歴史を持つサービス
 → 様々なシステムが連携してサービスを形成
 → システム間での特徴量の管理が複雑
 


    - 各システムそれぞれで, 特徴量リストを管理する必要
 → 特徴量の追加や変更があった際には, それぞれのシステムで特徴量 の追加や変更を行うコストが発生
 → 特徴量の整合性が取れないことによる品質低下のリスク
 
 特徴量の一貫した管理と, その管理の自動化する施策 
 現状理解と課題
  6. 12 ©MIXI - 特徴量ドリブンな ML ps は, 
 - 特徴量を第一級の資産として扱い,

    
 - 学習・推論・実サービスへの実装の一連のサイクルや, 
 - ython, Go, Big uery, Elastic earch など言語やシステムを越え て, 特徴量を一貫して管理することで, 
 - モデルの品質を保証し, 高 にモデル改善のサイクルを回すことを 目指す取り組み 
 と定義しています.
 特徴量ドリブンな ML ps とは... 

  7. 13 ©MIXI 特徴量ドリブンな ML ps の実現を目指し, 以下の方針を定義
 - 特徴量の定義・バージョニングを体系化 


    - 特徴量の定義の更新を起点として, 学習, オフライン評価, 推論 用サーバの実装, サービスのメインサーバの更新, AB テスト評 価の, 一連のサイクルを自動化 
 方針

  8. 16 ©MIXI - 保守性
 モデルの改良の中で, 特徴量の追加・削除が繰り返されても, モデルの バージョンを正確に管理し, 変更を追跡することで, 特徴量の保守性を

    向上させます.
 AB テストなどの結果, 特定のモデルバージョンに戻す際にも, 簡単にリ バートや切り替えができるようになります.
 
 利点

  9. 18 ©MIXI - 効率性
 新しいモデルや特徴量を追加する際に, 特徴量の定義の更新を起 点として, 自動化されたフローに従って, 学習, オフライン評価,

    推論用サーバの実装, サービスのメインサーバの更新, AB テ スト評価を行う ことで, モデルの改善サイクルを高 化します.
 
 利点

  10. 19 ©MIXI - 機械学習導入前の既存のシステム 
 minimo では, メインのバックエンドサーバが, Go で実装されています.

    (以下, Go サーバ)
 また, 永続化のために Aurora My L を使用しており, データウェアハ ウスとして Big uery, 検索エンジンとして pen earch (Elastic earch フォーク) を使用しています.
 全体のシステム構成と自動化の流れ 

  11. 22 ©MIXI - 機械学習導入 
 ここに, 機械学習を導入するために, ython の推論サーバ (以下,

    ython 推論サーバ) を新たに用意して, Go サーバから必要に応じてリ クエストを送るようにしています.
 - 特徴量テーブルの作成には Looker
 - モデル学習には Google Cloud ertex AI Custom raining
 - ython 推論サーバには A の ageMaker
 
 全体のシステム構成と自動化の流れ 

  12. 26 ©MIXI 1. 特徴量を生成する 
 Big uery からデータを取得し, LookML で特徴量テーブルを生成し,

    Big uery に保存する
 2. モデルの学習 
 ython で, Big uery から特徴量テーブルを取得・前処理・モデルを学習・オフ ライン評価の一連の流れのスクリプトを準備する
 これを, ertex AI Custom raining で実行する
 新しいモデルの作成の流れ 

  13. 27 ©MIXI 3. モデルの評価 
 ertex AI Custom raining の結果を確認し,

    モデルの品質を評価する
 この後に進むかどうかを判断する
 4. ython 推論サーバの用意 
 特徴量を入力として受け取り, モデルを使って推論し, その結果を返す ython 推論サーバを準備する
 これを, ageMaker にデプロイする
 新しいモデルの作成の流れ 

  14. 28 ©MIXI 新しいモデルの作成の流れ 
 5. Go サーバの更新 
 Go サーバに,

    ython 推論サーバへリクエストを送るための, リクエスト定義や 実装を更新する
 具体的には, オニオンアーキテクチャにおける, インフラ層の datamodel や repository の実装を更新する
 6. 公開
 Go サーバ・ ython 推論サーバを介した推論結果と, オフラインでの評価結果 を比較し, モデルの品質を確認する
 これらを, 公開する

  15. 29 ©MIXI - 自動化フロー 
 ここまで, サービスへの機械学習導入と新しいモデルの作成の流れに ついて紹介しました.
 ここから, 特徴量ドリブンな

    ML ps を実現するために, 構築した自 動化フローについて紹介します.
 
 全体のシステム構成と自動化の流れ 

  16. 30 ©MIXI 時代③ : 自動化フロー 
 
 
 
 


    
 全体のシステム構成と自動化の流れ 

  17. 32 ©MIXI - 依存関係 に従って自動化を設計
 
 特徴量の定義を変更した際に, それに依存する各システムの変更, そし てさらにそれに依存するシステムを変更...

    と, 自動化することで, 特徴 量の一貫性を保証し, モデル作成のサイクルの負担を軽減し, モデル 改善を高 化できるようにしています.
 
 全体のシステム構成と自動化の流れ 

  18. 33 ©MIXI 1. 学習時の DataFrame から特徴量リストを出力 
 - 学習時に, DataFrame

    から特徴量リストを出力するスクリプトを実行 し, 特徴量リストを生成します
 - モデルバージョンごとの, 学習済みモデル・カテゴリカルエン コーダー (前処理に使用)・特徴量リストの組み合わせ を, GC に保存し厳密に管理します

  19. 34 ©MIXI 1. 学習時の DataFrame から特徴量リストを出力 
 - DataFrame から


    特徴量リストを出力する
 スクリプト
 - 各特徴量の期待される型も, DataFrame から合わせて出 力
 def dump_features_list(self, df_train): # データフレームの特徴量とその型の一覧をバケット 出力 features_list = pd.DataFrame({'feature': df_train.columns, 'type': df_train.dtypes.astype(str)}) self.bucket.upload_csv_from_string( features_list.to_csv(index=False), os.path.join( 'model', self.model_version, 'features_list.csv' ) )
  20. 36 ©MIXI 3. 特徴量リストを基に, ython 推論サーバの openapi.yaml のリクエスト型 と 特徴量構

    体 (辞書) を自動生成して, を立てる
 - モデル学習時のスクリプトが, 
 main ブランチにマージされたのを
 トリガー
 - ython 推論サーバの 
 - openapi.yaml のリクエスト型
 - 特徴量構 体 (辞書) を自動生成
  21. 38 ©MIXI 5. Go サーバのインフラ層に, penA I の定義から, 新 しいモデルバージョンの

    datamodel を自動生成する 
 - Python 推論サーバの Staging デ プロイが完了したのをトリガー - Actions で, Python 推論サーバの OpenAPI の定義を基に, Go サー バの datamodel を⾃動⽣成 (oapi-codegen)
  22. 40 ©MIXI 6. AB テストそれぞれで, 使用するモデルバージョンの 自動生成された構 体 (⑤) をエイリアスで指定して,

    taging 環境にデプロイする 
 d package sagemakermodel // どの MODEL_VERSION を使うかここで指定 import ( schema_a "[...省略]/infrastructure/datamodel/sagemakermodel/versions/[旧モデルバージョン名 ]/schema" schema_c "[...省略]/infrastructure/datamodel/sagemakermodel/versions/[新モデルバージョン名 ]/schema" ) // A, B, C の任意のグループを使わないときに使うプレースホルダ type Placeholder struct{} type FeatureValueDocJson interface { FeatureValueADocJson | FeatureValueBDocJson | FeatureValueCDocJson } // 使わないグループについては `Placeholder` を割り当てておく type FeatureValueADocJson = schema_a.InvocationRequest type FeatureValueBDocJson = Placeholder type FeatureValueCDocJson = schema_c.InvocationRequest
  23. 41 ©MIXI 7. 同一のモデルバージョン・特徴量で, オフライン環境 での推論結果と taging 環境の推論結果が一致するこ とをチェックする 


    - オフライン環境で⼿元でモデル を動かした場合の推論結果と, Staging 環境を通した推論結果が ⼀致することを確認して, モデル の品質を保証します
  24. 43 ©MIXI 
 特徴量を中心に据え, 各定義とその依存関係に従って, 自動化を導入 
 - 学習時には, 定義した特徴量リストを元に特徴量を構

    体に詰めて, モデ ルを学習します
 - 学習時の特徴量を基に, 推論時に使う ython 推論サーバの penA I のリクエスト型 と 特徴量構 体 (辞書) を自動生成します
 - penA I を元に, 既存の Go サーバのインフラ層に, 新しいモデルバー ジョンの datamodel を自動生成します
 
 まとめ

  25. ©MIXI MIXI と minimo では⼀緒に働く仲間を募集中です! "叶えたい" ⼈と, "叶えられる" ⼈をつなぐことで, 世の中にたく

    さんの「ちいさな素敵」を⽣み出せると思っています! ぜひ, ⼀緒に minimo を創りませんか?