デジタル推進人材育成プログラム「マナビDX Quest」での学習が進みました。今回は「AIソフトウェア開発」で機械学習の性質を活かした段階的探索型開発というソフトウェア開発の手法を学びました。
・段階的探索型開発:アセスメントフェーズ、PoCフェーズ、開発フェーズ、運用・再学習フェーズに分かれた段階的なソフトウェア開発
AI開発とその他のソフトウェア開発の違い
AI開発には、その他のソフトウェアにはない機械学習・ベイズ統計プログラミングの特質を理解したうえで取り組む必要がある。
①学習するべきAIのモデル・性能が契約時・要求定義時では分からないそのため要求定義時・開発開始時までにPoC段階を挟む必要がある。
②AIの精度やバイアスが利用するデータの質・内容に依存する。少なくとも1000個のサンプルがあっても95%ほどの性能が限界となる。
③精度高いAIを作成するにはノウハウ・知識が必要。開発者により成果物の質が大きく変わる。
④作成したAIのモデル・学習過程のフローは類似するプロジェクトに再利用できる可能性が高い。
開発に失敗する例としてAIが要求精度に達しない、データの質・量が悪く機械学習がうまく行かない、データと成果物の権利関係でベンダー・ユーザーの間でトラブルになる といった事例がある。
開発失敗を避けるため、開発初期に成果物を確定しない・開発全体を1つの契約で包括しないという「探索的段階型」と呼ばれるソフトウェア開発の手法をプロジェクトに採用することが推奨される。
期間の目安
アセスメント
2週間 ~ 1ヶ月
PoC
1 ~ 2ヶ月
開発
3 ~ 6ヶ月
運用・再学習
年次更新
アセスメントフェーズ
・AIを使って解決したい課題を明示化、期待できる効果を推測する
・学習に利用できるデータを確認・収集のためのプランを立てる
・小規模、もしくは既存のモデルで検証する
例えばAIを食品廃棄の削減に活用する場合、この4点を明確にする:
・目的 - 食品破棄の量を減らし、売り上げを最大化する
・行動 - AIを需要予測に用い、適切な生産計画の策定に役立てる
(需要予測に使える機械学習モデルを作成する)
・評価 - 現状の廃棄量:約20%をどれだけ削減できるか?削減によって得られるROIは開発費・維持費を上回るか?
・利用可能なデータ - 過去実績データ、その他販売に関わるデータを確認する。この段階でデータが無い・足りない場合どう対応するかも重要。
・評価関数の罠。故障検知の精度が99%でも、そもそも故障が100回に1回しか発生しない場合一切故障を予測できなくても精度が99%になってしまう。この場合は混合行列を作成して故障している場合の再現率・適合率を見に行く。
・目標値の罠。精度が90%のOCR認識では100文字に10文字を誤認識してしまう。高い精度が要求される場合、目標値が低いと実用化に至らずプロジェクトが失敗する可能性がある。
赤信号・黄信号案件
「とにかくAIで何かやって欲しい」という案件は赤信号。適切な課題設定がないので、失敗する可能性が極めて高い。そもそも引き受けないか、解決したい課題を明示化・期待できる効果を改めてベンダー側から提示できるようにする。
「とにかくデータはありますよ」という案件は黄信号。データがあっても課題に適したデータでないと質の高いAIは開発できない。構造化データに変換できる・ラベルを割り振る作業がコードで書ける状態になっている ことが望ましい。
「発注したモデルはこっちで保有していいですか?」という案件も黄信号。AI関係はデータ・モデルを巡る権利関係でトラブルになるケースがかなり多い。開発フェーズ開始前に利用条件・権利関係を整理したうえで開発・運用段階の契約をするべし。
PoCフェーズ
・ユーザーが期待するAIをベンダーが作成できるかを見極める
・モデル作成、精度検証、ユーザーの期待に対するモデル・サービスが実現できるかを検証する
・開発フェーズに移行可能か、可・不可を明確にする
・AIモデルは「精度は高くても重すぎて使えない」というケースがある。モデルが現場で利用するPC・サーバー等で動作するかも要検証。
開発フェーズ
・AIの運用想定を含めた開発を開始。UIの実装、出力に対してユーザーはどう行動するべきかを策定する
・精度検証の結果、改良の余地がある場合は再学習・データ再収集の方針も決定する
・年次運用・定期的な再学習に向けたデータ収集機能の追加なども検討する
・開発フェーズで制作するソフトウェア・AIモデルは運用を見据えた具体的な計画に見合ったものにする。良質なデータを収集する方法、想定外の出力に対する対応、ユーザーがAIを評価する仕組み、最低限これら3つが必要。
運用・再学習フェーズ
・AIの精度・評価をモニタリング、可視化する
・精度向上のため再学習する
・精度の劣化・エラー、その要因となる人為的なミス等がないかチェックする