はじめに
今回PythonのライブラリであるStreamlitとWebフレームワークであるFastAPIを用いてwebアプリを作ってみたので記事にまとめました。
今回のテーマは、
概要編→バックエンド編→フロントエンド編→デプロイ編
の順にそれぞれ記事を書いていく予定です。
記事の目次
- アプリの概要
- アプリの機能一覧
- なぜこのアプリを作ったのか
- 使用技術について
- ディレクトリ構成
- まとめ
1. アプリの概要
一言で言うと、誹謗中傷のような批判的なツイートを排除するアプリです。
具体的には、アプリ上で好きな人物名を入力して検索をかけると、Twitterからその人物名に関するツイートを取得してAIが自動でツイート内容を解析し、肯定的なツイートのみを表示させるようにするというものです。
と、理想はこのように考えていたのですが、途中でTwitterAPIの規約変更によりツイート取得ができないことに気づきました。
アプリ自体のテーマを変更するのは面倒なので、アプリの概要はそのままでKaggleにある文章データを利用してそれをツイート取得とみなし、擬似的に動かせるようにしました。
AIについては自然言語処理による感情分析という技術を用います。
データセットについて
KaggleにあるWomen's E-Commerce Clothing Reviewsを例として利用しました。
ECサイトでの婦人服の売上データとなっており、商品分類名や商品に関するレビュー文が格納されています。
レビュー文をツイートに置き換えて考え、ファイルをアップロードすることでツイートを取得できたと仮定しています。
使い方
- ファイル(Kaggleから取得してきた文章データ)をアップロードします。
- 文章データが含まれるカラムを選択します。
- 取得したいレビューに関するキーワードを入力します(本来ならここで人物名を入力し、その人物に関するツイートを取得します)。デモでは
shirt
に関するレビューを取得しています。 - 取得したいデータ数を指定します。
- 今回は日付指定は関係ないです。(本来ならどれくらいの期間のツイートを取得するのかを指定します。)
- 表示するレビューをポジティブにするのかネガティブにするのかを指定します。
- 分析開始ボタンをクリックします。クリックすると感情分析が始まります。
-
shirt
に関する肯定的なレビューのみが表示されます。(本来なら検索した人物名に関するポジティブなツイートが表示されます。)
2. アプリの機能一覧
- ファイルのアップロード
- データのサンプル表示
- サイドバーでの検索設定
- データのカラム選択
- キーワード検索
- 取得するデータ数の指定
- 感情フィルターの選択
- 文章の感情分析
- 分析結果の表示
3. なぜこのアプリを作ったのか
作成に至った背景としては、
- 参加したインターン先で自然言語処理に触れる機会があり、自然言語処理の面白さを実感して自分でも何か作ってみたい
- 自分でwebアプリを0から開発してみたい
という気持ちがありました。
どうせ作るなら、小さくてもいいので課題解決できるようなアプリにしたいと考えました。そこで、Twitterをテーマに設定しました。
Twitterには様々な内容のツイートが飛び交っています。自由なので仕方がないですが、特定の人に対する誹謗中傷のような批判的なツイートはやはり気分が良くないです。
私にはとても好きなサッカー選手がいるのですが、その選手が好きすぎるあまりその選手に対する批判的なツイートがあると自分も気分が悪くなってしまいます。
ツイートを止めるのは無理なので、批判コメントのようなネガティブなツイートを排除してポジティブなツイートのみが表示されるようになれば最高では、と考え開発に至りました。
4. 使用技術について
言語は全てPythonです。
環境構築
- Poetry 1.6.1
仮想環境の作成とプロジェクトの依存関係を管理するためにPoetryを利用しました。
Poetryについては以下の記事を参考にしました。
フロントエンド
- Streamlit 1.27.1
デザインは簡易的にはなりますがPythonのみでフロントエンドを手軽の実装できるのでこちらを使いました。
バックエンド
- FastAPI 0.103.2
- transformers 4.33.3
PythonにはDjangoやFlaskのようなwebフレームワークが有名ですが、FastAPIは最近人気が出ていて話題になっており、気になっていたのでこちらでAPI構築を行ってみました。
また、transformersはアメリカのHuggingFace社が提供している自然言語処理に特化したディープラーニングのフレームワークであり、多くの事前学習済みモデルを提供しています。簡単に最新の自然言語処理モデルを実装することができるのでこちらを利用しました。
データベース
今回はデータベースを使用しません。アップロードされたデータから条件に当てはまるレビュー文を取り出して表示するだけなのでCRUD処理は発生しません。
5. ディレクトリ構成
.
├── app.py Streamlitでフロントエンド実装
└── sql_app
├── __init__.py
├── main.py FastAPIのバックエンド実装
├── schemas.py Pydanticによる型定義
└── sentiment_analysis.py 感情分析モデルの設定
6. まとめ
以上が今回作成したアプリの概要になります。
次回からバックエンドの実装についてまとめていきたいと思います。
次回の記事はこちら