Machine Learning Production Pitch #2 勉強会メモ


概要

Machine Learning Production Pitch #2

Machine Learning Production Pitchは、機械学習について業務で培った知見や経験や苦労話を共有できる場を提供することを目的としたMeetupです。機械学習に取り組み、実社会への適用に日々もがき苦しみ楽しんでいる方々を対象としております。
第2回のテーマも前回に引き続いて機械学習の「設計」がテーマとなります。今回はLeapMind株式会社、LINE株式会社、エムスリー株式会社およびスマートニュース株式会社より合計4名に発表して頂きます。またイベント後は、会場にてカジュアルな懇親会も予定していますので、直接何でもご質問いただければと思います。

発表

Airflowやluigiといったワークフローエンジン周りの知識がないので、その辺りは特に間違いがあるかも

Detecting opinionated articles in SmartNews

発表資料

  • 政治のオピニオン記事の検知

    • 記事はおおよそニュース記事かオピニオン記事に分類できる
    • 「オピニオン記事」か「オピニオン記事でないか」の二値分類
    • 大手のニュース記事サイトから、クローリングによりデータを取得した正例データとスマートニュースのTOP内の政治記事を負例とする
  • モデル

    • 中間層はBERTやTransformer、Bi-LSTMなどで実装
    • 出力層のスマートニュース内の各分類タスクに置き換えて、マルチタスク学習を実施
    • ドメイン記事でファインチューニングしたBERTが一番良い評価
    • CPU運用を考慮し、記事のメタデータを追加したwide & deep learning modelを構築すると、更に良い評価

つらくないAirflowにむけて

  • Airflow

    • OSSのworkflowエンジン
    • pythonでDAGで依存するタスク群の関係を定義してワークフローを実装
    • 可視化できる
  • 導入の経緯

    • MLモデルのデータ整形から学習・評価までを包括的に実装する必要
    • 依存化するタスクであるためワークフローエンジンの導入
  • 課題

    • リソース管理のコストが大きい
    • DAGの管理コストが大きい
    • end-to-endの挙動が保証できない
  • 工夫

    • kubernetesで実行環境のコンテナを定義して、リソース管理を実施
    • Droneでコンテナビルドやテストの自動化
    • DAGに対するunittest

機械学習関連の開発を 効率化した話

発表資料

  • 開発のつらみ

    • データ加工
      • データが色々なDBにある
      • 色々JoinやFilterをしないと使えるデータにならない
      • DBごとのフォーマットを整える必要がある
    • 設計
      • 共通部分は他プロジェクトでも使いたい
      • (SWエンジニアに比べ)MLエンジニアは設計が弱い
      • 弱い設計コードのレビューや保守がつらい
    • 管理
      • パラメータとデータの管理が難しい
      • 良かった結果を再現できない
  • Luigi

    • パイプラインツール
    • Spotify製 - 設計が統一される
    • ログが読み易く、失敗部分の再実行が容易
  • gokart

    • エムスリーが開発したLuigiのラッパー
    • 入出力周りの共通化
    • 出力ファイル名やパラメータ保存といった管理機能

エッジ向けDeep Learningプロジェクトで必要なこと

  • LeapMind

    • エッジ向けDeep Learning開発
  • エッジデバイスでの推論モデルの実装

    • 学習済みモデルをエッジデバイス用への変換は容易ではない
    • 設計・学習の時点から、実際の推論環境を意識するべき
  • 圧縮の手法

    • 剪定
    • 量子化
    • 共有
    • 蒸留
  • 量子化

    • 計算の量子化をすると精度が劣化する
    • しかし、量子化の際に再学習を行うことで、精度の低下を防ぐことができる
    • 少ないビット数で演算する専用デバイスで高速かつ低電力化を実現する
    • GPUでは、圧縮と高速化の実現が難しく、専用ハードウェアを考える必要がある
    • pythonのtensorflowでモデルを実装し、Blueoil(独自ソフト)を用いて変換