3
5

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-11-18

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

3
5
0

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
  3. You can use dark theme
What you can do with signing up
3
5