Science2018.12.1ツイートTopicsなぜデータサイエンティストがウェブアプリケーションを作るのか作るもの実際に作る注意点まとめ参考文献こんにちは。データサイエンスチームのtmtkです。2018の1日目の記事です。この記事では、FlaskとKerasを使ってディープラーニングのウェブアプリケーションをすばやく作る方法を紹介します。データサイエンティストがウェブアプリケーションを作るのか当データサイエンスチームには、社内外の企業が蓄積しているデータに対して機械学習を適用し、価値を生み出すという業務があります。コムニコ様の事例では、コムニコ様のお持ちの画像データを活用し、Instagramでの「いいね!」の数を予測する機械学習モデルを作成しました。最近では、社内のデータに対し機械学習を活用するプロジェクトが進んでいます。データを収集して機械学習モデルを作るというのは、データサイエンティストや機械学習エンジニアの重要な役割です。苦労して機械学習モデルを作っても、それを使ってもらえなければ意味がありません。「Kerasで読み込める機械学習モデルを作りました。パラメータチューニングをがんばった結果、Accuracyが99%も出ました。保存しておくので、あとはよろしくお願いします。モデルファイルだけを渡しても、対応を後回しにされるか、悪い場合にはそのまま忘れ去られてしまうかもしれません。機械学習用のライブラリのモデルファイルの扱い方なんて多くの人は知らないのだし、誰しも自分の仕事で忙しいものです。そんなとき、機械学習の結果を簡単に使えるウェブアプリケーションの試作品を用意しておけば、気軽に使ってみてもらうことができます。一度動くものを触ってもらえれば、有効性を確認してもらえます。有効性がわかってもらえれば、活用のために時間を割いてくれるかもしれません。プロトタイプを作成することの重要性はさまざまなところで指摘されています。Productも似た考えだと思います。任天堂の名作ゲーム「Splatoon(スプラトゥーン)」の企画・開発にあたっても、実際に遊べる試作があったことが採用の決め手になったということが述べられています。(Splatoonの元になった“豆腐のゲーム”。U|Nintendoより)岩田70個ものアイデアのなかから豆腐のゲームが選ばれる決め手になったのは、なんだったんですか?天野やっぱり、実際に遊べる試作があった、というのがすごく大きかったと思います。試作の時点で4人対4人のネット対戦ができるようになっていたんです。最初から4人対4人ができたんですか・・・。プログラマーはやっぱり強いですね(笑)。“プログラマー最強説”というのがあるんですよね。佐藤そうですよね(笑)。岩田わたしもプログラマー出身ですからこの手をよく使いました(笑)。U|Nintendoより)機械学習モデルを作って終わるのではなく、実際に動くデモやプロトタイプ・アプリケーションを作ることで、実際の活用に近づけたり説得力を持たせたりすることができます。そのため、データサイエンティストが機械学習モデルを手早くウェブアプリケーションにできることは重要です。作るもの今回は、KerasとFlaskをつかってディープラーニングを使ったシンプルなウェブアプリケーションを作ります。作るものは、このシンプルな画面で画像ファイルを選択してsubmitボタンを押すとシンプルな結果画面が表示されるというものです。KerasとFlaskを使うかわりにTensorFlow.jsのようなライブラリを使ってクライアント側に推論処理をさせることもできますが、その場合はモデルをクライアントにダウンロードさせる必要があり、モデルを秘匿できません。モデルのダウンロードと推論処理に時間がかかるという欠点もあります。今回はサーバサイドで推論を完結させるため、KerasとFlaskを組み合わせたアーキテクチャにします。品質としては、全世界に公開してサービスとして使ってもらえる水準ではなく、限られた人がアクセスして検証に使えるというものを想定して作ります。したがって、エラー処理やセキュリティ対策についてはいったん考慮しません。Documentationを参考にして、簡単なプログラムを書きます。port=8888)この100行足らずのソースコードで、画像を分類するウェブアプリケーションを作ることができました。graph.as_default():があります。この処理を入れないとmodel.predict()が例外を吐いて失敗します。原因について筆者はあまり理解していないのですが、マルチスレッド処理が関係しているようです。GitHubで議論されています。Pythonの処理系や必要なライブラリをインストールして、起動します。ここでは説明を簡単にするため、Dockerで説明します(Dockerに抵抗がある場合は、Dockerを使わずにPythonとその各種ライブラリをインストールして環境構築をしても構いません)。次のテキストをDockerfileという名前で保存します。/app/app.py最後に、Dockerをつかって起動します。DockerをインストールしてあるLinux環境で、次を実行します。simple_webappすると、Dockerがコンテナイメージの作成と実行を行います。MobileNetV2のモデルがダウンロードされ、ウェブアプリケーションが立ち上がります。アクセスすれば、先ほどのシンプルなアプリケーションが使えます。書き換えればいいです。前に述べたように、検証用の水準なので、注意点がいくつかあります。Flaskに備え付けられているウェブサーバを使っていますが、このウェブサーバはFlaskの公式ページで本番環境では使うべきでないとされています。そのため、本番環境ではGunicornなど別のウェブサーバと組み合わせる必要があります。他にも、画像でないファイルがアップロードされた場合の例外処理が入っていません。負荷分散や障害対策についても考えていません。そのため、IPアドレスでアクセスを制限するなどして、限られた人しかこのウェブアプリケーションにアクセスできないようにする必要があります。まとめこの記事では、プロトタイピングの重要性について述べ、Kerasで作ったモデルを利用するウェブアプリケーションのプロトタイプを作成しました。時間を制せよ、打率は1割でいい。Calendar#機械学習#深層学習tmtkデータ分析と機械学習とソフトウェア開発をしています。アルゴリズムとデータ構造が好きです。