LoginSignup
2

posted at

updated at

AIで文章から感情分析するアプリの作成

PythonのフレームワークFlaskを使って、感情分析アプリを作成していきます。
概要はこんな感じです。
スクリーンショット 2022-11-19 8.35.52.png

アプリといってもローカルで動かすだけのお試しです。
スクリーンショット 2022-11-18 19.56.32.png

うまくいけば4手順で、5分で作れちゃいます。

手順1:環境構築のため、コンソールから以下のライブラリをインストール。

コンソール
pip install flask
pip install torch torchvision
pip install transformers[ja]
pip install sentencepiece

pipの環境がない方はこちらから
https://camp.trainocate.co.jp/magazine/python-pip/

手順2:app.pyを作成

作るのはどこでも大丈夫です。

app.py
from flask import *
from transformers import pipeline, AutoModelForSequenceClassification, BertJapaneseTokenizer
model = AutoModelForSequenceClassification.from_pretrained('daigo/bert-base-japanese-sentiment') 
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
nlp = pipeline("sentiment-analysis",model=model,tokenizer=tokenizer)

app = Flask(__name__)

@app.route("/", methods=["GET", "POST"])
def sentimental():
    if request.method == "GET":
        return """
        文章を入力してください。ネガティブかポジティプか判定します
        <form action="/" method="POST">
        <input name="str"></input>
        </form>"""
    else:
        try:
            return """
            入力された文章「{}」は{}です! {}度は{}%。
            <form action="/" method="POST">
            <input name="str"></input>
            </form>""".format(request.form["str"],
                            nlp(request.form["str"])[0]["label"],
                            nlp(request.form["str"])[0]["label"],
                            round(nlp(request.form["str"])[0]["score"]*100,2))
        
        except:
            return """
                    エラーが発生しました。文章を変更してお試しください。
                    <form action="/" method="POST">
                    <input name="str"></input>
                    </form>"""

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=8888, threaded=True)

手順3:コンソールからapp.pyのディレクトリに移動して、app.pyを実行。

コンソール
python3 app.py

ディレクトリ移動がわからないという人はここらを参照
https://blog-and-destroy.com/34941

手順4:コンソールにでたURLをCMD+Click!

スクリーンショット 2022-11-18 19.32.26.png
以下のようなページが出れば成功です。
スクリーンショット 2022-11-18 19.56.32.png

文章を入力してみましょう!
スクリーンショット 2022-11-18 19.43.14.png
スクリーンショット 2022-11-18 19.43.30.png
寒いはネガティブで、涼しいはポジティブ。よくわかってますね。
今回の記事はここで一旦終了です。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここからは、あとがき。
ほんとはWebアプリサーバーを立てて公開したURLを載せたかった。。。。。
こんな感じで作りたかったのですが。
スクリーンショット 2022-11-19 8.36.00.png

render, Heroku, PythonanywhereとWebアプリサーバーを試してみたのですが、どれもStorage Capacityが500MBほどしかなく、足りませんでした。今回の内容では1.9GBほど必要です。
ロリポップでは100GBまで使えるようでしたが、Python環境構築が簡単にはいかず挫折しました。
詳しい方、いい方法があれば教えてください。。。

参考記事:
Hugging face
https://resanaplaza.com/2022/06/12/%E3%80%90%E5%AE%9F%E8%B7%B5%E3%80%91python%E3%81%A8bert%E3%81%A7%E6%84%9F%E6%83%85%E5%88%86%E6%9E%90%E3%81%97%E3%82%88%E3%81%86%E3%82%88%EF%BC%81/
Flask
https://qiita.com/nagataaaas/items/3116352da186df102d96
render
https://qiita.com/matsutogen/items/f29ad5c244fdca24e4cf

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2