「やりたいことは分かるが、そのデータは外に出せない」
画像診断、人事評価、顧客の問い合わせ履歴、図面。相談の途中でこう言われて止まる案件があります。クラウドのAPIに投げる構成だと、判定してもらうために、判定してほしいデータを渡さなければならないからです。
回避策として「送らない」構成があります。判定そのものを利用者のブラウザの中で動かす方法です。自社デモ7件をこの構成に寄せたので、実測値と、向き不向きをまとめます。
■何が変わるのか
通常の構成では、こうなります。
ブラウザ ──(画像を送信)──> サーバー ──> 推論 ──> 結果を返す
ブラウザ内で動かすと、こうなります。
ブラウザ ──(モデルを受信)──> ブラウザ内で推論 ──> 結果を表示
向きが逆になります。 データが出ていくのではなく、モデルが降りてくる。
結果として、
■実際に動かしているもの
自社のデモサイトで公開している7件です。すべて判定はブラウザ内で、サーバーへの送信処理は1か所もありません(公開しているJavaScriptを検索して確認済み)。
| デモ | 扱うもの | 実行環境 | モデル |
|---|---|---|---|
| 花の判定 | 写真 | ONNX Runtime Web | 8.8MB |
| 髪の色を変える | 写真 | MediaPipe Tasks | 17.2MB |
| 外観検査(オートエンコーダ) | 画像 | ONNX Runtime Web | 1.9MB |
| 胸部X線 肺炎検出 | 画像 | ONNX Runtime Web | 9.0MB |
| 音の判定 | 音・マイク録音 | ONNX Runtime Web | 1.0MB |
| 全文検索 | PDF・Word・Excel | ONNX Runtime Web | 37.1MB |
| 来客数予測 | 日付・天気 | なし(JSだけ) | 0.19MB |
■推論エンジンすら要らない場合がある
表の一番下、来客数予測だけ扱いが違います。
これは LightGBM(決定木)で学習したもので、学習済みの木の構造をJSONで配り、JavaScriptでたどっているだけです。木124本・節3,596個、全部で192KB。ONNX Runtime も読み込んでいません。
ニューラルネットワークでなければ、こういう手が使えます。表形式のデータ(売上、在庫、来客数、故障予測)は決定木系の方が精度が出ることも多いので、「AIだから重い」と決めつける前に、何のモデルが要るのかを先に決める価値があります。
■向かない場合
正直に書くと、この構成には明確な弱点があります。
1. モデルが誰でも落とせる
ブラウザに渡す以上、利用者はモデルファイルをそのまま保存できます。公開モデルを使っている分には問題ありませんが、自社データで学習させた独自モデルが資産である場合、渡してはいけません。
うちの花判定デモには、実はサーバー側で推論するAPIのコードも残してあります。使っていませんが消していません。モデルを配りたくない案件ではそちらになるからです。
2. 初回のダウンロードが大きい
全文検索デモは初回49MB(うちモデルが44MB)です。社内システムで、業務中に一度読み込めば済むなら許容範囲ですが、不特定多数向けの公開サイトには向きません。
3. 端末の性能に依存する
古いスマートフォンでは遅くなります。サーバー側なら性能を揃えられますが、こちらは利用者の端末次第です。
4. 学習はできない
ブラウザでできるのは推論だけです。モデルを作る工程は別途必要で、これはサーバーか手元のマシンで行います。
■どちらを選ぶかの目安
| ブラウザ内 | サーバー側 | |
|---|---|---|
| データを外に出せない | ◎ | △(自社サーバーなら可) |
| モデルを見せたくない | ✗ | ◎ |
| 不特定多数が使う公開サイト | △(初回が重い) | ◎ |
| 社内の限られた人が使う | ◎ | ○ |
| 運用費を抑えたい | ◎(常駐なし) | △(動かし続ける) |
| 端末の性能がまちまち | △ | ◎ |
「データを外に出せない」と「モデルを見せたくない」が同時に来る場合は、自社サーバー(オンプレミスまたは自社VPC内)に推論APIを立てるのが答えになります。ブラウザ内が万能なわけではありません。
■まとめ
当社では、外に出せないデータを扱う案件について、どこまでブラウザ側に寄せられるかの検討からご相談を承っています。上の7件はすべて実際に動かせるので、お手元で試してから話を始めていただけます。