はじめに
今更ながらSpring Bootと機械学習(SVM)を使って質問応答システムを作った話です。
大分昔(2018中旬頃)に独りで作り、放置してました。勿体ないので自分用に整理した記事です(備忘録)。
自分用に作った記事なので、分かりにくい点や情報、技術が古いかもしれませんが、ご了承ください
また何かしらのWebアプリを独りで作りたい方のご参考になれば嬉しいです。
質問応答システムについては、@VegaSato さんの記事がとても詳しいのでご存知ない方は
こちらをお読み頂ければと思います。
$\tiny{※参考にさせて頂きました。ありがとうございました}$
BluemixのWatson APIを駆使して日本語質問応答システムを作る
簡単に言いますと、
ユーザーが質問を入力するとシステムが最適な答えを探して回答してくれるシステムのことである。
Qiitaにて質問応答システム関連の記事を見てみると、コア部分をIBM Watoson などちゃんとしたAPIを使われていますが、
私の方は自作のSVM(サポートベクトルマシン)で、実装が悪いのかあまり精度はありませんので、ご注意ください
実物は以下GIFのようになります。
Appリンク
幸せになる方法を質問したら、**「どんな状況でも最善を尽くしましょう」**と何とかそれっぽい回答頂きました
このテーマのゴール(目的?)
- ミニマム:アプリ作成時の手順、詰まった箇所をアウトライン化する。
- フル:現状のアプリに新しめの技術を取り入れて記事にする。
長くなってしまいそうなので今回は環境までです。。。
対象読者:
- 機械学習には興味はあるが、どんな事に応用できるのか参考にしたい人
- 何らかの言語でWEBアプリをなんとなく作ったこと又は知見がある人
- ネットや書籍を参考に環境作ったり、コードをなんとなくでも読める人
アプリの概要
画面と使い方は凄いシンプルです。
下記キャプチャのように質問文を入力すると、画面下部に回答が複数表示されます。
$\tiny{※質問例は気にしないで下さい}$
また、回答リンクをクリックすると、別タブでリンク先へ画面遷移します。
処理フロー
ユーザが質問文を入力し、システム側で回答を画面に表示するまでの流れは以下となります。
人間も同じですが、まず質問された内容に対してどういった質問なのか(what,when,how)を分類します。
分類するために事前に機械学習を行い、学習済みのモデル(質問タイプ)を用意しておきます。
$\tiny{※機械学習の方法については後程時間がある時に記事にできたらと思います。。}$
質問の分類が終わったら、ネット上から文章を取得します(スクレイピング)。
取得した文章の分類を行います。ここでも分類を行うために事前に機械学習を行い、
学習済みのモデル(回答タイプ)を用意しておきます。
そして、回答候補リストに回答タイプと取得した文章を一時格納します。
$\tiny{※処理上の無駄があるような気もします。。}$
回答候補リスト分ループを行い、質問タイプと回答タイプが一致したら、回答リストに格納します。
最後に回答リストを画面に表示します。
環境 ※以下のVerでなくても動くと思いますが、古いのでご注意下さい
- 開発環境
- OS : Ubuntu 18.04.4 LTS
- 言語:Java1.8、HTML、CSS、JavaScript、Python 3.7
- フレームワーク:Spring Boot 1.5、Bootstrap
- ソースコード管理:Github
- ビルドツール:Gradle 3.4.1
- IDE:Spring Tool Suite(STS)
- サーバ環境
- デプロイ:heroku、
- Apサーバ:Tomcat(同梱)
- デプロイ方法:GithubにpushするとHerokuへ自動デプロイ
今後の展開
今回は環境まで記事にさせて頂きました。
しょぼい記事ですが、お休みほぼ1日使ってしまいました
また、時間のある時に少しづつブラッシュアップ、ソース等も
記事にさせて頂ければと思います