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

PythonのフレームワークFlaskを使って、感情分析アプリを作成していきます。
概要はこんな感じです。
![スクリーンショット 2022-11-19 8.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/f8798b69-ac14-a582-df37-4be03af85e36.png)

アプリといってもローカルで動かすだけのお試しです。
![スクリーンショット 2022-11-18 19.56.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/dadc687d-9e7c-7b00-15e6-67541a2b2974.png)

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

## 手順1：環境構築のため、コンソールから以下のライブラリをインストール。
```python:コンソール
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を作成
作るのはどこでも大丈夫です。
```python: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を実行。
```python:コンソール
python3 app.py
```
ディレクトリ移動がわからないという人はここらを参照
https://blog-and-destroy.com/34941

## 手順4:コンソールにでたURLをCMD+Click！
![スクリーンショット 2022-11-18 19.32.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/74889945-5d02-fa85-2509-70dbf32c14fe.png)
以下のようなページが出れば成功です。
![スクリーンショット 2022-11-18 19.56.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/b01d4252-0419-02eb-faac-75b68868ce6f.png)

文章を入力してみましょう！
![スクリーンショット 2022-11-18 19.43.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/2072a7b1-a8a7-f791-97a7-32b8e3c33f56.png)
![スクリーンショット 2022-11-18 19.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/9e7c7b3d-011e-4590-6fda-67ccb30bc600.png)
寒いはネガティブで、涼しいはポジティブ。よくわかってますね。
今回の記事はここで一旦終了です。




ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここからは、あとがき。
ほんとはWebアプリサーバーを立てて公開したURLを載せたかった。。。。。
こんな感じで作りたかったのですが。
![スクリーンショット 2022-11-19 8.36.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499988/587b3599-3379-889d-ef30-54434fe82e68.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