現在参画しているプロジェクトがMLOpsで、分析タスクというよりはシステム開発よりの業務なので読んでみました。わたしはこれまで機械学習システム開発に参加した経験がないため、本書中には初めて聞く用語も多くありました。全てを理解できたわけではありませんが、機械学習をシステムに組み込むためには多様な知識が必要なのだということはよくわかりました。最後に簡単に用語は調べてありますが、今後自分の血肉になるように調べたり動かしたりしてみたいと思っています。
本の執筆にあたりAIAnimalsという画像投稿SNSのようなものを開発されていて、かなりの労作だと思います。著者の方が出版社に企画を持ち込んだそうなので、書きたいものを書いたという感じだと思います。MLOpsコミュニティを主催しているそうで、この分野にかける思いが伝わってきますね。
コードは出版社のサイトに会員登録することで見ることができますが、かなり分量が多いので、この本の使い方としてはコードを読むというよりは流れを理解するという感じかなと思います。
以下各章について感想を書きます。
第1章 課題、システム、チーム
タイトル通り課題設定の仕方とチーム構成についての章です。
機械学習で課題解決するためには、機械学習をシステムに組み込む必要がありますが、一人で全てを開発して運用するのは難しいためチームを組むことになります。
以前参画していた現場において、複数人でデータ分析プロジェクトを担当していたのですが、あるときマネージャーの方が、「データ分析は本当はすごくできるエンジニアが一人で担当するのが良いと思っている」とおっしゃっていて、内心むっとしたという経験がありました。
データ分析単体ならば一人でもいいのかもしれませんが、システム開発となると担当範囲が広くて一人では厳しいですよね(本書の3,4章で架空のAIサービスの開発例が載っていますが、関係する知識が幅広く、全てを一人で担当するのは大変だというのがわかると思います)。データ分析の結果をシステムに落とし込んで課題解決するところまでやらないと意味がないというのは本書で一貫して強調されているポイントでした。
課題設定に関連して、「誤推論サポートパターン」についての記述がありました。誤推論サポートパターンとは、誤った推論を行う原因となるパターンを特定し、それを修正するための手法の一つです。たとえば商店の在庫管理において在庫過剰は許されるが在庫不足は許されないといったような、分析が正値から正の方向にずれているか負の方向にずれているかで分析の意味合いが変わってしまうということがあります。そのような特定の方向への誤りが許されない場合に、特定のモデルでは特定のデータで決まった方向に間違うことがわかっていれば、誤った推論を補正することができます。
2章 需要予測システムを作る
架空の商店の需要予測システムを作る例が提示されます。
冒頭で、機械学習を使うことが目的なのではなく、PoCを行なってみて、機械学習が有効である場合に限って導入をするべきで、機械学習でなくてもうまくいっているのであれば機械学習を使う意味がないということが強調されています。昨今はAIとかDXとか流行っていて、「何か機械学習でやってくれ」というテーマ設定も多いと思うのですが、まずはPoCしてみること、結果が伴わなければ「やっぱり機械学習は必要ありませんでした」という判断を出すことも重要なのですね。
また、ソフトウェアは使われて初めて経済的価値が出るのであって、使われているときに課題発見と解決を行なって効果を発揮できるように改善する必要があるということが書かれています。
ITに関わる前は「保守・運用」という仕事があるのを知らなかったわたしですが、開発して終わりではなく、保守運用しながらシステムを活かしていくことで初めて価値を発揮するということが理解できました。
この本の著者の専門はMLOpsなので、機械学習システムを運用していくためには、ということがテーマになっています。
3章, 4章
3,4章では動物画像SNS「AIAnimas」のシステムに機械学習を組み込んでいく手順が説明されています。
システムの詳細についてはコードを読んでいただき、使われている各技術については最後に用語をまとめてあるので、以下気になった点について述べます。
システムの設計にあたっては、いくつかのパターンがあり、どれが正解ということは場合によって決まります。たとえば3章では違反画像検知システムにおいて、どのタイミングで違反判定をすべきかということを検討していますが、それぞれにメリット・デメリットがあるわけで、どのパターンを採用するかはサービスにおいて何を重視するかによります。違反の定義そのものについても、サービスのビジネス方針が変われば定義が変わるわけで、そのたびにモデルやシステムの作り方を変える必要があります。
サービスのビジネス方針に従って、課題設定を行い、機械学習で課題を解決するシナリオを設計すること。それを現在のチームの構成で実現可能なシステムとして開発し、運用する中でさらに課題を発見して改善のサイクルを繰り返していくことが重要である。
本書を読んで、最近よく聞くMLOpsってこういうことなんだなというのが、具体例を通じてイメージできるようになったので、読んでよかったと思いました。
データサイエンティストってどの業務に重きを置くかでいくつかのタイプに分かれると思うのですが、社内の課題解決を行うデータサイエンティストならば、分析そのものだけでなく、実用化のためのエンジニアリングスキルもより重要になってきますね。
著者は『AIエンジニアのための機械学習システムデザインパターン』という本も書かれているそうなので、いつか読んでみたいと思っています。
参考:データサイエンティストのタイプについてbingに聞いてみました。
こんにちは、これはBingです。😊
データサイエンティストのタイプについては、様々な分類方法がありますが、一般的には以下のようなものがあります¹²。
- ビジネスタイプ:ビジネスの課題をデータから解決することが得意なタイプです。データ分析や可視化、コミュニケーションスキルなどが必要です。
- アナリストタイプ:統計や機械学習などの専門的な知識を持ち、データから洞察を得ることが得意なタイプです。プログラミングや数学などのスキルが必要です。
- エンジニアタイプ:データの収集や加工、管理などのインフラ構築や運用を得意とするタイプです。クラウドやデータベースなどの技術スキルが必要です。
- リサーチタイプ:最新の研究や論文を追いかけ、新しい手法やモデルを開発することが得意なタイプです。深層学習や自然言語処理などの高度なスキルが必要です。
これらのタイプは、実際には重なり合ったり、ハイブリッドになったりすることもあります¹。
ソース: Bing との会話 2023/5/21 (1) データサイエンティストの役割 6類型と4類型のハイブリッド – JDSC. http://jdsc.or.jp/about/role.html. (2) データサイエンティストの分類を紹介!種類に分けて紹介し …. https://www.tech-teacher.jp/blog/datascientist-variation/. (3) データサイエンティストとはどんな職業?年収、スキル、将来 …. https://tameni.mynavi.jp/career/5520/.
本書はエンジニアタイプのデータサイエンティスト向きの本だと思いますね。
自分としては今のところアナリストタイプとエンジニアタイプの中間くらいを目指していきたいかな~と考えています。ものづくりが好きなのでシステム開発は楽しめているんですよね。でも分析は分析で面白いし。
これからいろいろな案件に関わっていく中で自分の方向性が見えてくるかなと思います。
本の目次
- 第1章 課題、システム、チーム
- 1.1 ソフトウェア技術によってビジネス課題を解決するには
- 1.2 機械学習で課題を解決するシナリオを決める
- 1.3 チームのサイズとスキルに合う開発と運用を考える
- 1.4 機械学習システムのアーキテクチャを設計する
- 1.5 新しい機械学習システムデザインパターン
- 1.5.1 評価ダッシュボードパターン
- 1.5.2 誤推論サポートパターン
- 1.6 チーム構成のパターン
- 1.6.1 パイオニアパターン
- 1.6.2 スモールチームパターン
- 1.6.3 ミックスドチームパターン
- 1.7 まとめ
- 第2章 需要予測システムを作る
- 2.1 需要予測の目的
- 2.2 機械学習チームとソフトウェア開発チームの構成例
- 2.2.1 社内初の機械学習プロジェクトチームの場合
- 2.2.2 実績のある機械学習チームの場合
- 2.2.3 マトリックス型チームの場合
- 2.3 機械学習で需要を予測する
- 2.3.1 課題設定
- 2.3.2 データ
- 2.3.3 開発環境の構成
- 2.3.4 データの前処理
- 2.3.5 学習
- 2.3.6 推論の活用と評価
- 2.4 農業試験場システムと業務のワークフロー
- 2.4.1 プロジェクト初期のチーム、システム、ワークフロー(2021年1月~2021年6月)
- 2.4.2 プロジェクト展開期のチーム、システム、ワークフロー(2021年7月以降)
- 2.5 まとめ
- 第3章 動物画像アプリで違反検知システムを作る
- 3.1 動物画像アプリの概要
- 3.1.1 AIAnimals
- 3.1.2 動物画像アプリとシステム
- 3.1.3 AIAnimalsを動かす
- 3.1.4 動物画像アプリに違反検知が必要になった
- 3.2 違反検知の目的
- 3.2.1 機械学習で検知する違反を決める
- 3.3 違反検知に必要なデータを定義する
- 3.4 位半検知システムとワークフローの設計
- 3.5 違反検知モデルを開発する
- 3.5.1 データを決める
- 3.5.2 モデルを作る
- 3.5.3 ジョブの実行
- 3.6 違反検知システムを実用化する
- 3.6.1 非同期推論パターンで作る違反検知システム
- 3.6.2 違反検知をモニタリングする
- 3.7 まとめ
- 3.1 動物画像アプリの概要
- 第4章 動物画像アプリの検索で機械学習を活用する
- 4.1 動物画像アプリの検索
- 4.1.1 絞り込みと並べ替え
- 4.2 機械学習で検索を改善する
- 4.3 類似語辞書の作成
- 4.3.1 アクセスログと頻繁に検索される単語
- 4.3.2 単語ベクトルを用いた類似語辞書作成
- 4.3.3 類似語辞書を検索に活用する
- 4.4 ランク学習による検索結果の並べ替え
- 4.4.1 データを作る
- 4.4.2 ランク学習モデルを学習する
- 4.4.3 ランク学習を用いて検索結果を並べ替える
- 4.4.4 ランク学習のワークフロー
- 4.5 A/Bテストを構築する
- 4.5.1 2つのモデルの学習
- 4.6 画像による検索
- 4.6.1 MobileNet v3による特徴量抽出とScaNNによるインデックス作成
- 4.6.2 MobileNet v3とScaNNの推論器
- 4.6.4 類似画像検索の自動更新
- 4.7 ユーザに使ってもらえる機械学習を目指して
- 4.1 動物画像アプリの検索
この本で学んだ用語
- モノレポ:複数のプロジェクトやアプリケーションのソースコード、リソースを分割せずに、全てを1つのレポジトリで管理する開発手法 https://circleci.com/ja/blog/monorepo-dev-practices/
- Plotly:データ可視化のためのOSSで、MITライセンスなので自由に無料で利用できる。手間をかけずに美しいグラフが作成できる。https://plotly.com/python/
- Bazel:Googleが社内開発に使用していた独自のビルドツールをオープンソース化したプロダクト。 https://knowledge.sakura.ad.jp/6174/
- MLOps:MLシステム開発とMLシステムオペレーションの統合を目的とするMLエンジニアリングの文化と手法。MLシステム構築のすべてのステップで自動化とモニタリングを推進できる。https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
- Poetry:Pythonのパッケージマネージャの一つ。https://qiita.com/ksato9700/items/b893cf1db83605898d8a
- CI/CD:継続的インテグレーション/継続的デリバリーのことで、アプリケーション開発の各ステージに自動化を導入し、顧客にアプリケーションを頻繁に提供できるようにする手法。https://www.redhat.com/ja/topics/devops/what-is-ci-cd#
- MLflow:機械学習の学習ログや出力したモデルファイルを記録する学習管理。実験、再現、デプロイ、モデルの保存など、機械学習のライフサイクルを管理するためのオープンソースプラットフォーム。https://qiita.com/c60evaporator/items/e0eb1a0c521d1310d95d
- Hydra:パラメータ管理のライブラリhttps://logmi.jp/tech/articles/325087
- YAML:構造的なデータ集合を簡素な文字列として表記することができるデータ形式の一つ。
- pandera:データフレームのバリデーションを行うライブラリ https://ohke.hateblo.jp/entry/2020/09/12/230000
- データリーク:本来の学習データと評価データが混ざった状態で、意図せずモデルの性能を不正に高くしてしまっていることhttps://note.com/kenichiro/n/n2ff08344160a
- ワークフローエンジン:バッチ・ジョブなどの実行を管理する基盤で、データパイプラインや機械学習パイプラインはワークフローエンジン上に構築されることが一般的。https://www.mugen-corp.jp/column/1021/
- AirFlow
- Argo Workflows
- Prefect
- Luigi
- Google Cloud Composer
- AWS Step Functions
- Azure Pipeline
- KubeFlow Pipelines
- Google Vertex AI Pipelines
- Gokart
- FastAPI:PythonのWebフレームワーク https://zenn.dev/nameless_sn/articles/flask_vs_fastapi
- Uvicorn:Python用のASGIウェブサーバー https://www.uvicorn.org
- Gunicorn:Pythonアプリケーションをデプロイする際に使うhttps://asameshicode.com/what-is-gunicorn/
- Elasticserch:高速検索を可能とする検索・分析エンジン https://www.elastic.co/jp/elasticsearch/ https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329
- RabbitMQ:メッセージキューサービス https://qiita.com/gambaray/items/3cc02b419c860a96bc94
- アノテーション https://www.science.co.jp/annotation_blog/30313/
- DVC (Data Version Control):データバージョニングツール https://qiita.com/meow_noisy/items/a644547930e6f2dea12d
- CDN (Contents Delivery Network):コンテンツ配信を高速化することができる分散型サーバーの集まり。https://kinsta.com/jp/knowledgebase/what-is-a-cdn/
- 学習済みモデルのリポジトリ
- TensorFlow Hub https://www.tensorflow.org/hub?hl=ja
- Hugging Face https://huggingface.co
- Model Zoo https://modelzoo.co
- モノリシック:ソフトウェア設計の際、部分的に分割をせず、すべて同一のモジュールとしてつくりあげること https://www.ntt.com/business/sdpf/glossary/019.html
- TensorFlow Serving:学習済みの機械学習モデルをサービングするためのフレームワークhttps://qiita.com/cvusk/items/abe68076bbbb87966539
- gRPC:Googleが開発したRPC (Remote Procedure Call)でクライアント-サーバー型の通信プロトコルで、サーバー上で実装されている関数をクライアントからの呼び出しに応じて実行する技術 https://knowledge.sakura.ad.jp/24059/
- Protocol Buffers:Googleの開発した技術で、バイナリデータを効率的に扱うことができる。.protoファイルというテキストファイルを定期に用いることで、異なるプログラミング言語との連携を容易にしている。https://atmarkit.itmedia.co.jp/ait/spv/2211/04/news002.html
- MVC (Model View Controller):役割ごとにmodel, view, controllerに分割してコーディングを行うモデルのこと https://zenn.dev/dd_sho/articles/36abe63831d909
- fastText:Meta社が公開している自然言語処理ライブラリhttps://qiita.com/icoxfog417/items/42a95b279c0b7ad26589 https://fasttext.cc
- Common Crawl:世界中のオープンなインターネット上にあるウェブサーバーを手当たり次第にアクセスして、そのページデータを保存している https://electric-blue-industries.com/2019/11/13/世界中のサイトを探索する-common-crawl/ https://commoncrawl.org
- ランク学習:定義した重要度に基づいて情報を並べるための機械学習の手法 https://qiita.com/ngayope330/items/d36c54d7c543a2078d6c
- Redis:メモリ上でデータを管理するインメモリデータサービスの一つ https://zenn.dev/nameless_sn/articles/why_is_redis_so_fast#
- LGBMRanker:LightGBMdランキング学習をするためのアルゴリズムhttps://lightgbm.readthedocs.io/en/v3.3.2/pythonapi/lightgbm.LGBMRanker.html https://qiita.com/kondo-k/items/5f1f171da3ac7b98cbcf
- LambdaRank https://qiita.com/kiita_da_yo/items/8ba552fce5b99cbf85fd
- A/Bテスト:現行のアルゴリズム(Aパターン)と新しいアルゴリズム(Bパターン)の両方を本番システムにリリースし、それぞれにアクセスやユーザを割り振り、ユーザの行動を評価してアルゴリズムの優劣を審査する バナーや広告文、Webサイトなどを最適化するために実施するテスト。
- 最近傍探索 https://daily-tech.hatenablog.com/entry/2020/06/07/194107
- 近似最近傍探索
- 近傍探索のためのライブラリ
- MLOpsコミュニティ https://qiita.com/cvusk/items/74805e5e889017ede0b0
コメント