knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

Slackチャットから、flask+ TF-IDF の応答を出力する。自然言語処理(4)

index:

概要

前回の、自然言語処理の関連となります。
slackチャットからの、入力文章を webhook経由で
AI/機械学習サーバからの応答を出力する例となります。

webhookは、aws EC2 ubuntu16です。
slack app設定は、トリガー単語を検出する。
カンタンな手法で、AI側を起動しています。


・構成の概要は、
Slack入力(質問)
=> Skack appトリガー検出
=> webhook (aws EC2)呼ぶ
=> nginx+ uWSGI 経由で flask 接続
=> 入力文章から、TF-IDFで、学習済みの入力文章
 の類似文章を探す
=> 出力された、入力文章のindex番号から
 応答文章を、引き当てる
=> Slackへ、結果送信
みたいな、流れですね

環境

python 3.5
janome
sklearn
numpy

aws EC2 ,ubuntu16
nginx
uWSGI
flask

参考

https://www.sejuku.net/blog/74469

slack appの、追加方法など

・slack appで、
「Outgoing WebHooks」を追加
(発信Webフック )

・webhook の登録
=>EC2 のエンドポイントを指定。

・トリガー誤の登録( 例は、Bot: にしています。)

コード

github.com


python3 です。

処理など

__init__.py

class VectBase:
    #
    def __init__(self):
        from flaskr.include.nlp_predict import  NlpPredict
        self.pred=NlpPredict()
        #ans=self.pred.answers
        #print("ans-len=", len(ans))
        tokens=self.pred.get_data()
        #print(tokens )
        ret= self.pred.train(tokens )
        self.vectorize= self.pred.get_vectorize()
        print("#end-load-vectorize")
    #
    def predict(self, text ):
        text=self.pred.predict(text )
        #print(text )
        return text
#
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
vect=VectBase()

起動時に、学習処理して。
API応答速度は、高速にできるような形にしています。
( 文章の、件数が多い場合は。遅くなるかもしれませんが )

・webhook
views.py

@app.route('/test2', methods=['GET', 'POST'])
def test2():
    print("test2")
#    print(len(request.form ))
    ret="sorry, nothing response."
    if(len(request.form ) > 0):
        text=request.form['text']
        print(text )
        ret=vect.predict(text )
    #print(ret )
    dic = {"text" : ret }
    return jsonify(dic)

slackから、入力文を受信。
ML評価処理、結果の出力

デモの画面

入力: Bot:利用人数は?
AI応答: 利用人数は、通常プランは10名までです

みたいな、学習させた類似文章の
応答を、引当て。返します

f:id:knaka0209:20190220173036p:plain

まとめ

t2.micro インスタンスで、メモリも少ないのですが。

サーバ起動時間は、遅く。
学習処理の為。数秒かかってます。
評価処理は、1秒以下前後で。
現状だと
Slackのタイムアウト状態には、ならないようです

関連のページ

nginx 設定など
knaka0209.hatenablog.com

TF-IDF
knaka0209.hatenablog.com