機械学習の機能を持つwebサーバーの作成
webサービスに機械学習のシステムを組み込むためにはwebサーバーと機械学習サーバーを異なる形で動かすことやwebサーバー内で機械学習のシステムを持たせる方法になどによってwebサービスに機械学習のシステムを組み込むことができる。
今回はまず、pythonで機械学習の機能を持つwebサーバーを作成していく。
実行結果
ソースコードでは見やすさの観点からjupyter notebookでのコードになっているが実行はコマンドラインから行う。
実行結果では「野球を見るのは........楽しみです。」という文章をプログラムに渡して、json形式でその結果が返されている。jsonなので日本語がエンコードされていまっているがデコードすると「スポーツ」となる。
hanamichi-sukusuku.hatenablog.com
ここで使用しているプログラムは同じディレクトリ内にある、上記で作成したファイル(my_text.py)のcheck_genre関数を使用し、URLで渡した文章を分類している。
モジュールインポート
jsonモジュールはpythonでjson形のデータを扱う時に利用する。
flaskはwebサーバーを手軽に作成できるフレームワーク。
from flask import requestではURLからパラメーターの取得ができたりするためにインポート。
import my_textは上記で記述した通り、事前に作成した機械学習のプログラム。
ポート番号、HTTPサーバーの起動
TM_PORT_NOはポート番号で8888を定義しているがもし、別のアプリで8888番を使っている場合には他の番号に変更する。
flask.Flask(__name__)でFlaskオブジェクトを生成する。
ターミナル上でプログラムが正しく実行されるかのテスト
この出力結果はターミナル上に出力される。
無事出力されたので次に進む。
ローカルサーバー起動
appにはFlaskオブジェクトが格納されているのでapp.run()でサーバーを起動。
引数のdebug=Trueではデバッグを出力するようにしている。
host='0.0.0.0.'を指定しないと外のネットワークから接続ができないらしい。パソコンでこのローカルサーバーを立ち上げ、別の端末からこのサーバーにアクセスするために必要。実際に自身のスマホから接続できた。
portはポート番号に指定。
ルート(/)にアクセスしたときの処理
@app.route()でルートパスにアクセスされた時の後述する関数を実行するようにしている。methods=['GET']でGETリクエストを指定。
index()関数では同階層のindex.htmlファイルを読み込み、表示している。
http://localhost:8888/このURLにアクセスした時の画像。
/apiにアクセスしたときの処理
@app.route()で/apiにアクセスした時、後述する関数を実行するようにしている。ここでもmethods=['GET']でGETリクエストを指定。
request.args.get()ではURLからパラメーターをしている。第一引数の'q'はキー。URLで'q'をキーとするパラメーターを取得し変数qに格納。
my_text.check_genre()では事前の作成したmy_text.pyからcheck_genre()関数を使用している。上記のリンクを見ればわかるが、この関数では渡した文章を機械学習で分類し、どのラベルを示すものか、確率、ラベルデータの番号をそれぞれ返す。
return json.dumps()で第一引数に辞書を渡すとjson文字列として出力されたものを返す。
一番上の実行結果には
http://localhost:8888/api?q=(テキスト)という形でアクセスしたときの実行結果を表示している。